Give simple_{picture,sound} a length parameter and fix crazy implementation of simple...
authorCarl Hetherington <cth@carlh.net>
Mon, 11 Jan 2021 20:21:38 +0000 (21:21 +0100)
committerCarl Hetherington <cth@carlh.net>
Sun, 17 Jan 2021 19:13:23 +0000 (20:13 +0100)
src/sound_asset.h
test/test.cc
test/test.h

index d4b41a1a47f6f41e93091248e84a80d4a00d6d3c..69f74c6aa766b3651ddb9e9abbaf0ab924720c51 100644 (file)
@@ -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 {
index 8d47dac4df0c03e70b06e6ef9b42e5aa15bb65cd..88fdb3a9b136499dca1e516efb4491b5d3ddb106 100644 (file)
@@ -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 (
index fb299d1de83b54b00fe0a4eaa2d6d61c34773193..6a6a57d2e4c8422c56b7f109cba4b96f4d000307 100644 (file)
@@ -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);