Add top/bottom option for 3D frames.
authorCarl Hetherington <cth@carlh.net>
Mon, 23 Dec 2013 01:20:52 +0000 (01:20 +0000)
committerCarl Hetherington <cth@carlh.net>
Mon, 23 Dec 2013 01:20:52 +0000 (01:20 +0000)
ChangeLog
src/lib/types.h
src/lib/video_content.cc
src/lib/video_decoder.cc
src/wx/video_panel.cc

index ed6021c98495c7775e2d8d177733d8835589db75..9295e4a575c683c75f30e3dc97c5878f478e5b75 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2013-12-23  Carl Hetherington  <cth@carlh.net>
+
+       * Add top/bottom option for 3D frames.
+
 2013-12-20  Carl Hetherington  <cth@carlh.net>
 
        * Add configuration option for default audio delay (#276).
index 448b6c154bac00faae280e78a5c927f1bf1ea5a9..96b993a8e15866b4674324735e05cdadd968f2f7 100644 (file)
@@ -68,7 +68,8 @@ struct TimedAudioBuffers
 enum VideoFrameType
 {
        VIDEO_FRAME_TYPE_2D,
-       VIDEO_FRAME_TYPE_3D_LEFT_RIGHT
+       VIDEO_FRAME_TYPE_3D_LEFT_RIGHT,
+       VIDEO_FRAME_TYPE_3D_TOP_BOTTOM
 };
 
 enum Eyes
index 0a19ffd692463ac4f2923cd106ea54ddfccd4de1..cc075a34ced0534d0e3298affe5ce840d0a8926a 100644 (file)
@@ -327,6 +327,8 @@ VideoContent::video_size_after_3d_split () const
                return s;
        case VIDEO_FRAME_TYPE_3D_LEFT_RIGHT:
                return libdcp::Size (s.width / 2, s.height);
+       case VIDEO_FRAME_TYPE_3D_TOP_BOTTOM:
+               return libdcp::Size (s.width, s.height / 2);
        }
 
        assert (false);
index eaa4534e44b64ab6c6e503b06bfae280e8dde08e..e7ddec5e6cd19df910966a66fcb9e969b5c5b6ee 100644 (file)
@@ -47,6 +47,13 @@ VideoDecoder::video (shared_ptr<const Image> image, bool same, VideoContent::Fra
                Video (image->crop (Crop (half, 0, 0, 0), true), EYES_RIGHT, same, frame);
                break;
        }
+       case VIDEO_FRAME_TYPE_3D_TOP_BOTTOM:
+       {
+               int const half = image->size().height / 2;
+               Video (image->crop (Crop (0, 0, 0, half), true), EYES_LEFT, same, frame);
+               Video (image->crop (Crop (0, 0, half, 0), true), EYES_RIGHT, same, frame);
+               break;
+       }
        }
        
        _video_position = frame + 1;
index 8609322ceb6bbeb895f602bae030011aa26cedc2..0dbee542060875afbae9ffbc5a2257379122861b 100644 (file)
@@ -199,6 +199,7 @@ VideoPanel::VideoPanel (FilmEditor* e)
 
        _frame_type->wrapped()->Append (_("2D"));
        _frame_type->wrapped()->Append (_("3D left/right"));
+       _frame_type->wrapped()->Append (_("3D top/bottom"));
 
        _filters_button->Bind           (wxEVT_COMMAND_BUTTON_CLICKED,   boost::bind (&VideoPanel::edit_filters_clicked, this));
        _colour_conversion_button->Bind (wxEVT_COMMAND_BUTTON_CLICKED,   boost::bind (&VideoPanel::edit_colour_conversion_clicked, this));