Set -scan_all_pmts 1 in ffmpeg, ffplay and ffprobe if not set by user.
Fixes ticket #3762.
This commit is contained in:
@@ -794,6 +794,7 @@ static int open_input_file(OptionsContext *o, const char *filename)
|
|||||||
char * video_codec_name = NULL;
|
char * video_codec_name = NULL;
|
||||||
char * audio_codec_name = NULL;
|
char * audio_codec_name = NULL;
|
||||||
char *subtitle_codec_name = NULL;
|
char *subtitle_codec_name = NULL;
|
||||||
|
int scan_all_pmts_set = 0;
|
||||||
|
|
||||||
if (o->format) {
|
if (o->format) {
|
||||||
if (!(file_iformat = av_find_input_format(o->format))) {
|
if (!(file_iformat = av_find_input_format(o->format))) {
|
||||||
@@ -864,12 +865,18 @@ static int open_input_file(OptionsContext *o, const char *filename)
|
|||||||
ic->flags |= AVFMT_FLAG_NONBLOCK;
|
ic->flags |= AVFMT_FLAG_NONBLOCK;
|
||||||
ic->interrupt_callback = int_cb;
|
ic->interrupt_callback = int_cb;
|
||||||
|
|
||||||
|
if (!av_dict_get(o->g->format_opts, "scan_all_pmts", NULL, AV_DICT_MATCH_CASE)) {
|
||||||
|
av_dict_set(&o->g->format_opts, "scan_all_pmts", "1", AV_DICT_DONT_OVERWRITE);
|
||||||
|
scan_all_pmts_set = 1;
|
||||||
|
}
|
||||||
/* open the input file with generic avformat function */
|
/* open the input file with generic avformat function */
|
||||||
err = avformat_open_input(&ic, filename, file_iformat, &o->g->format_opts);
|
err = avformat_open_input(&ic, filename, file_iformat, &o->g->format_opts);
|
||||||
if (err < 0) {
|
if (err < 0) {
|
||||||
print_error(filename, err);
|
print_error(filename, err);
|
||||||
exit_program(1);
|
exit_program(1);
|
||||||
}
|
}
|
||||||
|
if (scan_all_pmts_set)
|
||||||
|
av_dict_set(&o->g->format_opts, "scan_all_pmts", NULL, AV_DICT_MATCH_CASE);
|
||||||
remove_avoptions(&o->g->format_opts, o->g->codec_opts);
|
remove_avoptions(&o->g->format_opts, o->g->codec_opts);
|
||||||
assert_avoptions(o->g->format_opts);
|
assert_avoptions(o->g->format_opts);
|
||||||
|
|
||||||
|
8
ffplay.c
8
ffplay.c
@@ -2890,6 +2890,7 @@ static int read_thread(void *arg)
|
|||||||
AVDictionary **opts;
|
AVDictionary **opts;
|
||||||
int orig_nb_streams;
|
int orig_nb_streams;
|
||||||
SDL_mutex *wait_mutex = SDL_CreateMutex();
|
SDL_mutex *wait_mutex = SDL_CreateMutex();
|
||||||
|
int scan_all_pmts_set = 0;
|
||||||
|
|
||||||
memset(st_index, -1, sizeof(st_index));
|
memset(st_index, -1, sizeof(st_index));
|
||||||
is->last_video_stream = is->video_stream = -1;
|
is->last_video_stream = is->video_stream = -1;
|
||||||
@@ -2899,12 +2900,19 @@ static int read_thread(void *arg)
|
|||||||
ic = avformat_alloc_context();
|
ic = avformat_alloc_context();
|
||||||
ic->interrupt_callback.callback = decode_interrupt_cb;
|
ic->interrupt_callback.callback = decode_interrupt_cb;
|
||||||
ic->interrupt_callback.opaque = is;
|
ic->interrupt_callback.opaque = is;
|
||||||
|
if (!av_dict_get(format_opts, "scan_all_pmts", NULL, AV_DICT_MATCH_CASE)) {
|
||||||
|
av_dict_set(&format_opts, "scan_all_pmts", "1", AV_DICT_DONT_OVERWRITE);
|
||||||
|
scan_all_pmts_set = 1;
|
||||||
|
}
|
||||||
err = avformat_open_input(&ic, is->filename, is->iformat, &format_opts);
|
err = avformat_open_input(&ic, is->filename, is->iformat, &format_opts);
|
||||||
if (err < 0) {
|
if (err < 0) {
|
||||||
print_error(is->filename, err);
|
print_error(is->filename, err);
|
||||||
ret = -1;
|
ret = -1;
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
if (scan_all_pmts_set)
|
||||||
|
av_dict_set(&format_opts, "scan_all_pmts", NULL, AV_DICT_MATCH_CASE);
|
||||||
|
|
||||||
if ((t = av_dict_get(format_opts, "", NULL, AV_DICT_IGNORE_SUFFIX))) {
|
if ((t = av_dict_get(format_opts, "", NULL, AV_DICT_IGNORE_SUFFIX))) {
|
||||||
av_log(NULL, AV_LOG_ERROR, "Option %s not found.\n", t->key);
|
av_log(NULL, AV_LOG_ERROR, "Option %s not found.\n", t->key);
|
||||||
ret = AVERROR_OPTION_NOT_FOUND;
|
ret = AVERROR_OPTION_NOT_FOUND;
|
||||||
|
@@ -2386,12 +2386,19 @@ static int open_input_file(AVFormatContext **fmt_ctx_ptr, const char *filename)
|
|||||||
AVFormatContext *fmt_ctx = NULL;
|
AVFormatContext *fmt_ctx = NULL;
|
||||||
AVDictionaryEntry *t;
|
AVDictionaryEntry *t;
|
||||||
AVDictionary **opts;
|
AVDictionary **opts;
|
||||||
|
int scan_all_pmts_set = 0;
|
||||||
|
|
||||||
|
if (!av_dict_get(format_opts, "scan_all_pmts", NULL, AV_DICT_MATCH_CASE)) {
|
||||||
|
av_dict_set(&format_opts, "scan_all_pmts", "1", AV_DICT_DONT_OVERWRITE);
|
||||||
|
scan_all_pmts_set = 1;
|
||||||
|
}
|
||||||
if ((err = avformat_open_input(&fmt_ctx, filename,
|
if ((err = avformat_open_input(&fmt_ctx, filename,
|
||||||
iformat, &format_opts)) < 0) {
|
iformat, &format_opts)) < 0) {
|
||||||
print_error(filename, err);
|
print_error(filename, err);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
if (scan_all_pmts_set)
|
||||||
|
av_dict_set(&format_opts, "scan_all_pmts", NULL, AV_DICT_MATCH_CASE);
|
||||||
if ((t = av_dict_get(format_opts, "", NULL, AV_DICT_IGNORE_SUFFIX))) {
|
if ((t = av_dict_get(format_opts, "", NULL, AV_DICT_IGNORE_SUFFIX))) {
|
||||||
av_log(NULL, AV_LOG_ERROR, "Option %s not found.\n", t->key);
|
av_log(NULL, AV_LOG_ERROR, "Option %s not found.\n", t->key);
|
||||||
return AVERROR_OPTION_NOT_FOUND;
|
return AVERROR_OPTION_NOT_FOUND;
|
||||||
|
Reference in New Issue
Block a user