[FFmpeg-devel] [PATCH 00/10] deprecate av_init_packet() and sizeof(AVPacket) as part of the ABI
James Almer
jamrial at gmail.com
Tue Feb 2 23:54:32 EET 2021
On 2/2/2021 4:33 PM, Andriy Gelman wrote:
> On Mon, 01. Feb 19:44, James Almer wrote:
>> As the subject says, this puts AVPacket in line with AVFrame, allowing
>> easier extensibility of the struct, and preventing potential undefined behavior
>> in some cases when packets are used uninitialized on stack.
>>
>> This set adapts only a few modules, examples, and the tools, as those were the
>> most complex and the ones that better reflect how AVPackets must be used after
>> the deprecation period.
>> I have a branch ready removing every other instance of av_init_packet() in the
>> tree, and all uses of AVPacket on stack i could find. They are pretty trivial,
>> so i wont bother spamming the ML with 40+ patches until the core changes are
>> upstreamed. It's also not exhaustive, as i'm sure i missed a few cases of stack
>> usage, but they can be removed any time between the deprecation of public
>> sizeof(AVPacket) and it's effective removal 2+ years from now.
>> Then there's the few cases where an AVPacket is part of another public struct,
>> as is the case of AVPacketList, or attached_pic in AVSteam. The latter i could
>> adapt right now, but it would mean a lot of preprocessor checks littering the
>> codebase until removed, so i refrained from doing so.
>>
>> James Almer (10):
>> avformat/mux: use av_packet_alloc() to allocate packets
>> avformat/movenc: use av_packet_alloc() to allocate packets
>> avformat/utils: use av_packet_alloc() to allocate packets
>> doc/examples/demuxing_decoding: use av_packet_alloc() to allocate
>> packets
>> doc/examples/transcode_aac: use av_packet_alloc() to allocate packets
>> doc/examples/transcoding: use av_packet_alloc() to allocate packets
>> fftools/ffprobe: use av_packet_alloc() to allocate packets
>> fftools/ffmpeg: use av_packet_alloc() to allocate packets
>> fftools/ffplay: use av_packet_alloc() to allocate packets
>> avcodec/packet: deprecate av_init_packet()
>>
>> doc/examples/demuxing_decoding.c | 25 +--
>> doc/examples/transcode_aac.c | 46 +++--
>> doc/examples/transcoding.c | 48 +++--
>> fftools/ffmpeg.c | 318 ++++++++++++++++---------------
>> fftools/ffmpeg.h | 4 +
>> fftools/ffmpeg_opt.c | 5 +-
>> fftools/ffplay.c | 222 ++++++++++++---------
>> fftools/ffprobe.c | 34 ++--
>> libavcodec/avpacket.c | 23 ++-
>> libavcodec/packet.h | 23 ++-
>> libavcodec/version.h | 3 +
>> libavformat/avformat.h | 4 +
>> libavformat/internal.h | 6 +
>> libavformat/movenc.c | 101 ++++++----
>> libavformat/movenc.h | 2 +
>> libavformat/movenchint.c | 19 +-
>> libavformat/mux.c | 44 +++--
>> libavformat/options.c | 9 +
>> libavformat/utils.c | 106 ++++++-----
>> 19 files changed, 613 insertions(+), 429 deletions(-)
>>
>
> Hi James,
>
> In case you didn't see, there is some weirdness with fate over the commits:
> https://patchwork.ffmpeg.org/project/ffmpeg/list/?series=3189
Yeah, i messed up and placed a patch using a FF_API_ define before the
patch that introduced it :p
With all 10 patches applied it works as intended, but patch 10/10 needs
to go in first to ensure the above doesn't happen.
More information about the ffmpeg-devel
mailing list