From 105d8ac83aac8d2553c69266e9b7e6472b1713d4 Mon Sep 17 00:00:00 2001 From: Martchus Date: Mon, 9 Jul 2018 16:00:59 +0200 Subject: [PATCH] Test tagging recoding from Android camera app --- scripts/download_testfiles.sh | 1 + tests/overall.h | 3 ++ tests/overallmp4.cpp | 80 +++++++++++++++++++++++++++++++++++ tests/testfilecheck.cpp | 1 + 4 files changed, 85 insertions(+) diff --git a/scripts/download_testfiles.sh b/scripts/download_testfiles.sh index 7db2a86..8ead59c 100755 --- a/scripts/download_testfiles.sh +++ b/scripts/download_testfiles.sh @@ -48,6 +48,7 @@ testfiles=( 'mtx-test-data/mkv/handbrake-chapters-2.mkv' 'mtx-test-data/mkv/tags.mkv' 'mp4/test1.m4a' + 'mp4/android-8.1-camera-recoding.mp4' 'mtx-test-data/aac/he-aacv2-ps.m4a' 'mtx-test-data/alac/othertest-itunes.m4a' 'mtx-test-data/mp3/id3-tag-and-xing-header.mp3' diff --git a/tests/overall.h b/tests/overall.h index 9b1900e..7d5c20c 100644 --- a/tests/overall.h +++ b/tests/overall.h @@ -8,6 +8,8 @@ #include "../progressfeedback.h" #include "../tagvalue.h" +#include +#include #include #include using namespace TestUtilities; @@ -85,6 +87,7 @@ private: void checkMp4Testfile4(); void checkMp4Testfile5(); void checkMp4Testfile6(); + void checkMp4Testfile7(); void checkMp4TestMetaData(); void checkMp4Constraints(); diff --git a/tests/overallmp4.cpp b/tests/overallmp4.cpp index c6ba9d3..5c5f42c 100644 --- a/tests/overallmp4.cpp +++ b/tests/overallmp4.cpp @@ -6,6 +6,8 @@ #include "../mp4/mp4ids.h" #include "../mp4/mp4tag.h" +using namespace ChronoUtilities; + namespace Mp4TestFlags { enum TestFlag { ForceRewring = 0x1, @@ -342,6 +344,82 @@ void OverallTests::checkMp4Testfile6() CPPUNIT_ASSERT(m_diag.level() <= DiagLevel::Information); } +/*! + * \brief Checks "mp4/android-8.1-camera-recoding.mp4". + */ +void OverallTests::checkMp4Testfile7() +{ + CPPUNIT_ASSERT_EQUAL(ContainerFormat::Mp4, m_fileInfo.containerFormat()); + CPPUNIT_ASSERT(m_fileInfo.container() != nullptr); + CPPUNIT_ASSERT_EQUAL("nvr1"s, m_fileInfo.container()->documentType()); + const auto tracks = m_fileInfo.tracks(); + CPPUNIT_ASSERT_EQUAL(3_st, tracks.size()); + for (const auto &track : tracks) { + switch (track->id()) { + case 1: + CPPUNIT_ASSERT_EQUAL("VideoHandle"s, track->name()); + CPPUNIT_ASSERT_EQUAL(MediaType::Video, track->mediaType()); + CPPUNIT_ASSERT_EQUAL(GeneralMediaFormat::Avc, track->format().general); + CPPUNIT_ASSERT_EQUAL(static_cast(SubFormats::AvcBaselineProfile), track->format().sub); + CPPUNIT_ASSERT_EQUAL(static_cast(0), track->format().extension); + CPPUNIT_ASSERT_EQUAL(4.0, track->version()); + CPPUNIT_ASSERT_EQUAL(static_cast(0), track->channelCount()); + CPPUNIT_ASSERT_EQUAL(static_cast(0), track->channelConfig()); + CPPUNIT_ASSERT_EQUAL(static_cast(0), track->extensionChannelConfig()); + CPPUNIT_ASSERT_EQUAL(0u, track->samplingFrequency()); + CPPUNIT_ASSERT_EQUAL(0u, track->extensionSamplingFrequency()); + CPPUNIT_ASSERT_EQUAL(static_cast(24), track->depth()); + CPPUNIT_ASSERT_EQUAL(static_cast(51), track->sampleCount()); + CPPUNIT_ASSERT_EQUAL(1920u, track->pixelSize().width()); + CPPUNIT_ASSERT_EQUAL(1080u, track->pixelSize().height()); + CPPUNIT_ASSERT_EQUAL(72u, track->resolution().width()); + CPPUNIT_ASSERT_EQUAL(72u, track->resolution().height()); + CPPUNIT_ASSERT_EQUAL(DateTime::fromDateAndTime(2018, 7, 8, 20, 3, 52), track->creationTime()); + CPPUNIT_ASSERT_EQUAL(DateTime::fromDateAndTime(2018, 7, 8, 20, 3, 52), track->modificationTime()); + CPPUNIT_ASSERT_EQUAL("YUV 4:2:0"s, string(track->chromaFormat())); + CPPUNIT_ASSERT_EQUAL(1, track->duration().seconds()); + break; + case 2: + CPPUNIT_ASSERT_EQUAL("SoundHandle"s, track->name()); + CPPUNIT_ASSERT_EQUAL(MediaType::Audio, track->mediaType()); + CPPUNIT_ASSERT_EQUAL(GeneralMediaFormat::Aac, track->format().general); + CPPUNIT_ASSERT_EQUAL(static_cast(SubFormats::AacMpeg4LowComplexityProfile), track->format().sub); + CPPUNIT_ASSERT_EQUAL(static_cast(0), track->format().extension); + CPPUNIT_ASSERT_EQUAL(static_cast(2), track->channelCount()); + CPPUNIT_ASSERT_EQUAL(static_cast(Mpeg4ChannelConfigs::FrontLeftFrontRight), track->channelConfig()); + CPPUNIT_ASSERT_EQUAL(static_cast(0), track->extensionChannelConfig()); + CPPUNIT_ASSERT_EQUAL(48000u, track->samplingFrequency()); + CPPUNIT_ASSERT_EQUAL(0u, track->extensionSamplingFrequency()); + CPPUNIT_ASSERT_EQUAL(static_cast(16), track->bitsPerSample()); + CPPUNIT_ASSERT_EQUAL(static_cast(76), track->sampleCount()); + CPPUNIT_ASSERT_EQUAL(DateTime::fromDateAndTime(2018, 7, 8, 20, 3, 52), track->creationTime()); + CPPUNIT_ASSERT_EQUAL(DateTime::fromDateAndTime(2018, 7, 8, 20, 3, 52), track->modificationTime()); + CPPUNIT_ASSERT_EQUAL(1, track->duration().seconds()); + CPPUNIT_ASSERT_EQUAL(256.0, track->bitrate()); + break; + case 3: + CPPUNIT_ASSERT_EQUAL("MetaHandler"s, track->name()); + CPPUNIT_ASSERT_EQUAL(GeneralMediaFormat::Unknown, track->format().general); + CPPUNIT_ASSERT_EQUAL("urim"s, track->formatId()); + break; + default: + CPPUNIT_FAIL("unknown track ID"); + } + } + const auto tags = m_fileInfo.tags(); + switch (m_tagStatus) { + case TagStatus::Original: + CPPUNIT_ASSERT_EQUAL(0_st, tags.size()); + break; + case TagStatus::TestMetaDataPresent: + checkMp4TestMetaData(); + break; + case TagStatus::Removed: + CPPUNIT_ASSERT_EQUAL(0_st, tags.size()); + } + CPPUNIT_ASSERT(m_diag.level() <= DiagLevel::Information); +} + /*! * \brief Checks whether test meta data for MP4 files has been applied correctly. */ @@ -452,6 +530,7 @@ void OverallTests::testMp4Parsing() parseFile(TestUtilities::testFilePath("mtx-test-data/mp4/dash/dragon-age-inquisition-H1LkM6IVlm4-video.mp4"), &OverallTests::checkMp4Testfile3); parseFile(TestUtilities::testFilePath("mtx-test-data/alac/othertest-itunes.m4a"), &OverallTests::checkMp4Testfile4); parseFile(TestUtilities::testFilePath("mtx-test-data/aac/he-aacv2-ps.m4a"), &OverallTests::checkMp4Testfile5); + parseFile(TestUtilities::testFilePath("mp4/android-8.1-camera-recoding.mp4"), &OverallTests::checkMp4Testfile7); } #ifdef PLATFORM_UNIX @@ -517,6 +596,7 @@ void OverallTests::testMp4Making() &OverallTests::checkMp4Testfile3); makeFile(TestUtilities::workingCopyPath("mtx-test-data/alac/othertest-itunes.m4a"), modifyRoutine, &OverallTests::checkMp4Testfile4); makeFile(TestUtilities::workingCopyPath("mtx-test-data/aac/he-aacv2-ps.m4a"), modifyRoutine, &OverallTests::checkMp4Testfile5); + makeFile(TestUtilities::workingCopyPath("mp4/android-8.1-camera-recoding.mp4"), modifyRoutine, &OverallTests::checkMp4Testfile7); // -> add/remove tracks modifyRoutine = (m_mode & RemoveTagOrTrack) ? &OverallTests::removeSecondTrack : &OverallTests::alterMp4Tracks; m_fileInfo.setTagPosition(ElementPosition::Keep); diff --git a/tests/testfilecheck.cpp b/tests/testfilecheck.cpp index 524b3ff..32c8b13 100644 --- a/tests/testfilecheck.cpp +++ b/tests/testfilecheck.cpp @@ -70,6 +70,7 @@ struct TestFile { { "mtx-test-data/mkv/tags.mkv", { "4330019afc3d846600c1ded38158fcac081297f4e56c749251c236f4871e0287" } }, { "mkv/nested-tags.xml", { "85cfcc94920f114e52fd1aa3df24706cd2710626e065a2c8c55dd209ec8dc8ce" } }, { "mp4/test1.m4a", { "4f16e0a22525bd13ba859431406d7f5991e0b4f155c51e10e5f32b0c97034b36" } }, + { "mp4/android-8.1-camera-recoding.mp4", { "e7c5624872de1c9c2fb52dd954cef53adc337a6ba88342ff516dde5d4ef374dc" } }, { "mtx-test-data/aac/he-aacv2-ps.m4a", { "be54be0ae45b0184583ced8a84a881a1652a449feb7f6a917e11f60efabb68ac" } }, { "mtx-test-data/alac/othertest-itunes.m4a", { "5e9c64cde00902211533fbe38aaa67ef5f79a945e1d717951b78b4bbf9ff84e8" } }, { "mtx-test-data/mp3/id3-tag-and-xing-header.mp3", { "4a9187b05dc74d32e5a3de53494fde9db8c6c25d46082f86de6f424ad28daacf" } },