X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=test%2Fffmpeg_encoder_test.cc;h=993da4d2348a84e32d9a681900092b81bad1c846;hb=74ee261046fbda4e902c6967312b3de7af6e869e;hp=9bce836c3fb4d3c814912ddedc9c888683b256fd;hpb=981ffdc9db4a84c614b3186a0fb27136fe6feb37;p=dcpomatic.git diff --git a/test/ffmpeg_encoder_test.cc b/test/ffmpeg_encoder_test.cc index 9bce836c3..993da4d23 100644 --- a/test/ffmpeg_encoder_test.cc +++ b/test/ffmpeg_encoder_test.cc @@ -19,19 +19,22 @@ */ +#include "lib/audio_content.h" +#include "lib/compose.hpp" +#include "lib/config.h" +#include "lib/content_factory.h" +#include "lib/dcp_content.h" +#include "lib/dcpomatic_log.h" +#include "lib/ffmpeg_content.h" #include "lib/ffmpeg_encoder.h" +#include "lib/ffmpeg_examiner.h" #include "lib/film.h" -#include "lib/ffmpeg_content.h" #include "lib/image_content.h" -#include "lib/video_content.h" -#include "lib/audio_content.h" -#include "lib/string_text_file_content.h" #include "lib/ratio.h" -#include "lib/transcode_job.h" -#include "lib/dcp_content.h" +#include "lib/string_text_file_content.h" #include "lib/text_content.h" -#include "lib/compose.hpp" -#include "lib/content_factory.h" +#include "lib/transcode_job.h" +#include "lib/video_content.h" #include "test.h" #include @@ -39,7 +42,6 @@ using std::string; using std::shared_ptr; using std::make_shared; -using boost::optional; using namespace dcpomatic; @@ -333,7 +335,7 @@ BOOST_AUTO_TEST_CASE (ffmpeg_encoder_h264_test6) /** Test export of a 3D DCP in a 2D project */ BOOST_AUTO_TEST_CASE (ffmpeg_encoder_3d_dcp_to_h264) { - auto dcp = make_shared(TestPaths::private_data() / "XMenDarkPhoenix_TLR-12-3D_F_DE-XX_DE_51_2K_TCFG_20190227_TM_IOP-3D_OV"); + auto dcp = make_shared(TestPaths::private_data() / "xm"); auto film2 = new_test_film2 ("ffmpeg_encoder_3d_dcp_to_h264_export", {dcp}); auto job = make_shared (film2); @@ -397,3 +399,89 @@ BOOST_AUTO_TEST_CASE (ffmpeg_encoder_h264_test9) FFmpegEncoder encoder (film, job, "build/test/ffmpeg_encoder_prores_test9.mov", ExportFormat::H264_AAC, false, false, false, 23); encoder.go (); } + + +/** DCP -> Prores with crop */ +BOOST_AUTO_TEST_CASE (ffmpeg_encoder_prores_from_dcp_with_crop) +{ + auto dcp = make_shared("test/data/import_dcp_test2"); + auto film = new_test_film2 ("ffmpeg_encoder_prores_from_dcp_with_crop", { dcp }); + dcp->video->set_left_crop (32); + dcp->video->set_right_crop (32); + film->write_metadata (); + + auto job = make_shared(film); + FFmpegEncoder encoder (film, job, "build/test/ffmpeg_encoder_prores_from_dcp_with_crop.mov", ExportFormat::PRORES, false, false, false, 23); + encoder.go (); +} + + +/** DCP -> H264 with crop */ +BOOST_AUTO_TEST_CASE (ffmpeg_encoder_h264_from_dcp_with_crop) +{ + auto dcp = make_shared("test/data/import_dcp_test2"); + auto film = new_test_film2 ("ffmpeg_encoder_h264_from_dcp_with_crop", { dcp }); + dcp->video->set_left_crop (32); + dcp->video->set_right_crop (32); + film->write_metadata (); + + auto job = make_shared(film); + FFmpegEncoder encoder (film, job, "build/test/ffmpeg_encoder_prores_from_dcp_with_crop.mov", ExportFormat::H264_AAC, false, false, false, 23); + encoder.go (); +} + + +/** Export to H264 with reels */ +BOOST_AUTO_TEST_CASE (ffmpeg_encoder_h264_with_reels) +{ + auto content1 = content_factory("test/data/flat_red.png").front(); + auto content2 = content_factory("test/data/flat_red.png").front(); + auto film = new_test_film2 ("ffmpeg_encoder_h264_with_reels", { content1, content2 }); + film->set_reel_type (ReelType::BY_VIDEO_CONTENT); + content1->video->set_length (240); + content2->video->set_length (240); + + auto job = make_shared(film); + FFmpegEncoder encoder (film, job, "build/test/ffmpeg_encoder_h264_with_reels.mov", ExportFormat::H264_AAC, false, true, false, 23); + encoder.go (); + + auto check = [](boost::filesystem::path path) { + auto reel = std::dynamic_pointer_cast(content_factory(path).front()); + BOOST_REQUIRE (reel); + FFmpegExaminer examiner(reel); + BOOST_CHECK_EQUAL (examiner.video_length(), 240U); + }; + + check ("build/test/ffmpeg_encoder_h264_with_reels_reel1.mov"); + check ("build/test/ffmpeg_encoder_h264_with_reels_reel2.mov"); +} + + +/** Regression test for "Error during decoding: Butler finished" (#2097) */ +BOOST_AUTO_TEST_CASE (ffmpeg_encoder_prores_regression_1) +{ + auto content = content_factory(TestPaths::private_data() / "arrietty_JP-EN.mkv").front(); + auto film = new_test_film2 ("ffmpeg_encoder_prores_regression_1", { content }); + + auto job = make_shared(film); + FFmpegEncoder encoder (film, job, "build/test/ffmpeg_encoder_prores_regression_1.mov", ExportFormat::PRORES, false, true, false, 23); + encoder.go (); +} + + +/** Regression test for Butler video buffers reached 480 frames (audio is 0) (#2101) */ +BOOST_AUTO_TEST_CASE (ffmpeg_encoder_prores_regression_2) +{ + auto logs = dcpomatic_log->types(); + dcpomatic_log->set_types(logs | LogEntry::TYPE_DEBUG_PLAYER); + + auto content = content_factory(TestPaths::private_data() / "tge_clip.mkv").front(); + auto film = new_test_film2 ("ffmpeg_encoder_prores_regression_2", { content }); + + auto job = make_shared(film); + FFmpegEncoder encoder (film, job, "build/test/ffmpeg_encoder_prores_regression_2.mov", ExportFormat::PRORES, false, true, false, 23); + encoder.go (); + + dcpomatic_log->set_types(logs); +} +