summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2023-04-02 23:10:39 +0200
committerCarl Hetherington <cth@carlh.net>2023-04-04 23:37:44 +0200
commit3d7d70e0cf79cf5bb68c24d830d4e08e22ca4308 (patch)
treed57833ed66125fe893549f57e00c73b82dc25306 /src
parent2da55dbe6da21975612584365db17db2ae9935b8 (diff)
Add check for mismatched sound channel counts.
Diffstat (limited to 'src')
-rw-r--r--src/verify.cc26
-rw-r--r--src/verify.h6
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)