From: Carl Hetherington Date: Sun, 28 Nov 2021 21:00:21 +0000 (+0100) Subject: Catch exceptions from RtAudio::startStream() in all cases. X-Git-Tag: checked-for-v2.16.x~165 X-Git-Url: https://git.carlh.net/gitweb/?p=dcpomatic.git;a=commitdiff_plain;h=b5a748e1709404e16c30a7a49ae35809555539db Catch exceptions from RtAudio::startStream() in all cases. --- diff --git a/src/wx/film_viewer.cc b/src/wx/film_viewer.cc index 259e2bc16..ac12bea3f 100644 --- a/src/wx/film_viewer.cc +++ b/src/wx/film_viewer.cc @@ -319,16 +319,31 @@ FilmViewer::suspend () } +void +FilmViewer::start_audio_stream_if_open () +{ + if (_audio.isStreamOpen()) { + _audio.setStreamTime (_video_view->position().seconds()); + try { + _audio.startStream (); + } catch (RtAudioError& e) { + _audio_channels = 0; + error_dialog ( + _video_view->get(), + _("There was a problem starting audio playback. Please try another audio output device in Preferences."), std_to_wx(e.what()) + ); + } + } +} + + void FilmViewer::resume () { DCPOMATIC_ASSERT (_suspended > 0); --_suspended; if (_playing && !_suspended) { - if (_audio.isStreamOpen()) { - _audio.setStreamTime (_video_view->position().seconds()); - _audio.startStream (); - } + start_audio_stream_if_open (); _video_view->start (); } } @@ -358,18 +373,7 @@ FilmViewer::start () /* Take the video view's idea of position as our `playhead' and start the audio stream (which is the timing reference) there. */ - if (_audio.isStreamOpen()) { - _audio.setStreamTime (_video_view->position().seconds()); - try { - _audio.startStream (); - } catch (RtAudioError& e) { - _audio_channels = 0; - error_dialog ( - _video_view->get(), - _("There was a problem starting audio playback. Please try another audio output device in Preferences."), std_to_wx(e.what()) - ); - } - } + start_audio_stream_if_open (); _playing = true; /* Calling start() below may directly result in Stopped being emitted, and if that diff --git a/src/wx/film_viewer.h b/src/wx/film_viewer.h index 0291b660f..64ac885e3 100644 --- a/src/wx/film_viewer.h +++ b/src/wx/film_viewer.h @@ -161,6 +161,7 @@ private: void config_changed (Config::Property); void film_length_change (); void ui_finished (); + void start_audio_stream_if_open (); dcpomatic::DCPTime uncorrected_time () const; Frame average_latency () const;