11#include <promeki/config.h>
12#if PROMEKI_ENABLE_PROAV
22PROMEKI_NAMESPACE_BEGIN
25class UncompressedVideoPayload;
101class ImageDataDecoder {
104 static constexpr uint32_t SyncBits = ImageDataEncoder::SyncBits;
106 static constexpr uint32_t PayloadBits = ImageDataEncoder::PayloadBits;
108 static constexpr uint32_t CrcBits = ImageDataEncoder::CrcBits;
110 static constexpr uint32_t BitsPerRow = ImageDataEncoder::BitsPerRow;
112 static constexpr uint8_t SyncNibble = ImageDataEncoder::SyncNibble;
117 enum class SampleMode {
152 uint64_t payload = 0;
155 uint32_t syncStartCol = 0;
156 uint8_t decodedSync =
158 uint8_t decodedCrc = 0;
159 uint8_t expectedCrc = 0;
160 Error error = Error::Ok;
164 using DecodedList = ::promeki::List<DecodedItem>;
167 ImageDataDecoder() =
default;
179 explicit ImageDataDecoder(
const ImageDesc &desc);
182 bool isValid()
const {
return _valid; }
185 const ImageDesc &desc()
const {
return _desc; }
188 uint32_t expectedBitWidth()
const {
return _expectedBitWidth; }
191 uint32_t bitWidthMin()
const {
return _bitWidthMin; }
194 uint32_t bitWidthMax()
const {
return _bitWidthMax; }
197 SampleMode sampleMode()
const {
return _sampleMode; }
200 void setSampleMode(SampleMode mode) { _sampleMode = mode; }
221 Error decode(
const UncompressedVideoPayload &payload,
const List<Band> &bands, DecodedList &out)
const;
227 DecodedItem decode(
const UncompressedVideoPayload &payload,
const Band &band)
const;
231 uint32_t _expectedBitWidth = 0;
232 uint32_t _bitWidthMin = 0;
233 uint32_t _bitWidthMax = 0;
234 size_t _maxVSubsampling = 1;
235 SampleMode _sampleMode = SampleMode::AverageBand;
238 DecodedItem decodeOne(
const UncompressedVideoPayload &payload,
const Band &band)
const;