A few fixes to still image mode.
authorCarl Hetherington <cth@carlh.net>
Sun, 16 Dec 2012 17:50:39 +0000 (17:50 +0000)
committerCarl Hetherington <cth@carlh.net>
Sun, 16 Dec 2012 17:50:39 +0000 (17:50 +0000)
src/lib/film.cc
src/lib/imagemagick_decoder.cc
src/lib/imagemagick_decoder.h
src/wx/film_editor.cc
src/wx/film_viewer.cc

index a1c9eb7f0e73ca975c6c6801838e62f7c9c49433..b295bdc83e7c84c4f5fc555da540904aae38a722 100644 (file)
@@ -857,10 +857,12 @@ Film::set_content (string c)
                set_size (d.video->native_size ());
                set_frames_per_second (d.video->frames_per_second ());
                set_subtitle_streams (d.video->subtitle_streams ());
-               set_content_audio_streams (d.audio->audio_streams ());
+               if (d.audio) {
+                       set_content_audio_streams (d.audio->audio_streams ());
+               }
 
                /* Start off with the first audio and subtitle streams */
-               if (!d.audio->audio_streams().empty()) {
+               if (d.audio && !d.audio->audio_streams().empty()) {
                        set_content_audio_stream (d.audio->audio_streams().front());
                }
                
index 9d11e043f4ceb7a46a71ab1b8a6fc54290c3bb37..c0db088938f65e49876bf22fc0ae5bd3b7a99cc5 100644 (file)
@@ -105,3 +105,16 @@ ImageMagickDecoder::pixel_format () const
        return PIX_FMT_RGB24;
 }
 
+bool
+ImageMagickDecoder::seek (SourceFrame f)
+{
+       _iter = _files.begin ();
+       for (int i = 0; i < f; ++i) {
+               if (_iter == _files.end()) {
+                       return false;
+               }
+               ++_iter;
+       }
+       
+       return true;
+}
index cfcf4b4f6d130d8b2ea2cfeedf0362f59bda4daa..27ff71d83560bff8ff0cbe8d2323de62e2dcbd94 100644 (file)
@@ -56,6 +56,8 @@ public:
                return false;
        }
 
+       bool seek (SourceFrame);
+
 protected:
        bool pass ();
        PixelFormat pixel_format () const;
index d33f89ce6774e07bae1fd150f0d32e2139b4ab79..32336d7634277a42d7c9aa93c3a171cf40364bc4 100644 (file)
@@ -331,7 +331,7 @@ FilmEditor::make_audio_panel ()
        };
 
        for (int i = 0; i < MAX_AUDIO_CHANNELS; ++i) {
-               add_label_to_sizer (_audio_sizer, _audio_panel, channels[i]);
+               video_control (add_label_to_sizer (_audio_sizer, _audio_panel, channels[i]));
                _external_audio[i] = new wxFilePickerCtrl (_audio_panel, wxID_ANY, wxT (""), wxT ("Select Audio File"), wxT ("*.wav"));
                _audio_sizer->Add (video_control (_external_audio[i]), 1, wxEXPAND);
        }
@@ -354,7 +354,7 @@ FilmEditor::make_subtitle_panel ()
        _subtitle_sizer->Add (_with_subtitles, 1);
        
        _subtitle_stream = new wxComboBox (_subtitle_panel, wxID_ANY, wxT (""), wxDefaultPosition, wxDefaultSize, 0, 0, wxCB_READONLY);
-       _subtitle_sizer->Add (_subtitle_stream);
+       _subtitle_sizer->Add (video_control (_subtitle_stream));
 
        video_control (add_label_to_sizer (_subtitle_sizer, _subtitle_panel, "Subtitle Offset"));
        _subtitle_offset = new wxSpinCtrl (_subtitle_panel);
index 4f99516f2a3e5d1ea6ea2194c5e8c7aed5e7983a..15a2c4034bdb3dda8e3bea2bc374b704a1997e57 100644 (file)
@@ -92,6 +92,9 @@ FilmViewer::film_changed (Film::Property p)
                _decoders.video->Video.connect (bind (&FilmViewer::process_video, this, _1, _2));
                _decoders.video->OutputChanged.connect (boost::bind (&FilmViewer::decoder_changed, this));
                _decoders.video->set_subtitle_stream (_film->subtitle_stream());
+               calculate_sizes ();
+               get_frame ();
+               _panel->Refresh ();
                break;
        }
        case Film::WITH_SUBTITLES:
@@ -231,7 +234,7 @@ FilmViewer::raw_to_display ()
        if (!_out_width || !_out_height || !_film) {
                return;
        }
-       
+
        _display_frame = _raw_frame->scale_and_convert_to_rgb (Size (_out_width, _out_height), 0, _film->scaler());
 
        if (_raw_sub) {
@@ -303,7 +306,7 @@ FilmViewer::get_frame ()
        if (!_out_width || !_out_height) {
                return;
        }
-       
+
        shared_ptr<Image> last = _display_frame;
        while (last == _display_frame) {
                _decoders.video->pass ();