_parent->seek (ContentTime::from_frames (frame, _content->active_video_frame_rate()), accurate);
}
+ /* Work out the number of frames that we should return; we
+ must return all frames in our content at the requested `time'
+ (i.e. frame)
+ */
unsigned int frames_wanted = 0;
switch (_content->video->frame_type()) {
case VIDEO_FRAME_TYPE_2D:
- case VIDEO_FRAME_TYPE_3D:
- case VIDEO_FRAME_TYPE_3D_ALTERNATE:
case VIDEO_FRAME_TYPE_3D_LEFT:
case VIDEO_FRAME_TYPE_3D_RIGHT:
frames_wanted = 1;
break;
+ case VIDEO_FRAME_TYPE_3D:
+ case VIDEO_FRAME_TYPE_3D_ALTERNATE:
case VIDEO_FRAME_TYPE_3D_LEFT_RIGHT:
case VIDEO_FRAME_TYPE_3D_TOP_BOTTOM:
frames_wanted = 2;
to_push.push_back (ContentVideo (image, VideoFrame (frame, EYES_BOTH), PART_WHOLE));
break;
case VIDEO_FRAME_TYPE_3D:
- case VIDEO_FRAME_TYPE_3D_ALTERNATE:
{
- /* We receive the same frame index twice for 3D-alternate; hence we know which
+ /* We receive the same frame index twice for 3D; hence we know which
frame this one is.
*/
bool const same = (!_decoded.empty() && frame == _decoded.back().frame.index());
to_push.push_back (ContentVideo (image, VideoFrame (frame, same ? EYES_RIGHT : EYES_LEFT), PART_WHOLE));
break;
}
+ case VIDEO_FRAME_TYPE_3D_ALTERNATE:
+ to_push.push_back (ContentVideo (image, VideoFrame (frame / 2, (frame % 2) ? EYES_RIGHT : EYES_LEFT), PART_WHOLE));
+ break;
case VIDEO_FRAME_TYPE_3D_LEFT_RIGHT:
to_push.push_back (ContentVideo (image, VideoFrame (frame, EYES_LEFT), PART_LEFT_HALF));
to_push.push_back (ContentVideo (image, VideoFrame (frame, EYES_RIGHT), PART_RIGHT_HALF));
using std::cout;
using boost::shared_ptr;
-BOOST_AUTO_TEST_CASE (threed_test)
+BOOST_AUTO_TEST_CASE (threed_test1)
{
- shared_ptr<Film> film = new_test_film ("threed_test");
+ shared_ptr<Film> film = new_test_film ("threed_test2");
film->set_name ("test_film2");
shared_ptr<FFmpegContent> c (new FFmpegContent (film, "test/data/test.mp4"));
film->examine_and_add_content (c);
wait_for_jobs ();
}
+
+/** Basic sanity check of 3D-alternate; at the moment this is just to make sure
+ * that such a transcode completes without error.
+ */
+BOOST_AUTO_TEST_CASE (threed_test2)
+{
+ shared_ptr<Film> film = new_test_film ("threed_test2");
+ film->set_name ("test_film2");
+ shared_ptr<FFmpegContent> c (new FFmpegContent (film, "test/data/test.mp4"));
+ film->examine_and_add_content (c);
+ wait_for_jobs ();
+
+ c->video->set_frame_type (VIDEO_FRAME_TYPE_3D_ALTERNATE);
+ c->video->set_scale (VideoContentScale (Ratio::from_id ("185")));
+
+ film->set_container (Ratio::from_id ("185"));
+ film->set_dcp_content_type (DCPContentType::from_isdcf_name ("TST"));
+ film->set_three_d (true);
+ film->make_dcp ();
+ film->write_metadata ();
+
+ wait_for_jobs ();
+}