diff options
| author | Carl Hetherington <cth@carlh.net> | 2019-05-21 01:47:22 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2019-05-21 01:47:22 +0100 |
| commit | 11c07c6fd98620c859c7d3dcf6a4bbf6a05e567e (patch) | |
| tree | d25e61214ab447b2481a5dd5be733ffc1208ee88 /src/lib/video_decoder.cc | |
| parent | 402aeb2d6301503f83f7912147b2d2ebe02354f5 (diff) | |
Give an error if 2D content is set to 3D (#1565). Also run
3D tests with more parallel jobs to speed them up.
Diffstat (limited to 'src/lib/video_decoder.cc')
| -rw-r--r-- | src/lib/video_decoder.cc | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/src/lib/video_decoder.cc b/src/lib/video_decoder.cc index 9f29a03bf..0b97e5e87 100644 --- a/src/lib/video_decoder.cc +++ b/src/lib/video_decoder.cc @@ -66,12 +66,28 @@ VideoDecoder::emit (shared_ptr<const Film> film, shared_ptr<const ImageProxy> im break; case VIDEO_FRAME_TYPE_3D: { - /* We receive the same frame index twice for 3D; hence we know which + /* We should receive the same frame index twice for 3D; hence we know which frame this one is. */ - bool const same = (_last_emitted && _last_emitted.get() == frame); - Data (ContentVideo (image, frame, same ? EYES_RIGHT : EYES_LEFT, PART_WHOLE)); - _last_emitted = frame; + bool const same = (_last_emitted_frame && _last_emitted_frame.get() == frame); + if (!same && _last_emitted_eyes && *_last_emitted_eyes == EYES_LEFT) { + /* We just got a new frame index but the last frame was left-eye; it looks like + this content is not really 3D. + */ + boost::throw_exception ( + DecodeError( + String::compose( + _("The content file %1 is set as 3D but does not appear to contain 3D images. Please set it to 2D. " + "You can still make a 3D DCP from this content by ticking the 3D option in the DCP video tab."), + _content->path(0) + ) + ) + ); + } + Eyes const eyes = same ? EYES_RIGHT : EYES_LEFT; + Data (ContentVideo (image, frame, eyes, PART_WHOLE)); + _last_emitted_frame = frame; + _last_emitted_eyes = eyes; break; } case VIDEO_FRAME_TYPE_3D_ALTERNATE: @@ -103,5 +119,6 @@ void VideoDecoder::seek () { _position = ContentTime(); - _last_emitted.reset (); + _last_emitted_frame.reset (); + _last_emitted_eyes.reset (); } |
