summaryrefslogtreecommitdiff
path: root/src/wx/film_viewer.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/wx/film_viewer.cc')
-rw-r--r--src/wx/film_viewer.cc20
1 files changed, 12 insertions, 8 deletions
diff --git a/src/wx/film_viewer.cc b/src/wx/film_viewer.cc
index 16266f9d5..3e0e678cf 100644
--- a/src/wx/film_viewer.cc
+++ b/src/wx/film_viewer.cc
@@ -50,6 +50,7 @@ FilmViewer::FilmViewer (shared_ptr<Film> f, wxWindow* p)
, _panel (new wxPanel (this))
, _slider (new wxSlider (this, wxID_ANY, 0, 0, 4096))
, _play_button (new wxToggleButton (this, wxID_ANY, wxT ("Play")))
+ , _got_frame (false)
, _out_width (0)
, _out_height (0)
, _panel_width (0)
@@ -60,16 +61,16 @@ FilmViewer::FilmViewer (shared_ptr<Film> f, wxWindow* p)
_panel->SetBackgroundStyle (wxBG_STYLE_PAINT);
#endif
- wxBoxSizer* v_sizer = new wxBoxSizer (wxVERTICAL);
- SetSizer (v_sizer);
+ _v_sizer = new wxBoxSizer (wxVERTICAL);
+ SetSizer (_v_sizer);
- v_sizer->Add (_panel, 1, wxEXPAND);
+ _v_sizer->Add (_panel, 1, wxEXPAND);
wxBoxSizer* h_sizer = new wxBoxSizer (wxHORIZONTAL);
h_sizer->Add (_play_button, 0, wxEXPAND);
h_sizer->Add (_slider, 1, wxEXPAND);
- v_sizer->Add (h_sizer, 0, wxEXPAND);
+ _v_sizer->Add (h_sizer, 0, wxEXPAND);
_panel->Connect (wxID_ANY, wxEVT_PAINT, wxPaintEventHandler (FilmViewer::paint_panel), 0, this);
_panel->Connect (wxID_ANY, wxEVT_SIZE, wxSizeEventHandler (FilmViewer::panel_sized), 0, this);
@@ -101,7 +102,7 @@ FilmViewer::film_changed (Film::Property p)
o->decode_subtitles = true;
o->video_sync = false;
_decoders = decoder_factory (_film, o, 0);
- _decoders.video->Video.connect (bind (&FilmViewer::process_video, this, _1, _2));
+ _decoders.video->Video.connect (bind (&FilmViewer::process_video, this, _1, _2, _3));
_decoders.video->OutputChanged.connect (boost::bind (&FilmViewer::decoder_changed, this));
_decoders.video->set_subtitle_stream (_film->subtitle_stream());
calculate_sizes ();
@@ -109,6 +110,7 @@ FilmViewer::film_changed (Film::Property p)
_panel->Refresh ();
_slider->Show (_film->content_type() == VIDEO);
_play_button->Show (_film->content_type() == VIDEO);
+ _v_sizer->Layout ();
break;
}
case Film::WITH_SUBTITLES:
@@ -307,12 +309,14 @@ FilmViewer::check_play_state ()
}
void
-FilmViewer::process_video (shared_ptr<Image> image, shared_ptr<Subtitle> sub)
+FilmViewer::process_video (shared_ptr<Image> image, bool, shared_ptr<Subtitle> sub)
{
_raw_frame = image;
_raw_sub = sub;
raw_to_display ();
+
+ _got_frame = true;
}
void
@@ -322,8 +326,8 @@ FilmViewer::get_frame ()
_raw_frame.reset ();
try {
- shared_ptr<Image> last = _display_frame;
- while (last == _display_frame) {
+ _got_frame = false;
+ while (!_got_frame) {
if (_decoders.video->pass ()) {
/* We didn't get a frame before the decoder gave up,
so clear our display frame.