mbox series

[FFmpeg-devel,00/12,v2] AVCodecContext and AVCodecParameters side data

Message ID 20230828123617.57535-1-jamrial@gmail.com
Headers show
Series AVCodecContext and AVCodecParameters side data | expand

Message

James Almer Aug. 28, 2023, 12:34 p.m. UTC
This is an updated version of the set i sent last month.
Changes since the first version:
- Renamed the field in AVCodecContext to not conflict with Jan Ekström's
  patchset introducing a similar struct for frame side data.
- AVCodecContext.coded_side_data is now deprecated for encoding scenarios
  only, leaving it in place for the (as of this set) undocumented decoding
  scenario, which is now documented. This way coded_side_data and
  packet_side_data have distinct and clear usage for decoding.

James Almer (12):
  avcodec/avcodec: add side data to AVCodecContext
  avcodec/codec_par: add side data to AVCodecParameters
  avformat/avformat: use the side data from AVStream.codecpar
  fftools/ffmpeg: stop using AVStream.side_data
  fftools/ffplay: stop using AVStream.side_data
  fftools/ffprobe: stop using AVStream.side_data
  avcodec/hevcdec: check for DOVI configuration record in AVCodecContext
    side data
  avcodec/decode: check for global side data in AVCodecContext side data
  fftools/ffmpeg: stop injecting stream side data in packets
  fftools/ffplay: stop injecting stream side data in packets
  avcodec/avcodec: deprecate coded_side_data
  fftools: stop propagating the encoder's coded_side_data

 fftools/ffmpeg_demux.c                        |  29 +----
 fftools/ffmpeg_enc.c                          |  31 ++----
 fftools/ffmpeg_filter.c                       |   5 +-
 fftools/ffmpeg_mux_init.c                     |  16 +--
 fftools/ffplay.c                              |  10 +-
 fftools/ffprobe.c                             |  30 +++--
 libavcodec/avcodec.c                          |  30 +++++
 libavcodec/avcodec.h                          |  13 ++-
 libavcodec/avpacket.c                         | 103 ++++++++++++++++++
 libavcodec/codec_par.c                        |  43 ++++++++
 libavcodec/codec_par.h                        |   6 +
 libavcodec/decode.c                           |  87 +++++++++++++--
 libavcodec/decode.h                           |   7 +-
 libavcodec/encode.c                           |  25 +++++
 libavcodec/encode.h                           |   5 +
 libavcodec/hevcdec.c                          |  15 ++-
 libavcodec/internal.h                         |   5 -
 libavcodec/libaomenc.c                        |   2 +-
 libavcodec/libopenh264enc.c                   |   2 +-
 libavcodec/libsvtav1.c                        |   2 +-
 libavcodec/libvpxenc.c                        |   2 +-
 libavcodec/libx264.c                          |   2 +-
 libavcodec/libx265.c                          |   2 +-
 libavcodec/mpeg12dec.c                        |   2 +-
 libavcodec/mpegvideo_enc.c                    |   2 +-
 libavcodec/nvenc.c                            |   2 +-
 libavcodec/packet.h                           |  64 +++++++++++
 libavcodec/qsvenc.c                           |   2 +-
 libavcodec/utils.c                            |  31 ------
 libavcodec/version_major.h                    |   1 +
 libavdevice/android_camera.c                  |   6 +-
 libavformat/avformat.c                        |  42 ++-----
 libavformat/avformat.h                        |  28 +++++
 libavformat/concatdec.c                       |   1 -
 libavformat/dashdec.c                         |  11 --
 libavformat/demux.c                           |  40 ++++++-
 libavformat/demux_utils.c                     |   4 +
 libavformat/dovi_isom.c                       |   2 +-
 libavformat/dump.c                            |   6 +-
 libavformat/hls.c                             |  11 --
 libavformat/hlsenc.c                          |  11 +-
 libavformat/internal.h                        |   4 +
 libavformat/matroska.c                        |   2 +-
 libavformat/matroskadec.c                     |  20 ++--
 libavformat/matroskaenc.c                     |  48 ++++----
 libavformat/mov.c                             |  41 ++++---
 libavformat/movenc.c                          |  73 ++++++-------
 libavformat/mp3enc.c                          |   8 +-
 libavformat/mpegenc.c                         |  15 ++-
 libavformat/mpegts.c                          |   2 +-
 libavformat/mux.c                             |  19 ++++
 libavformat/mxfdec.c                          |   9 +-
 libavformat/mxfenc.c                          |   8 +-
 libavformat/options.c                         |   2 +
 libavformat/replaygain.c                      |   6 +-
 libavformat/seek.c                            |   2 +
 libavformat/version_major.h                   |   1 +
 tests/ref/fate/autorotate                     |   4 +-
 tests/ref/fate/copy-trac3074                  |   2 +-
 tests/ref/fate/matroska-avoid-negative-ts     |   2 +-
 tests/ref/fate/matroska-dovi-write-config7    |   2 +-
 tests/ref/fate/matroska-dovi-write-config8    |   2 +-
 tests/ref/fate/matroska-encoding-delay        |   2 +-
 .../fate/matroska-mastering-display-metadata  |   4 +-
 tests/ref/fate/matroska-spherical-mono-remux  |   4 +-
 tests/ref/fate/matroska-stereo_mode           |   8 +-
 tests/ref/fate/matroska-vp8-alpha-remux       |   2 +-
 .../ref/fate/mov-mp4-disposition-mpegts-remux |   4 +-
 tests/ref/fate/mxf-d10-user-comments          |   2 +-
 tests/ref/fate/mxf-remux-applehdr10           |   2 +-
 tests/ref/fate/vp9-superframe-bsf             |   2 +-
 71 files changed, 701 insertions(+), 339 deletions(-)

Comments

Anton Khirnov Aug. 29, 2023, 7:55 a.m. UTC | #1
Quoting James Almer (2023-08-28 14:34:52)
> This is an updated version of the set i sent last month.
> Changes since the first version:
> - Renamed the field in AVCodecContext to not conflict with Jan Ekström's
>   patchset introducing a similar struct for frame side data.
> - AVCodecContext.coded_side_data is now deprecated for encoding scenarios
>   only, leaving it in place for the (as of this set) undocumented decoding
>   scenario, which is now documented. This way coded_side_data and
>   packet_side_data have distinct and clear usage for decoding.

I do not understand the reasoning for this, it seems to me like a
pointless API break, after which we end up with two fields for the same
thing.
James Almer Aug. 29, 2023, 11:39 a.m. UTC | #2
On 8/29/2023 4:55 AM, Anton Khirnov wrote:
> Quoting James Almer (2023-08-28 14:34:52)
>> This is an updated version of the set i sent last month.
>> Changes since the first version:
>> - Renamed the field in AVCodecContext to not conflict with Jan Ekström's
>>    patchset introducing a similar struct for frame side data.
>> - AVCodecContext.coded_side_data is now deprecated for encoding scenarios
>>    only, leaving it in place for the (as of this set) undocumented decoding
>>    scenario, which is now documented. This way coded_side_data and
>>    packet_side_data have distinct and clear usage for decoding.
> 
> I do not understand the reasoning for this, it seems to me like a
> pointless API break, after which we end up with two fields for the same
> thing.

After this set, for decoding scenarios side data may be both set by the 
user or by lavc. This is not something that should be done in the same 
field.

coded_side_data has always been a read-only field as far as the API user 
is concerned. This set documents the fact it's being set during 
decoding, something that started happening not too long ago but was left 
undocumented, and deprecates its usage for encoding in favor of the new 
field, which is a direct match in lavc to how lavf, or any other user, 
handles side data.