49 if (!
mRaw->dim.hasPositiveArea() ||
mRaw->dim.x % 2 != 0 ||
50 mRaw->dim.x > 12000 ||
mRaw->dim.y > 8842) {
51 ThrowRDE(
"Unexpected image dimensions found: (%d; %d)", mRaw->dim.x,
55 if (
rec.ht.isFullDecode())
56 ThrowRDE(
"Huffman table is of a full decoding variety");
78 const auto ht =
rec.ht;
79 ht.verifyCodeValuesAsDiffLengths();
85 for (
int row = 0; row < out.
height(); row++) {
86 int p1 =
rec.initPred;
87 int p2 =
rec.initPred;
88 for (
int col = 0; col < out.
width(); col += 2) {
89 int len1 = ht.decodeCodeValue(bitStreamer);
90 int len2 = ht.decodeCodeValue(bitStreamer);
91 p1 +=
getBits(bitStreamer, len1);
92 p2 +=
getBits(bitStreamer, len2);
static int RAWSPEED_READNONE extend(uint32_t diff, uint32_t len)
int RAWSPEED_READONLY height() const
int RAWSPEED_READONLY width() const
size_type getStreamPosition() const
uint32_t getBits(int nbits)
ByteStream::size_type decompress()
const PerComponentRecipe & rec
static int getBits(BitStreamerMSB32 &bs, int len)
HasselbladDecompressor(RawImage mRaw, const PerComponentRecipe &rec, Array1DRef< const uint8_t > input)
const Array1DRef< const uint8_t > input