diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2012-01-07 15:36:44 +0100 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2012-01-07 20:51:20 +0100 |
commit | c8e309c2a6d32f8394770d0418b5fcef531b7efb (patch) | |
tree | e95ead56145c6e1f644d1bc4d8fe9a91b84eede2 | |
parent | 19b945dc2aa89c27e1b4e18c7bfbf119b944ed4f (diff) | |
download | ffmpeg-c8e309c2a6d32f8394770d0418b5fcef531b7efb.tar.gz |
lavf: Do not attempt to use frame multi threading when probing.
This fixes various problems with getting stream info. For example playback of the
file of Ticket88. Multithreaded find_stream_info should be reenabled
once it works correctly
This partly reverts 212fd3a1f1121a9db20c478f1fccf15e8bb53c94
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r-- | libavformat/utils.c | 11 |
1 files changed, 9 insertions, 2 deletions
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;i<ic->nb_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); } } |