[FFmpeg-devel] [PATCH] lavc/vaapi_encode_h265: add support for low-power encoding

Xiang, Haihao haihao.xiang at intel.com
Wed Feb 14 03:32:54 EET 2018


>-----Original Message-----
>From: ffmpeg-devel [mailto:ffmpeg-devel-bounces at ffmpeg.org] On Behalf Of
>Mark Thompson
>Sent: Wednesday, February 14, 2018 2:58 AM
>To: ffmpeg-devel at ffmpeg.org
>Subject: Re: [FFmpeg-devel] [PATCH] lavc/vaapi_encode_h265: add support
>for low-power encoding
>
>On 09/02/18 01:23, Xiang, Haihao wrote:
>>
>>> On 06/02/18 08:17, Haihao Xiang wrote:
>>>> Although VAEntrypointEncSliceLP was added in old version of VAAPI,
>>>> we never implemented it for VAAPI H265 encoder before. so it is
>>>> reasonable to require VAAPI 1.0
>>>>
>>>> Signed-off-by: Haihao Xiang <haihao.xiang at intel.com>
>>>> ---
>>>>  libavcodec/vaapi_encode_h265.c | 18 +++++++++++++++++-
>>>>  1 file changed, 17 insertions(+), 1 deletion(-)
>>>>
>>>> diff --git a/libavcodec/vaapi_encode_h265.c
>>>> b/libavcodec/vaapi_encode_h265.c index f3b4f6c7e26..efe1148127f
>>>> 100644
>>>> --- a/libavcodec/vaapi_encode_h265.c
>>>> +++ b/libavcodec/vaapi_encode_h265.c
>>>> @@ -65,6 +65,7 @@ typedef struct VAAPIEncodeH265Options {
>>>>      int aud;
>>>>      int profile;
>>>>      int level;
>>>> +    int low_power;
>>>>  } VAAPIEncodeH265Options;
>>>>
>>>>
>>>> @@ -914,7 +915,18 @@ static av_cold int
>>>> vaapi_encode_h265_init(AVCodecContext *avctx)
>>>>                 avctx->profile);
>>>>          return AVERROR(EINVAL);
>>>>      }
>>>> -    ctx->va_entrypoint = VAEntrypointEncSlice;
>>>> +
>>>> +    if (opt->low_power) {
>>>> +#if VA_CHECK_VERSION(1, 0, 0)
>>>> +        ctx->va_entrypoint = VAEntrypointEncSliceLP; #else
>>>> +        av_log(avctx, AV_LOG_ERROR, "Low-power encoding is not "
>>>> +               "supported with this VAAPI version.\n");
>>>> +        return AVERROR(EINVAL);
>>>> +#endif
>>>> +    } else {
>>>> +        ctx->va_entrypoint = VAEntrypointEncSlice;
>>>> +    }
>>>>
>>>>      if (avctx->bit_rate > 0) {
>>>>          if (avctx->rc_max_rate == avctx->bit_rate) @@ -986,6
>>>> +998,10 @@ static const AVOption vaapi_encode_h265_options[] = {
>>>>      { LEVEL("6.2", 186) },
>>>>  #undef LEVEL
>>>>
>>>> +    { "low_power", "Use low-power encoding mode (experimental: only
>>>> supported "
>>>
>>> Do you want to copy this comment?
>>>
>>
>> Actually I want to delete the comments in (), but the limitation for
>> HEVC low power encoding still exist. It would be better to add some
>> VAAPI attributes to query the capability/limitation etc.
>>
>>
>>>> +      "on some platforms, does not support all features)",
>>>> +      OFFSET(low_power), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, FLAGS
>>>> + },
>>>> +
>>>>      { NULL },
>>>>  };
>>>>
>>>>
>>>
>>> How can I test this (and the following patch)?  It doesn't appear to
>>> exist on any current platform/driver.
>>>
>>
>> Cannon Lake support HEVC low power encoding, do you have this
>> platform?  https:/ /github.com/intel/media-driver/ should support this
>> feature but it isn't ready in https://github.com/intel/intel-vaapi-driver.
>
>I do not have any board with this - where can I get one?
>
>>> I don't like how this code is being copied around, but I guess it
>>> would work for now.  I'll look into doing something more sensible here.
>>>
>>
>> I also dislike duplicated code. I wanted to add some common options
>> for VAAPI encoder in FFmpeg, such as QP. However low power encoding is
>> not available for some codecs, such as VP8, so I copied&pasted the code
>here.
>>
>> Another thing is a driver may not support both VAEntrypointEncSliceLP
>> and VAEntrypointEncSlice, so I want to change the value range of
>> low_power to -1, 0, 1. -1 means auto mode, FFmpeg-vaapi will select
>> the first applicable entrypoint, what is your comment for this proposal?
>
>Under what circumstances would a driver a provide low-power entrypoint but
>not a standard one?  If some hardware only supports one encoder I would
>expect it to regard that encoder as the standard one.
>

It is up to the driver, HW supports VAEntrypointEncSlice but the driver may not implement it. 
Because low-power encoding has some limitations, it will confuse users if regarding that encoder
as the standard one. 


>- Mark
>_______________________________________________
>ffmpeg-devel mailing list
>ffmpeg-devel at ffmpeg.org
>http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


More information about the ffmpeg-devel mailing list