[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