summaryrefslogtreecommitdiff
path: root/libavcodec/h264.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2013-02-17 20:41:16 +0100
committerMichael Niedermayer <michaelni@gmx.at>2013-02-17 22:26:33 +0100
commitdece584a639c9fd61a72e21800815e8397b3b617 (patch)
treeb703c1000bbd8ff09c7d2d33f52711171453f9cf /libavcodec/h264.c
parent8d0757e1079f588ed69f629e2d1a4d5f232dc298 (diff)
h264: avoid calling get_format() multiple times
Some applications do not like that. Fixes VDA Reduces noise for VDPAU Tested-by: Guillaume POIRIER <poirierg@gmail.com> Tested-by: Carl Eugen Hoyos <cehoyos@ag.or.at> Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec/h264.c')
-rw-r--r--libavcodec/h264.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/libavcodec/h264.c b/libavcodec/h264.c
index 89fc2227ae..c14b95a064 100644
--- a/libavcodec/h264.c
+++ b/libavcodec/h264.c
@@ -2931,11 +2931,17 @@ static enum PixelFormat get_pixel_format(H264Context *h)
return h->avctx->color_range == AVCOL_RANGE_JPEG ? AV_PIX_FMT_YUVJ422P
: AV_PIX_FMT_YUV422P;
} else {
- return h->avctx->get_format(h->avctx, h->avctx->codec->pix_fmts ?
+ int i;
+ const enum AVPixelFormat * fmt = h->avctx->codec->pix_fmts ?
h->avctx->codec->pix_fmts :
h->avctx->color_range == AVCOL_RANGE_JPEG ?
hwaccel_pixfmt_list_h264_jpeg_420 :
- ff_hwaccel_pixfmt_list_420);
+ ff_hwaccel_pixfmt_list_420;
+
+ for (i=0; fmt[i] != AV_PIX_FMT_NONE; i++)
+ if (fmt[i] == h->avctx->pix_fmt)
+ return fmt[i];
+ return h->avctx->get_format(h->avctx, fmt);
}
break;
default: