X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=test%2Faudio_content_test.cc;h=f2c095fabac671bc1e8b0888b83e4f7f366886dd;hb=HEAD;hp=db4c3a59fe026ead1d0f04b2d6c3a1270f1bb7f8;hpb=fdb36750a09e3bba3d10fe5102e39a62eda68ea6;p=dcpomatic.git diff --git a/test/audio_content_test.cc b/test/audio_content_test.cc index db4c3a59f..97f55d53a 100644 --- a/test/audio_content_test.cc +++ b/test/audio_content_test.cc @@ -20,38 +20,42 @@ #include "lib/audio_content.h" +#include "lib/dcp_content.h" #include "lib/content_factory.h" +#include "lib/film.h" #include "lib/maths_util.h" #include "lib/video_content.h" #include "test.h" +#include +#include #include BOOST_AUTO_TEST_CASE (audio_content_fade_empty_region) { - auto content = content_factory("test/data/impulse_train.wav").front(); - auto film = new_test_film2("audio_content_fade_empty_region", { content }); + auto content = content_factory("test/data/impulse_train.wav"); + auto film = new_test_film2("audio_content_fade_empty_region", content); - BOOST_CHECK (content->audio->fade(content->audio->stream(), 0, 0, 48000).empty()); + BOOST_CHECK(content[0]->audio->fade(content[0]->audio->stream(), 0, 0, 48000).empty()); } BOOST_AUTO_TEST_CASE (audio_content_fade_no_fade) { - auto content = content_factory("test/data/impulse_train.wav").front(); - auto film = new_test_film2("audio_content_fade_no_fade", { content }); + auto content = content_factory("test/data/impulse_train.wav"); + auto film = new_test_film2("audio_content_fade_no_fade", content); - auto const stream = content->audio->stream(); + auto const stream = content[0]->audio->stream(); - BOOST_CHECK (content->audio->fade(stream, 0, 2000, 48000).empty()); - BOOST_CHECK (content->audio->fade(stream, 9999, 451, 48000).empty()); - BOOST_CHECK (content->audio->fade(stream, stream->length() + 100, 8000, 48000).empty()); + BOOST_CHECK(content[0]->audio->fade(stream, 0, 2000, 48000).empty()); + BOOST_CHECK(content[0]->audio->fade(stream, 9999, 451, 48000).empty()); + BOOST_CHECK(content[0]->audio->fade(stream, stream->length() + 100, 8000, 48000).empty()); } BOOST_AUTO_TEST_CASE (audio_content_fade_unfaded_part) { - auto content = content_factory("test/data/impulse_train.wav").front(); + auto content = content_factory("test/data/impulse_train.wav")[0]; auto film = new_test_film2("audio_content_fade_unfaded_part", { content }); auto const stream = content->audio->stream(); @@ -67,7 +71,7 @@ BOOST_AUTO_TEST_CASE (audio_content_fade_unfaded_part) BOOST_AUTO_TEST_CASE (audio_content_within_the_fade_in) { - auto content = content_factory("test/data/impulse_train.wav").front(); + auto content = content_factory("test/data/impulse_train.wav")[0]; auto film = new_test_film2("audio_content_within_the_fade_in", { content }); content->audio->set_fade_in(dcpomatic::ContentTime::from_frames(2000, 48000)); @@ -82,7 +86,7 @@ BOOST_AUTO_TEST_CASE (audio_content_within_the_fade_in) BOOST_AUTO_TEST_CASE (audio_content_within_the_fade_out) { - auto content = content_factory("test/data/impulse_train.wav").front(); + auto content = content_factory("test/data/impulse_train.wav")[0]; auto film = new_test_film2("audio_content_within_the_fade_out", { content }); auto const stream = content->audio->stream(); @@ -100,7 +104,7 @@ BOOST_AUTO_TEST_CASE (audio_content_within_the_fade_out) BOOST_AUTO_TEST_CASE (audio_content_overlapping_the_fade_in) { - auto content = content_factory("test/data/impulse_train.wav").front(); + auto content = content_factory("test/data/impulse_train.wav")[0]; auto film = new_test_film2("audio_content_overlapping_the_fade_in", { content }); content->audio->set_fade_in(dcpomatic::ContentTime::from_frames(2000, 48000)); @@ -119,7 +123,7 @@ BOOST_AUTO_TEST_CASE (audio_content_overlapping_the_fade_in) BOOST_AUTO_TEST_CASE (audio_content_overlapping_the_fade_out) { - auto content = content_factory("test/data/impulse_train.wav").front(); + auto content = content_factory("test/data/impulse_train.wav")[0]; auto film = new_test_film2("audio_content_overlapping_the_fade_out", { content }); auto const stream = content->audio->stream(); @@ -140,7 +144,7 @@ BOOST_AUTO_TEST_CASE (audio_content_overlapping_the_fade_out) BOOST_AUTO_TEST_CASE (audio_content_fade_in_and_out) { - auto content = content_factory("test/data/impulse_train.wav").front(); + auto content = content_factory("test/data/impulse_train.wav")[0]; auto film = new_test_film2("audio_content_fade_in_and_out", { content }); auto const stream = content->audio->stream(); @@ -159,14 +163,14 @@ BOOST_AUTO_TEST_CASE (audio_content_fade_in_and_out) BOOST_AUTO_TEST_CASE (audio_content_fade_in_with_trim) { - auto content = content_factory("test/data/impulse_train.wav").front(); + auto content = content_factory("test/data/impulse_train.wav")[0]; auto film = new_test_film2("audio_content_fade_in_with_trim", { content }); auto const stream = content->audio->stream(); content->audio->set_fade_in(dcpomatic::ContentTime::from_frames(2000, 48000)); content->audio->set_fade_out(dcpomatic::ContentTime::from_frames(1000, 48000)); - content->set_trim_start(dcpomatic::ContentTime::from_frames(5200, 48000)); + content->set_trim_start(film, dcpomatic::ContentTime::from_frames(5200, 48000)); /* In the trim */ auto const f1 = content->audio->fade(stream, 0, 2000, 48000); @@ -186,7 +190,7 @@ BOOST_AUTO_TEST_CASE (audio_content_fade_in_with_trim) BOOST_AUTO_TEST_CASE (audio_content_fade_out_with_trim) { - auto content = content_factory("test/data/impulse_train.wav").front(); + auto content = content_factory("test/data/impulse_train.wav")[0]; auto film = new_test_film2("audio_content_fade_out_with_trim", { content }); auto const stream = content->audio->stream(); @@ -194,7 +198,7 @@ BOOST_AUTO_TEST_CASE (audio_content_fade_out_with_trim) content->audio->set_fade_in(dcpomatic::ContentTime::from_frames(2000, 48000)); content->audio->set_fade_out(dcpomatic::ContentTime::from_frames(1000, 48000)); - content->set_trim_start(dcpomatic::ContentTime::from_frames(5200, 48000)); + content->set_trim_start(film, dcpomatic::ContentTime::from_frames(5200, 48000)); content->set_trim_end(dcpomatic::ContentTime::from_frames(9000, 48000)); /* In the trim */ @@ -216,7 +220,7 @@ BOOST_AUTO_TEST_CASE (audio_content_fade_out_with_trim) BOOST_AUTO_TEST_CASE (audio_content_fade_out_with_trim_at_44k1) { /* 5s at 44.1kHz */ - auto content = content_factory("test/data/white.wav").front(); + auto content = content_factory("test/data/white.wav")[0]; auto film = new_test_film2("audio_content_fade_out_with_trim_at_44k1", { content }); auto const stream = content->audio->stream(); @@ -248,7 +252,7 @@ BOOST_AUTO_TEST_CASE (audio_content_fade_out_with_trim_at_44k1) BOOST_AUTO_TEST_CASE (audio_content_fades_same_as_video) { - auto content = content_factory("test/data/staircase.mov").front(); + auto content = content_factory("test/data/staircase.mov")[0]; auto film = new_test_film2("audio_content_fades_same_as_video", { content }); content->audio->set_use_same_fades_as_video(true); @@ -259,3 +263,27 @@ BOOST_AUTO_TEST_CASE (audio_content_fades_same_as_video) BOOST_CHECK(content->audio->fade_out() == dcpomatic::ContentTime::from_frames(81 * 48000 / 24, 48000)); } + + +BOOST_AUTO_TEST_CASE(fade_out_works_with_dcp_content) +{ + auto dcp = std::make_shared(TestPaths::private_data() / "JourneyToJah_TLR-1_F_EN-DE-FR_CH_51_2K_LOK_20140225_DGL_SMPTE_OV"); + auto film = new_test_film2("fade_out_works_with_dcp_content", { dcp }); + dcp->audio->set_fade_out(dcpomatic::ContentTime::from_seconds(15)); + make_and_verify_dcp(film); + + int32_t max = 0; + dcp::SoundAsset sound(find_file(film->dir(film->dcp_name()), "pcm_")); + auto reader = sound.start_read(); + for (auto i = 0; i < sound.intrinsic_duration(); ++i) { + auto frame = reader->get_frame(i); + for (auto j = 0; j < frame->channels(); ++j) { + for (auto k = 0; k < frame->samples(); ++k) { + max = std::max(max, frame->get(j, k)); + } + } + } + + BOOST_CHECK(max > 2000); +} +