From fd39c57f705dad719b27c159e2d7f0dc43965a5f Mon Sep 17 00:00:00 2001 From: Martin Pulec Date: Mon, 9 Oct 2017 15:10:32 +0200 Subject: [PATCH] SDL: audio small fixes (crash with -r analog) --- src/video_display.h | 2 ++ src/video_display/sdl.cpp | 18 +++++++++++++++--- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/video_display.h b/src/video_display.h index a4e8117d8..69d6538f2 100644 --- a/src/video_display.h +++ b/src/video_display.h @@ -101,6 +101,8 @@ extern "C" { #define DISPLAY_FLAG_AUDIO_EMBEDDED (1<<1) #define DISPLAY_FLAG_AUDIO_AESEBU (1<<2) #define DISPLAY_FLAG_AUDIO_ANALOG (1<<3) + +#define DISPLAY_FLAG_AUDIO_ANY (DISPLAY_FLAG_AUDIO_EMBEDDED | DISPLAY_FLAG_AUDIO_AESEBU | DISPLAY_FLAG_AUDIO_ANALOG) /** @} */ struct audio_frame; diff --git a/src/video_display/sdl.cpp b/src/video_display/sdl.cpp index 8340e1127..f3cb58ca5 100644 --- a/src/video_display/sdl.cpp +++ b/src/video_display/sdl.cpp @@ -557,9 +557,18 @@ static void *display_sdl_init(struct module *parent, const char *fmt, unsigned i } loadSplashscreen(s); - if(flags & DISPLAY_FLAG_AUDIO_EMBEDDED) { - s->play_audio = TRUE; - configure_audio(s); + if (flags) { + if (flags & DISPLAY_FLAG_AUDIO_EMBEDDED) { + s->play_audio = TRUE; + configure_audio(s); + } else { + if (flags & DISPLAY_FLAG_AUDIO_ANY) { + log_msg(LOG_LEVEL_ERROR, "[SDL] Only accepted audio output for SDL is \"embedded\".\n"); + } else { + log_msg(LOG_LEVEL_ERROR, "[SDL] Unsupported/unknown flag passed.\n"); + } + return NULL; + } } else { s->play_audio = FALSE; } @@ -690,6 +699,9 @@ static void configure_audio(struct state_sdl *s) static int display_sdl_reconfigure_audio(void *state, int quant_samples, int channels, int sample_rate) { struct state_sdl *s = (struct state_sdl *)state; + if (!s->play_audio) { + return FALSE; + } SDL_AudioSpec desired, obtained; int sample_type;