diff options
| author | Carl Hetherington <cth@carlh.net> | 2018-01-02 21:09:36 +0000 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2018-01-02 21:09:36 +0000 |
| commit | 2537a2d959a5872c2e75b322022a7679d24c7e60 (patch) | |
| tree | e0180a52fc2682676736c59c5b4f1b6dd3e6fe71 /src/lib/video_decoder.cc | |
| parent | e7adac0f25e0d2a38be56e4477ed78b8b34b8b34 (diff) | |
A previous commit took care to make Decoder::position() not be updated
if the data that was emitted from the decoder was not taken by the player.
This means that when the decoder moves into its end trim the position will
stay where it is (since the player does not take the data).
I can't see the point of doing this; the only use of Decoder::position()
is to decide what to pass() next (I think).
It is also inconvenient because we would like to check Decoder::position()
to decide whether to stop passing a decoder since it's in its end trim
(not doing this causes #1154).
Diffstat (limited to 'src/lib/video_decoder.cc')
| -rw-r--r-- | src/lib/video_decoder.cc | 26 |
1 files changed, 11 insertions, 15 deletions
diff --git a/src/lib/video_decoder.cc b/src/lib/video_decoder.cc index b9ead52c8..3625e074f 100644 --- a/src/lib/video_decoder.cc +++ b/src/lib/video_decoder.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2012-2016 Carl Hetherington <cth@carlh.net> + Copyright (C) 2012-2018 Carl Hetherington <cth@carlh.net> This file is part of DCP-o-matic. @@ -59,11 +59,9 @@ VideoDecoder::emit (shared_ptr<const ImageProxy> image, Frame frame) return; } - optional<bool> taken; - switch (_content->video->frame_type ()) { case VIDEO_FRAME_TYPE_2D: - taken = Data (ContentVideo (image, frame, EYES_BOTH, PART_WHOLE)); + Data (ContentVideo (image, frame, EYES_BOTH, PART_WHOLE)); break; case VIDEO_FRAME_TYPE_3D: { @@ -71,35 +69,33 @@ VideoDecoder::emit (shared_ptr<const ImageProxy> image, Frame frame) frame this one is. */ bool const same = (_last_emitted && _last_emitted.get() == frame); - taken = Data (ContentVideo (image, frame, same ? EYES_RIGHT : EYES_LEFT, PART_WHOLE)); + Data (ContentVideo (image, frame, same ? EYES_RIGHT : EYES_LEFT, PART_WHOLE)); _last_emitted = frame; break; } case VIDEO_FRAME_TYPE_3D_ALTERNATE: - taken = Data (ContentVideo (image, frame / 2, (frame % 2) ? EYES_RIGHT : EYES_LEFT, PART_WHOLE)); + Data (ContentVideo (image, frame / 2, (frame % 2) ? EYES_RIGHT : EYES_LEFT, PART_WHOLE)); frame /= 2; break; case VIDEO_FRAME_TYPE_3D_LEFT_RIGHT: - taken = Data (ContentVideo (image, frame, EYES_LEFT, PART_LEFT_HALF)); - taken = Data (ContentVideo (image, frame, EYES_RIGHT, PART_RIGHT_HALF)); + Data (ContentVideo (image, frame, EYES_LEFT, PART_LEFT_HALF)); + Data (ContentVideo (image, frame, EYES_RIGHT, PART_RIGHT_HALF)); break; case VIDEO_FRAME_TYPE_3D_TOP_BOTTOM: - taken = Data (ContentVideo (image, frame, EYES_LEFT, PART_TOP_HALF)); - taken = Data (ContentVideo (image, frame, EYES_RIGHT, PART_BOTTOM_HALF)); + Data (ContentVideo (image, frame, EYES_LEFT, PART_TOP_HALF)); + Data (ContentVideo (image, frame, EYES_RIGHT, PART_BOTTOM_HALF)); break; case VIDEO_FRAME_TYPE_3D_LEFT: - taken = Data (ContentVideo (image, frame, EYES_LEFT, PART_WHOLE)); + Data (ContentVideo (image, frame, EYES_LEFT, PART_WHOLE)); break; case VIDEO_FRAME_TYPE_3D_RIGHT: - taken = Data (ContentVideo (image, frame, EYES_RIGHT, PART_WHOLE)); + Data (ContentVideo (image, frame, EYES_RIGHT, PART_WHOLE)); break; default: DCPOMATIC_ASSERT (false); } - if (taken.get_value_or(false)) { - _position = ContentTime::from_frames (frame, _content->active_video_frame_rate ()); - } + _position = ContentTime::from_frames (frame, _content->active_video_frame_rate ()); } void |
