summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2021-01-13 02:16:37 +0100
committerCarl Hetherington <cth@carlh.net>2021-01-17 20:13:23 +0100
commit33942a6c7ab40dfe1ccb87e80497fc0b5390b76a (patch)
tree8e77c3aa3927fe9d186d921ed8a0a8e0dd96d974
parent5c57052dfeda55dc218001b089ebcdaaf6bedc3b (diff)
Bv2.1 7.3: audio sample rate must be 48kHz.
-rw-r--r--src/sound_asset.h4
-rw-r--r--src/verify.cc9
-rw-r--r--src/verify.h2
-rw-r--r--test/test.cc5
-rw-r--r--test/test.h2
-rw-r--r--test/verify_test.cc21
6 files changed, 37 insertions, 6 deletions
diff --git a/src/sound_asset.h b/src/sound_asset.h
index 69f74c6a..cc8f2ce0 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, int frames
+ boost::filesystem::path path, std::string suffix, dcp::MXFMetadata mxf_meta, std::string language, int frames, int sample_rate
);
@@ -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, int frames
+ boost::filesystem::path path, std::string suffix, dcp::MXFMetadata mxf_meta, std::string language, int frames, int sample_rate
);
std::string pkl_type (Standard standard) const {
diff --git a/src/verify.cc b/src/verify.cc
index d1b4988a..b6498891 100644
--- a/src/verify.cc
+++ b/src/verify.cc
@@ -616,6 +616,13 @@ verify_main_sound_asset (
stage ("Checking sound asset metadata", asset->file());
verify_language_tag (asset->language(), notes);
+ if (asset->sampling_rate() != 48000) {
+ notes.push_back (
+ VerificationNote(
+ VerificationNote::VERIFY_BV21_ERROR, VerificationNote::INVALID_SOUND_FRAME_RATE, *asset->file()
+ )
+ );
+ }
}
@@ -1210,6 +1217,8 @@ dcp::note_to_string (dcp::VerificationNote note)
return "There are more than 3 closed caption lines in at least one place, which is disallowed by Bv2.1";
case dcp::VerificationNote::CLOSED_CAPTION_LINE_TOO_LONG:
return "There are more than 32 characters in at least one closed caption line, which is disallowed by Bv2.1";
+ case dcp::VerificationNote::INVALID_SOUND_FRAME_RATE:
+ return "A sound asset has a sampling rate other than 48kHz, which is disallowed by Bv2.1";
}
return "";
diff --git a/src/verify.h b/src/verify.h
index 0398c909..fa16dfa1 100644
--- a/src/verify.h
+++ b/src/verify.h
@@ -131,6 +131,8 @@ public:
TOO_MANY_CLOSED_CAPTION_LINES,
/** There are more than 32 characters in at least one closed caption line [Bv2.1_7.2.6] */
CLOSED_CAPTION_LINE_TOO_LONG,
+ /** The audio sampling rate must be 48kHz [Bv2.1_7.3] */
+ INVALID_SOUND_FRAME_RATE,
};
VerificationNote (Type type, Code code)
diff --git a/test/test.cc b/test/test.cc
index 88fdb3a9..f110c9cb 100644
--- a/test/test.cc
+++ b/test/test.cc
@@ -276,9 +276,8 @@ simple_picture (boost::filesystem::path path, string suffix, int frames)
shared_ptr<dcp::SoundAsset>
-simple_sound (boost::filesystem::path path, string suffix, dcp::MXFMetadata mxf_meta, string language, int frames)
+simple_sound (boost::filesystem::path path, string suffix, dcp::MXFMetadata mxf_meta, string language, int frames, int sample_rate)
{
- 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 */
@@ -289,7 +288,7 @@ simple_sound (boost::filesystem::path path, string suffix, dcp::MXFMetadata mxf_
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);
- int const samples_per_frame = 48000 / 24;
+ int const samples_per_frame = sample_rate / 24;
float* silence[channels];
for (auto i = 0; i < channels; ++i) {
diff --git a/test/test.h b/test/test.h
index 6a6a57d2..5ed424bc 100644
--- a/test/test.h
+++ b/test/test.h
@@ -44,7 +44,7 @@ extern void check_xml (xmlpp::Element* ref, xmlpp::Element* test, std::vector<st
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, 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::SoundAsset> simple_sound (boost::filesystem::path path, std::string suffix, dcp::MXFMetadata mxf_meta, std::string language, int frames = 24, int sample_rate = 48000);
extern std::shared_ptr<dcp::Subtitle> simple_subtitle ();
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);
diff --git a/test/verify_test.cc b/test/verify_test.cc
index 1877e284..1789aafe 100644
--- a/test/verify_test.cc
+++ b/test/verify_test.cc
@@ -1607,3 +1607,24 @@ BOOST_AUTO_TEST_CASE (verify_closed_caption_lines_too_long1)
check_verify_result ({dir}, {{ dcp::VerificationNote::VERIFY_BV21_ERROR, dcp::VerificationNote::CLOSED_CAPTION_LINE_TOO_LONG }});
}
+
+BOOST_AUTO_TEST_CASE (verify_sound_sampling_rate_must_be_48k)
+{
+ boost::filesystem::path const dir("verify_sound_sampling_rate_must_be_48k");
+ prepare_directory (dir);
+
+ auto picture = simple_picture (dir, "foo");
+ auto reel_picture = make_shared<dcp::ReelMonoPictureAsset>(picture, 0);
+ auto reel = make_shared<dcp::Reel>();
+ reel->add (reel_picture);
+ auto sound = simple_sound (dir, "foo", dcp::MXFMetadata(), "de-DE", 24, 96000);
+ auto reel_sound = make_shared<dcp::ReelSoundAsset>(sound, 0);
+ reel->add (reel_sound);
+ auto cpl = make_shared<dcp::CPL>("hello", dcp::FEATURE);
+ cpl->add (reel);
+ auto dcp = make_shared<dcp::DCP>(dir);
+ dcp->add (cpl);
+ dcp->write_xml (dcp::SMPTE);
+
+ check_verify_result ({dir}, {{ dcp::VerificationNote::VERIFY_BV21_ERROR, dcp::VerificationNote::INVALID_SOUND_FRAME_RATE }});
+}