summaryrefslogtreecommitdiff
path: root/src/lib/dcp_decoder.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2017-08-03 17:54:06 +0100
committerCarl Hetherington <cth@carlh.net>2017-08-14 21:07:49 +0100
commit0253b4e45c71a1c2e2a8bffaf1c3cb84a0a3e41a (patch)
tree85ca9af20c85ca04a221ca9023c0d2980ffeeca7 /src/lib/dcp_decoder.cc
parente952a7b0681d1ad2fc6ebcd0cd7231bf59bbe043 (diff)
Basics of forced reduction of JPEG2000 decode resolution.
Diffstat (limited to 'src/lib/dcp_decoder.cc')
-rw-r--r--src/lib/dcp_decoder.cc32
1 files changed, 29 insertions, 3 deletions
diff --git a/src/lib/dcp_decoder.cc b/src/lib/dcp_decoder.cc
index c7294bda7..ef40f2ec7 100644
--- a/src/lib/dcp_decoder.cc
+++ b/src/lib/dcp_decoder.cc
@@ -48,6 +48,7 @@ using std::list;
using std::cout;
using boost::shared_ptr;
using boost::dynamic_pointer_cast;
+using boost::optional;
DCPDecoder::DCPDecoder (shared_ptr<const DCPContent> c, shared_ptr<Log> log)
: DCP (c)
@@ -100,20 +101,39 @@ DCPDecoder::pass ()
if (_mono_reader) {
video->emit (
shared_ptr<ImageProxy> (
- new J2KImageProxy (_mono_reader->get_frame (entry_point + frame), asset->size(), AV_PIX_FMT_XYZ12LE)
+ new J2KImageProxy (
+ _mono_reader->get_frame (entry_point + frame),
+ asset->size(),
+ AV_PIX_FMT_XYZ12LE,
+ _forced_reduction
+ )
),
_offset + frame
);
} else {
video->emit (
shared_ptr<ImageProxy> (
- new J2KImageProxy (_stereo_reader->get_frame (entry_point + frame), asset->size(), dcp::EYE_LEFT, AV_PIX_FMT_XYZ12LE)),
+ new J2KImageProxy (
+ _stereo_reader->get_frame (entry_point + frame),
+ asset->size(),
+ dcp::EYE_LEFT,
+ AV_PIX_FMT_XYZ12LE,
+ _forced_reduction
+ )
+ ),
_offset + frame
);
video->emit (
shared_ptr<ImageProxy> (
- new J2KImageProxy (_stereo_reader->get_frame (entry_point + frame), asset->size(), dcp::EYE_RIGHT, AV_PIX_FMT_XYZ12LE)),
+ new J2KImageProxy (
+ _stereo_reader->get_frame (entry_point + frame),
+ asset->size(),
+ dcp::EYE_RIGHT,
+ AV_PIX_FMT_XYZ12LE,
+ _forced_reduction
+ )
+ ),
_offset + frame
);
}
@@ -234,3 +254,9 @@ DCPDecoder::set_decode_referenced ()
{
_decode_referenced = true;
}
+
+void
+DCPDecoder::set_forced_reduction (optional<int> reduction)
+{
+ _forced_reduction = reduction;
+}