diff options
author | Reimar Döffinger <Reimar.Doeffinger@gmx.de> | 2013-02-24 17:21:53 +0100 |
---|---|---|
committer | Reimar Döffinger <Reimar.Doeffinger@gmx.de> | 2013-03-16 13:40:36 +0100 |
commit | 23426987fa206833e48f22aa7c80d038c836a196 (patch) | |
tree | 0315fe31ce76a3638e23b470f9e6a7e85c0361be /libavcodec/mpeg12.c | |
parent | 7d15cd4f4a4ce3eabea5dd2cf437730f9e532cce (diff) | |
download | ffmpeg-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.c | 37 |
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; |