summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2012-12-16 14:42:54 +0000
committerCarl Hetherington <cth@carlh.net>2012-12-16 14:42:54 +0000
commit7fd2aff3af82d3e573934d046be26b72a67a93e6 (patch)
tree172166a4c2e9241dcbda5a5523ffb22bb4527ad7 /src
parentb69537a43bf81498b5228888c63bcf82ed000361 (diff)
Various fixups.
Diffstat (limited to 'src')
-rw-r--r--src/lib/ffmpeg_decoder.cc2
-rw-r--r--src/lib/ffmpeg_decoder.h1
-rw-r--r--src/wx/film_viewer.cc30
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<Film> f, shared_ptr<const DecodeOptions
setup_audio ();
setup_subtitle ();
- f->Changed.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<AudioBuffers> 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<DecodeOptions> 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<Film> f)
_film->Changed.connect (boost::bind (&FilmViewer::film_changed, this, _1));
- shared_ptr<DecodeOptions> 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