Merge branch 'master' of ssh://git.carlh.net/home/carl/git/dcpomatic
authorCarl Hetherington <cth@carlh.net>
Sat, 17 Jun 2017 23:49:33 +0000 (00:49 +0100)
committerCarl Hetherington <cth@carlh.net>
Sat, 17 Jun 2017 23:49:33 +0000 (00:49 +0100)
src/lib/player.cc
src/wx/config_dialog.cc

index 5c84ea5f525fe35786503ad081ebf956812decda..82159df719800fc36028267160472f3087fe453d 100644 (file)
@@ -565,7 +565,7 @@ Player::pass ()
                audio_fill_towards += DCPTime::from_seconds (earliest->content->audio->delay() / 1000.0);
        }
 
-       if (audio_fill_from && audio_fill_from < audio_fill_towards) {
+       if (audio_fill_from && audio_fill_from < audio_fill_towards && ((audio_fill_towards - *audio_fill_from) >= one_video_frame())) {
                DCPTimePeriod period (*audio_fill_from, audio_fill_towards);
                if (period.duration() > one_video_frame()) {
                        period.to = period.from + one_video_frame();
@@ -919,7 +919,7 @@ void
 Player::emit_audio (shared_ptr<AudioBuffers> data, DCPTime time)
 {
        Audio (data, time);
-       _last_audio_time = time + DCPTime::from_frames (data->frames(), _film->audio_frame_rate ());
+       _last_audio_time = time + DCPTime::from_frames (data->frames(), _film->audio_frame_rate());
 }
 
 void
index 796972384e6a84c39ba2ccf3899ab9b2c0655a85..03dae5281ce4383cb0fcca77aff4eaa0ed699471 100644 (file)
@@ -329,21 +329,25 @@ private:
                checked_set (_preview_sound, config->preview_sound());
 
                 optional<string> const current_so = get_preview_sound_output ();
-                string configured_so;
+                optional<string> configured_so;
 
                 if (config->preview_sound_output()) {
                         configured_so = config->preview_sound_output().get();
                 } else {
                         /* No configured output means we should use the default */
                         RtAudio audio (DCPOMATIC_RTAUDIO_API);
-                        configured_so = audio.getDeviceInfo(audio.getDefaultOutputDevice()).name;
+                       try {
+                               configured_so = audio.getDeviceInfo(audio.getDefaultOutputDevice()).name;
+                       } catch (RtAudioError& e) {
+                               /* Probably no audio devices at all */
+                       }
                 }
 
-                if (!current_so || *current_so != configured_so) {
+                if (configured_so && current_so != configured_so) {
                         /* Update _preview_sound_output with the configured value */
                         unsigned int i = 0;
                         while (i < _preview_sound_output->GetCount()) {
-                                if (_preview_sound_output->GetString(i) == std_to_wx(configured_so)) {
+                                if (_preview_sound_output->GetString(i) == std_to_wx(*configured_so)) {
                                         _preview_sound_output->SetSelection (i);
                                         break;
                                 }