summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--filters/f_decoder_wrapper.c8
-rw-r--r--sub/sd_ass.c6
2 files changed, 12 insertions, 2 deletions
diff --git a/filters/f_decoder_wrapper.c b/filters/f_decoder_wrapper.c
index 7ce13606b6..6f90df04ad 100644
--- a/filters/f_decoder_wrapper.c
+++ b/filters/f_decoder_wrapper.c
@@ -199,13 +199,16 @@ bool mp_decoder_wrapper_reinit(struct mp_decoder_wrapper *d)
const struct mp_decoder_fns *driver = NULL;
struct mp_decoder_list *list = NULL;
char *user_list = NULL;
+ char *fallback = NULL;
if (p->codec->type == STREAM_VIDEO) {
driver = &vd_lavc;
user_list = opts->video_decoders;
+ fallback = "h264";
} else if (p->codec->type == STREAM_AUDIO) {
driver = &ad_lavc;
user_list = opts->audio_decoders;
+ fallback = "aac";
if (p->public.try_spdif && p->codec->codec) {
struct mp_decoder_list *spdif =
@@ -223,7 +226,10 @@ bool mp_decoder_wrapper_reinit(struct mp_decoder_wrapper *d)
struct mp_decoder_list *full = talloc_zero(NULL, struct mp_decoder_list);
if (driver)
driver->add_decoders(full);
- list = mp_select_decoders(p->log, full, p->codec->codec, user_list);
+ const char *codec = p->codec->codec;
+ if (codec && strcmp(codec, "null") == 0)
+ codec = fallback;
+ list = mp_select_decoders(p->log, full, codec, user_list);
talloc_free(full);
}
diff --git a/sub/sd_ass.c b/sub/sd_ass.c
index eb80230f44..5443a688d4 100644
--- a/sub/sd_ass.c
+++ b/sub/sd_ass.c
@@ -155,7 +155,11 @@ static int init(struct sd *sd)
char *extradata = sd->codec->extradata;
int extradata_size = sd->codec->extradata_size;
- if (strcmp(sd->codec->codec, "ass") != 0) {
+ // Note: accept "null" as alias for "ass", so EDL delay_open subtitle
+ // streams work.
+ if (strcmp(sd->codec->codec, "ass") != 0 &&
+ strcmp(sd->codec->codec, "null") != 0)
+ {
ctx->is_converted = true;
ctx->converter = lavc_conv_create(sd->log, sd->codec->codec, extradata,
extradata_size);