diff options
| author | Carl Hetherington <cth@carlh.net> | 2026-02-08 00:52:27 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2026-02-12 21:01:59 +0100 |
| commit | 7b19d27983cb8078e8b35407a25e62da4ec687fe (patch) | |
| tree | 1d038a938e81eb452dc3c8c970d3e54edd307734 /src/lib/dcp_decoder.cc | |
| parent | 55c53dd8621a30d3c39858216da6b5d2e6445fb0 (diff) | |
Re-use assets verbatim if they do not need to change (#448).
Diffstat (limited to 'src/lib/dcp_decoder.cc')
| -rw-r--r-- | src/lib/dcp_decoder.cc | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/src/lib/dcp_decoder.cc b/src/lib/dcp_decoder.cc index 27d0f3a94..59dd7c008 100644 --- a/src/lib/dcp_decoder.cc +++ b/src/lib/dcp_decoder.cc @@ -28,6 +28,7 @@ #include "dcp_decoder.h" #include "dcpomatic_log.h" #include "digester.h" +#include "film.h" #include "ffmpeg_image_proxy.h" #include "frame_interval_checker.h" #include "image.h" @@ -146,6 +147,12 @@ DCPDecoder::DCPDecoder(shared_ptr<const Film> film, shared_ptr<const DCPContent> _font_id_allocator.add_fonts_from_reels(_reels); _font_id_allocator.allocate(); + + _can_reuse_video = _dcp_content->can_reuse_video(film) && !film->reencode_j2k(); + _can_reuse_audio = _dcp_content->can_reuse_audio(film); + for (int i = 0; i < static_cast<int>(TextType::COUNT); ++i) { + _can_reuse_text[i] = _dcp_content->can_reuse_text(film, static_cast<TextType>(i)); + } } @@ -176,7 +183,7 @@ DCPDecoder::pass() */ pass_texts(_next, picture_asset->size()); - if ((_j2k_mono_reader || _j2k_stereo_reader || _mpeg2_mono_reader) && (_decode_reusable || !_dcp_content->reference_video())) { + if ((_j2k_mono_reader || _j2k_stereo_reader || _mpeg2_mono_reader) && (_decode_reusable || !_can_reuse_video)) { auto const entry_point = (*_reel)->main_picture()->entry_point().get_value_or(0); if (_j2k_mono_reader) { video->emit( @@ -233,7 +240,7 @@ DCPDecoder::pass() } } - if (_sound_reader && (_decode_reusable || !_dcp_content->reference_audio())) { + if (_sound_reader && (_decode_reusable || !_can_reuse_audio)) { auto const entry_point = (*_reel)->main_sound()->entry_point().get_value_or(0); auto sf = _sound_reader->get_frame(entry_point + frame); auto from = sf->data(); @@ -331,7 +338,7 @@ DCPDecoder::pass_texts( auto const asset = reel_asset->asset(); auto const entry_point = reel_asset->entry_point().get_value_or(0); - if (_decode_reusable || !_dcp_content->reference_text(type)) { + if (_decode_reusable || !_can_reuse_text[type]) { auto subs = asset->texts_during( dcp::Time(entry_point + frame, vfr, vfr), dcp::Time(entry_point + frame + 1, vfr, vfr), @@ -522,10 +529,10 @@ DCPDecoder::set_decode_reusable(bool r) _decode_reusable = r; if (video) { - video->set_ignore(_dcp_content->reference_video() && !_decode_reusable); + video->set_ignore(_can_reuse_video && !_decode_reusable); } if (audio) { - audio->set_ignore(_dcp_content->reference_audio() && !_decode_reusable); + audio->set_ignore(_can_reuse_audio && !_decode_reusable); } } |
