mirror of https://git.ffmpeg.org/ffmpeg.git
mpeg12: reduce hwaccel-related code duplication.
Signed-off-by: Reimar Döffinger <Reimar.Doeffinger@gmx.de>
This commit is contained in:
parent
7d15cd4f4a
commit
23426987fa
|
@ -1237,23 +1237,31 @@ static enum AVPixelFormat mpeg_get_pixelformat(AVCodecContext *avctx)
|
||||||
MpegEncContext *s = &s1->mpeg_enc_ctx;
|
MpegEncContext *s = &s1->mpeg_enc_ctx;
|
||||||
|
|
||||||
if(s->chroma_format < 2) {
|
if(s->chroma_format < 2) {
|
||||||
enum AVPixelFormat res;
|
return avctx->get_format(avctx,
|
||||||
res = avctx->get_format(avctx,
|
|
||||||
avctx->codec_id == AV_CODEC_ID_MPEG1VIDEO ?
|
avctx->codec_id == AV_CODEC_ID_MPEG1VIDEO ?
|
||||||
mpeg1_hwaccel_pixfmt_list_420 :
|
mpeg1_hwaccel_pixfmt_list_420 :
|
||||||
mpeg2_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)
|
} else if(s->chroma_format == 2)
|
||||||
return AV_PIX_FMT_YUV422P;
|
return AV_PIX_FMT_YUV422P;
|
||||||
else
|
else
|
||||||
return AV_PIX_FMT_YUV444P;
|
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.
|
/* Call this function when we know all parameters.
|
||||||
* It may be called in different places for MPEG-1 and MPEG-2. */
|
* It may be called in different places for MPEG-1 and MPEG-2. */
|
||||||
static int mpeg_decode_postinit(AVCodecContext *avctx)
|
static int mpeg_decode_postinit(AVCodecContext *avctx)
|
||||||
|
@ -1348,12 +1356,7 @@ static int mpeg_decode_postinit(AVCodecContext *avctx)
|
||||||
} // MPEG-2
|
} // MPEG-2
|
||||||
|
|
||||||
avctx->pix_fmt = mpeg_get_pixelformat(avctx);
|
avctx->pix_fmt = mpeg_get_pixelformat(avctx);
|
||||||
avctx->hwaccel = ff_find_hwaccel(avctx->codec->id, avctx->pix_fmt);
|
setup_hwaccel_for_pixfmt(avctx);
|
||||||
// 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;
|
|
||||||
|
|
||||||
/* Quantization matrices may need reordering
|
/* Quantization matrices may need reordering
|
||||||
* if DCT permutation is changed. */
|
* if DCT permutation is changed. */
|
||||||
|
@ -2105,11 +2108,7 @@ static int vcr2_init_sequence(AVCodecContext *avctx)
|
||||||
s->low_delay = 1;
|
s->low_delay = 1;
|
||||||
|
|
||||||
avctx->pix_fmt = mpeg_get_pixelformat(avctx);
|
avctx->pix_fmt = mpeg_get_pixelformat(avctx);
|
||||||
avctx->hwaccel = ff_find_hwaccel(avctx->codec->id, avctx->pix_fmt);
|
setup_hwaccel_for_pixfmt(avctx);
|
||||||
|
|
||||||
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;
|
|
||||||
|
|
||||||
if (ff_MPV_common_init(s) < 0)
|
if (ff_MPV_common_init(s) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
Loading…
Reference in New Issue