[FFmpeg-devel] [PATCH 00/17 v3] AVCodecContext and AVCodecParameters side data

James Almer jamrial at gmail.com
Tue Sep 5 16:31:32 EEST 2023


On 9/5/2023 10:19 AM, Derek Buitenhuis wrote:
> On 9/4/2023 5:10 PM, James Almer wrote:
>>> * Warn users they need to update their code to not use stream side data (?).
>>>     Will my code just silently change behavior if it was using stream
>>>     side data? I legitimately do not know due to the above.
>>
>> How so? This, like any other deprecated field, remains working as it
>> always did until it's removed. The downstream users will see the
>> deprecation warning during compilation, and the doxy for the field
>> mentions the direct replacement. It's standard procedure.
> 
> I mean dowstream users who are relying on the current behavior of checking the
> first packet or stream side data - will it just cease to behave that
> way silently? That is, users relying on the *output/result* of the current
> behavior.

Users relying on global side data being in the first packet need to call 
the inject() lavf function to enable said functionality. As that 
function is now deprecated, they will get the relevant warning and be 
directed to the global side data API.
Nothing is being dropped silently. Their code will behave as usual 
during the deprecation period.

> 
>> I'll add a @deprecated comment to the doxy of
>> av_format_inject_global_side_data() to mention the aforementioned objective.
>>
>>> * Any useful doxy for API users or any example aside from function args and
>>>     very basic struct info.
>>
>> The helper functions are basically the same as the packet ones, and the
>> stream ones I'm deprecating. add(), new(), get(), etc. Example usage as
>> usual is in ffmpeg.c, but i think the doxy does a good job explaining
>> what they do.
> 
> I think neither ffmpeg.c nor doxy are very good ways to explain to API users
> both what they should use and why. The doxy relies on the fact you alreay know
> they exist and you need to use them and for what purpose. ffmpeg.c is the
> worst example for API users in the known universe.

What makes this different to every other API that was introduced with 
relevant documentation and references to it in the deprecacted/replaced API?

It's IMO very clear in the doxy: Instead of calling inject() and looking 
at packet side data, just look at the always available avctx side data.
Similarly, instead of looking or filling AVStream.side_data, you look or 
fill the field in AVStream.codecpar.


More information about the ffmpeg-devel mailing list