[FFmpeg-devel] [PATCH] vc1.c: add support for HWAccel (take 2)
Benoit Fouet
benoit.fouet
Fri Feb 27 11:58:23 CET 2009
On 02/27/2009 11:37 AM, Gwenole Beauchesne wrote:
> On Wed, 25 Feb 2009, Gwenole Beauchesne wrote:
>
>> This patch adds AVHWAccel entry-points to VC-1 codec.
>
> Here is a new revision with ff_hwaccel_pixfmt_list_420[].
> diff --git a/libavcodec/vc1.c b/libavcodec/vc1.c
> index 03257b8..bea3b55 100644
> --- a/libavcodec/vc1.c
> +++ b/libavcodec/vc1.c
> @@ -4010,9 +4010,10 @@ static av_cold int vc1_decode_init(AVCodecContext
> *avctx)
>
> if (!avctx->extradata_size || !avctx->extradata) return -1;
> if (!(avctx->flags & CODEC_FLAG_GRAY))
> - avctx->pix_fmt = PIX_FMT_YUV420P;
> + avctx->pix_fmt = avctx->get_format(avctx, avctx->codec->pix_fmts);
> else
> avctx->pix_fmt = PIX_FMT_GRAY8;
> + avctx->hwaccel = ff_find_hwaccel(avctx->codec->id, avctx->pix_fmt);
> v->s.avctx = avctx;
> avctx->flags |= CODEC_FLAG_EMU_EDGE;
> v->s.flags |= CODEC_FLAG_EMU_EDGE;
> @@ -4187,7 +4188,8 @@ static int vc1_decode_frame(AVCodecContext *avctx,
> if(size <= 0) continue;
> switch(AV_RB32(start)){
> case VC1_CODE_FRAME:
> - if
> (s->avctx->codec->capabilities&CODEC_CAP_HWACCEL_VDPAU)
> + if (avctx->hwaccel ||
> +
> s->avctx->codec->capabilities&CODEC_CAP_HWACCEL_VDPAU)
> buf_start = start;
> buf_size2 = vc1_unescape_buffer(start + 4, size, buf2);
> break;
> @@ -4277,6 +4279,15 @@ static int vc1_decode_frame(AVCodecContext *avctx,
> s->me.qpel_put= s->dsp.put_qpel_pixels_tab;
> s->me.qpel_avg= s->dsp.avg_qpel_pixels_tab;
>
> + if (avctx->hwaccel) {
> + if (avctx->hwaccel->start_frame(avctx, buf, buf_size) < 0)
> + return -1;
> + if (avctx->hwaccel->decode_slice(avctx, buf_start, (buf +
> buf_size) - buf_start) < 0)
> + return -1;
> + if (avctx->hwaccel->end_frame(avctx) < 0)
> + return -1;
> + }
>
those if()'s can be merged
> + else
> if ((CONFIG_VC1_VDPAU_DECODER || CONFIG_WMV3_VDPAU_DECODER)
> &&s->avctx->codec->capabilities&CODEC_CAP_HWACCEL_VDPAU)
> ff_vdpau_vc1_decode_picture(s, buf_start, (buf + buf_size) -
> buf_start);
> @@ -4348,7 +4359,7 @@ AVCodec vc1_decoder = {
> CODEC_CAP_DELAY,
> NULL,
> .long_name = NULL_IF_CONFIG_SMALL("SMPTE VC-1"),
> - .pix_fmts = ff_pixfmt_list_420
> + .pix_fmts = ff_hwaccel_pixfmt_list_420
> };
>
> AVCodec wmv3_decoder = {
> @@ -4363,7 +4374,7 @@ AVCodec wmv3_decoder = {
> CODEC_CAP_DELAY,
> NULL,
> .long_name = NULL_IF_CONFIG_SMALL("Windows Media Video 9"),
> - .pix_fmts = ff_pixfmt_list_420
> + .pix_fmts = ff_hwaccel_pixfmt_list_420
> };
>
> #if CONFIG_WMV3_VDPAU_DECODER
>
>
Ben
More information about the ffmpeg-devel
mailing list