From 7fd2aff3af82d3e573934d046be26b72a67a93e6 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Sun, 16 Dec 2012 14:42:54 +0000 Subject: [PATCH] Various fixups. --- src/lib/ffmpeg_decoder.cc | 2 +- src/lib/ffmpeg_decoder.h | 1 + src/wx/film_viewer.cc | 30 +++++++++++++++++++----------- 3 files changed, 21 insertions(+), 12 deletions(-) diff --git a/src/lib/ffmpeg_decoder.cc b/src/lib/ffmpeg_decoder.cc index 314ab7c06..24ee89b21 100644 --- a/src/lib/ffmpeg_decoder.cc +++ b/src/lib/ffmpeg_decoder.cc @@ -78,7 +78,7 @@ FFmpegDecoder::FFmpegDecoder (shared_ptr f, shared_ptrChanged.connect (bind (&FFmpegDecoder::film_changed, this, _1)); + _film_connection = f->Changed.connect (bind (&FFmpegDecoder::film_changed, this, _1)); } FFmpegDecoder::~FFmpegDecoder () diff --git a/src/lib/ffmpeg_decoder.h b/src/lib/ffmpeg_decoder.h index 9cf3de28f..1db46a423 100644 --- a/src/lib/ffmpeg_decoder.h +++ b/src/lib/ffmpeg_decoder.h @@ -120,6 +120,7 @@ private: boost::shared_ptr deinterleave_audio (uint8_t* data, int size); void film_changed (Film::Property); + boost::signals2::scoped_connection _film_connection; std::string stream_name (AVStream* s) const; diff --git a/src/wx/film_viewer.cc b/src/wx/film_viewer.cc index 5c3e26a31..1cf45fd4e 100644 --- a/src/wx/film_viewer.cc +++ b/src/wx/film_viewer.cc @@ -82,6 +82,16 @@ FilmViewer::film_changed (Film::Property p) calculate_sizes (); update_from_raw (); break; + case Film::CONTENT: + { + shared_ptr o (new DecodeOptions); + o->decode_audio = false; + o->video_sync = false; + _decoders = decoder_factory (_film, o, 0); + _decoders.video->Video.connect (bind (&FilmViewer::process_video, this, _1, _2)); + _decoders.video->OutputChanged.connect (boost::bind (&FilmViewer::decoder_changed, this)); + break; + } default: break; } @@ -102,13 +112,7 @@ FilmViewer::set_film (shared_ptr f) _film->Changed.connect (boost::bind (&FilmViewer::film_changed, this, _1)); - shared_ptr o (new DecodeOptions); - o->decode_audio = false; - o->video_sync = false; - _decoders = decoder_factory (_film, o, 0); - _decoders.video->Video.connect (bind (&FilmViewer::process_video, this, _1, _2)); - _decoders.video->OutputChanged.connect (boost::bind (&FilmViewer::decoder_changed, this)); - + film_changed (Film::CONTENT); film_changed (Film::CROP); film_changed (Film::FORMAT); } @@ -130,9 +134,11 @@ FilmViewer::timer (wxTimerEvent& ev) _decoders.video->pass (); } - int const new_slider_position = 4096 * _decoders.video->last_source_frame() / _film->length().get(); - if (new_slider_position != _slider->GetValue()) { - _slider->SetValue (new_slider_position); + if (_film->length()) { + int const new_slider_position = 4096 * _decoders.video->last_source_frame() / _film->length().get(); + if (new_slider_position != _slider->GetValue()) { + _slider->SetValue (new_slider_position); + } } } @@ -154,7 +160,9 @@ FilmViewer::paint_panel (wxPaintEvent& ev) void FilmViewer::slider_moved (wxCommandEvent& ev) { - seek_and_update (_slider->GetValue() * _film->length().get() / 4096); + if (_film->length()) { + seek_and_update (_slider->GetValue() * _film->length().get() / 4096); + } } void -- 2.30.2