[FFmpeg-devel] [PATCH 1/4] vp8: Add hwaccel hooks

Mark Thompson sw at jkqxz.net
Mon Feb 20 12:23:27 EET 2017


On 20/02/17 02:35, Michael Niedermayer wrote:
> On Sun, Feb 19, 2017 at 09:29:33PM +0000, Mark Thompson wrote:
>> On 19/02/17 21:04, Ronald S. Bultje wrote:
>>> Hi,
>>>
>>> On Sun, Feb 19, 2017 at 12:23 PM, Mark Thompson <sw at jkqxz.net> wrote:
>>>
>>>> diff --git a/libavcodec/webp.c b/libavcodec/webp.c
>>>>
>>> [..]
>>>
>>>> +        avctx->get_format = webp_get_format;
>>>
>>>
>>> Docs say:
>>> "decoding: Set by user, if not set the native format will be chosen."
>>> So I don't think decoders are supposed to set this.
>>
>> The webp decoder does not support get_format.  I suppose the user could technically store something there and then read it back, so save and restore the value across the relevant calls?
> 
> This is quite ugly, why do you want to do that ?
> 
> get_format is set by the user
> the get_format API requires the function to choose one of the caller
> provided formats and it can choose any.
> I dont know what your function does but its different from the API.
> It smells very much like a hack ...
> 
> The one situation in which you can set get_format from libavcodec is
> when there is a seperate codec context you created, that is that you
> are its user.
> 
> can you explain why this code messes with avctx->get_format ?
> and for example doesnt change the code that calls get_format so that
> it passes a correct pixel format list which then by any get_format()
> results in a correct format ?
> or am i missing something ?

The current WebP decoder calls the VP8 decoder /using the same AVCodecContext/.  Previously the format was set directly on the VP8Context, but now that the VP8 decoder uses ff_get_format() that initial value is not used.  This change adds a get_format() callback on the AVCodecContext used by the VP8 decoder to set the format appropriately.

Now, because that is the same AVCodecContext as the one supplied by the user, the user could themselves have stored something into the get_format field (even though it isn't used by the WebP decoder) and expect to be able to read it back correctly later.  I think this would be madness, but is I suppose technically allowed; saving and restoring the value across the VP8 calls would fix that case.

- Mark



More information about the ffmpeg-devel mailing list