diff options
Diffstat (limited to 'player')
-rw-r--r-- | player/audio.c | 15 | ||||
-rw-r--r-- | player/main.c | 4 |
2 files changed, 18 insertions, 1 deletions
diff --git a/player/audio.c b/player/audio.c index 559e194218..b354f701ae 100644 --- a/player/audio.c +++ b/player/audio.c @@ -190,8 +190,9 @@ void reinit_audio_chain(struct MPContext *mpctx) mpctx->d_audio->pool = mp_audio_pool_create(mpctx->d_audio); mpctx->d_audio->afilter = af_new(mpctx->global); mpctx->d_audio->afilter->replaygain_data = sh->audio->replaygain_data; + mpctx->d_audio->spdif_passthrough = true; mpctx->ao_buffer = mp_audio_buffer_create(NULL); - if (!audio_init_best_codec(mpctx->d_audio, opts->audio_decoders)) + if (!audio_init_best_codec(mpctx->d_audio)) goto init_error; reset_audio_state(mpctx); @@ -264,6 +265,18 @@ void reinit_audio_chain(struct MPContext *mpctx) } if (!mpctx->ao) { + // If spdif was used, try to fallback to PCM. + if (AF_FORMAT_IS_SPECIAL(afs->output.format) && + mpctx->d_audio->spdif_passthrough) + { + mpctx->d_audio->spdif_passthrough = false; + if (!audio_init_best_codec(mpctx->d_audio)) + goto init_error; + reset_audio_state(mpctx); + reinit_audio_chain(mpctx); + return; + } + MP_ERR(mpctx, "Could not open/initialize audio device -> no sound.\n"); mpctx->error_playing = MPV_ERROR_AO_INIT_FAILED; goto init_error; diff --git a/player/main.c b/player/main.c index bb22069bfc..06b1867ebe 100644 --- a/player/main.c +++ b/player/main.c @@ -278,6 +278,10 @@ static bool handle_help_options(struct MPContext *mpctx) talloc_free(list); opt_exit = 1; } + if (opts->audio_spdif && strcmp(opts->audio_spdif, "help") == 0) { + MP_INFO(mpctx, "Choices: ac3,dts-hd,dts (and possibly more)\n"); + opt_exit = 1; + } if (opts->video_decoders && strcmp(opts->video_decoders, "help") == 0) { struct mp_decoder_list *list = video_decoder_list(); mp_print_decoders(log, MSGL_INFO, "Video decoders:", list); |