MCPcopy Create free account
hub / github.com/ARM-software/astc-encoder / ParseEXRVersionWithReader

Function ParseEXRVersionWithReader

Source/ThirdParty/tinyexr.h:10385–10439  ·  view source on GitHub ↗

Parse EXR version header using Reader class

Source from the content-addressed store, hash-verified

10383
10384// Parse EXR version header using Reader class
10385static int ParseEXRVersionWithReader(EXRVersion *version, tinyexr::Reader& reader) {
10386 if (version == NULL) {
10387 return TINYEXR_ERROR_INVALID_ARGUMENT;
10388 }
10389
10390 if (reader.length() < tinyexr::kEXRVersionSize) {
10391 reader.add_error("Insufficient data size for EXR version header");
10392 return TINYEXR_ERROR_INVALID_DATA;
10393 }
10394
10395 // Check magic number: 0x76, 0x2f, 0x31, 0x01
10396 uint8_t header[4];
10397 if (!reader.read(4, header)) {
10398 return TINYEXR_ERROR_INVALID_DATA;
10399 }
10400
10401 const uint8_t expected_header[] = {0x76, 0x2f, 0x31, 0x01};
10402 if (header[0] != expected_header[0] || header[1] != expected_header[1] ||
10403 header[2] != expected_header[2] || header[3] != expected_header[3]) {
10404 reader.add_error("Invalid EXR magic number");
10405 return TINYEXR_ERROR_INVALID_MAGIC_NUMBER;
10406 }
10407
10408 // Parse version byte (must be 2)
10409 uint8_t version_byte;
10410 if (!reader.read1(&version_byte)) {
10411 return TINYEXR_ERROR_INVALID_DATA;
10412 }
10413
10414 if (version_byte != 2) {
10415 reader.add_error("Invalid EXR version");
10416 return TINYEXR_ERROR_INVALID_EXR_VERSION;
10417 }
10418
10419 version->version = 2;
10420
10421 // Parse flags byte
10422 uint8_t flags;
10423 if (!reader.read1(&flags)) {
10424 return TINYEXR_ERROR_INVALID_DATA;
10425 }
10426
10427 version->tiled = (flags & 0x2) ? true : false; // 9th bit
10428 version->long_name = (flags & 0x4) ? true : false; // 10th bit
10429 version->non_image = (flags & 0x8) ? true : false; // 11th bit (deep image)
10430 version->multipart = (flags & 0x10) ? true : false; // 12th bit
10431
10432 // Skip remaining 2 bytes to complete the 8-byte version header
10433 uint8_t dummy[2];
10434 if (!reader.read(2, dummy)) {
10435 return TINYEXR_ERROR_INVALID_DATA;
10436 }
10437
10438 return TINYEXR_SUCCESS;
10439}
10440
10441} // anonymous namespace
10442

Callers 1

Calls 4

add_errorMethod · 0.80
lengthMethod · 0.45
readMethod · 0.45
read1Method · 0.45

Tested by

no test coverage detected