Test tagging recoding from Android camera app

This commit is contained in:
Martchus 2018-07-09 16:00:59 +02:00
parent 93bd1b2814
commit 105d8ac83a
4 changed files with 85 additions and 0 deletions

View File

@ -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'

View File

@ -8,6 +8,8 @@
#include "../progressfeedback.h"
#include "../tagvalue.h"
#include <c++utilities/chrono/datetime.h>
#include <c++utilities/chrono/format.h>
#include <c++utilities/conversion/stringconversion.h>
#include <c++utilities/tests/testutils.h>
using namespace TestUtilities;
@ -85,6 +87,7 @@ private:
void checkMp4Testfile4();
void checkMp4Testfile5();
void checkMp4Testfile6();
void checkMp4Testfile7();
void checkMp4TestMetaData();
void checkMp4Constraints();

View File

@ -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<unsigned char>(SubFormats::AvcBaselineProfile), track->format().sub);
CPPUNIT_ASSERT_EQUAL(static_cast<unsigned char>(0), track->format().extension);
CPPUNIT_ASSERT_EQUAL(4.0, track->version());
CPPUNIT_ASSERT_EQUAL(static_cast<uint16>(0), track->channelCount());
CPPUNIT_ASSERT_EQUAL(static_cast<byte>(0), track->channelConfig());
CPPUNIT_ASSERT_EQUAL(static_cast<byte>(0), track->extensionChannelConfig());
CPPUNIT_ASSERT_EQUAL(0u, track->samplingFrequency());
CPPUNIT_ASSERT_EQUAL(0u, track->extensionSamplingFrequency());
CPPUNIT_ASSERT_EQUAL(static_cast<uint16>(24), track->depth());
CPPUNIT_ASSERT_EQUAL(static_cast<uint64>(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<unsigned char>(SubFormats::AacMpeg4LowComplexityProfile), track->format().sub);
CPPUNIT_ASSERT_EQUAL(static_cast<unsigned char>(0), track->format().extension);
CPPUNIT_ASSERT_EQUAL(static_cast<uint16>(2), track->channelCount());
CPPUNIT_ASSERT_EQUAL(static_cast<byte>(Mpeg4ChannelConfigs::FrontLeftFrontRight), track->channelConfig());
CPPUNIT_ASSERT_EQUAL(static_cast<byte>(0), track->extensionChannelConfig());
CPPUNIT_ASSERT_EQUAL(48000u, track->samplingFrequency());
CPPUNIT_ASSERT_EQUAL(0u, track->extensionSamplingFrequency());
CPPUNIT_ASSERT_EQUAL(static_cast<uint16>(16), track->bitsPerSample());
CPPUNIT_ASSERT_EQUAL(static_cast<uint64>(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);

View File

@ -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" } },