diff options
Diffstat (limited to 'src/lib/dcp_decoder.cc')
| -rw-r--r-- | src/lib/dcp_decoder.cc | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/src/lib/dcp_decoder.cc b/src/lib/dcp_decoder.cc index ab724cd6c..30e337252 100644 --- a/src/lib/dcp_decoder.cc +++ b/src/lib/dcp_decoder.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2014-2019 Carl Hetherington <cth@carlh.net> + Copyright (C) 2014-2020 Carl Hetherington <cth@carlh.net> This file is part of DCP-o-matic. @@ -18,6 +18,7 @@ */ +#include "atmos_decoder.h" #include "dcp_decoder.h" #include "dcp_content.h" #include "audio_content.h" @@ -47,6 +48,7 @@ #include <dcp/sound_asset_reader.h> #include <dcp/subtitle_image.h> #include <dcp/decrypted_kdm.h> +#include <dcp/reel_atmos_asset.h> #include <boost/foreach.hpp> #include <iostream> @@ -76,6 +78,9 @@ DCPDecoder::DCPDecoder (shared_ptr<const Film> film, shared_ptr<const DCPContent /* XXX: this time here should be the time of the first subtitle, not 0 */ text.push_back (shared_ptr<TextDecoder> (new TextDecoder (this, i, ContentTime()))); } + if (c->atmos) { + atmos.reset (new AtmosDecoder (this, c)); + } } /* We try to avoid re-scanning the DCP's files every time we make a new DCPDecoder; we do this @@ -215,6 +220,11 @@ DCPDecoder::pass () audio->emit (film(), _dcp_content->audio->stream(), data, ContentTime::from_frames (_offset, vfr) + _next); } + if (_atmos_reader) { + DCPOMATIC_ASSERT (_atmos_metadata); + atmos->emit (film(), _atmos_reader->get_frame(frame), frame, *_atmos_metadata); + } + _next += ContentTime::from_frames (1, vfr); if ((*_reel)->main_picture ()) { @@ -341,6 +351,7 @@ DCPDecoder::get_readers () _mono_reader.reset (); _stereo_reader.reset (); _sound_reader.reset (); + _atmos_reader.reset (); return; } @@ -366,6 +377,15 @@ DCPDecoder::get_readers () } else { _sound_reader.reset (); } + + if ((*_reel)->atmos()) { + shared_ptr<dcp::AtmosAsset> asset = (*_reel)->atmos()->asset(); + _atmos_reader = asset->start_read(); + _atmos_metadata = AtmosMetadata (asset); + } else { + _atmos_reader.reset (); + _atmos_metadata = boost::none; + } } void |
