diff options
| author | Carl Hetherington <cth@carlh.net> | 2023-04-02 23:10:39 +0200 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2023-04-04 23:37:44 +0200 |
| commit | 3d7d70e0cf79cf5bb68c24d830d4e08e22ca4308 (patch) | |
| tree | d57833ed66125fe893549f57e00c73b82dc25306 /src | |
| parent | 2da55dbe6da21975612584365db17db2ae9935b8 (diff) | |
Add check for mismatched sound channel counts.
Diffstat (limited to 'src')
| -rw-r--r-- | src/verify.cc | 26 | ||||
| -rw-r--r-- | src/verify.h | 6 |
2 files changed, 23 insertions, 9 deletions
diff --git a/src/verify.cc b/src/verify.cc index 7cc6d357..1cab0423 100644 --- a/src/verify.cc +++ b/src/verify.cc @@ -572,6 +572,13 @@ verify_main_picture_asset ( } +struct State +{ + boost::optional<string> subtitle_language; + boost::optional<int> audio_channels; +}; + + static void verify_main_sound_asset ( shared_ptr<const DCP> dcp, @@ -579,7 +586,8 @@ verify_main_sound_asset ( function<void (string, optional<boost::filesystem::path>)> stage, function<void (float)> progress, VerificationOptions options, - vector<VerificationNote>& notes + vector<VerificationNote>& notes, + State& state ) { auto asset = reel_asset->asset(); @@ -600,6 +608,12 @@ verify_main_sound_asset ( } } + if (!state.audio_channels) { + state.audio_channels = asset->channels(); + } else if (*state.audio_channels != asset->channels()) { + notes.push_back({ VerificationNote::Type::ERROR, VerificationNote::Code::MISMATCHED_SOUND_CHANNEL_COUNTS, file }); + } + stage ("Checking sound asset metadata", file); if (auto lang = asset->language()) { @@ -643,12 +657,6 @@ verify_closed_caption_reel (shared_ptr<const ReelClosedCaptionAsset> reel_asset, } -struct State -{ - boost::optional<string> subtitle_language; -}; - - /** Verify stuff that is common to both subtitles and closed captions */ void verify_smpte_timed_text_asset ( @@ -1385,7 +1393,7 @@ verify_reel( } if (reel->main_sound() && reel->main_sound()->asset_ref().resolved()) { - verify_main_sound_asset(dcp, reel->main_sound(), stage, progress, options, notes); + verify_main_sound_asset(dcp, reel->main_sound(), stage, progress, options, notes, state); } if (reel->main_subtitle()) { @@ -1986,6 +1994,8 @@ dcp::note_to_string (VerificationNote note) return String::compose("The subtitle asset %1 has no subtitles", note.note().get()); case VerificationNote::Code::INVALID_SUBTITLE_ISSUE_DATE: return String::compose("<IssueDate> has an invalid value: %1", note.note().get()); + case VerificationNote::Code::MISMATCHED_SOUND_CHANNEL_COUNTS: + return String::compose("The sound assets do not all have the same channel count; the first to differ is %1", note.file()->filename()); } return ""; diff --git a/src/verify.h b/src/verify.h index 77fc28b3..d05c92eb 100644 --- a/src/verify.h +++ b/src/verify.h @@ -421,7 +421,11 @@ public: * specifications require it and their QC will fail DCPs that don't have it. * note contains the incorrect <IssueDate> */ - INVALID_SUBTITLE_ISSUE_DATE + INVALID_SUBTITLE_ISSUE_DATE, + /** The sound assets in the CPL do not have the same audio channel count. + * file contains the filename of the first asset to differ + */ + MISMATCHED_SOUND_CHANNEL_COUNTS }; VerificationNote (Type type, Code code) |
