[FFmpeg-devel] [PATCH] Allow mpegvideo_xvmc decoder to be switched to full software decoding.
Ivan Kalvachev
ikalvachev at gmail.com
Sun Mar 27 19:51:58 CEST 2011
On 3/27/11, Reimar Döffinger <Reimar.Doeffinger at gmx.de> wrote:
> This allows selecting software decoding by having get_format return the
> appropriate PIX_FMT.
> This has little real usage for XvMC but serves as a proof-of-concept
> demonstrating how HWACCEL can be implemented without having a separate
> codec for each and every HWACCEL format + software decoding, and
> XvMC is unfortunately the only one I can currently test.
> ---
> libavcodec/mpeg12.c | 10 +++++++---
> 1 files changed, 7 insertions(+), 3 deletions(-)
>
> diff --git a/libavcodec/mpeg12.c b/libavcodec/mpeg12.c
> index 7034a91..9832698 100644
> --- a/libavcodec/mpeg12.c
> +++ b/libavcodec/mpeg12.c
> @@ -70,6 +70,7 @@ static void exchange_uv(MpegEncContext *s);
> static const enum PixelFormat pixfmt_xvmc_mpg2_420[] = {
> PIX_FMT_XVMC_MPEG2_IDCT,
> PIX_FMT_XVMC_MPEG2_MC,
> + PIX_FMT_YUV420P,
> PIX_FMT_NONE};
>
> uint8_t ff_mpeg12_static_rl_table_store[2][2][2*MAX_RUN + MAX_LEVEL + 3];
> @@ -1217,9 +1218,12 @@ static enum PixelFormat
> mpeg_get_pixelformat(AVCodecContext *avctx){
> Mpeg1Context *s1 = avctx->priv_data;
> MpegEncContext *s = &s1->mpeg_enc_ctx;
>
> - if(avctx->xvmc_acceleration)
> - return avctx->get_format(avctx,pixfmt_xvmc_mpg2_420);
> - else if(avctx->codec->capabilities&CODEC_CAP_HWACCEL_VDPAU){
> + if(avctx->xvmc_acceleration) {
> + enum PixelFormat res =
> avctx->get_format(avctx,pixfmt_xvmc_mpg2_420);
> + if (res == PIX_FMT_YUV420P)
> + avctx->xvmc_acceleration = 0;
> + return res;
> + } else if(avctx->codec->capabilities&CODEC_CAP_HWACCEL_VDPAU){
> if(avctx->codec_id == CODEC_ID_MPEG1VIDEO)
> return PIX_FMT_VDPAU_MPEG1;
> else
> --
> 1.7.4.1
>
OK.
More information about the ffmpeg-devel
mailing list