MCPcopy Create free account
hub / github.com/Exiv2/exiv2 / mediaHeaderDecoder

Method mediaHeaderDecoder

src/quicktimevideo.cpp:1402–1460  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1400} // QuickTimeVideo::fileTypeDecoder
1401
1402void QuickTimeVideo::mediaHeaderDecoder(size_t size) {
1403 DataBuf buf(5);
1404 std::memset(buf.data(), 0x0, buf.size());
1405 buf.data()[4] = '\0';
1406 int64_t time_scale = 1;
1407
1408 for (int i = 0; size / 4 != 0; size -= 4, i++) {
1409 io_->readOrThrow(buf.data(), 4);
1410
1411 switch (i) {
1412 case MediaHeaderVersion:
1413 if (currentStream_ == Video)
1414 xmpData_["Xmp.video.MediaHeaderVersion"] = static_cast<int>(buf.read_uint8(0));
1415 else if (currentStream_ == Audio)
1416 xmpData_["Xmp.audio.MediaHeaderVersion"] = static_cast<int>(buf.read_uint8(0));
1417 break;
1418 case MediaCreateDate:
1419 // A 32-bit integer that specifies (in seconds since midnight, January 1, 1904) when the movie atom was created.
1420 if (currentStream_ == Video)
1421 xmpData_["Xmp.video.MediaCreateDate"] = buf.read_uint32(0, bigEndian);
1422 else if (currentStream_ == Audio)
1423 xmpData_["Xmp.audio.MediaCreateDate"] = buf.read_uint32(0, bigEndian);
1424 break;
1425 case MediaModifyDate:
1426 // A 32-bit integer that specifies (in seconds since midnight, January 1, 1904) when the movie atom was created.
1427 if (currentStream_ == Video)
1428 xmpData_["Xmp.video.MediaModifyDate"] = buf.read_uint32(0, bigEndian);
1429 else if (currentStream_ == Audio)
1430 xmpData_["Xmp.audio.MediaModifyDate"] = buf.read_uint32(0, bigEndian);
1431 break;
1432 case MediaTimeScale:
1433 if (currentStream_ == Video)
1434 xmpData_["Xmp.video.MediaTimeScale"] = buf.read_uint32(0, bigEndian);
1435 else if (currentStream_ == Audio)
1436 xmpData_["Xmp.audio.MediaTimeScale"] = buf.read_uint32(0, bigEndian);
1437 time_scale = buf.read_uint32(0, bigEndian);
1438 if (time_scale <= 0)
1439 time_scale = 1;
1440 mdhdTimeScale_ = time_scale;
1441 break;
1442 case MediaDuration:
1443 if (currentStream_ == Video)
1444 xmpData_["Xmp.video.MediaDuration"] = time_scale ? buf.read_uint32(0, bigEndian) / time_scale : 0;
1445 else if (currentStream_ == Audio)
1446 xmpData_["Xmp.audio.MediaDuration"] = time_scale ? buf.read_uint32(0, bigEndian) / time_scale : 0;
1447 break;
1448 case MediaLanguageCode:
1449 if (currentStream_ == Video)
1450 xmpData_["Xmp.video.MediaLangCode"] = buf.read_uint16(0, bigEndian);
1451 else if (currentStream_ == Audio)
1452 xmpData_["Xmp.audio.MediaLangCode"] = buf.read_uint16(0, bigEndian);
1453 break;
1454
1455 default:
1456 break;
1457 }
1458 }
1459 io_->readOrThrow(buf.data(), size % 4);

Callers

nothing calls this directly

Calls 6

dataMethod · 0.80
readOrThrowMethod · 0.80
read_uint8Method · 0.80
read_uint32Method · 0.80
read_uint16Method · 0.80
sizeMethod · 0.45

Tested by

no test coverage detected