3 #include "../abstracttrack.h" 4 #include "../mpegaudio/mpegaudioframe.h" 5 #include "../mp4/mp4ids.h" 6 #include "../matroska/matroskacontainer.h" 8 #include <c++utilities/conversion/binaryconversion.h> 9 #include <c++utilities/io/misc.h> 32 void OverallTests::checkMkvTestfile1()
34 CPPUNIT_ASSERT(m_fileInfo.containerFormat() == ContainerFormat::Matroska);
35 const auto tracks = m_fileInfo.tracks();
36 CPPUNIT_ASSERT(tracks.size() == 2);
37 for(
const auto &track : tracks) {
41 CPPUNIT_ASSERT(track->format() == GeneralMediaFormat::MicrosoftMpeg4);
46 CPPUNIT_ASSERT(track->samplingFrequency() == 48000);
49 CPPUNIT_FAIL(
"unknown track ID");
52 const auto tags = m_fileInfo.tags();
55 CPPUNIT_ASSERT(tags.size() == 1);
56 CPPUNIT_ASSERT(tags.front()->value(
KnownField::Title).toString() ==
"Big Buck Bunny - test 1");
58 CPPUNIT_ASSERT(tags.front()->value(
KnownField::Comment).toString() ==
"Matroska Validation File1, basic MPEG4.2 and MP3 with only SimpleBlock");
62 checkMkvTestMetaData();
65 CPPUNIT_ASSERT(tags.size() == 0);
72 void OverallTests::checkMkvTestfile2()
74 CPPUNIT_ASSERT(m_fileInfo.containerFormat() == ContainerFormat::Matroska);
75 const auto tracks = m_fileInfo.tracks();
76 CPPUNIT_ASSERT(tracks.size() == 2);
77 for(
const auto &track : tracks) {
82 CPPUNIT_ASSERT(track->displaySize() ==
Size(1354, 576));
87 CPPUNIT_ASSERT(track->samplingFrequency() == 48000);
90 CPPUNIT_FAIL(
"unknown track ID");
93 const auto tags = m_fileInfo.tags();
96 CPPUNIT_ASSERT(tags.size() == 1);
97 CPPUNIT_ASSERT(tags.front()->value(
KnownField::Title).toString() ==
"Elephant Dream - test 2");
99 CPPUNIT_ASSERT(tags.front()->value(
KnownField::Comment).toString() ==
"Matroska Validation File 2, 100,000 timecode scale, odd aspect ratio, and CRC-32. Codecs are AVC and AAC");
102 checkMkvTestMetaData();
105 CPPUNIT_ASSERT(tags.size() == 0);
112 void OverallTests::checkMkvTestfile3()
114 CPPUNIT_ASSERT(m_fileInfo.containerFormat() == ContainerFormat::Matroska);
115 const auto tracks = m_fileInfo.tracks();
116 CPPUNIT_ASSERT(tracks.size() == 2);
117 for(
const auto &track : tracks) {
118 switch(track->id()) {
122 CPPUNIT_ASSERT(track->displaySize() ==
Size(1024, 576));
127 CPPUNIT_ASSERT(track->samplingFrequency() == 48000);
130 CPPUNIT_FAIL(
"unknown track ID");
133 const auto tags = m_fileInfo.tags();
134 switch(m_tagStatus) {
136 CPPUNIT_ASSERT(tags.size() == 1);
137 CPPUNIT_ASSERT(tags.front()->value(
KnownField::Title).toString() ==
"Elephant Dream - test 3");
139 CPPUNIT_ASSERT(tags.front()->value(
KnownField::Comment).toString() ==
"Matroska Validation File 3, header stripping on the video track and no SimpleBlock");
142 checkMkvTestMetaData();
145 CPPUNIT_ASSERT(tags.size() == 0);
152 void OverallTests::checkMkvTestfile4()
154 CPPUNIT_ASSERT(m_fileInfo.containerFormat() == ContainerFormat::Matroska);
156 const auto tracks = m_fileInfo.tracks();
157 CPPUNIT_ASSERT(tracks.size() == 2);
158 for(
const auto &track : tracks) {
159 switch(track->id()) {
162 CPPUNIT_ASSERT(track->format() == GeneralMediaFormat::Theora);
163 CPPUNIT_ASSERT(track->displaySize() ==
Size(1280, 720));
167 CPPUNIT_ASSERT(track->format() == GeneralMediaFormat::Vorbis);
168 CPPUNIT_ASSERT(track->samplingFrequency() == 48000);
169 CPPUNIT_ASSERT(track->channelCount() == 2);
172 CPPUNIT_FAIL(
"unknown track ID");
175 const auto tags = m_fileInfo.tags();
176 switch(m_tagStatus) {
179 CPPUNIT_ASSERT(tags.size() == 0);
182 checkMkvTestMetaData();
190 void OverallTests::checkMkvTestfile5()
192 CPPUNIT_ASSERT(m_fileInfo.containerFormat() == ContainerFormat::Matroska);
193 const auto tracks = m_fileInfo.tracks();
194 CPPUNIT_ASSERT(tracks.size() == 11);
195 for(
const auto &track : tracks) {
196 switch(track->id()) {
200 CPPUNIT_ASSERT(track->displaySize() ==
Size(1024, 576));
205 CPPUNIT_ASSERT(track->samplingFrequency() == 48000);
209 CPPUNIT_ASSERT(track->mediaType() == MediaType::Text);
211 CPPUNIT_ASSERT(track->language() ==
"ger");
217 const auto tags = m_fileInfo.tags();
218 switch(m_tagStatus) {
220 CPPUNIT_ASSERT(tags.size() == 1);
221 CPPUNIT_ASSERT(tags.front()->value(
KnownField::Title).toString() ==
"Big Buck Bunny - test 8");
223 CPPUNIT_ASSERT(tags.front()->value(
KnownField::Comment).toString() ==
"Matroska Validation File 8, secondary audio commentary track, misc subtitle tracks");
226 checkMkvTestMetaData();
229 CPPUNIT_ASSERT(tags.size() == 0);
236 void OverallTests::checkMkvTestfile6()
238 CPPUNIT_ASSERT(m_fileInfo.containerFormat() == ContainerFormat::Matroska);
239 const auto tracks = m_fileInfo.tracks();
240 CPPUNIT_ASSERT(tracks.size() == 2);
241 for(
const auto &track : tracks) {
242 switch(track->id()) {
245 CPPUNIT_ASSERT(track->format() == GeneralMediaFormat::MicrosoftMpeg4);
246 CPPUNIT_ASSERT(track->pixelSize() ==
Size(854, 480));
251 CPPUNIT_ASSERT(track->samplingFrequency() == 48000);
252 CPPUNIT_ASSERT(track->channelConfig() ==
static_cast<byte
>(MpegChannelMode::Stereo));
255 CPPUNIT_FAIL(
"unknown track ID");
258 const auto tags = m_fileInfo.tags();
259 switch(m_tagStatus) {
261 CPPUNIT_ASSERT(tags.size() == 1);
262 CPPUNIT_ASSERT(tags.front()->value(
KnownField::Title).toString() ==
"Big Buck Bunny - test 6");
264 CPPUNIT_ASSERT(tags.front()->value(
KnownField::Comment).toString() ==
"Matroska Validation File 6, random length to code the size of Clusters and Blocks, no Cues for seeking");
267 checkMkvTestMetaData();
270 CPPUNIT_ASSERT(tags.size() == 0);
277 void OverallTests::checkMkvTestfile7()
279 CPPUNIT_ASSERT(m_fileInfo.containerFormat() == ContainerFormat::Matroska);
280 const auto tracks = m_fileInfo.tracks();
281 CPPUNIT_ASSERT(tracks.size() == 2);
282 for(
const auto &track : tracks) {
283 switch(track->id()) {
287 CPPUNIT_ASSERT(track->pixelSize() ==
Size(1024, 576));
288 CPPUNIT_ASSERT(!strcmp(track->chromaFormat(),
"YUV 4:2:0"));
293 CPPUNIT_ASSERT(track->samplingFrequency() == 48000);
297 CPPUNIT_FAIL(
"unknown track ID");
300 const auto tags = m_fileInfo.tags();
301 switch(m_tagStatus) {
303 CPPUNIT_ASSERT(tags.size() == 1);
304 CPPUNIT_ASSERT(tags.front()->value(
KnownField::Title).toString() ==
"Big Buck Bunny - test 7");
306 CPPUNIT_ASSERT(tags.front()->value(
KnownField::Comment).toString() ==
"Matroska Validation File 7, junk elements are present at the beggining or end of clusters, the parser should skip it. There is also a damaged element at 451418");
309 checkMkvTestMetaData();
312 CPPUNIT_ASSERT(tags.size() == 0);
319 void OverallTests::checkMkvTestfile8()
321 CPPUNIT_ASSERT(m_fileInfo.containerFormat() == ContainerFormat::Matroska);
322 const auto tracks = m_fileInfo.tracks();
323 CPPUNIT_ASSERT(tracks.size() == 2);
324 for(
const auto &track : tracks) {
325 switch(track->id()) {
329 CPPUNIT_ASSERT(track->pixelSize() ==
Size(1024, 576));
330 CPPUNIT_ASSERT(!strcmp(track->chromaFormat(),
"YUV 4:2:0"));
335 CPPUNIT_ASSERT(track->samplingFrequency() == 48000);
339 CPPUNIT_FAIL(
"unknown track ID");
342 const auto tags = m_fileInfo.tags();
343 switch(m_tagStatus) {
345 CPPUNIT_ASSERT(tags.size() == 1);
346 CPPUNIT_ASSERT(tags.front()->value(
KnownField::Title).toString() ==
"Big Buck Bunny - test 8");
348 CPPUNIT_ASSERT(tags.front()->value(
KnownField::Comment).toString() ==
"Matroska Validation File 8, audio missing between timecodes 6.019s and 6.360s");
351 checkMkvTestMetaData();
354 CPPUNIT_ASSERT(tags.size() == 0);
361 void OverallTests::checkMkvTestfileHandbrakeChapters()
363 CPPUNIT_ASSERT(m_fileInfo.containerFormat() == ContainerFormat::Matroska);
364 const auto tracks = m_fileInfo.tracks();
365 CPPUNIT_ASSERT_EQUAL(2_st, tracks.size());
366 for(
const auto &track : tracks) {
367 switch(track->id()) {
371 CPPUNIT_ASSERT_EQUAL(4.0, track->version());
372 CPPUNIT_ASSERT(track->pixelSize() ==
Size(1280, 544));
373 CPPUNIT_ASSERT(track->displaySize() ==
Size(1280, 544));
374 CPPUNIT_ASSERT(track->fps() == 23);
379 CPPUNIT_ASSERT(track->samplingFrequency() == 44100);
383 CPPUNIT_FAIL(argsToString(
"unknown track ID ", track->id()));
386 const auto chapters = m_fileInfo.chapters();
387 CPPUNIT_ASSERT_EQUAL(2_st, chapters.size());
388 for(
const auto &chapter : chapters) {
389 switch(chapter->id()) {
391 CPPUNIT_ASSERT(!strcmp(chapter->names().at(0).data(),
"Kapitel 01"));
392 CPPUNIT_ASSERT_EQUAL(0l, chapter->startTime().totalTicks());
393 CPPUNIT_ASSERT_EQUAL(15, chapter->endTime().seconds());
396 CPPUNIT_ASSERT(!strcmp(chapter->names().at(0).data(),
"Kapitel 02"));
397 CPPUNIT_ASSERT_EQUAL(15, chapter->startTime().seconds());
398 CPPUNIT_ASSERT_EQUAL(27, chapter->endTime().seconds());
401 CPPUNIT_FAIL(argsToString(
"unknown chapter ID ", chapter->id()));
404 const auto tags = m_fileInfo.tags();
405 switch(m_tagStatus) {
407 CPPUNIT_ASSERT_EQUAL(2_st, tags.size());
408 CPPUNIT_ASSERT(tags[0]->target().isEmpty());
409 CPPUNIT_ASSERT_EQUAL(
""s, static_cast<MatroskaTag *>(tags[0])->value(
"CREATION_TIME").toString());
411 CPPUNIT_ASSERT_EQUAL(2_st, tags[1]->target().tracks().at(0));
412 CPPUNIT_ASSERT_EQUAL(
"eng"s, tags[1]->value(KnownField::Language).toString());
415 checkMkvTestMetaData();
418 CPPUNIT_ASSERT(tags.size() == 0);
425 void OverallTests::checkMkvTestfileNestedTags()
427 CPPUNIT_ASSERT(m_fileInfo.containerFormat() == ContainerFormat::Matroska);
428 const auto tags = m_fileInfo.tags();
429 bool generalTagFound =
false;
430 switch(m_tagStatus) {
433 CPPUNIT_ASSERT_EQUAL(5_st, tags.size());
434 for(
const Tag *tag : tags) {
435 CPPUNIT_ASSERT(tag->type() == TagType::MatroskaTag);
436 const auto *mkvTag =
static_cast<const MatroskaTag *
>(tag);
437 const auto &target = mkvTag->
target();
438 if(target.level() == 50 && target.tracks().empty()) {
439 generalTagFound =
true;
441 const auto &fields = mkvTag->fields();
443 CPPUNIT_ASSERT(artistField != fields.end());
444 CPPUNIT_ASSERT_EQUAL(
"Test artist"s, artistField->second.value().toString());
445 const auto &nestedFields = artistField->second.nestedFields();
446 CPPUNIT_ASSERT_EQUAL(1_st, nestedFields.size());
447 CPPUNIT_ASSERT_EQUAL(
"ADDRESS"s, nestedFields[0].idToString());
448 CPPUNIT_ASSERT_EQUAL(
"Test address"s, nestedFields[0].value().toString());
451 CPPUNIT_ASSERT(generalTagFound);
454 CPPUNIT_ASSERT(tags.size() == 0);
461 void OverallTests::checkMkvTestMetaData()
464 const auto tags = m_fileInfo.tags();
465 const auto tracks = m_fileInfo.tracks();
466 CPPUNIT_ASSERT_EQUAL(2_st, tags.size());
467 CPPUNIT_ASSERT_EQUAL(m_testTitle.toString(), tags.front()->value(
KnownField::Title).toString());
469 CPPUNIT_ASSERT_EQUAL(m_testComment.toString(), tags.front()->value(
KnownField::Comment).toString());
470 CPPUNIT_ASSERT_EQUAL(30_st, tags[1]->target().level());
471 CPPUNIT_ASSERT_EQUAL(tracks.at(0)->id(), tags[1]->target().tracks().at(0));
472 CPPUNIT_ASSERT_EQUAL(m_testAlbum.toString(), tags[1]->value(
KnownField::Album).toString());
473 CPPUNIT_ASSERT_EQUAL(m_testPartNumber.toInteger(), tags[1]->value(KnownField::PartNumber).toInteger());
474 CPPUNIT_ASSERT_EQUAL(m_testTotalParts.toInteger(), tags[1]->value(KnownField::TotalParts).toInteger());
477 const auto attachments = m_fileInfo.attachments();
478 CPPUNIT_ASSERT_EQUAL(1_st, attachments.size());
479 CPPUNIT_ASSERT(attachments[0]->mimeType() ==
"image/png");
480 CPPUNIT_ASSERT(attachments[0]->name() ==
"cover.jpg");
482 CPPUNIT_ASSERT(attachmentData !=
nullptr);
483 if (m_testCover.empty()) {
484 m_testCover = readFile(testFilePath(
"matroska_wave1/logo3_256x256.png"), 20000);
486 CPPUNIT_ASSERT_EQUAL(m_testCover.size(),
static_cast<size_t>(attachmentData->
size()));
487 istream &attachmentSteam = attachmentData->
stream();
488 attachmentSteam.seekg(attachmentData->
startOffset());
489 for (
char expectedChar : m_testCover) {
490 CPPUNIT_ASSERT_EQUAL(expectedChar, static_cast<char>(attachmentSteam.get()));
497 void OverallTests::checkMkvConstraints()
501 CPPUNIT_ASSERT(m_fileInfo.container());
504 CPPUNIT_ASSERT_EQUAL(4096_st, m_fileInfo.paddingSize());
506 CPPUNIT_ASSERT(m_fileInfo.paddingSize() >= 1024);
507 CPPUNIT_ASSERT(m_fileInfo.paddingSize() <= (4096 + 1024));
509 if(!(m_mode &
RemoveTag) && (m_expectedTagPos != ElementPosition::Keep) && ((m_mode & ForceRewring) || (m_mode &
ForceTagPos))) {
510 CPPUNIT_ASSERT_EQUAL(m_expectedTagPos, m_fileInfo.container()->determineTagPosition());
513 CPPUNIT_ASSERT_EQUAL(m_expectedIndexPos, m_fileInfo.container()->determineIndexPosition());
521 void OverallTests::setMkvTestMetaData()
524 const string fileName(m_fileInfo.fileName());
525 if(fileName ==
"test4.mkv") {
527 m_fileInfo.container()->createTag(
TagTarget(50));
528 }
else if(fileName ==
"handbrake-chapters-2.mkv") {
530 m_fileInfo.removeTag(m_fileInfo.tags().at(1));
532 Tag *firstTag = m_fileInfo.tags().at(0);
537 trackIds.emplace_back(m_fileInfo.tracks().at(0)->id());
538 if(
Tag *newTag = m_fileInfo.container()->createTag(
TagTarget(30, trackIds))) {
540 newTag->setValue(KnownField::PartNumber, m_testPartNumber);
541 newTag->setValue(KnownField::TotalParts, m_testTotalParts);
543 CPPUNIT_FAIL(
"can not create tag");
547 attachment->setFile(TestUtilities::testFilePath(
"matroska_wave1/logo3_256x256.png"));
548 attachment->setMimeType(
"image/png");
549 attachment->setName(
"cover.jpg");
551 CPPUNIT_FAIL(
"can not create attachment");
560 void OverallTests::createMkvWithNestedTags()
563 m_nestedTagsMkvPath = workingCopyPathMode(
"mtx-test-data/mkv/nested-tags.mkv", WorkingCopyMode::NoCopy);
564 remove(m_nestedTagsMkvPath.data());
566 cerr <<
"\n\n- Create testfile \"" << m_nestedTagsMkvPath <<
"\" with mkvmerge" << endl;
567 const string tagsMkvPath(testFilePath(
"mtx-test-data/mkv/tags.mkv"));
568 const string tagsXmlPath(testFilePath(
"mkv/nested-tags.xml"));
569 const char *
const mkvmergeArgs[] = {
570 "--ui-language en_US",
571 "--output", m_nestedTagsMkvPath.data(),
572 "--no-global-tags",
"--language",
"0:und",
"--default-track",
"0:yes",
"--language",
"1:und",
"--default-track",
"1:yes",
573 "(", tagsMkvPath.data(),
")",
574 "--global-tags", tagsXmlPath.data(),
"--track-order",
"0:0,0:1",
nullptr 576 string mkvmergeOutput, mkvmergeErrors;
577 int res = execHelperApp(
"/bin/mkvmerge", mkvmergeArgs, mkvmergeOutput, mkvmergeErrors);
578 cout << mkvmergeOutput << endl;
579 cerr << mkvmergeErrors << endl;
581 cerr <<
"- failure (exit code " << res <<
"); unable to test nested tags" << endl;
582 remove(m_nestedTagsMkvPath.data());
583 m_nestedTagsMkvPath.clear();
593 cerr << endl <<
"Matroska parser" << endl;
594 m_fileInfo.setForceFullParse(
false);
596 parseFile(TestUtilities::testFilePath(
"matroska_wave1/test1.mkv"), &OverallTests::checkMkvTestfile1);
597 parseFile(TestUtilities::testFilePath(
"matroska_wave1/test2.mkv"), &OverallTests::checkMkvTestfile2);
598 parseFile(TestUtilities::testFilePath(
"matroska_wave1/test3.mkv"), &OverallTests::checkMkvTestfile3);
599 parseFile(TestUtilities::testFilePath(
"matroska_wave1/test4.mkv"), &OverallTests::checkMkvTestfile4);
600 parseFile(TestUtilities::testFilePath(
"matroska_wave1/test5.mkv"), &OverallTests::checkMkvTestfile5);
601 parseFile(TestUtilities::testFilePath(
"matroska_wave1/test6.mkv"), &OverallTests::checkMkvTestfile6);
602 parseFile(TestUtilities::testFilePath(
"matroska_wave1/test7.mkv"), &OverallTests::checkMkvTestfile7);
603 parseFile(TestUtilities::testFilePath(
"matroska_wave1/test8.mkv"), &OverallTests::checkMkvTestfile8);
604 parseFile(TestUtilities::testFilePath(
"mtx-test-data/mkv/handbrake-chapters-2.mkv"), &OverallTests::checkMkvTestfileHandbrakeChapters);
605 createMkvWithNestedTags();
606 if(!m_nestedTagsMkvPath.empty()) {
607 parseFile(m_nestedTagsMkvPath, &OverallTests::checkMkvTestfileNestedTags);
619 void OverallTests::testMkvMakingWithDifferentSettings()
622 m_fileInfo.setForceFullParse(
true);
625 for(m_mode = 0; m_mode != 0x100; ++m_mode) {
631 m_fileInfo.setTagPosition(ElementPosition::Keep);
633 m_fileInfo.setTagPosition(m_mode &
TagsBeforeData ? ElementPosition::BeforeData : ElementPosition::AfterData);
639 m_fileInfo.setIndexPosition(ElementPosition::Keep);
641 m_fileInfo.setIndexPosition(m_mode &
IndexBeforeData ? ElementPosition::BeforeData : ElementPosition::AfterData);
644 m_fileInfo.setMinPadding(m_mode & PaddingConstraints ? 1024 : 0);
645 m_fileInfo.setMaxPadding(m_mode & PaddingConstraints ? (4096 + 1024) : static_cast<size_t>(-1));
646 m_fileInfo.setForceTagPosition(m_mode &
ForceTagPos);
650 list<string> testConditions;
651 if(m_mode & ForceRewring) {
652 testConditions.emplace_back(
"forcing rewrite");
654 if(m_mode & KeepTagPos) {
656 testConditions.emplace_back(
"removing tag");
658 testConditions.emplace_back(
"keeping tag position");
661 testConditions.emplace_back(
"tags before data");
663 testConditions.emplace_back(
"tags after data");
665 if(m_mode & KeepIndexPos) {
666 testConditions.emplace_back(
"keeping index position");
668 testConditions.emplace_back(
"index before data");
670 testConditions.emplace_back(
"index after data");
672 if(m_mode & PaddingConstraints) {
673 testConditions.emplace_back(
"padding constraints");
675 if(m_mode & ForceTagPos) {
676 testConditions.emplace_back(
"forcing tag position");
678 if(m_mode & ForceIndexPos) {
679 testConditions.emplace_back(
"forcing index position");
681 cerr << endl <<
"Matroska maker - testmode " << m_mode <<
": " << joinStrings(testConditions,
", ") << endl;
685 void (
OverallTests::*modifyRoutine)(void) = (m_mode &
RemoveTag) ? &OverallTests::removeAllTags : &OverallTests::setMkvTestMetaData;
686 makeFile(TestUtilities::workingCopyPath(
"matroska_wave1/test1.mkv"), modifyRoutine, &OverallTests::checkMkvTestfile1);
687 makeFile(TestUtilities::workingCopyPath(
"matroska_wave1/test2.mkv"), modifyRoutine, &OverallTests::checkMkvTestfile2);
688 makeFile(TestUtilities::workingCopyPath(
"matroska_wave1/test3.mkv"), modifyRoutine, &OverallTests::checkMkvTestfile3);
689 makeFile(TestUtilities::workingCopyPath(
"matroska_wave1/test4.mkv"), modifyRoutine, &OverallTests::checkMkvTestfile4);
690 makeFile(TestUtilities::workingCopyPath(
"matroska_wave1/test5.mkv"), modifyRoutine, &OverallTests::checkMkvTestfile5);
691 makeFile(TestUtilities::workingCopyPath(
"matroska_wave1/test6.mkv"), modifyRoutine, &OverallTests::checkMkvTestfile6);
692 makeFile(TestUtilities::workingCopyPath(
"matroska_wave1/test7.mkv"), modifyRoutine, &OverallTests::checkMkvTestfile7);
693 makeFile(TestUtilities::workingCopyPath(
"matroska_wave1/test8.mkv"), modifyRoutine, &OverallTests::checkMkvTestfile8);
694 makeFile(TestUtilities::workingCopyPath(
"mtx-test-data/mkv/handbrake-chapters-2.mkv"), modifyRoutine, &OverallTests::checkMkvTestfileHandbrakeChapters);
702 void OverallTests::testMkvMakingNestedTags()
704 createMkvWithNestedTags();
705 if(!m_nestedTagsMkvPath.empty()) {
706 cerr << endl <<
"Matroska maker - rewrite file with nested tags" << endl;
707 m_fileInfo.setMinPadding(0);
708 m_fileInfo.setMaxPadding(0);
709 m_fileInfo.setTagPosition(ElementPosition::BeforeData);
710 m_fileInfo.setIndexPosition(ElementPosition::BeforeData);
711 makeFile(m_nestedTagsMkvPath, &OverallTests::noop, &OverallTests::checkMkvTestfileNestedTags);
The OverallTests class tests reading and writing tags and parsing technical information for all suppo...
void testMkvParsing()
Tests the Matroska parser via MediaFileInfo.