diff --git a/libavformat/utils.c b/libavformat/utils.c index 5a7d87aa1a..acc69f1561 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -2384,10 +2384,13 @@ int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options) int i, count, ret, read_size, j; AVStream *st; AVPacket pkt1, *pkt; + AVDictionary *one_thread_opt = NULL; int64_t old_offset = avio_tell(ic->pb); int orig_nb_streams = ic->nb_streams; // new streams might appear, no options for those int flush_codecs = 1; + av_dict_set(&one_thread_opt, "threads", "1", 0); + for(i=0;inb_streams;i++) { AVCodec *codec; st = ic->streams[i]; @@ -2409,15 +2412,19 @@ int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options) assert(!st->codec->codec); codec = avcodec_find_decoder(st->codec->codec_id); + if (options) + av_dict_set(&options[i], "threads", "1", 0); + /* Ensure that subtitle_header is properly set. */ if (st->codec->codec_type == AVMEDIA_TYPE_SUBTITLE && codec && !st->codec->codec) - avcodec_open2(st->codec, codec, options ? &options[i] : NULL); + avcodec_open2(st->codec, codec, options ? &options[i] : &one_thread_opt); //try to just open decoders, in case this is enough to get parameters if(!has_codec_parameters(st->codec)){ if (codec && !st->codec->codec) - avcodec_open2(st->codec, codec, options ? &options[i] : NULL); + avcodec_open2(st->codec, codec, options ? &options[i] + : &one_thread_opt); } }