[FFmpeg-devel] [PATCH] lavc/vaapi: Add VP8 decode hwaccel

Mark Thompson sw at jkqxz.net
Sat Nov 12 15:57:22 EET 2016


On 11/11/16 07:57, Jun Zhao wrote:
> From 4635e7e4a0ea24f77e71ffc9a9074e75c61bfe44 Mon Sep 17 00:00:00 2001
> From: Jun Zhao <jun.zhao at intel.com>
> Date: Fri, 11 Nov 2016 15:51:01 +0800
> Subject: [PATCH] lavc/vaapi: Add VP8 decode hwaccel
>
> Add VP8 decode hwaccel based on the libav:
> commit a9fb134730da1f9642eb5a2baa50943b8a4aa245
>     lavc/vaapi: Add VP8 decode hwaccel
> commit 75d642a944d5579e4ef20ff3701422a64692afcf
>     vaapi_vp8: Explicitly include libva vp8 decode header
>
> Reviewed-by: Jun Zhao <jun.zhao at intel.com>
> Signed-off-by: Wang, Yi A <yi.a.wang at intel.com>
>
> ase enter the commit message for your changes. Lines starting
> ---
>  configure                   |   3 +
>  libavcodec/Makefile         |   1 +
>  libavcodec/allcodecs.c      |   1 +
>  libavcodec/vaapi.c          |  15 ++++-
>  libavcodec/vaapi.h          |   9 +++
>  libavcodec/vaapi_internal.h |   3 +
>  libavcodec/vp8.c            | 149 ++++++++++++++++++++++++++++++--------------
>  libavcodec/vp8.h            |  29 ++++++++-
>  8 files changed, 159 insertions(+), 51 deletions(-)

(You've omitted the file vaapi_vp8.c, so the patch isn't currently usable.)

The patches implementing this are already in the merge queue.  Other than the part noted below and the backport, is there any difference to the functionality?

I would generally prefer to preserve synchronisation with libav - the normal merge will also get the original dependencies rather than backporting to the pre-hwcontext infrastructure.


> @@ -2800,14 +2849,18 @@ static int vp8_decode_update_thread_context(AVCodecContext *dst,
>          s->mb_width  = s_src->mb_width;
>          s->mb_height = s_src->mb_height;
>      }
> -
>      s->prob[0]      = s_src->prob[!s_src->update_probabilities];
>      s->segmentation = s_src->segmentation;
>      s->lf_delta     = s_src->lf_delta;
> +    s->pix_fmt = s_src->pix_fmt;
> +    s->mbskip_enabled = s_src->mbskip_enabled;
> +    s->filter = s_src->filter;
>      memcpy(s->sign_bias, s_src->sign_bias, sizeof(s->sign_bias));
> +    s->num_coeff_partitions = s_src->num_coeff_partitions;
> +    s->header_partition_size = s_src->header_partition_size;
>
>      for (i = 0; i < FF_ARRAY_ELEMS(s_src->frames); i++) {
> -        if (s_src->frames[i].tf.f->data[0]) {
> +        if (s_src->frames[i].tf.f->buf[0]) {
>              int ret = vp8_ref_frame(s, &s->frames[i], &s_src->frames[i]);
>              if (ret < 0)
>                  return ret;

This is fixing decode with frame threads?  I admit I don't think I ever tested with frame threading enabled, indeed it dies horribly in libav.

Does fate-vp8 using the hwaccel and threads pass in ffmpeg with this?  It fails in libav, but the setup might be different because of changes you've made.


Thanks,

- Mark



More information about the ffmpeg-devel mailing list