summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2013-02-12 19:37:15 +0000
committerCarl Hetherington <cth@carlh.net>2013-02-12 19:37:15 +0000
commite22b479faa80d20ae6c5749b2334e5f3c21ef599 (patch)
tree4d3d6fbe62dafce9912d95d57b8b1d801d21662e /src
parente118ae9353cc3a3052cad2d07b43ec40e56f0074 (diff)
Cope better with having no decoders.
Diffstat (limited to 'src')
-rw-r--r--src/wx/film_viewer.cc18
1 files changed, 14 insertions, 4 deletions
diff --git a/src/wx/film_viewer.cc b/src/wx/film_viewer.cc
index 4e779a693..a619edf7c 100644
--- a/src/wx/film_viewer.cc
+++ b/src/wx/film_viewer.cc
@@ -102,6 +102,9 @@ FilmViewer::film_changed (Film::Property p)
o.decode_subtitles = true;
o.video_sync = false;
_decoders = decoder_factory (_film, o);
+ if (_decoders.video == 0) {
+ break;
+ }
_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());
@@ -121,7 +124,9 @@ FilmViewer::film_changed (Film::Property p)
update_from_raw ();
break;
case Film::SUBTITLE_STREAM:
- _decoders.video->set_subtitle_stream (_film->subtitle_stream ());
+ if (_decoders.video) {
+ _decoders.video->set_subtitle_stream (_film->subtitle_stream ());
+ }
break;
default:
break;
@@ -155,7 +160,7 @@ FilmViewer::set_film (shared_ptr<Film> f)
void
FilmViewer::decoder_changed ()
{
- if (_decoders.video->seek_to_last ()) {
+ if (_decoders.video == 0 || _decoders.video->seek_to_last ()) {
return;
}
@@ -167,7 +172,7 @@ FilmViewer::decoder_changed ()
void
FilmViewer::timer (wxTimerEvent &)
{
- if (!_film) {
+ if (!_film || !_decoders.video) {
return;
}
@@ -222,7 +227,7 @@ FilmViewer::paint_panel (wxPaintEvent &)
void
FilmViewer::slider_moved (wxScrollEvent &)
{
- if (!_film || !_film->length()) {
+ if (!_film || !_film->length() || !_decoders.video) {
return;
}
@@ -373,6 +378,11 @@ FilmViewer::get_frame ()
{
/* Clear our raw frame in case we don't get a new one */
_raw_frame.reset ();
+
+ if (_decoders.video == 0) {
+ _display_frame.reset ();
+ return;
+ }
try {
_got_frame = false;