diff options
| author | Carl Hetherington <cth@carlh.net> | 2021-01-11 21:21:38 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2021-01-17 20:13:23 +0100 |
| commit | 9df315a026b7c30ee416a090c583e01f65b86d03 (patch) | |
| tree | d4e21aea9319a319b7ec691cb8d6f2839a899daf | |
| parent | e668388d1a552c845dbe9ae3cdcdfd979f2da582 (diff) | |
Give simple_{picture,sound} a length parameter and fix crazy implementation of simple_sound().
| -rw-r--r-- | src/sound_asset.h | 4 | ||||
| -rw-r--r-- | test/test.cc | 44 | ||||
| -rw-r--r-- | test/test.h | 6 |
3 files changed, 29 insertions, 25 deletions
diff --git a/src/sound_asset.h b/src/sound_asset.h index d4b41a1a..69f74c6a 100644 --- a/src/sound_asset.h +++ b/src/sound_asset.h @@ -51,7 +51,7 @@ namespace dcp { } extern std::shared_ptr<dcp::SoundAsset> simple_sound ( - boost::filesystem::path path, std::string suffix, dcp::MXFMetadata mxf_meta, std::string language + boost::filesystem::path path, std::string suffix, dcp::MXFMetadata mxf_meta, std::string language, int frames ); @@ -106,7 +106,7 @@ public: private: friend class SoundAssetWriter; friend std::shared_ptr<dcp::SoundAsset> (::simple_sound) ( - boost::filesystem::path path, std::string suffix, dcp::MXFMetadata mxf_meta, std::string language + boost::filesystem::path path, std::string suffix, dcp::MXFMetadata mxf_meta, std::string language, int frames ); std::string pkl_type (Standard standard) const { diff --git a/test/test.cc b/test/test.cc index 8d47dac4..88fdb3a9 100644 --- a/test/test.cc +++ b/test/test.cc @@ -255,7 +255,7 @@ RNGFixer::~RNGFixer () shared_ptr<dcp::MonoPictureAsset> -simple_picture (boost::filesystem::path path, string suffix) +simple_picture (boost::filesystem::path path, string suffix, int frames) { dcp::MXFMetadata mxf_meta; mxf_meta.company_name = "OpenDCP"; @@ -266,7 +266,7 @@ simple_picture (boost::filesystem::path path, string suffix) mp->set_metadata (mxf_meta); shared_ptr<dcp::PictureAssetWriter> picture_writer = mp->start_write (path / dcp::String::compose("video%1.mxf", suffix), false); dcp::ArrayData j2c ("test/data/flat_red.j2c"); - for (int i = 0; i < 24; ++i) { + for (int i = 0; i < frames; ++i) { picture_writer->write (j2c.data (), j2c.size ()); } picture_writer->finalize (); @@ -276,39 +276,43 @@ simple_picture (boost::filesystem::path path, string suffix) shared_ptr<dcp::SoundAsset> -simple_sound (boost::filesystem::path path, string suffix, dcp::MXFMetadata mxf_meta, string language) +simple_sound (boost::filesystem::path path, string suffix, dcp::MXFMetadata mxf_meta, string language, int frames) { + int const sample_rate = 48000; + int const channels = 1; + /* Set a valid language, then overwrite it, so that the language parameter can be badly formed */ - shared_ptr<dcp::SoundAsset> ms (new dcp::SoundAsset(dcp::Fraction(24, 1), 48000, 1, dcp::LanguageTag("en-US"), dcp::SMPTE)); + shared_ptr<dcp::SoundAsset> ms (new dcp::SoundAsset(dcp::Fraction(24, 1), sample_rate, channels, dcp::LanguageTag("en-US"), dcp::SMPTE)); ms->_language = language; ms->set_metadata (mxf_meta); vector<dcp::Channel> active_channels; active_channels.push_back (dcp::LEFT); shared_ptr<dcp::SoundAssetWriter> sound_writer = ms->start_write (path / dcp::String::compose("audio%1.mxf", suffix), active_channels); - SF_INFO info; - info.format = 0; - SNDFILE* sndfile = sf_open ("test/data/1s_24-bit_48k_silence.wav", SFM_READ, &info); - BOOST_CHECK (sndfile); - float buffer[4096*6]; - float* channels[1]; - channels[0] = buffer; - while (true) { - sf_count_t N = sf_readf_float (sndfile, buffer, 4096); - sound_writer->write (channels, N); - if (N < 4096) { - break; - } + int const samples_per_frame = 48000 / 24; + + float* silence[channels]; + for (auto i = 0; i < channels; ++i) { + silence[i] = new float[samples_per_frame]; + memset (silence[i], 0, samples_per_frame * sizeof(float)); + } + + for (auto i = 0; i < frames; ++i) { + sound_writer->write (silence, samples_per_frame); } sound_writer->finalize (); + for (auto i = 0; i < channels; ++i) { + delete[] silence[i]; + } + return ms; } shared_ptr<dcp::DCP> -make_simple (boost::filesystem::path path, int reels) +make_simple (boost::filesystem::path path, int reels, int frames) { /* Some known metadata */ dcp::MXFMetadata mxf_meta; @@ -331,8 +335,8 @@ make_simple (boost::filesystem::path path, int reels) for (int i = 0; i < reels; ++i) { string suffix = reels == 1 ? "" : dcp::String::compose("%1", i); - shared_ptr<dcp::MonoPictureAsset> mp = simple_picture (path, suffix); - shared_ptr<dcp::SoundAsset> ms = simple_sound (path, suffix, mxf_meta, "en-US"); + shared_ptr<dcp::MonoPictureAsset> mp = simple_picture (path, suffix, frames); + shared_ptr<dcp::SoundAsset> ms = simple_sound (path, suffix, mxf_meta, "en-US", frames); cpl->add (shared_ptr<dcp::Reel> ( new dcp::Reel ( diff --git a/test/test.h b/test/test.h index fb299d1d..6a6a57d2 100644 --- a/test/test.h +++ b/test/test.h @@ -43,10 +43,10 @@ extern boost::filesystem::path xsd_test; extern void check_xml (xmlpp::Element* ref, xmlpp::Element* test, std::vector<std::string> ignore_tags, bool ignore_whitespace = false); extern void check_xml (std::string ref, std::string test, std::vector<std::string> ignore, bool ignore_whitespace = false); extern void check_file (boost::filesystem::path ref, boost::filesystem::path check); -extern std::shared_ptr<dcp::MonoPictureAsset> simple_picture (boost::filesystem::path path, std::string suffix); -extern std::shared_ptr<dcp::SoundAsset> simple_sound (boost::filesystem::path path, std::string suffix, dcp::MXFMetadata mxf_meta, std::string language); +extern std::shared_ptr<dcp::MonoPictureAsset> simple_picture (boost::filesystem::path path, std::string suffix, int frames = 24); +extern std::shared_ptr<dcp::SoundAsset> simple_sound (boost::filesystem::path path, std::string suffix, dcp::MXFMetadata mxf_meta, std::string language, int frames = 24); extern std::shared_ptr<dcp::Subtitle> simple_subtitle (); -extern std::shared_ptr<dcp::DCP> make_simple (boost::filesystem::path path, int reels = 1); +extern std::shared_ptr<dcp::DCP> make_simple (boost::filesystem::path path, int reels = 1, int frames = 24); extern std::shared_ptr<dcp::DCP> make_simple_with_interop_subs (boost::filesystem::path path); extern std::shared_ptr<dcp::DCP> make_simple_with_smpte_subs (boost::filesystem::path path); extern std::shared_ptr<dcp::DCP> make_simple_with_interop_ccaps (boost::filesystem::path path); |
