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

Jun Zhao mypopydev at gmail.com
Mon Nov 14 02:48:10 EET 2016



On 2016/11/12 21:57, Mark Thompson wrote:
> 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.
> 
> 

Please keep go on sync with Libav and submit the merged patch, I will don't update this patch
until you submit the merged patch. :)

>> @@ -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.
> 

As I know, vaapi hwaccel is not thread safe, so in the internal FATE test, I disable the
frame threads with the option "-threads 1 -thread_type frame+slice"

> 
> Thanks,
> 
> - Mark
> 


More information about the ffmpeg-devel mailing list