summaryrefslogtreecommitdiffstats
path: root/player
diff options
context:
space:
mode:
Diffstat (limited to 'player')
-rw-r--r--player/audio.c15
-rw-r--r--player/main.c4
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);