From a498b8819ab431ecc2aac058b1aadb9e15d396ac Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Fri, 4 Jun 2021 22:30:25 +0200 Subject: [PATCH] Ignore HMAC discrepencies when reading DCPs. --- cscript | 4 ++-- src/lib/atmos_mxf_decoder.cc | 1 + src/lib/dcp_decoder.cc | 4 ++++ src/lib/dcp_examiner.cc | 16 ++++++++++++---- src/lib/video_mxf_decoder.cc | 2 ++ 5 files changed, 21 insertions(+), 6 deletions(-) diff --git a/cscript b/cscript index 0045d80ef..0f38bb829 100644 --- a/cscript +++ b/cscript @@ -388,8 +388,8 @@ def dependencies(target, options): # Use distro-provided FFmpeg on Arch deps = [] - deps.append(('libdcp', '42feb7f')) - deps.append(('libsub', 'f3d7335')) + deps.append(('libdcp', 'a5bd2e9')) + deps.append(('libsub', '44cf236')) deps.append(('leqm-nrt', '93ae9e6')) deps.append(('rtaudio', 'f619b76')) # We get our OpenSSL libraries from the environment, but we diff --git a/src/lib/atmos_mxf_decoder.cc b/src/lib/atmos_mxf_decoder.cc index 9fcd9d2a6..19a19a8c4 100644 --- a/src/lib/atmos_mxf_decoder.cc +++ b/src/lib/atmos_mxf_decoder.cc @@ -40,6 +40,7 @@ AtmosMXFDecoder::AtmosMXFDecoder (std::shared_ptr film, std::shared_ auto asset = make_shared(_content->path(0)); _reader = asset->start_read (); + _reader->set_check_hmac (false); _metadata = AtmosMetadata (asset); } diff --git a/src/lib/dcp_decoder.cc b/src/lib/dcp_decoder.cc index f9b0d9a57..9de63dc93 100644 --- a/src/lib/dcp_decoder.cc +++ b/src/lib/dcp_decoder.cc @@ -363,9 +363,11 @@ DCPDecoder::get_readers () DCPOMATIC_ASSERT (mono || stereo); if (mono) { _mono_reader = mono->start_read (); + _mono_reader->set_check_hmac (false); _stereo_reader.reset (); } else { _stereo_reader = stereo->start_read (); + _stereo_reader->set_check_hmac (false); _mono_reader.reset (); } } else { @@ -375,6 +377,7 @@ DCPDecoder::get_readers () if ((*_reel)->main_sound()) { _sound_reader = (*_reel)->main_sound()->asset()->start_read (); + _sound_reader->set_check_hmac (false); } else { _sound_reader.reset (); } @@ -382,6 +385,7 @@ DCPDecoder::get_readers () if ((*_reel)->atmos()) { shared_ptr asset = (*_reel)->atmos()->asset(); _atmos_reader = asset->start_read(); + _atmos_reader->set_check_hmac (false); _atmos_metadata = AtmosMetadata (asset); } else { _atmos_reader.reset (); diff --git a/src/lib/dcp_examiner.cc b/src/lib/dcp_examiner.cc index b431cec26..ffdcad1c1 100644 --- a/src/lib/dcp_examiner.cc +++ b/src/lib/dcp_examiner.cc @@ -241,9 +241,13 @@ DCPExaminer::DCPExaminer (shared_ptr content, bool tolerant) auto stereo = dynamic_pointer_cast(pic); if (mono) { - mono->start_read()->get_frame(0)->xyz_image (); + auto reader = mono->start_read(); + reader->set_check_hmac (false); + reader->get_frame(0)->xyz_image(); } else { - stereo->start_read()->get_frame(0)->xyz_image(dcp::Eye::LEFT); + auto reader = stereo->start_read(); + reader->set_check_hmac (false); + reader->get_frame(0)->xyz_image(dcp::Eye::LEFT); } if (i->main_sound()) { @@ -251,7 +255,9 @@ DCPExaminer::DCPExaminer (shared_ptr content, bool tolerant) if (sound->encrypted() && !sound->key()) { _kdm_valid = false; } - i->main_sound()->asset()->start_read()->get_frame(0); + auto reader = i->main_sound()->asset()->start_read(); + reader->set_check_hmac (false); + reader->get_frame(0); } if (i->main_subtitle()) { @@ -268,7 +274,9 @@ DCPExaminer::DCPExaminer (shared_ptr content, bool tolerant) if (atmos->encrypted() && !atmos->key()) { _kdm_valid = false; } - atmos->start_read()->get_frame(0); + auto reader = atmos->start_read(); + reader->set_check_hmac (false); + reader->get_frame(0); } } } catch (dcp::ReadError& e) { diff --git a/src/lib/video_mxf_decoder.cc b/src/lib/video_mxf_decoder.cc index 39c4a37fb..92cab0259 100644 --- a/src/lib/video_mxf_decoder.cc +++ b/src/lib/video_mxf_decoder.cc @@ -67,9 +67,11 @@ VideoMXFDecoder::VideoMXFDecoder (shared_ptr film, shared_ptrstart_read (); + _mono_reader->set_check_hmac (false); _size = mono->size (); } else { _stereo_reader = stereo->start_read (); + _stereo_reader->set_check_hmac (false); _size = stereo->size (); } } -- 2.30.2