summaryrefslogtreecommitdiff
path: root/libavcodec/mpeg12.c
diff options
context:
space:
mode:
authorReimar Döffinger <Reimar.Doeffinger@gmx.de>2013-02-24 17:21:53 +0100
committerReimar Döffinger <Reimar.Doeffinger@gmx.de>2013-03-16 13:40:36 +0100
commit23426987fa206833e48f22aa7c80d038c836a196 (patch)
tree0315fe31ce76a3638e23b470f9e6a7e85c0361be /libavcodec/mpeg12.c
parent7d15cd4f4a4ce3eabea5dd2cf437730f9e532cce (diff)
downloadffmpeg-23426987fa206833e48f22aa7c80d038c836a196.tar.gz
mpeg12: reduce hwaccel-related code duplication.
Signed-off-by: Reimar Döffinger <Reimar.Doeffinger@gmx.de>
Diffstat (limited to 'libavcodec/mpeg12.c')
-rw-r--r--libavcodec/mpeg12.c37
1 files changed, 18 insertions, 19 deletions
diff --git a/libavcodec/mpeg12.c b/libavcodec/mpeg12.c
index 7171ecafc3..4a83cfd531 100644
--- a/libavcodec/mpeg12.c
+++ b/libavcodec/mpeg12.c
@@ -1237,23 +1237,31 @@ static enum AVPixelFormat mpeg_get_pixelformat(AVCodecContext *avctx)
MpegEncContext *s = &s1->mpeg_enc_ctx;
if(s->chroma_format < 2) {
- enum AVPixelFormat res;
- res = avctx->get_format(avctx,
+ return avctx->get_format(avctx,
avctx->codec_id == AV_CODEC_ID_MPEG1VIDEO ?
mpeg1_hwaccel_pixfmt_list_420 :
mpeg2_hwaccel_pixfmt_list_420);
- if (res != AV_PIX_FMT_XVMC_MPEG2_IDCT && res != AV_PIX_FMT_XVMC_MPEG2_MC) {
- avctx->xvmc_acceleration = 0;
- } else if (!avctx->xvmc_acceleration) {
- avctx->xvmc_acceleration = 2;
- }
- return res;
} else if(s->chroma_format == 2)
return AV_PIX_FMT_YUV422P;
else
return AV_PIX_FMT_YUV444P;
}
+static void setup_hwaccel_for_pixfmt(AVCodecContext *avctx)
+{
+ if (avctx->pix_fmt != AV_PIX_FMT_XVMC_MPEG2_IDCT && avctx->pix_fmt != AV_PIX_FMT_XVMC_MPEG2_MC) {
+ avctx->xvmc_acceleration = 0;
+ } else if (!avctx->xvmc_acceleration) {
+ avctx->xvmc_acceleration = 2;
+ }
+ avctx->hwaccel = ff_find_hwaccel(avctx->codec->id, avctx->pix_fmt);
+ // until then pix_fmt may be changed right after codec init
+ if (avctx->pix_fmt == AV_PIX_FMT_XVMC_MPEG2_IDCT ||
+ avctx->hwaccel || uses_vdpau(avctx))
+ if (avctx->idct_algo == FF_IDCT_AUTO)
+ avctx->idct_algo = FF_IDCT_SIMPLE;
+}
+
/* Call this function when we know all parameters.
* It may be called in different places for MPEG-1 and MPEG-2. */
static int mpeg_decode_postinit(AVCodecContext *avctx)
@@ -1348,12 +1356,7 @@ static int mpeg_decode_postinit(AVCodecContext *avctx)
} // MPEG-2
avctx->pix_fmt = mpeg_get_pixelformat(avctx);
- avctx->hwaccel = ff_find_hwaccel(avctx->codec->id, avctx->pix_fmt);
- // until then pix_fmt may be changed right after codec init
- if (avctx->pix_fmt == AV_PIX_FMT_XVMC_MPEG2_IDCT ||
- avctx->hwaccel || uses_vdpau(avctx))
- if (avctx->idct_algo == FF_IDCT_AUTO)
- avctx->idct_algo = FF_IDCT_SIMPLE;
+ setup_hwaccel_for_pixfmt(avctx);
/* Quantization matrices may need reordering
* if DCT permutation is changed. */
@@ -2105,11 +2108,7 @@ static int vcr2_init_sequence(AVCodecContext *avctx)
s->low_delay = 1;
avctx->pix_fmt = mpeg_get_pixelformat(avctx);
- avctx->hwaccel = ff_find_hwaccel(avctx->codec->id, avctx->pix_fmt);
-
- if (avctx->pix_fmt == AV_PIX_FMT_XVMC_MPEG2_IDCT || avctx->hwaccel || uses_vdpau(avctx))
- if (avctx->idct_algo == FF_IDCT_AUTO)
- avctx->idct_algo = FF_IDCT_SIMPLE;
+ setup_hwaccel_for_pixfmt(avctx);
if (ff_MPV_common_init(s) < 0)
return -1;