Mercurial > libavcodec.hg
changeset 9224:aed92dbae82e libavcodec
Add support for HW accelerated VC-1 decoding through the new
AVHWAccel infrastructure.
author | gb |
---|---|
date | Sat, 21 Mar 2009 23:44:21 +0000 |
parents | 53f2c0f6e71d |
children | 85c7a028316d |
files | vc1.c |
diffstat | 1 files changed, 14 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/vc1.c Sat Mar 21 23:08:20 2009 +0000 +++ b/vc1.c Sat Mar 21 23:44:21 2009 +0000 @@ -4010,9 +4010,10 @@ 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 @@ 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; @@ -4280,7 +4282,14 @@ 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); - else { + else 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; + } else { ff_er_frame_start(s); v->bits = buf_size * 8; @@ -4348,7 +4357,7 @@ 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 +4372,7 @@ 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