[FFmpeg-cvslog] avformat/utils: force native h264 decoder for probing
Timo Rothenpieler
git at videolan.org
Thu Sep 22 14:19:34 EEST 2016
ffmpeg | branch: master | Timo Rothenpieler <timo at rothenpieler.org> | Wed Sep 21 19:00:46 2016 +0200| [6d9a46e884d090a68069112a3b0436aa8b563967] | committer: Timo Rothenpieler
avformat/utils: force native h264 decoder for probing
Reviewed-by: Michael Niedermayer <michael at niedermayer.cc>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=6d9a46e884d090a68069112a3b0436aa8b563967
---
libavformat/utils.c | 18 +++++++++++++++---
1 file changed, 15 insertions(+), 3 deletions(-)
diff --git a/libavformat/utils.c b/libavformat/utils.c
index a9bd034..05d2315 100644
--- a/libavformat/utils.c
+++ b/libavformat/utils.c
@@ -186,6 +186,18 @@ FF_ENABLE_DEPRECATION_WARNINGS
return avcodec_find_decoder(codec_id);
}
+static const AVCodec *find_probe_decoder(AVFormatContext *s, const AVStream *st, enum AVCodecID codec_id)
+{
+#if CONFIG_H264_DECODER
+ /* Other parts of the code assume this decoder to be used for h264,
+ * so force it if possible. */
+ if (codec_id == AV_CODEC_ID_H264)
+ return avcodec_find_decoder_by_name("h264");
+#endif
+
+ return find_decoder(s, st, codec_id);
+}
+
int av_format_get_probe_score(const AVFormatContext *s)
{
return s->probe_score;
@@ -2882,7 +2894,7 @@ static int try_decode_frame(AVFormatContext *s, AVStream *st, AVPacket *avpkt,
(st->codecpar->codec_id != -st->info->found_decoder || !st->codecpar->codec_id)) {
AVDictionary *thread_opt = NULL;
- codec = find_decoder(s, st, st->codecpar->codec_id);
+ codec = find_probe_decoder(s, st, st->codecpar->codec_id);
if (!codec) {
st->info->found_decoder = -st->codecpar->codec_id;
@@ -3379,7 +3391,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
if (st->request_probe <= 0)
st->internal->avctx_inited = 1;
- codec = find_decoder(ic, st, st->codecpar->codec_id);
+ codec = find_probe_decoder(ic, st, st->codecpar->codec_id);
/* Force thread count to 1 since the H.264 decoder will not extract
* SPS and PPS to extradata during multi-threaded decoding. */
@@ -3639,7 +3651,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
st = ic->streams[stream_index];
avctx = st->internal->avctx;
if (!has_codec_parameters(st, NULL)) {
- const AVCodec *codec = find_decoder(ic, st, st->codecpar->codec_id);
+ const AVCodec *codec = find_probe_decoder(ic, st, st->codecpar->codec_id);
if (codec && !avctx->codec) {
if (avcodec_open2(avctx, codec, (options && stream_index < orig_nb_streams) ? &options[stream_index] : NULL) < 0)
av_log(ic, AV_LOG_WARNING,
More information about the ffmpeg-cvslog
mailing list