X-Git-Url: https://main.carlh.net/gitweb/?p=dcpomatic.git;a=blobdiff_plain;f=src%2Flib%2Fdcp_decoder.cc;h=5060b9a7f6ba2634d116bb1d4c0bb79e214ba450;hp=053ff4f68b1198d33d760ffd55d25860e5f852c6;hb=aeb835a18c8df347e0ed68fb24631b320abeb611;hpb=a0d1dd5d91c81ec9907cbc7b890905c463c18f62 diff --git a/src/lib/dcp_decoder.cc b/src/lib/dcp_decoder.cc index 053ff4f68..5060b9a7f 100644 --- a/src/lib/dcp_decoder.cc +++ b/src/lib/dcp_decoder.cc @@ -23,6 +23,7 @@ #include "image.h" #include "config.h" #include +#include #include #include #include @@ -34,22 +35,23 @@ #include #include #include +#include using std::list; using std::cout; using boost::shared_ptr; using boost::dynamic_pointer_cast; -DCPDecoder::DCPDecoder (shared_ptr c) +DCPDecoder::DCPDecoder (shared_ptr c, bool fast) : VideoDecoder (c) - , AudioDecoder (c) + , AudioDecoder (c, fast) , SubtitleDecoder (c) , _dcp_content (c) { dcp::DCP dcp (c->directory ()); dcp.read (); if (c->kdm ()) { - dcp.add (dcp::DecryptedKDM (c->kdm().get (), Config::instance()->decryption_private_key ())); + dcp.add (dcp::DecryptedKDM (c->kdm().get (), Config::instance()->decryption_chain()->key().get ())); } DCPOMATIC_ASSERT (dcp.cpls().size() == 1); _reels = dcp.cpls().front()->reels (); @@ -66,7 +68,7 @@ DCPDecoder::pass () double const vfr = _dcp_content->video_frame_rate (); int64_t const frame = _next.frames_round (vfr); - if ((*_reel)->main_picture ()) { + if ((*_reel)->main_picture () && !_dcp_content->reference_video ()) { shared_ptr asset = (*_reel)->main_picture()->asset (); shared_ptr mono = dynamic_pointer_cast (asset); shared_ptr stereo = dynamic_pointer_cast (asset); @@ -86,7 +88,7 @@ DCPDecoder::pass () } } - if ((*_reel)->main_sound ()) { + if ((*_reel)->main_sound () && !_dcp_content->reference_audio ()) { int64_t const entry_point = (*_reel)->main_sound()->entry_point (); shared_ptr sf = (*_reel)->main_sound()->asset()->get_frame (entry_point + frame); uint8_t const * from = sf->data (); @@ -104,7 +106,7 @@ DCPDecoder::pass () audio (_dcp_content->audio_stream(), data, _next); } - if ((*_reel)->main_subtitle ()) { + if ((*_reel)->main_subtitle () && !_dcp_content->reference_subtitle ()) { int64_t const entry_point = (*_reel)->main_subtitle()->entry_point (); list subs = (*_reel)->main_subtitle()->subtitle_asset()->subtitles_during ( dcp::Time (entry_point + frame, vfr, vfr),