summaryrefslogtreecommitdiff
path: root/src/lib/dcp_decoder.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2026-02-14 18:39:23 +0100
committerCarl Hetherington <cth@carlh.net>2026-02-14 18:39:23 +0100
commit6d1232abc853ea3771c35da6d3ff091b66baa1f2 (patch)
tree30b9e5275b30f8927a90d3db388d8ea10f0b6b24 /src/lib/dcp_decoder.cc
parenta680098a14cf40172370fde12c86691b82a36051 (diff)
FIXME: fix bugs.448-re-use
Diffstat (limited to 'src/lib/dcp_decoder.cc')
-rw-r--r--src/lib/dcp_decoder.cc17
1 files changed, 9 insertions, 8 deletions
diff --git a/src/lib/dcp_decoder.cc b/src/lib/dcp_decoder.cc
index 59dd7c008..f6071a671 100644
--- a/src/lib/dcp_decoder.cc
+++ b/src/lib/dcp_decoder.cc
@@ -148,10 +148,11 @@ 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);
+ _reuse_video = _dcp_content->reference_video() || _dcp_content->can_reuse_video(film, ReuseType::COPY);
+ _reuse_audio = _dcp_content->reference_audio() || _dcp_content->can_reuse_audio(film, ReuseType::COPY);
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));
+ auto const type = static_cast<TextType>(i);
+ _reuse_text[i] = _dcp_content->reference_text(type) || _dcp_content->can_reuse_text(film, type, ReuseType::COPY);
}
}
@@ -183,7 +184,7 @@ DCPDecoder::pass()
*/
pass_texts(_next, picture_asset->size());
- if ((_j2k_mono_reader || _j2k_stereo_reader || _mpeg2_mono_reader) && (_decode_reusable || !_can_reuse_video)) {
+ if ((_j2k_mono_reader || _j2k_stereo_reader || _mpeg2_mono_reader) && (_decode_reusable || !_reuse_video)) {
auto const entry_point = (*_reel)->main_picture()->entry_point().get_value_or(0);
if (_j2k_mono_reader) {
video->emit(
@@ -240,7 +241,7 @@ DCPDecoder::pass()
}
}
- if (_sound_reader && (_decode_reusable || !_can_reuse_audio)) {
+ if (_sound_reader && (_decode_reusable || !_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();
@@ -338,7 +339,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 || !_can_reuse_text[type]) {
+ if (_decode_reusable || !_reuse_text[type]) {
auto subs = asset->texts_during(
dcp::Time(entry_point + frame, vfr, vfr),
dcp::Time(entry_point + frame + 1, vfr, vfr),
@@ -529,10 +530,10 @@ DCPDecoder::set_decode_reusable(bool r)
_decode_reusable = r;
if (video) {
- video->set_ignore(_can_reuse_video && !_decode_reusable);
+ video->set_ignore(_reuse_video && !_decode_reusable);
}
if (audio) {
- audio->set_ignore(_can_reuse_audio && !_decode_reusable);
+ audio->set_ignore(_reuse_audio && !_decode_reusable);
}
}