MCPcopy Create free account
hub / github.com/darktable-org/rawspeed / parseVC5

Method parseVC5

src/librawspeed/decompressors/VC5Decompressor.cpp:384–514  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

382}
383
384void VC5Decompressor::parseVC5() {
385 mBs.setByteOrder(Endianness::big);
386
387 assert(mRaw->dim.x > 0);
388 assert(mRaw->dim.y > 0);
389
390 // All VC-5 data must start with "VC-%" (0x56432d35)
391 if (mBs.getU32() != 0x56432d35)
392 ThrowRDE("not a valid VC-5 datablock");
393
394 bool done = false;
395 while (!done) {
396 auto tag = static_cast<VC5Tag>(mBs.getU16());
397 uint16_t val = mBs.getU16();
398
399 bool optional = matches(tag, VC5Tag::Optional);
400 if (optional)
401 tag = -tag;
402
403 switch (tag) {
404 case VC5Tag::ChannelCount:
405 if (val != numChannels)
406 ThrowRDE("Bad channel count %u, expected %u", val, numChannels);
407 break;
408 case VC5Tag::ImageWidth:
409 if (val != mRaw->dim.x)
410 ThrowRDE("Image width mismatch: %u vs %u", val, mRaw->dim.x);
411 break;
412 case VC5Tag::ImageHeight:
413 if (val != mRaw->dim.y)
414 ThrowRDE("Image height mismatch: %u vs %u", val, mRaw->dim.y);
415 break;
416 case VC5Tag::LowpassPrecision:
417 if (val < PRECISION_MIN || val > PRECISION_MAX)
418 ThrowRDE("Invalid precision %i", val);
419 mVC5.lowpassPrecision = val;
420 break;
421 case VC5Tag::ChannelNumber:
422 if (val >= numChannels)
423 ThrowRDE("Bad channel number (%u)", val);
424 mVC5.iChannel = val;
425 break;
426 case VC5Tag::ImageFormat:
427 if (val != mVC5.imgFormat)
428 ThrowRDE("Image format %i is not 4(RAW)", val);
429 break;
430 case VC5Tag::SubbandCount:
431 if (val != numSubbands)
432 ThrowRDE("Unexpected subband count %u, expected %u", val, numSubbands);
433 break;
434 case VC5Tag::MaxBitsPerComponent:
435 if (val != VC5_LOG_TABLE_BITWIDTH) {
436 ThrowRDE("Bad bits per componend %u, not %u", val,
437 VC5_LOG_TABLE_BITWIDTH);
438 }
439 break;
440 case VC5Tag::PatternWidth:
441 if (val != mVC5.patternWidth)

Callers

nothing calls this directly

Calls 9

matchesFunction · 0.85
extractHighBitsFunction · 0.85
isFunction · 0.85
setByteOrderMethod · 0.80
getStreamMethod · 0.80
allBandsValidMethod · 0.80
getU32Method · 0.45
getU16Method · 0.45
skipBytesMethod · 0.45

Tested by

no test coverage detected