Message ID | 20230904150411.56777-1-jamrial@gmail.com |
---|---|
Headers | show |
Series | AVCodecContext and AVCodecParameters side data | expand |
On 9/4/2023 4:03 PM, James Almer wrote:
> 71 files changed, 737 insertions(+), 415 deletions(-)
I see no document updates, commit messages, or deprecation warnings
that would:
* Explain what and why this is happening - this should at the very
least be in the commit message(s), if not a doc somewhere. IRC or
pevious ML threads are not sufficient.
* 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.
* Any useful doxy for API users or any example aside from function args and
very basic struct info.
I make no comment on the usefulness or utility of the change, but it is these
sorts of things that make downstream API users experiences a little worse.
- Derek
On 9/4/2023 12:37 PM, Derek Buitenhuis wrote: > On 9/4/2023 4:03 PM, James Almer wrote: >> 71 files changed, 737 insertions(+), 415 deletions(-) > > I see no document updates, commit messages, or deprecation warnings > that would: > > * Explain what and why this is happening - this should at the very > least be in the commit message(s), if not a doc somewhere. IRC or > pevious ML threads are not sufficient. I'll mention it in a commit message. The idea is to properly propagate and make available the global side data in AVCodecContext, and no longer have to inject it in the first packet. This way global and frame specific side data is separate, and there's no need to copy and inject entries in several different places. The new struct allows the simple use of a single set of helpers that don't depend on the context containing the side data. > * 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'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 make no comment on the usefulness or utility of the change, but it is these > sorts of things that make downstream API users experiences a little worse. > > - Derek > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
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. > 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. - Derek
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.
On 9/5/2023 2:31 PM, James Almer wrote: > 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. Thanks for clarifying. > What makes this different to every other API that was introduced with > relevant documentation and references to it in the deprecacted/replaced API? This is true, FFmpeg has terrible doc policies, but it is worth pointing how awful they are once in a while when new ones are added. TBF that is what keeps a whole cottage industry of people employed: Simply knowing the FFmpeg API, as it is non-trivial to know what doc / func / struct you even need for a given problem. > 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. We can agree to disagree. - Derek