Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
* [FFmpeg-devel] [PATCH 00/11 v5] AVCodecContext and AVCodecParameters side data
@ 2023-09-27 13:12 James Almer
  2023-09-27 13:12 ` [FFmpeg-devel] [PATCH 01/11] avcodec/packet: add generic side data helpers James Almer
                   ` (10 more replies)
  0 siblings, 11 replies; 27+ messages in thread
From: James Almer @ 2023-09-27 13:12 UTC (permalink / raw)
  To: ffmpeg-devel

Changes since the previous version:
- Removed AVPacketSideDataSet altogheter. Array and size fields now reside
  without being wrapped. Helpers now take pointer to array of side data and
  pointer to size as input/output arguments.
- Added some description for AVPacketSideData and where the API user may expect
  it being used, or where they may use it.

Missing version bumps and APIChanges entries.

James Almer (11):
  avcodec/packet: add generic side data helpers
  avcodec/codec_par: add side data to AVCodecParameters
  avformat/avformat: use the side data from AVStream.codecpar
  avcodec/packet: add some documentation for AVPacketSideData
  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

 fftools/ffmpeg_demux.c                        |  30 +----
 fftools/ffmpeg_enc.c                          |  31 ++---
 fftools/ffmpeg_filter.c                       |   6 +-
 fftools/ffmpeg_mux_init.c                     |  21 ++--
 fftools/ffplay.c                              |  11 +-
 fftools/ffprobe.c                             |  30 +++--
 libavcodec/avcodec.h                          |   2 +-
 libavcodec/avpacket.c                         |  99 ++++++++++++++++
 libavcodec/codec_par.c                        |  48 ++++++++
 libavcodec/codec_par.h                        |  11 ++
 libavcodec/decode.c                           |  58 +++++++--
 libavcodec/decode.h                           |   3 +
 libavcodec/hevcdec.c                          |  15 ++-
 libavcodec/packet.h                           | 111 +++++++++++++++++-
 libavdevice/android_camera.c                  |  10 +-
 libavformat/avformat.c                        |  42 ++-----
 libavformat/avformat.h                        |  28 ++++-
 libavformat/concatdec.c                       |   1 -
 libavformat/dashdec.c                         |  11 --
 libavformat/demux.c                           |  53 +++++----
 libavformat/demux_utils.c                     |   4 +
 libavformat/dovi_isom.c                       |   8 +-
 libavformat/dump.c                            |   6 +-
 libavformat/hls.c                             |  11 --
 libavformat/hlsenc.c                          |  11 +-
 libavformat/internal.h                        |   4 +
 libavformat/matroskadec.c                     |  47 ++++----
 libavformat/matroskaenc.c                     |  55 +++++----
 libavformat/mov.c                             |  91 +++++++-------
 libavformat/movenc.c                          |  84 +++++++------
 libavformat/mp3enc.c                          |  10 +-
 libavformat/mpegenc.c                         |  20 +++-
 libavformat/mpegts.c                          |   9 +-
 libavformat/mux.c                             |  20 ++++
 libavformat/mxfdec.c                          |  24 ++--
 libavformat/mxfenc.c                          |  10 +-
 libavformat/options.c                         |   2 +
 libavformat/replaygain.c                      |  10 +-
 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 +-
 54 files changed, 730 insertions(+), 362 deletions(-)

-- 
2.42.0

_______________________________________________
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".

^ permalink raw reply	[flat|nested] 27+ messages in thread

* [FFmpeg-devel] [PATCH 01/11] avcodec/packet: add generic side data helpers
  2023-09-27 13:12 [FFmpeg-devel] [PATCH 00/11 v5] AVCodecContext and AVCodecParameters side data James Almer
@ 2023-09-27 13:12 ` James Almer
  2023-10-03 12:54   ` Anton Khirnov
  2023-09-27 13:12 ` [FFmpeg-devel] [PATCH 02/11] avcodec/codec_par: add side data to AVCodecParameters James Almer
                   ` (9 subsequent siblings)
  10 siblings, 1 reply; 27+ messages in thread
From: James Almer @ 2023-09-27 13:12 UTC (permalink / raw)
  To: ffmpeg-devel

Handling AVPacketSideData directly, which can used on structs other than
AVPacket.
This will be useful in the following commits.

Signed-off-by: James Almer <jamrial@gmail.com>
---
 libavcodec/avpacket.c | 99 +++++++++++++++++++++++++++++++++++++++++++
 libavcodec/packet.h   | 96 +++++++++++++++++++++++++++++++++++++++--
 2 files changed, 191 insertions(+), 4 deletions(-)

diff --git a/libavcodec/avpacket.c b/libavcodec/avpacket.c
index 9ec1feb068..750a17de48 100644
--- a/libavcodec/avpacket.c
+++ b/libavcodec/avpacket.c
@@ -646,3 +646,102 @@ int ff_side_data_set_prft(AVPacket *pkt, int64_t timestamp)
 
     return 0;
 }
+
+const AVPacketSideData *av_packet_side_data_get(const AVPacketSideData *sd, int nb_sd,
+                                                enum AVPacketSideDataType type)
+{
+    for (int i = 0; i < nb_sd; i++)
+        if (sd[i].type == type)
+            return &sd[i];
+
+    return NULL;
+}
+
+static AVPacketSideData *packet_side_data_add(AVPacketSideData **psd, int *pnb_sd,
+                                              enum AVPacketSideDataType type,
+                                              void *data, size_t size)
+{
+    AVPacketSideData *sd = *psd, *tmp;
+    int nb_sd = *pnb_sd;
+
+    for (int i = 0; i < nb_sd; i++) {
+        if (sd[i].type != type)
+            continue;
+
+        av_free(sd[i].data);
+        sd[i].data = data;
+        sd[i].size = size;
+        return &sd[i];
+    }
+
+    if (nb_sd + 1U > INT_MAX)
+        return NULL;
+
+    tmp = av_realloc_array(sd, nb_sd + 1, sizeof(*tmp));
+    if (!tmp)
+        return NULL;
+
+    *psd = sd = tmp;
+    sd[nb_sd].type = type;
+    sd[nb_sd].data = data;
+    sd[nb_sd].size = size;
+    *pnb_sd = nb_sd + 1;
+
+    return &sd[nb_sd];
+}
+
+AVPacketSideData *av_packet_side_data_add(AVPacketSideData **psd, int *pnb_sd,
+                                          enum AVPacketSideDataType type,
+                                          void *data, size_t size, int flags)
+{
+    return packet_side_data_add(psd, pnb_sd, type, data, size);
+}
+
+AVPacketSideData *av_packet_side_data_new(AVPacketSideData **psd, int *pnb_sd,
+                                          enum AVPacketSideDataType type,
+                                          size_t size, int flags)
+{
+    AVPacketSideData *sd = NULL;
+    void *data;
+
+    if (size > SIZE_MAX - AV_INPUT_BUFFER_PADDING_SIZE)
+        return NULL;
+
+    data = av_malloc(size + AV_INPUT_BUFFER_PADDING_SIZE);
+    if (!data)
+        return NULL;
+
+    sd = packet_side_data_add(psd, pnb_sd, type, data, size);
+    if (!sd)
+        av_freep(&data);
+
+    return sd;
+}
+
+void av_packet_side_data_remove(AVPacketSideData *sd, int *pnb_sd,
+                                enum AVPacketSideDataType type)
+{
+    int nb_sd = *pnb_sd;
+
+    for (int i = nb_sd - 1; i >= 0; i--) {
+        if (sd[i].type != type)
+            continue;
+        av_free(sd[i].data);
+        sd[i] = sd[--nb_sd];
+        break;
+    }
+
+    *pnb_sd = nb_sd;
+}
+
+void av_packet_side_data_free(AVPacketSideData **psd, int *pnb_sd)
+{
+    AVPacketSideData *sd = *psd;
+    int nb_sd = *pnb_sd;
+
+    for (int i = 0; i < nb_sd; i++)
+        av_free(sd[i].data);
+
+    av_freep(psd);
+    *pnb_sd = 0;
+}
diff --git a/libavcodec/packet.h b/libavcodec/packet.h
index f28e7e7011..96fc0084d6 100644
--- a/libavcodec/packet.h
+++ b/libavcodec/packet.h
@@ -33,9 +33,9 @@
 #include "libavcodec/version_major.h"
 
 /**
- * @defgroup lavc_packet AVPacket
+ * @defgroup lavc_packet_side_data AVPacketSideData
  *
- * Types and functions for working with AVPacket.
+ * Types and functions for working with AVPacketSideData.
  * @{
  */
 enum AVPacketSideDataType {
@@ -318,6 +318,96 @@ typedef struct AVPacketSideData {
     enum AVPacketSideDataType type;
 } AVPacketSideData;
 
+/**
+ * Allocate a new packet side data.
+ *
+ * @param sd    pointer to an array of side data to which the side data should
+ *              be added. *sd may be NULL, in which case the array will be
+ *              initialized.
+ * @param nb_sd pointer to an integer containing the number of entries in
+ *              the array. The integer value will be increased by 1 on success.
+ * @param type  side data type
+ * @param size  desired side data size
+ * @param flags currently unused. Must be zero
+ *
+ * @return pointer to freshly allocated side data on success, or NULL otherwise.
+ */
+AVPacketSideData *av_packet_side_data_new(AVPacketSideData **psd, int *pnb_sd,
+                                          enum AVPacketSideDataType type,
+                                          size_t size, int flags);
+
+/**
+ * Wrap existing data as packet side data.
+ *
+ * @param sd    pointer to an array of side data to which the side data should
+ *              be added. *sd may be NULL, in which case the array will be
+ *              initialized
+ * @param nb_sd pointer to an integer containing the number of entries in
+ *              the array. The integer value will be increased by 1 on success.
+ * @param type  side data type
+ * @param data  a data array. It must be allocated with the av_malloc() family
+ *              of functions. The ownership of the data is transferred to the
+ *              side data array on success
+ * @param size  size of the data array
+ * @param flags currently unused. Must be zero
+ *
+ * @return pointer to freshly allocated side data on success, or NULL otherwise
+ *         On failure, the side data array is unchanged and the data remains
+ *         owned by the caller.
+ */
+AVPacketSideData *av_packet_side_data_add(AVPacketSideData **sd, int *nb_sd,
+                                          enum AVPacketSideDataType type,
+                                          void *data, size_t size, int flags);
+
+/**
+ * Get side information from a side data array.
+ *
+ * @param sd    the array from which the side data should be fetched
+ * @param nb_sd value containing the number of entries in the array.
+ * @param type  desired side information type
+ *
+ * @return pointer to side data if present or NULL otherwise
+ */
+const AVPacketSideData *av_packet_side_data_get(const AVPacketSideData *sd,
+                                                int nb_sd,
+                                                enum AVPacketSideDataType type);
+
+/**
+ * Remove side data of the given type from a side data array.
+ *
+ * @param sd    the array from which the side data should be removed
+ * @param nb_sd pointer to an integer containing the number of entries in
+ *              the array. Will be reduced by the amount of entries removed
+ *              upon return
+ * @param type  side information type
+ */
+void av_packet_side_data_remove(AVPacketSideData *sd, int *nb_sd,
+                                enum AVPacketSideDataType type);
+
+/**
+ * Convenience function to free all the side data stored in an array, and
+ * the array itself.
+ *
+ * @param sd    pointer to array of side data to free. Will be set to NULL
+ *              upon return.
+ * @param nb_sd pointer to an integer containing the number of entries in
+ *              the array. Will be set to 0 upon return.
+ */
+void av_packet_side_data_free(AVPacketSideData **sd, int *nb_sd);
+
+const char *av_packet_side_data_name(enum AVPacketSideDataType type);
+
+/**
+ * @}
+ */
+
+/**
+ * @defgroup lavc_packet AVPacket
+ *
+ * Types and functions for working with AVPacket.
+ * @{
+ */
+
 /**
  * This structure stores compressed data. It is typically exported by demuxers
  * and then passed as input to decoders, or received as output from encoders and
@@ -603,8 +693,6 @@ int av_packet_shrink_side_data(AVPacket *pkt, enum AVPacketSideDataType type,
 uint8_t* av_packet_get_side_data(const AVPacket *pkt, enum AVPacketSideDataType type,
                                  size_t *size);
 
-const char *av_packet_side_data_name(enum AVPacketSideDataType type);
-
 /**
  * Pack a dictionary for use in side_data.
  *
-- 
2.42.0

_______________________________________________
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".

^ permalink raw reply	[flat|nested] 27+ messages in thread

* [FFmpeg-devel] [PATCH 02/11] avcodec/codec_par: add side data to AVCodecParameters
  2023-09-27 13:12 [FFmpeg-devel] [PATCH 00/11 v5] AVCodecContext and AVCodecParameters side data James Almer
  2023-09-27 13:12 ` [FFmpeg-devel] [PATCH 01/11] avcodec/packet: add generic side data helpers James Almer
@ 2023-09-27 13:12 ` James Almer
  2023-10-03 11:23   ` Anton Khirnov
  2023-09-27 13:12 ` [FFmpeg-devel] [PATCH 03/11] avformat/avformat: use the side data from AVStream.codecpar James Almer
                   ` (8 subsequent siblings)
  10 siblings, 1 reply; 27+ messages in thread
From: James Almer @ 2023-09-27 13:12 UTC (permalink / raw)
  To: ffmpeg-devel

This will simplify the propagation of side data to decoders and from encoders.
Global side data will now reside in the AVCodecContext, thus be available
during init(), removing the need to propagate it inside packets.

Global and frame specific side data will therefore be distinct.

Signed-off-by: James Almer <jamrial@gmail.com>
---
 libavcodec/codec_par.c | 48 ++++++++++++++++++++++++++++++++++++++++++
 libavcodec/codec_par.h | 11 ++++++++++
 2 files changed, 59 insertions(+)

diff --git a/libavcodec/codec_par.c b/libavcodec/codec_par.c
index e4e4cd48d3..364569c0e6 100644
--- a/libavcodec/codec_par.c
+++ b/libavcodec/codec_par.c
@@ -27,11 +27,13 @@
 #include "libavutil/mem.h"
 #include "avcodec.h"
 #include "codec_par.h"
+#include "packet.h"
 
 static void codec_parameters_reset(AVCodecParameters *par)
 {
     av_freep(&par->extradata);
     av_channel_layout_uninit(&par->ch_layout);
+    av_packet_side_data_free(&par->side_data, &par->nb_side_data);
 
     memset(par, 0, sizeof(*par));
 
@@ -72,6 +74,35 @@ void avcodec_parameters_free(AVCodecParameters **ppar)
     av_freep(ppar);
 }
 
+static int codec_parameters_copy_side_data(AVPacketSideData **pdst, int *pnb_dst,
+                                           const AVPacketSideData *src, int nb_src)
+{
+    AVPacketSideData *dst;
+    int nb_dst = *pnb_dst;
+
+    if (!src)
+        return 0;
+
+    *pdst = dst = av_calloc(nb_src, sizeof(*dst));
+    if (!dst)
+        return AVERROR(ENOMEM);
+
+    for (int i = 0; i < nb_src; i++) {
+        const AVPacketSideData *src_sd = &src[i];
+        AVPacketSideData *dst_sd = &dst[i];
+
+        dst_sd->data = av_memdup(src_sd->data, src_sd->size);
+        if (!dst_sd->data)
+            return AVERROR(ENOMEM);
+
+        dst_sd->type = src_sd->type;
+        dst_sd->size = src_sd->size;
+        *pnb_dst = ++nb_dst;
+    }
+
+    return 0;
+}
+
 int avcodec_parameters_copy(AVCodecParameters *dst, const AVCodecParameters *src)
 {
     int ret;
@@ -82,6 +113,8 @@ int avcodec_parameters_copy(AVCodecParameters *dst, const AVCodecParameters *src
     dst->ch_layout      = (AVChannelLayout){0};
     dst->extradata      = NULL;
     dst->extradata_size = 0;
+    dst->side_data      = NULL;
+    dst->nb_side_data   = 0;
     if (src->extradata) {
         dst->extradata = av_mallocz(src->extradata_size + AV_INPUT_BUFFER_PADDING_SIZE);
         if (!dst->extradata)
@@ -89,6 +122,10 @@ int avcodec_parameters_copy(AVCodecParameters *dst, const AVCodecParameters *src
         memcpy(dst->extradata, src->extradata, src->extradata_size);
         dst->extradata_size = src->extradata_size;
     }
+    ret = codec_parameters_copy_side_data(&dst->side_data, &dst->nb_side_data,
+                                           src->side_data,  src->nb_side_data);
+    if (ret < 0)
+        return ret;
 
     ret = av_channel_layout_copy(&dst->ch_layout, &src->ch_layout);
     if (ret < 0)
@@ -178,6 +215,11 @@ FF_ENABLE_DEPRECATION_WARNINGS
         par->extradata_size = codec->extradata_size;
     }
 
+    ret = codec_parameters_copy_side_data(&par->side_data, &par->nb_side_data,
+                                          codec->coded_side_data, codec->nb_coded_side_data);
+    if (ret < 0)
+        return ret;
+
     return 0;
 }
 
@@ -262,5 +304,11 @@ FF_ENABLE_DEPRECATION_WARNINGS
         codec->extradata_size = par->extradata_size;
     }
 
+    av_packet_side_data_free(&codec->coded_side_data, &codec->nb_coded_side_data);
+    ret = codec_parameters_copy_side_data(&codec->coded_side_data, &codec->nb_coded_side_data,
+                                          par->side_data, par->nb_side_data);
+    if (ret < 0)
+        return ret;
+
     return 0;
 }
diff --git a/libavcodec/codec_par.h b/libavcodec/codec_par.h
index add90fdb1e..85017ec76e 100644
--- a/libavcodec/codec_par.h
+++ b/libavcodec/codec_par.h
@@ -29,6 +29,7 @@
 #include "libavutil/pixfmt.h"
 
 #include "codec_id.h"
+#include "packet.h"
 
 /**
  * @addtogroup lavc_core
@@ -223,6 +224,16 @@ typedef struct AVCodecParameters {
      * when no higher-level timing information is available.
      */
     AVRational framerate;
+
+    /**
+     * Additional data associated with the entire stream.
+     */
+    AVPacketSideData *side_data;
+
+    /**
+     * Amount of entries in @ref side_data.
+     */
+    int nb_side_data;
 } AVCodecParameters;
 
 /**
-- 
2.42.0

_______________________________________________
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".

^ permalink raw reply	[flat|nested] 27+ messages in thread

* [FFmpeg-devel] [PATCH 03/11] avformat/avformat: use the side data from AVStream.codecpar
  2023-09-27 13:12 [FFmpeg-devel] [PATCH 00/11 v5] AVCodecContext and AVCodecParameters side data James Almer
  2023-09-27 13:12 ` [FFmpeg-devel] [PATCH 01/11] avcodec/packet: add generic side data helpers James Almer
  2023-09-27 13:12 ` [FFmpeg-devel] [PATCH 02/11] avcodec/codec_par: add side data to AVCodecParameters James Almer
@ 2023-09-27 13:12 ` James Almer
  2023-10-03 11:38   ` Anton Khirnov
  2023-09-27 13:12 ` [FFmpeg-devel] [PATCH 04/11] avcodec/packet: add some documentation for AVPacketSideData James Almer
                   ` (7 subsequent siblings)
  10 siblings, 1 reply; 27+ messages in thread
From: James Almer @ 2023-09-27 13:12 UTC (permalink / raw)
  To: ffmpeg-devel

Deprecate AVStream.side_data and its helpers in favor of the AVStream's
codecpar.side_data.

This will considerably simplify the propagation of global side data to decoders
and from encoders. Instead of having to do it inside packets, it will be
available during init().
Global and frame specific side data will therefore be distinct.

Signed-off-by: James Almer <jamrial@gmail.com>
---
 libavdevice/android_camera.c | 10 ++--
 libavformat/avformat.c       | 42 ++++-------------
 libavformat/avformat.h       | 28 ++++++++++-
 libavformat/concatdec.c      |  1 -
 libavformat/dashdec.c        | 11 -----
 libavformat/demux.c          | 53 +++++++++++++--------
 libavformat/demux_utils.c    |  4 ++
 libavformat/dovi_isom.c      |  8 ++--
 libavformat/dump.c           |  6 +--
 libavformat/hls.c            | 11 -----
 libavformat/hlsenc.c         | 11 +++--
 libavformat/internal.h       |  4 ++
 libavformat/matroskadec.c    | 47 +++++++++----------
 libavformat/matroskaenc.c    | 55 ++++++++++++++--------
 libavformat/mov.c            | 91 ++++++++++++++++++++----------------
 libavformat/movenc.c         | 84 +++++++++++++++++----------------
 libavformat/mp3enc.c         | 10 ++--
 libavformat/mpegenc.c        | 20 +++++---
 libavformat/mpegts.c         |  9 ++--
 libavformat/mux.c            | 20 ++++++++
 libavformat/mxfdec.c         | 24 ++++++----
 libavformat/mxfenc.c         | 10 ++--
 libavformat/options.c        |  2 +
 libavformat/replaygain.c     | 10 ++--
 libavformat/seek.c           |  2 +
 libavformat/version_major.h  |  1 +
 26 files changed, 323 insertions(+), 251 deletions(-)

diff --git a/libavdevice/android_camera.c b/libavdevice/android_camera.c
index 0425b27518..602b59047d 100644
--- a/libavdevice/android_camera.c
+++ b/libavdevice/android_camera.c
@@ -639,7 +639,7 @@ static int wait_for_image_format(AVFormatContext *avctx)
 static int add_display_matrix(AVFormatContext *avctx, AVStream *st)
 {
     AndroidCameraCtx *ctx = avctx->priv_data;
-    uint8_t *side_data;
+    AVPacketSideData *side_data;
     int32_t display_matrix[9];
 
     av_display_rotation_set(display_matrix, ctx->sensor_orientation);
@@ -648,14 +648,16 @@ static int add_display_matrix(AVFormatContext *avctx, AVStream *st)
         av_display_matrix_flip(display_matrix, 1, 0);
     }
 
-    side_data = av_stream_new_side_data(st,
-            AV_PKT_DATA_DISPLAYMATRIX, sizeof(display_matrix));
+    side_data = av_packet_side_data_new(&st->codecpar->side_data,
+                                        &st->codecpar->nb_side_data,
+                                        AV_PKT_DATA_DISPLAYMATRIX,
+                                        sizeof(display_matrix), 0);
 
     if (!side_data) {
         return AVERROR(ENOMEM);
     }
 
-    memcpy(side_data, display_matrix, sizeof(display_matrix));
+    memcpy(side_data->data, display_matrix, sizeof(display_matrix));
 
     return 0;
 }
diff --git a/libavformat/avformat.c b/libavformat/avformat.c
index 7ff0cf3429..5b8bb7879e 100644
--- a/libavformat/avformat.c
+++ b/libavformat/avformat.c
@@ -48,9 +48,13 @@ void ff_free_stream(AVStream **pst)
     if (!st)
         return;
 
+#if FF_API_AVSTREAM_SIDE_DATA
+FF_DISABLE_DEPRECATION_WARNINGS
     for (int i = 0; i < st->nb_side_data; i++)
         av_freep(&st->side_data[i].data);
     av_freep(&st->side_data);
+FF_ENABLE_DEPRECATION_WARNINGS
+#endif
 
     if (st->attached_pic.data)
         av_packet_unref(&st->attached_pic);
@@ -140,6 +144,8 @@ void avformat_free_context(AVFormatContext *s)
     av_free(s);
 }
 
+#if FF_API_AVSTREAM_SIDE_DATA
+FF_DISABLE_DEPRECATION_WARNINGS
 uint8_t *av_stream_get_side_data(const AVStream *st,
                                  enum AVPacketSideDataType type, size_t *size)
 {
@@ -207,36 +213,8 @@ uint8_t *av_stream_new_side_data(AVStream *st, enum AVPacketSideDataType type,
 
     return data;
 }
-
-int ff_stream_side_data_copy(AVStream *dst, const AVStream *src)
-{
-    /* Free existing side data*/
-    for (int i = 0; i < dst->nb_side_data; i++)
-        av_free(dst->side_data[i].data);
-    av_freep(&dst->side_data);
-    dst->nb_side_data = 0;
-
-    /* Copy side data if present */
-    if (src->nb_side_data) {
-        dst->side_data = av_calloc(src->nb_side_data,
-                                   sizeof(*dst->side_data));
-        if (!dst->side_data)
-            return AVERROR(ENOMEM);
-        dst->nb_side_data = src->nb_side_data;
-
-        for (int i = 0; i < src->nb_side_data; i++) {
-            uint8_t *data = av_memdup(src->side_data[i].data,
-                                      src->side_data[i].size);
-            if (!data)
-                return AVERROR(ENOMEM);
-            dst->side_data[i].type = src->side_data[i].type;
-            dst->side_data[i].size = src->side_data[i].size;
-            dst->side_data[i].data = data;
-        }
-    }
-
-    return 0;
-}
+FF_ENABLE_DEPRECATION_WARNINGS
+#endif
 
 /**
  * Copy all stream parameters from source to destination stream, with the
@@ -272,10 +250,6 @@ static int stream_params_copy(AVStream *dst, const AVStream *src)
     if (ret < 0)
         return ret;
 
-    ret = ff_stream_side_data_copy(dst, src);
-    if (ret < 0)
-        return ret;
-
     av_packet_unref(&dst->attached_pic);
     if (src->attached_pic.data) {
         ret = av_packet_ref(&dst->attached_pic, &src->attached_pic);
diff --git a/libavformat/avformat.h b/libavformat/avformat.h
index 43175ba332..9100d310b9 100644
--- a/libavformat/avformat.h
+++ b/libavformat/avformat.h
@@ -938,6 +938,7 @@ typedef struct AVStream {
      */
     AVPacket attached_pic;
 
+#if FF_API_AVSTREAM_SIDE_DATA
     /**
      * An array of side data that applies to the whole stream (i.e. the
      * container does not allow it to change between packets).
@@ -954,13 +955,20 @@ typedef struct AVStream {
      *
      * Freed by libavformat in avformat_free_context().
      *
-     * @see av_format_inject_global_side_data()
+     * @deprecated use AVStream's @ref AVCodecParameters.side_data
+     *             "codecpar side data".
      */
+    attribute_deprecated
     AVPacketSideData *side_data;
     /**
      * The number of elements in the AVStream.side_data array.
+     *
+     * @deprecated use AVStream's @ref AVCodecParameters.side_data
+     *             "codecpar side data".
      */
+    attribute_deprecated
     int            nb_side_data;
+#endif
 
     /**
      * Flags indicating events happening on the stream, a combination of
@@ -1718,11 +1726,18 @@ typedef struct AVFormatContext {
     int (*io_close2)(struct AVFormatContext *s, AVIOContext *pb);
 } AVFormatContext;
 
+#if FF_API_AVSTREAM_SIDE_DATA
 /**
  * This function will cause global side data to be injected in the next packet
  * of each stream as well as after any subsequent seek.
+ *
+ * @deprecated global side data is always available in every AVStream's
+ *             @ref AVCodecParameters.side_data "codecpar side data" array.
+ * @see av_packet_side_data_get()
  */
+attribute_deprecated
 void av_format_inject_global_side_data(AVFormatContext *s);
+#endif
 
 /**
  * Returns the method used to set ctx->duration.
@@ -1847,6 +1862,7 @@ const AVClass *av_stream_get_class(void);
  */
 AVStream *avformat_new_stream(AVFormatContext *s, const struct AVCodec *c);
 
+#if FF_API_AVSTREAM_SIDE_DATA
 /**
  * Wrap an existing array as stream side data.
  *
@@ -1859,7 +1875,10 @@ AVStream *avformat_new_stream(AVFormatContext *s, const struct AVCodec *c);
  *
  * @return zero on success, a negative AVERROR code on failure. On failure,
  *         the stream is unchanged and the data remains owned by the caller.
+ * @deprecated use av_packet_side_data_add() with the stream's
+ *             @ref AVCodecParameters.side_data "codecpar side data"
  */
+attribute_deprecated
 int av_stream_add_side_data(AVStream *st, enum AVPacketSideDataType type,
                             uint8_t *data, size_t size);
 
@@ -1871,7 +1890,10 @@ int av_stream_add_side_data(AVStream *st, enum AVPacketSideDataType type,
  * @param size   side information size
  *
  * @return pointer to fresh allocated data or NULL otherwise
+ * @deprecated use av_packet_side_data_new() with the stream's
+ *             @ref AVCodecParameters.side_data "codecpar side data"
  */
+attribute_deprecated
 uint8_t *av_stream_new_side_data(AVStream *stream,
                                  enum AVPacketSideDataType type, size_t size);
 /**
@@ -1883,9 +1905,13 @@ uint8_t *av_stream_new_side_data(AVStream *stream,
  *               or to zero if the desired side data is not present.
  *
  * @return pointer to data if present or NULL otherwise
+ * @deprecated use av_packet_side_data_get() with the stream's
+ *             @ref AVCodecParameters.side_data "codecpar side data"
  */
+attribute_deprecated
 uint8_t *av_stream_get_side_data(const AVStream *stream,
                                  enum AVPacketSideDataType type, size_t *size);
+#endif
 
 AVProgram *av_new_program(AVFormatContext *s, int id);
 
diff --git a/libavformat/concatdec.c b/libavformat/concatdec.c
index 5d4f67d0ac..2aeb4f1dfd 100644
--- a/libavformat/concatdec.c
+++ b/libavformat/concatdec.c
@@ -194,7 +194,6 @@ static int copy_stream_props(AVStream *st, AVStream *source_st)
     avpriv_set_pts_info(st, 64, source_st->time_base.num, source_st->time_base.den);
 
     av_dict_copy(&st->metadata, source_st->metadata, 0);
-    ff_stream_side_data_copy(st, source_st);
     return 0;
 }
 
diff --git a/libavformat/dashdec.c b/libavformat/dashdec.c
index cbe34f4f50..1215407f3c 100644
--- a/libavformat/dashdec.c
+++ b/libavformat/dashdec.c
@@ -1954,17 +1954,6 @@ static int open_demux_for_component(AVFormatContext *s, struct representation *p
 
         // copy disposition
         st->disposition = ist->disposition;
-
-        // copy side data
-        for (int i = 0; i < ist->nb_side_data; i++) {
-            const AVPacketSideData *sd_src = &ist->side_data[i];
-            uint8_t *dst_data;
-
-            dst_data = av_stream_new_side_data(st, sd_src->type, sd_src->size);
-            if (!dst_data)
-                return AVERROR(ENOMEM);
-            memcpy(dst_data, sd_src->data, sd_src->size);
-        }
     }
 
     return 0;
diff --git a/libavformat/demux.c b/libavformat/demux.c
index 6decb08698..e8767e9212 100644
--- a/libavformat/demux.c
+++ b/libavformat/demux.c
@@ -1409,9 +1409,10 @@ FF_ENABLE_DEPRECATION_WARNINGS
             sti->skip_samples = 0;
         }
 
+#if FF_API_AVSTREAM_SIDE_DATA
         if (sti->inject_global_side_data) {
-            for (int i = 0; i < st->nb_side_data; i++) {
-                const AVPacketSideData *const src_sd = &st->side_data[i];
+            for (int i = 0; i < st->codecpar->nb_side_data; i++) {
+                const AVPacketSideData *const src_sd = &st->codecpar->side_data[i];
                 uint8_t *dst_data;
 
                 if (av_packet_get_side_data(pkt, src_sd->type, NULL))
@@ -1427,6 +1428,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
             }
             sti->inject_global_side_data = 0;
         }
+#endif
     }
 
     if (!si->metafree) {
@@ -2431,19 +2433,6 @@ static int extract_extradata(FFFormatContext *si, AVStream *st, const AVPacket *
     return 0;
 }
 
-static int add_coded_side_data(AVStream *st, AVCodecContext *avctx)
-{
-    for (int i = 0; i < avctx->nb_coded_side_data; i++) {
-        const AVPacketSideData *const sd_src = &avctx->coded_side_data[i];
-        uint8_t *dst_data;
-        dst_data = av_stream_new_side_data(st, sd_src->type, sd_src->size);
-        if (!dst_data)
-            return AVERROR(ENOMEM);
-        memcpy(dst_data, sd_src->data, sd_src->size);
-    }
-    return 0;
-}
-
 int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options)
 {
     FFFormatContext *const si = ffformatcontext(ic);
@@ -2969,9 +2958,6 @@ int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options)
 
         if (sti->avctx_inited) {
             ret = avcodec_parameters_from_context(st->codecpar, sti->avctx);
-            if (ret < 0)
-                goto find_stream_info_err;
-            ret = add_coded_side_data(st, sti->avctx);
             if (ret < 0)
                 goto find_stream_info_err;
 
@@ -2986,14 +2972,41 @@ int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options)
                         props->min_bitrate = sti->avctx->rc_min_rate;
                     if (sti->avctx->rc_max_rate > 0)
                         props->max_bitrate = sti->avctx->rc_max_rate;
-                    if (av_stream_add_side_data(st, AV_PKT_DATA_CPB_PROPERTIES,
-                                                (uint8_t *)props, cpb_size))
+                    if (!av_packet_side_data_add(&st->codecpar->side_data,
+                                                 &st->codecpar->nb_side_data,
+                                                 AV_PKT_DATA_CPB_PROPERTIES,
+                                                 (uint8_t *)props, cpb_size, 0))
                         av_free(props);
                 }
             }
         }
 
         sti->avctx_inited = 0;
+#if FF_API_AVSTREAM_SIDE_DATA
+FF_DISABLE_DEPRECATION_WARNINGS
+        if (st->codecpar->nb_side_data > 0) {
+            av_assert0(!st->side_data && !st->nb_side_data);
+            st->side_data = av_calloc(st->codecpar->nb_side_data, sizeof(*st->side_data));
+            if (!st->side_data) {
+                ret = AVERROR(ENOMEM);
+                goto find_stream_info_err;
+            }
+
+            for (int j = 0; j < st->codecpar->nb_side_data; j++) {
+                uint8_t *data = av_memdup(st->codecpar->side_data[j].data,
+                                          st->codecpar->side_data[j].size);
+                if (!data) {
+                    ret = AVERROR(ENOMEM);
+                    goto find_stream_info_err;
+                }
+                st->side_data[j].type = st->codecpar->side_data[j].type;
+                st->side_data[j].size = st->codecpar->side_data[j].size;
+                st->side_data[j].data = data;
+                st->nb_side_data++;
+            }
+        }
+FF_ENABLE_DEPRECATION_WARNINGS
+#endif
     }
 
 find_stream_info_err:
diff --git a/libavformat/demux_utils.c b/libavformat/demux_utils.c
index 56cc6e15d8..2946e82295 100644
--- a/libavformat/demux_utils.c
+++ b/libavformat/demux_utils.c
@@ -80,6 +80,8 @@ AVChapter *avpriv_new_chapter(AVFormatContext *s, int64_t id, AVRational time_ba
     return chapter;
 }
 
+#if FF_API_AVSTREAM_SIDE_DATA
+FF_DISABLE_DEPRECATION_WARNINGS
 void av_format_inject_global_side_data(AVFormatContext *s)
 {
     FFFormatContext *const si = ffformatcontext(s);
@@ -89,6 +91,8 @@ void av_format_inject_global_side_data(AVFormatContext *s)
         ffstream(st)->inject_global_side_data = 1;
     }
 }
+FF_ENABLE_DEPRECATION_WARNINGS
+#endif
 
 int avformat_queue_attached_pictures(AVFormatContext *s)
 {
diff --git a/libavformat/dovi_isom.c b/libavformat/dovi_isom.c
index c8fdf566e4..53c43649b4 100644
--- a/libavformat/dovi_isom.c
+++ b/libavformat/dovi_isom.c
@@ -34,7 +34,6 @@ int ff_isom_parse_dvcc_dvvc(void *logctx, AVStream *st,
     uint32_t buf;
     AVDOVIDecoderConfigurationRecord *dovi;
     size_t dovi_size;
-    int ret;
 
     if (size > (1 << 30) || size < 4)
         return AVERROR_INVALIDDATA;
@@ -64,11 +63,10 @@ int ff_isom_parse_dvcc_dvvc(void *logctx, AVStream *st,
         dovi->dv_bl_signal_compatibility_id = 0;
     }
 
-    ret = av_stream_add_side_data(st, AV_PKT_DATA_DOVI_CONF,
-                                  (uint8_t *)dovi, dovi_size);
-    if (ret < 0) {
+    if (!av_packet_side_data_add(&st->codecpar->side_data, &st->codecpar->nb_side_data,
+                                 AV_PKT_DATA_DOVI_CONF, (uint8_t *)dovi, dovi_size, 0)) {
         av_free(dovi);
-        return ret;
+        return AVERROR(ENOMEM);
     }
 
     av_log(logctx, AV_LOG_TRACE, "DOVI in dvcC/dvvC/dvwC box, version: %d.%d, profile: %d, level: %d, "
diff --git a/libavformat/dump.c b/libavformat/dump.c
index d31e4c2ec6..22fc07a655 100644
--- a/libavformat/dump.c
+++ b/libavformat/dump.c
@@ -431,11 +431,11 @@ static void dump_sidedata(void *ctx, const AVStream *st, const char *indent)
 {
     int i;
 
-    if (st->nb_side_data)
+    if (st->codecpar->nb_side_data)
         av_log(ctx, AV_LOG_INFO, "%sSide data:\n", indent);
 
-    for (i = 0; i < st->nb_side_data; i++) {
-        const AVPacketSideData *sd = &st->side_data[i];
+    for (i = 0; i < st->codecpar->nb_side_data; i++) {
+        const AVPacketSideData *sd = &st->codecpar->side_data[i];
         av_log(ctx, AV_LOG_INFO, "%s  ", indent);
 
         switch (sd->type) {
diff --git a/libavformat/hls.c b/libavformat/hls.c
index 332a5a15bb..f5f549b24d 100644
--- a/libavformat/hls.c
+++ b/libavformat/hls.c
@@ -1852,17 +1852,6 @@ static int set_stream_info_from_input_stream(AVStream *st, struct playlist *pls,
 
     av_dict_copy(&st->metadata, ist->metadata, 0);
 
-    // copy side data
-    for (int i = 0; i < ist->nb_side_data; i++) {
-        const AVPacketSideData *sd_src = &ist->side_data[i];
-        uint8_t *dst_data;
-
-        dst_data = av_stream_new_side_data(st, sd_src->type, sd_src->size);
-        if (!dst_data)
-            return AVERROR(ENOMEM);
-        memcpy(dst_data, sd_src->data, sd_src->size);
-    }
-
     ffstream(st)->need_context_update = 1;
 
     return 0;
diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c
index 08f3746ce7..038d08d207 100644
--- a/libavformat/hlsenc.c
+++ b/libavformat/hlsenc.c
@@ -1353,16 +1353,17 @@ static const char* get_relative_url(const char *master_url, const char *media_ur
 
 static int64_t get_stream_bit_rate(AVStream *stream)
 {
-    AVCPBProperties *props = (AVCPBProperties*)av_stream_get_side_data(
-        stream,
-        AV_PKT_DATA_CPB_PROPERTIES,
-        NULL
+    const AVPacketSideData *sd = av_packet_side_data_get(
+        stream->codecpar->side_data, stream->codecpar->nb_side_data,
+        AV_PKT_DATA_CPB_PROPERTIES
     );
 
     if (stream->codecpar->bit_rate)
         return stream->codecpar->bit_rate;
-    else if (props)
+    else if (sd) {
+        AVCPBProperties *props = (AVCPBProperties*)sd->data;
         return props->max_bitrate;
+    }
 
     return 0;
 }
diff --git a/libavformat/internal.h b/libavformat/internal.h
index 901a8b51c6..7702986c9c 100644
--- a/libavformat/internal.h
+++ b/libavformat/internal.h
@@ -147,7 +147,9 @@ typedef struct FFFormatContext {
     int missing_ts_warning;
 #endif
 
+#if FF_API_AVSTREAM_SIDE_DATA
     int inject_global_side_data;
+#endif
 
     int avoid_negative_ts_use_pts;
 
@@ -356,10 +358,12 @@ typedef struct FFStream {
     uint8_t dts_ordered;
     uint8_t dts_misordered;
 
+#if FF_API_AVSTREAM_SIDE_DATA
     /**
      * Internal data to inject global side data
      */
     int inject_global_side_data;
+#endif
 
     /**
      * display aspect ratio (0 if unknown)
diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c
index 941c0bcdc9..e1ae71e758 100644
--- a/libavformat/matroskadec.c
+++ b/libavformat/matroskadec.c
@@ -2249,7 +2249,6 @@ static int mkv_stereo3d_conv(AVStream *st, MatroskaVideoStereoModeType stereo_mo
         STEREOMODE_STEREO3D_MAPPING(STEREO_MODE_CONV, NOTHING)
     };
     AVStereo3D *stereo;
-    int ret;
 
     stereo = av_stereo3d_alloc();
     if (!stereo)
@@ -2258,11 +2257,10 @@ static int mkv_stereo3d_conv(AVStream *st, MatroskaVideoStereoModeType stereo_mo
     stereo->type  = stereo_mode_conv[stereo_mode].type;
     stereo->flags = stereo_mode_conv[stereo_mode].flags;
 
-    ret = av_stream_add_side_data(st, AV_PKT_DATA_STEREO3D, (uint8_t *)stereo,
-                                  sizeof(*stereo));
-    if (ret < 0) {
+    if (!av_packet_side_data_add(&st->codecpar->side_data, &st->codecpar->nb_side_data,
+                                 AV_PKT_DATA_STEREO3D, stereo, sizeof(*stereo), 0)) {
         av_freep(&stereo);
-        return ret;
+        return AVERROR(ENOMEM);
     }
 
     return 0;
@@ -2309,28 +2307,27 @@ static int mkv_parse_video_color(AVStream *st, const MatroskaTrack *track) {
     }
     if (color->max_cll && color->max_fall) {
         size_t size = 0;
-        int ret;
         AVContentLightMetadata *metadata = av_content_light_metadata_alloc(&size);
         if (!metadata)
             return AVERROR(ENOMEM);
-        ret = av_stream_add_side_data(st, AV_PKT_DATA_CONTENT_LIGHT_LEVEL,
-                                      (uint8_t *)metadata, size);
-        if (ret < 0) {
+        if (!av_packet_side_data_add(&st->codecpar->side_data, &st->codecpar->nb_side_data,
+                                     AV_PKT_DATA_CONTENT_LIGHT_LEVEL, metadata, size, 0)) {
             av_freep(&metadata);
-            return ret;
+            return AVERROR(ENOMEM);
         }
         metadata->MaxCLL  = color->max_cll;
         metadata->MaxFALL = color->max_fall;
     }
 
     if (has_mastering_primaries || has_mastering_luminance) {
-        AVMasteringDisplayMetadata *metadata =
-            (AVMasteringDisplayMetadata*) av_stream_new_side_data(
-                st, AV_PKT_DATA_MASTERING_DISPLAY_METADATA,
-                sizeof(AVMasteringDisplayMetadata));
-        if (!metadata) {
+        AVMasteringDisplayMetadata *metadata;
+        AVPacketSideData *sd = av_packet_side_data_new(&st->codecpar->side_data,
+                                                       &st->codecpar->nb_side_data,
+                                                       AV_PKT_DATA_MASTERING_DISPLAY_METADATA,
+                                                       sizeof(AVMasteringDisplayMetadata), 0);
+        if (!sd)
             return AVERROR(ENOMEM);
-        }
+        metadata = (AVMasteringDisplayMetadata*)sd->data;
         memset(metadata, 0, sizeof(AVMasteringDisplayMetadata));
         if (has_mastering_primaries) {
             metadata->display_primaries[0][0] = av_d2q(mastering_meta->r_x, INT_MAX);
@@ -2356,6 +2353,7 @@ static int mkv_create_display_matrix(AVStream *st,
                                      const MatroskaTrackVideoProjection *proj,
                                      void *logctx)
 {
+    AVPacketSideData *sd;
     double pitch = proj->pitch, yaw = proj->yaw, roll = proj->roll;
     int32_t *matrix;
     int hflip;
@@ -2372,10 +2370,13 @@ static int mkv_create_display_matrix(AVStream *st,
                st->index, yaw, pitch, roll);
         return 0;
     }
-    matrix = (int32_t*)av_stream_new_side_data(st, AV_PKT_DATA_DISPLAYMATRIX,
-                                               9 * sizeof(*matrix));
-    if (!matrix)
+    sd = av_packet_side_data_new(&st->codecpar->side_data,
+                                 &st->codecpar->nb_side_data,
+                                 AV_PKT_DATA_DISPLAYMATRIX,
+                                 9 * sizeof(*matrix), 0);
+    if (!sd)
         return AVERROR(ENOMEM);
+    matrix = (int32_t*)sd->data;
 
     hflip = yaw != 0.0;
     /* ProjectionPoseRoll is in the counter-clockwise direction
@@ -2400,7 +2401,6 @@ static int mkv_parse_video_projection(AVStream *st, const MatroskaTrack *track,
     size_t spherical_size;
     uint32_t l = 0, t = 0, r = 0, b = 0;
     uint32_t padding = 0;
-    int ret;
 
     if (mkv_projection->private.size && priv_data[0] != 0) {
         av_log(logctx, AV_LOG_WARNING, "Unknown spherical metadata\n");
@@ -2476,11 +2476,10 @@ static int mkv_parse_video_projection(AVStream *st, const MatroskaTrack *track,
     spherical->bound_right  = r;
     spherical->bound_bottom = b;
 
-    ret = av_stream_add_side_data(st, AV_PKT_DATA_SPHERICAL, (uint8_t *)spherical,
-                                  spherical_size);
-    if (ret < 0) {
+    if (!av_packet_side_data_add(&st->codecpar->side_data, &st->codecpar->nb_side_data,
+                                 AV_PKT_DATA_SPHERICAL, spherical, spherical_size, 0)) {
         av_freep(&spherical);
-        return ret;
+        return AVERROR(ENOMEM);
     }
 
     return 0;
diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c
index ba54f5f98e..82fbd38f79 100644
--- a/libavformat/matroskaenc.c
+++ b/libavformat/matroskaenc.c
@@ -1327,7 +1327,7 @@ fail:
 static void mkv_write_video_color(EbmlWriter *writer, const AVStream *st,
                                   const AVCodecParameters *par)
 {
-    const void *side_data;
+    const AVPacketSideData *side_data;
 
     ebml_writer_open_master(writer, MATROSKA_ID_VIDEOCOLOR);
 
@@ -1361,20 +1361,20 @@ static void mkv_write_video_color(EbmlWriter *writer, const AVStream *st,
                              (ypos >> 7) + 1);
     }
 
-    side_data = av_stream_get_side_data(st, AV_PKT_DATA_CONTENT_LIGHT_LEVEL,
-                                        NULL);
+    side_data = av_packet_side_data_get(st->codecpar->side_data, st->codecpar->nb_side_data,
+                                        AV_PKT_DATA_CONTENT_LIGHT_LEVEL);
     if (side_data) {
-        const AVContentLightMetadata *metadata = side_data;
+        const AVContentLightMetadata *metadata = (AVContentLightMetadata *)side_data->data;
         ebml_writer_add_uint(writer, MATROSKA_ID_VIDEOCOLORMAXCLL,
                              metadata->MaxCLL);
         ebml_writer_add_uint(writer, MATROSKA_ID_VIDEOCOLORMAXFALL,
                              metadata->MaxFALL);
     }
 
-    side_data = av_stream_get_side_data(st, AV_PKT_DATA_MASTERING_DISPLAY_METADATA,
-                                        NULL);
+    side_data = av_packet_side_data_get(st->codecpar->side_data, st->codecpar->nb_side_data,
+                                        AV_PKT_DATA_MASTERING_DISPLAY_METADATA);
     if (side_data) {
-        const AVMasteringDisplayMetadata *metadata = side_data;
+        const AVMasteringDisplayMetadata *metadata = (AVMasteringDisplayMetadata *)side_data->data;
         ebml_writer_open_master(writer, MATROSKA_ID_VIDEOCOLORMASTERINGMETA);
         if (metadata->has_primaries) {
             ebml_writer_add_float(writer, MATROSKA_ID_VIDEOCOLOR_RX,
@@ -1410,12 +1410,16 @@ static void mkv_write_video_color(EbmlWriter *writer, const AVStream *st,
 static void mkv_handle_rotation(void *logctx, const AVStream *st,
                                 double *yaw, double *roll)
 {
-    const int32_t *matrix =
-        (const int32_t*)av_stream_get_side_data(st, AV_PKT_DATA_DISPLAYMATRIX, NULL);
+    const int32_t *matrix;
+    const AVPacketSideData *side_data =
+        av_packet_side_data_get(st->codecpar->side_data, st->codecpar->nb_side_data,
+                                AV_PKT_DATA_DISPLAYMATRIX);
 
-    if (!matrix)
+    if (!side_data)
         return;
 
+    matrix = (int32_t *)side_data->data;
+
     /* Check whether this is an affine transformation */
     if (matrix[2] || matrix[5])
         goto ignore;
@@ -1462,13 +1466,15 @@ static int mkv_handle_spherical(void *logctx, EbmlWriter *writer,
                                 const AVStream *st, uint8_t private[],
                                 double *yaw, double *pitch, double *roll)
 {
-    const AVSphericalMapping *spherical =
-        (const AVSphericalMapping *)av_stream_get_side_data(st, AV_PKT_DATA_SPHERICAL,
-                                                            NULL);
+    const AVPacketSideData *sd = av_packet_side_data_get(st->codecpar->side_data,
+                                                         st->codecpar->nb_side_data,
+                                                         AV_PKT_DATA_SPHERICAL);
+    const AVSphericalMapping *spherical;
 
-    if (!spherical)
+    if (!sd)
         return 0;
 
+    spherical = (const AVSphericalMapping *)sd->data;
     if (spherical->projection != AV_SPHERICAL_EQUIRECTANGULAR      &&
         spherical->projection != AV_SPHERICAL_EQUIRECTANGULAR_TILE &&
         spherical->projection != AV_SPHERICAL_CUBEMAP) {
@@ -1628,6 +1634,7 @@ static int mkv_write_stereo_mode(AVFormatContext *s, EbmlWriter *writer,
             format = stereo_mode;
         }
     } else {
+        const AVPacketSideData *sd;
         const AVStereo3D *stereo;
         /* The following macro presumes all MATROSKA_VIDEO_STEREOMODE_TYPE_*
          * values to be in the range 0..254. */
@@ -1639,11 +1646,13 @@ static int mkv_write_stereo_mode(AVFormatContext *s, EbmlWriter *writer,
         };
         int fmt;
 
-        stereo = (const AVStereo3D*)av_stream_get_side_data(st, AV_PKT_DATA_STEREO3D,
-                                                            NULL);
-        if (!stereo)
+        sd = av_packet_side_data_get(st->codecpar->side_data, st->codecpar->nb_side_data,
+                                     AV_PKT_DATA_STEREO3D);
+        if (!sd)
             return 0;
 
+        stereo = (const AVStereo3D*)sd->data;
+
         /* A garbage AVStereo3D or something with no Matroska analogon. */
         if ((unsigned)stereo->type >= FF_ARRAY_ELEMS(conversion_table))
             return 0;
@@ -1681,6 +1690,7 @@ static void mkv_write_blockadditionmapping(AVFormatContext *s, const MatroskaMux
 {
 #if CONFIG_MATROSKA_MUXER
     const AVDOVIDecoderConfigurationRecord *dovi;
+    const AVPacketSideData *sd;
 
     if (IS_SEEKABLE(s->pb, mkv)) {
         track->blockadditionmapping_offset = avio_tell(pb);
@@ -1697,9 +1707,14 @@ static void mkv_write_blockadditionmapping(AVFormatContext *s, const MatroskaMux
         }
     }
 
-    dovi = (const AVDOVIDecoderConfigurationRecord *)
-           av_stream_get_side_data(st, AV_PKT_DATA_DOVI_CONF, NULL);
-    if (dovi && dovi->dv_profile <= 10) {
+    sd = av_packet_side_data_get(st->codecpar->side_data, st->codecpar->nb_side_data,
+                                 AV_PKT_DATA_DOVI_CONF);
+
+    if (!sd)
+        return;
+
+    dovi = (const AVDOVIDecoderConfigurationRecord *)sd->data;
+    if (dovi->dv_profile <= 10) {
         ebml_master mapping;
         uint8_t buf[ISOM_DVCC_DVVC_SIZE];
         uint32_t type;
diff --git a/libavformat/mov.c b/libavformat/mov.c
index 1996e0028c..db528d9907 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -799,6 +799,7 @@ static int mov_read_esds(MOVContext *c, AVIOContext *pb, MOVAtom atom)
 static int mov_read_dac3(MOVContext *c, AVIOContext *pb, MOVAtom atom)
 {
     AVStream *st;
+    AVPacketSideData *sd;
     enum AVAudioServiceType *ast;
     int ac3info, acmod, lfeon, bsmod;
     uint64_t mask;
@@ -807,11 +808,14 @@ static int mov_read_dac3(MOVContext *c, AVIOContext *pb, MOVAtom atom)
         return 0;
     st = c->fc->streams[c->fc->nb_streams-1];
 
-    ast = (enum AVAudioServiceType*)av_stream_new_side_data(st, AV_PKT_DATA_AUDIO_SERVICE_TYPE,
-                                                            sizeof(*ast));
-    if (!ast)
+    sd = av_packet_side_data_new(&st->codecpar->side_data,
+                                 &st->codecpar->nb_side_data,
+                                     AV_PKT_DATA_AUDIO_SERVICE_TYPE,
+                                     sizeof(*ast), 0);
+    if (!sd)
         return AVERROR(ENOMEM);
 
+    ast = (enum AVAudioServiceType*)sd->data;
     ac3info = avio_rb24(pb);
     bsmod = (ac3info >> 14) & 0x7;
     acmod = (ac3info >> 11) & 0x7;
@@ -833,6 +837,7 @@ static int mov_read_dac3(MOVContext *c, AVIOContext *pb, MOVAtom atom)
 static int mov_read_dec3(MOVContext *c, AVIOContext *pb, MOVAtom atom)
 {
     AVStream *st;
+    AVPacketSideData *sd;
     enum AVAudioServiceType *ast;
     int eac3info, acmod, lfeon, bsmod;
     uint64_t mask;
@@ -841,11 +846,15 @@ static int mov_read_dec3(MOVContext *c, AVIOContext *pb, MOVAtom atom)
         return 0;
     st = c->fc->streams[c->fc->nb_streams-1];
 
-    ast = (enum AVAudioServiceType*)av_stream_new_side_data(st, AV_PKT_DATA_AUDIO_SERVICE_TYPE,
-                                                            sizeof(*ast));
-    if (!ast)
+    sd = av_packet_side_data_new(&st->codecpar->side_data,
+                                 &st->codecpar->nb_side_data,
+                                     AV_PKT_DATA_AUDIO_SERVICE_TYPE,
+                                     sizeof(*ast), 0);
+    if (!sd)
         return AVERROR(ENOMEM);
 
+    ast = (enum AVAudioServiceType*)sd->data;
+
     /* No need to parse fields for additional independent substreams and its
      * associated dependent substreams since libavcodec's E-AC-3 decoder
      * does not support them yet. */
@@ -1747,7 +1756,6 @@ static int mov_read_pcmc(MOVContext *c, AVIOContext *pb, MOVAtom atom)
 static int mov_read_colr(MOVContext *c, AVIOContext *pb, MOVAtom atom)
 {
     AVStream *st;
-    uint8_t *icc_profile;
     char color_parameter_type[5] = { 0 };
     uint16_t color_primaries, color_trc, color_matrix;
     int ret;
@@ -1768,10 +1776,13 @@ static int mov_read_colr(MOVContext *c, AVIOContext *pb, MOVAtom atom)
     }
 
     if (!strncmp(color_parameter_type, "prof", 4)) {
-        icc_profile = av_stream_new_side_data(st, AV_PKT_DATA_ICC_PROFILE, atom.size - 4);
-        if (!icc_profile)
+        AVPacketSideData *sd = av_packet_side_data_new(&st->codecpar->side_data,
+                                                       &st->codecpar->nb_side_data,
+                                                           AV_PKT_DATA_ICC_PROFILE,
+                                                           atom.size - 4, 0);
+        if (!sd)
             return AVERROR(ENOMEM);
-        ret = ffio_read_size(pb, icc_profile, atom.size - 4);
+        ret = ffio_read_size(pb, sd->data, atom.size - 4);
         if (ret < 0)
             return ret;
     } else {
@@ -6841,8 +6852,9 @@ static int mov_read_pssh(MOVContext *c, AVIOContext *pb, MOVAtom atom)
     AVEncryptionInitInfo *info, *old_init_info;
     uint8_t **key_ids;
     AVStream *st;
-    uint8_t *side_data, *extra_data, *old_side_data;
-    size_t side_data_size, old_side_data_size;
+    const AVPacketSideData *old_side_data;
+    uint8_t *side_data, *extra_data;
+    size_t side_data_size;
     int ret = 0;
     unsigned int version, kid_count, extra_data_size, alloc_size = 0;
 
@@ -6920,9 +6932,10 @@ static int mov_read_pssh(MOVContext *c, AVIOContext *pb, MOVAtom atom)
     info->data_size = extra_data_size;
 
     // If there is existing initialization data, append to the list.
-    old_side_data = av_stream_get_side_data(st, AV_PKT_DATA_ENCRYPTION_INIT_INFO, &old_side_data_size);
+    old_side_data = av_packet_side_data_get(st->codecpar->side_data, st->codecpar->nb_side_data,
+                                            AV_PKT_DATA_ENCRYPTION_INIT_INFO);
     if (old_side_data) {
-        old_init_info = av_encryption_init_info_get_side_data(old_side_data, old_side_data_size);
+        old_init_info = av_encryption_init_info_get_side_data(old_side_data->data, old_side_data->size);
         if (old_init_info) {
             // Append to the end of the list.
             for (AVEncryptionInitInfo *cur = old_init_info;; cur = cur->next) {
@@ -6944,9 +6957,9 @@ static int mov_read_pssh(MOVContext *c, AVIOContext *pb, MOVAtom atom)
         ret = AVERROR(ENOMEM);
         goto finish;
     }
-    ret = av_stream_add_side_data(st, AV_PKT_DATA_ENCRYPTION_INIT_INFO,
-                                  side_data, side_data_size);
-    if (ret < 0)
+    if (!av_packet_side_data_add(&st->codecpar->side_data, &st->codecpar->nb_side_data,
+                                 AV_PKT_DATA_ENCRYPTION_INIT_INFO,
+                                     side_data, side_data_size, 0))
         av_free(side_data);
 
 finish:
@@ -8725,46 +8738,42 @@ static int mov_read_header(AVFormatContext *s)
             break;
         case AVMEDIA_TYPE_VIDEO:
             if (sc->display_matrix) {
-                err = av_stream_add_side_data(st, AV_PKT_DATA_DISPLAYMATRIX, (uint8_t*)sc->display_matrix,
-                                              sizeof(int32_t) * 9);
-                if (err < 0)
-                    return err;
+                if (!av_packet_side_data_add(&st->codecpar->side_data, &st->codecpar->nb_side_data,
+                                             AV_PKT_DATA_DISPLAYMATRIX,
+                                                 (uint8_t*)sc->display_matrix, sizeof(int32_t) * 9, 0))
+                    return AVERROR(ENOMEM);
 
                 sc->display_matrix = NULL;
             }
             if (sc->stereo3d) {
-                err = av_stream_add_side_data(st, AV_PKT_DATA_STEREO3D,
-                                              (uint8_t *)sc->stereo3d,
-                                              sizeof(*sc->stereo3d));
-                if (err < 0)
-                    return err;
+                if (!av_packet_side_data_add(&st->codecpar->side_data, &st->codecpar->nb_side_data,
+                                             AV_PKT_DATA_STEREO3D,
+                                                 (uint8_t *)sc->stereo3d, sizeof(*sc->stereo3d), 0))
+                    return AVERROR(ENOMEM);
 
                 sc->stereo3d = NULL;
             }
             if (sc->spherical) {
-                err = av_stream_add_side_data(st, AV_PKT_DATA_SPHERICAL,
-                                              (uint8_t *)sc->spherical,
-                                              sc->spherical_size);
-                if (err < 0)
-                    return err;
+                if (!av_packet_side_data_add(&st->codecpar->side_data, &st->codecpar->nb_side_data,
+                                             AV_PKT_DATA_SPHERICAL,
+                                                 (uint8_t *)sc->spherical, sc->spherical_size, 0))
+                    return AVERROR(ENOMEM);
 
                 sc->spherical = NULL;
             }
             if (sc->mastering) {
-                err = av_stream_add_side_data(st, AV_PKT_DATA_MASTERING_DISPLAY_METADATA,
-                                              (uint8_t *)sc->mastering,
-                                              sizeof(*sc->mastering));
-                if (err < 0)
-                    return err;
+                if (!av_packet_side_data_add(&st->codecpar->side_data, &st->codecpar->nb_side_data,
+                                             AV_PKT_DATA_MASTERING_DISPLAY_METADATA,
+                                                 (uint8_t *)sc->mastering, sizeof(*sc->mastering), 0))
+                    return AVERROR(ENOMEM);
 
                 sc->mastering = NULL;
             }
             if (sc->coll) {
-                err = av_stream_add_side_data(st, AV_PKT_DATA_CONTENT_LIGHT_LEVEL,
-                                              (uint8_t *)sc->coll,
-                                              sc->coll_size);
-                if (err < 0)
-                    return err;
+                if (!av_packet_side_data_add(&st->codecpar->side_data, &st->codecpar->nb_side_data,
+                                             AV_PKT_DATA_CONTENT_LIGHT_LEVEL,
+                                                 (uint8_t *)sc->coll, sc->coll_size, 0))
+                    return AVERROR(ENOMEM);
 
                 sc->coll = NULL;
             }
diff --git a/libavformat/movenc.c b/libavformat/movenc.c
index 7e96e7435f..7100ae3b59 100644
--- a/libavformat/movenc.c
+++ b/libavformat/movenc.c
@@ -672,11 +672,12 @@ struct mpeg4_bit_rate_values {
 
 static struct mpeg4_bit_rate_values calculate_mpeg4_bit_rates(MOVTrack *track)
 {
-    AVCPBProperties *props = track->st ?
-        (AVCPBProperties*)av_stream_get_side_data(track->st,
-                                                  AV_PKT_DATA_CPB_PROPERTIES,
-                                                  NULL) :
+    const AVPacketSideData *sd = track->st ?
+        av_packet_side_data_get(track->st->codecpar->side_data,
+                                track->st->codecpar->nb_side_data,
+                                         AV_PKT_DATA_CPB_PROPERTIES) :
         NULL;
+    AVCPBProperties *props = sd ? (AVCPBProperties *)sd->data : NULL;
     struct mpeg4_bit_rate_values bit_rates = { 0 };
 
     bit_rates.avg_bit_rate = compute_avg_bitrate(track);
@@ -2129,18 +2130,17 @@ static int mov_write_colr_tag(AVIOContext *pb, MOVTrack *track, int prefer_icc)
     // Ref (MOV): https://developer.apple.com/library/mac/technotes/tn2162/_index.html#//apple_ref/doc/uid/DTS40013070-CH1-TNTAG9
     // Ref (MP4): ISO/IEC 14496-12:2012
 
-    const uint8_t *icc_profile;
-    size_t icc_profile_size;
-
     if (prefer_icc) {
-        icc_profile = av_stream_get_side_data(track->st, AV_PKT_DATA_ICC_PROFILE, &icc_profile_size);
+        AVPacketSideData *sd = av_packet_side_data_get(track->st->codecpar->side_data,
+                                                       track->st->codecpar->nb_side_data,
+                                                                AV_PKT_DATA_ICC_PROFILE);
 
-        if (icc_profile) {
-            avio_wb32(pb, 12 + icc_profile_size);
+        if (sd) {
+            avio_wb32(pb, 12 + sd->size);
             ffio_wfourcc(pb, "colr");
             ffio_wfourcc(pb, "prof");
-            avio_write(pb, icc_profile, icc_profile_size);
-            return 12 + icc_profile_size;
+            avio_write(pb, sd->data, sd->size);
+            return 12 + sd->size;
         }
         else {
             av_log(NULL, AV_LOG_INFO, "no ICC profile found, will write nclx/nclc colour info instead\n");
@@ -2173,14 +2173,15 @@ static int mov_write_colr_tag(AVIOContext *pb, MOVTrack *track, int prefer_icc)
 
 static int mov_write_clli_tag(AVIOContext *pb, MOVTrack *track)
 {
-    const uint8_t *side_data;
+    const AVPacketSideData *side_data;
     const AVContentLightMetadata *content_light_metadata;
 
-    side_data = av_stream_get_side_data(track->st, AV_PKT_DATA_CONTENT_LIGHT_LEVEL, NULL);
+    side_data = av_packet_side_data_get(track->st->codecpar->side_data, track->st->codecpar->nb_side_data,
+                                        AV_PKT_DATA_CONTENT_LIGHT_LEVEL);
     if (!side_data) {
         return 0;
     }
-    content_light_metadata = (const AVContentLightMetadata*)side_data;
+    content_light_metadata = (const AVContentLightMetadata*)side_data->data;
 
     avio_wb32(pb, 12); // size
     ffio_wfourcc(pb, "clli");
@@ -2198,11 +2199,13 @@ static int mov_write_mdcv_tag(AVIOContext *pb, MOVTrack *track)
 {
     const int chroma_den = 50000;
     const int luma_den = 10000;
-    const uint8_t *side_data;
-    const AVMasteringDisplayMetadata *metadata;
+    const AVPacketSideData *side_data;
+    const AVMasteringDisplayMetadata *metadata = NULL;
 
-    side_data = av_stream_get_side_data(track->st, AV_PKT_DATA_MASTERING_DISPLAY_METADATA, NULL);
-    metadata = (const AVMasteringDisplayMetadata*)side_data;
+    side_data = av_packet_side_data_get(track->st->codecpar->side_data, track->st->codecpar->nb_side_data,
+                                        AV_PKT_DATA_MASTERING_DISPLAY_METADATA);
+    if (side_data)
+        metadata = (const AVMasteringDisplayMetadata*)side_data->data;
     if (!metadata || !metadata->has_primaries || !metadata->has_luminance) {
         return 0;
     }
@@ -2421,7 +2424,8 @@ static int mov_write_video_tag(AVFormatContext *s, AVIOContext *pb, MOVMuxContex
                              track->par->color_trc != AVCOL_TRC_UNSPECIFIED &&
                              track->par->color_space != AVCOL_SPC_UNSPECIFIED;
         if (has_color_info || mov->flags & FF_MOV_FLAG_WRITE_COLR ||
-            av_stream_get_side_data(track->st, AV_PKT_DATA_ICC_PROFILE, NULL)) {
+            av_packet_side_data_get(track->st->codecpar->side_data,  track->st->codecpar->nb_side_data,
+                                    AV_PKT_DATA_ICC_PROFILE)) {
             int prefer_icc = mov->flags & FF_MOV_FLAG_PREFER_ICC || !has_color_info;
             mov_write_colr_tag(pb, track, prefer_icc);
         }
@@ -2435,17 +2439,19 @@ static int mov_write_video_tag(AVFormatContext *s, AVIOContext *pb, MOVMuxContex
     }
 
     if (track->mode == MODE_MP4 && mov->fc->strict_std_compliance <= FF_COMPLIANCE_UNOFFICIAL) {
-        AVStereo3D* stereo_3d = (AVStereo3D*) av_stream_get_side_data(track->st, AV_PKT_DATA_STEREO3D, NULL);
-        AVSphericalMapping* spherical_mapping = (AVSphericalMapping*)av_stream_get_side_data(track->st, AV_PKT_DATA_SPHERICAL, NULL);
-        AVDOVIDecoderConfigurationRecord *dovi = (AVDOVIDecoderConfigurationRecord *)
-                                                 av_stream_get_side_data(track->st, AV_PKT_DATA_DOVI_CONF, NULL);
+        const AVPacketSideData *stereo_3d = av_packet_side_data_get(track->st->codecpar->side_data, track->st->codecpar->nb_side_data,
+                                                                    AV_PKT_DATA_STEREO3D);
+        const AVPacketSideData *spherical_mapping = av_packet_side_data_get(track->st->codecpar->side_data, track->st->codecpar->nb_side_data,
+                                                                            AV_PKT_DATA_SPHERICAL);
+        const AVPacketSideData *dovi = av_packet_side_data_get(track->st->codecpar->side_data, track->st->codecpar->nb_side_data,
+                                                               AV_PKT_DATA_DOVI_CONF);
 
         if (stereo_3d)
-            mov_write_st3d_tag(s, pb, stereo_3d);
+            mov_write_st3d_tag(s, pb, (AVStereo3D*)stereo_3d->data);
         if (spherical_mapping)
-            mov_write_sv3d_tag(mov->fc, pb, spherical_mapping);
+            mov_write_sv3d_tag(mov->fc, pb, (AVSphericalMapping*)spherical_mapping->data);
         if (dovi)
-            mov_write_dvcc_dvvc_tag(s, pb, dovi);
+            mov_write_dvcc_dvvc_tag(s, pb, (AVDOVIDecoderConfigurationRecord *)dovi->data);
     }
 
     if (track->par->sample_aspect_ratio.den && track->par->sample_aspect_ratio.num) {
@@ -3392,7 +3398,6 @@ static int mov_write_tkhd_tag(AVIOContext *pb, MOVMuxContext *mov,
     int group   = 0;
 
     uint32_t *display_matrix = NULL;
-    size_t display_matrix_size;
     int       i;
 
     if (mov->mode == MODE_AVIF)
@@ -3402,15 +3407,16 @@ static int mov_write_tkhd_tag(AVIOContext *pb, MOVMuxContext *mov,
             duration *= mov->avif_loop_count;
 
     if (st) {
+        const AVPacketSideData *sd;
         if (mov->per_stream_grouping)
             group = st->index;
         else
             group = st->codecpar->codec_type;
 
-        display_matrix = (uint32_t*)av_stream_get_side_data(st, AV_PKT_DATA_DISPLAYMATRIX,
-                                                            &display_matrix_size);
-        if (display_matrix && display_matrix_size < 9 * sizeof(*display_matrix))
-            display_matrix = NULL;
+        sd = av_packet_side_data_get(st->codecpar->side_data, st->codecpar->nb_side_data,
+                                     AV_PKT_DATA_DISPLAYMATRIX);
+        if (sd && sd->size == 9 * sizeof(*display_matrix))
+            display_matrix = (uint32_t *)sd->data;
     }
 
     if (track->flags & MOV_TRACK_ENABLED)
@@ -4608,12 +4614,11 @@ static int mov_write_moov_tag(AVIOContext *pb, MOVMuxContext *mov,
             track->tref_tag = MKTAG('h','i','n','t');
             track->tref_id = mov->tracks[track->src_track].track_id;
         } else if (track->par->codec_type == AVMEDIA_TYPE_AUDIO) {
-            size_t size;
-            int *fallback;
-            fallback = (int*)av_stream_get_side_data(track->st,
-                                                     AV_PKT_DATA_FALLBACK_TRACK,
-                                                     &size);
-            if (fallback != NULL && size == sizeof(int)) {
+            const AVPacketSideData *sd = av_packet_side_data_get(track->st->codecpar->side_data,
+                                                                 track->st->codecpar->nb_side_data,
+                                                                    AV_PKT_DATA_FALLBACK_TRACK );
+            if (sd && sd->size == sizeof(int)) {
+                int *fallback = (int *)sd->data;
                 if (*fallback >= 0 && *fallback < mov->nb_streams) {
                     track->tref_tag = MKTAG('f','a','l','l');
                     track->tref_id = mov->tracks[*fallback].track_id;
@@ -5446,7 +5451,8 @@ static int mov_write_ftyp_tag(AVIOContext *pb, AVFormatContext *s)
         if (st->codecpar->codec_id == AV_CODEC_ID_AC3 ||
             st->codecpar->codec_id == AV_CODEC_ID_EAC3 ||
             st->codecpar->codec_id == AV_CODEC_ID_TRUEHD ||
-            av_stream_get_side_data(st, AV_PKT_DATA_DOVI_CONF, NULL))
+            av_packet_side_data_get(st->codecpar->side_data, st->codecpar->nb_side_data,
+                                    AV_PKT_DATA_DOVI_CONF))
             has_dolby = 1;
     }
 
diff --git a/libavformat/mp3enc.c b/libavformat/mp3enc.c
index 5e81f72a59..ece431e67d 100644
--- a/libavformat/mp3enc.c
+++ b/libavformat/mp3enc.c
@@ -400,10 +400,10 @@ static int mp3_queue_flush(AVFormatContext *s)
 static void mp3_update_xing(AVFormatContext *s)
 {
     MP3Context  *mp3 = s->priv_data;
+    const AVPacketSideData *sd;
     AVReplayGain *rg;
     uint16_t tag_crc;
     uint8_t *toc;
-    size_t rg_size;
     int i;
     int64_t old_pos = avio_tell(s->pb);
 
@@ -423,11 +423,13 @@ static void mp3_update_xing(AVFormatContext *s)
     }
 
     /* write replaygain */
-    rg = (AVReplayGain*)av_stream_get_side_data(s->streams[0], AV_PKT_DATA_REPLAYGAIN,
-                                                &rg_size);
-    if (rg && rg_size >= sizeof(*rg)) {
+    sd = av_packet_side_data_get(s->streams[0]->codecpar->side_data,
+                                 s->streams[0]->codecpar->nb_side_data,
+                                 AV_PKT_DATA_REPLAYGAIN);
+    if (sd && sd->size >= sizeof(*rg)) {
         uint16_t val;
 
+        rg = (AVReplayGain *)sd->data;
         AV_WB32(mp3->xing_frame + mp3->xing_offset + 131,
                 av_rescale(rg->track_peak, 1 << 23, 100000));
 
diff --git a/libavformat/mpegenc.c b/libavformat/mpegenc.c
index c06e308296..b6f5f1026d 100644
--- a/libavformat/mpegenc.c
+++ b/libavformat/mpegenc.c
@@ -342,8 +342,6 @@ static av_cold int mpeg_mux_init(AVFormatContext *ctx)
     lpcm_id = LPCM_ID;
 
     for (i = 0; i < ctx->nb_streams; i++) {
-        AVCPBProperties *props;
-
         st     = ctx->streams[i];
         stream = av_mallocz(sizeof(StreamInfo));
         if (!stream)
@@ -430,13 +428,18 @@ static av_cold int mpeg_mux_init(AVFormatContext *ctx)
             stream->max_buffer_size = 4 * 1024;
             s->audio_bound++;
             break;
-        case AVMEDIA_TYPE_VIDEO:
+        case AVMEDIA_TYPE_VIDEO: {
+            const AVPacketSideData *sd;
+            AVCPBProperties *props = NULL;
             if (st->codecpar->codec_id == AV_CODEC_ID_H264)
                 stream->id = h264_id++;
             else
                 stream->id = mpv_id++;
 
-            props = (AVCPBProperties*)av_stream_get_side_data(st, AV_PKT_DATA_CPB_PROPERTIES, NULL);
+            sd = av_packet_side_data_get(st->codecpar->side_data, st->codecpar->nb_side_data,
+                                         AV_PKT_DATA_CPB_PROPERTIES);
+            if (sd)
+                props = (AVCPBProperties*)sd->data;
             if (props && props->buffer_size)
                 stream->max_buffer_size = 6 * 1024 + props->buffer_size / 8;
             else {
@@ -453,6 +456,7 @@ static av_cold int mpeg_mux_init(AVFormatContext *ctx)
             }
             s->video_bound++;
             break;
+        }
         case AVMEDIA_TYPE_SUBTITLE:
             stream->id              = mps_id++;
             stream->max_buffer_size = 16 * 1024;
@@ -470,12 +474,16 @@ static av_cold int mpeg_mux_init(AVFormatContext *ctx)
     audio_bitrate = 0;
     video_bitrate = 0;
     for (i = 0; i < ctx->nb_streams; i++) {
-        AVCPBProperties *props;
+        const AVPacketSideData *sd;
+        AVCPBProperties *props = NULL;
         int codec_rate;
         st     = ctx->streams[i];
         stream = (StreamInfo *)st->priv_data;
 
-        props = (AVCPBProperties*)av_stream_get_side_data(st, AV_PKT_DATA_CPB_PROPERTIES, NULL);
+        sd = av_packet_side_data_get(st->codecpar->side_data, st->codecpar->nb_side_data,
+                                     AV_PKT_DATA_CPB_PROPERTIES);
+        if (sd)
+            props = (AVCPBProperties*)sd->data;
         if (props)
             codec_rate = props->max_bitrate;
         else
diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c
index d825bf0b5d..3460a3b312 100644
--- a/libavformat/mpegts.c
+++ b/libavformat/mpegts.c
@@ -2187,7 +2187,6 @@ int ff_parse_mpeg2_descriptor(AVFormatContext *fc, AVStream *st, int stream_type
             uint32_t buf;
             AVDOVIDecoderConfigurationRecord *dovi;
             size_t dovi_size;
-            int ret;
             int dependency_pid;
 
             if (desc_end - *pp < 4) // (8 + 8 + 7 + 6 + 1 + 1 + 1) / 8
@@ -2218,11 +2217,11 @@ int ff_parse_mpeg2_descriptor(AVFormatContext *fc, AVStream *st, int stream_type
                 dovi->dv_bl_signal_compatibility_id = 0;
             }
 
-            ret = av_stream_add_side_data(st, AV_PKT_DATA_DOVI_CONF,
-                                          (uint8_t *)dovi, dovi_size);
-            if (ret < 0) {
+            if (!av_packet_side_data_add(&st->codecpar->side_data, &st->codecpar->nb_side_data,
+                                         AV_PKT_DATA_DOVI_CONF,
+                                             (uint8_t *)dovi, dovi_size, 0)) {
                 av_free(dovi);
-                return ret;
+                return AVERROR(ENOMEM);
             }
 
             av_log(fc, AV_LOG_TRACE, "DOVI, version: %d.%d, profile: %d, level: %d, "
diff --git a/libavformat/mux.c b/libavformat/mux.c
index d3779202f0..43bade97ec 100644
--- a/libavformat/mux.c
+++ b/libavformat/mux.c
@@ -279,6 +279,26 @@ FF_ENABLE_DEPRECATION_WARNINGS
             break;
         }
 
+#if FF_API_AVSTREAM_SIDE_DATA
+FF_DISABLE_DEPRECATION_WARNINGS
+        /* if the caller is using the deprecated AVStream side_data API,
+         * copy its contents to AVStream.codecpar, giving it priority
+           over existing side data in the latter */
+        for (int i = 0; i < st->nb_side_data; i++) {
+            const AVPacketSideData *sd_src = &st->side_data[i];
+            AVPacketSideData *sd_dst;
+
+            sd_dst = av_packet_side_data_new(&st->codecpar->side_data, &st->codecpar->nb_side_data,
+                                             sd_src->type, sd_src->size, 0);
+            if (!sd_dst) {
+                ret = AVERROR(ENOMEM);
+                goto fail;
+            }
+            memcpy(sd_dst->data, sd_src->data, sd_src->size);
+        }
+FF_ENABLE_DEPRECATION_WARNINGS
+#endif
+
         desc = avcodec_descriptor_get(par->codec_id);
         if (desc && desc->props & AV_CODEC_PROP_REORDER)
             sti->reorder = 1;
diff --git a/libavformat/mxfdec.c b/libavformat/mxfdec.c
index 4846c5d206..ce41a98536 100644
--- a/libavformat/mxfdec.c
+++ b/libavformat/mxfdec.c
@@ -2579,10 +2579,12 @@ static int parse_mca_labels(MXFContext *mxf, MXFTrack *source_track, MXFDescript
 
     if (service_type != AV_AUDIO_SERVICE_TYPE_NB && service_type != AV_AUDIO_SERVICE_TYPE_MAIN && !ambigous_service_type) {
         enum AVAudioServiceType *ast;
-        uint8_t* side_data = av_stream_new_side_data(st, AV_PKT_DATA_AUDIO_SERVICE_TYPE, sizeof(*ast));
+        AVPacketSideData *side_data = av_packet_side_data_new(&st->codecpar->side_data, &st->codecpar->nb_side_data,
+                                                                  AV_PKT_DATA_AUDIO_SERVICE_TYPE,
+                                                                  sizeof(*ast), 0);
         if (!side_data)
             return AVERROR(ENOMEM);
-        ast = (enum AVAudioServiceType*)side_data;
+        ast = (enum AVAudioServiceType*)side_data->data;
         *ast = service_type;
     }
 
@@ -2982,19 +2984,21 @@ static int mxf_parse_structural_metadata(MXFContext *mxf)
             st->codecpar->color_trc       = mxf_get_codec_ul(ff_mxf_color_trc_uls, &descriptor->color_trc_ul)->id;
             st->codecpar->color_space     = mxf_get_codec_ul(ff_mxf_color_space_uls, &descriptor->color_space_ul)->id;
             if (descriptor->mastering) {
-                ret = av_stream_add_side_data(st, AV_PKT_DATA_MASTERING_DISPLAY_METADATA,
-                                              (uint8_t *)descriptor->mastering,
-                                              sizeof(*descriptor->mastering));
-                if (ret < 0)
+                if (!av_packet_side_data_add(&st->codecpar->side_data, &st->codecpar->nb_side_data,
+                                             AV_PKT_DATA_MASTERING_DISPLAY_METADATA,
+                                                 (uint8_t *)descriptor->mastering, sizeof(*descriptor->mastering), 0)) {
+                    ret = AVERROR(ENOMEM);
                     goto fail_and_free;
+                }
                 descriptor->mastering = NULL;
             }
             if (descriptor->coll) {
-                ret = av_stream_add_side_data(st, AV_PKT_DATA_CONTENT_LIGHT_LEVEL,
-                                              (uint8_t *)descriptor->coll,
-                                              descriptor->coll_size);
-                if (ret < 0)
+                if (!av_packet_side_data_add(&st->codecpar->side_data, &st->codecpar->nb_side_data,
+                                             AV_PKT_DATA_CONTENT_LIGHT_LEVEL,
+                                                 (uint8_t *)descriptor->coll, descriptor->coll_size, 0)) {
+                    ret = AVERROR(ENOMEM);
                     goto fail_and_free;
+                }
                 descriptor->coll = NULL;
             }
         } else if (st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) {
diff --git a/libavformat/mxfenc.c b/libavformat/mxfenc.c
index cb299412e2..7d5d4c180d 100644
--- a/libavformat/mxfenc.c
+++ b/libavformat/mxfenc.c
@@ -556,7 +556,8 @@ static void mxf_write_primer_pack(AVFormatContext *s)
         if (s->streams[i]->codecpar->codec_id == AV_CODEC_ID_H264 && !sc->avc_intra) {
             will_have_avc_tags = 1;
         }
-        if (av_stream_get_side_data(s->streams[i], AV_PKT_DATA_MASTERING_DISPLAY_METADATA, NULL)) {
+        if (av_packet_side_data_get(s->streams[i]->codecpar->side_data, s->streams[i]->codecpar->nb_side_data,
+                                    AV_PKT_DATA_MASTERING_DISPLAY_METADATA)) {
             will_have_mastering_tags = 1;
         }
         if (s->streams[i]->codecpar->codec_id == AV_CODEC_ID_FFV1) {
@@ -1158,7 +1159,7 @@ static int64_t mxf_write_cdci_common(AVFormatContext *s, AVStream *st, const UID
     const MXFCodecUL *color_trc_ul;
     const MXFCodecUL *color_space_ul;
     int64_t pos = mxf_write_generic_desc(s, st, key);
-    uint8_t *side_data;
+    const AVPacketSideData *side_data;
 
     color_primaries_ul = mxf_get_codec_ul_by_id(ff_mxf_color_primaries_uls, st->codecpar->color_primaries);
     color_trc_ul       = mxf_get_codec_ul_by_id(ff_mxf_color_trc_uls, st->codecpar->color_trc);
@@ -1344,9 +1345,10 @@ static int64_t mxf_write_cdci_common(AVFormatContext *s, AVStream *st, const UID
     avio_write(pb, *sc->codec_ul, 16);
 
     // Mastering Display metadata
-    side_data = av_stream_get_side_data(st, AV_PKT_DATA_MASTERING_DISPLAY_METADATA, NULL);
+    side_data = av_packet_side_data_get(st->codecpar->side_data, st->codecpar->nb_side_data,
+                                        AV_PKT_DATA_MASTERING_DISPLAY_METADATA);
     if (side_data) {
-        const AVMasteringDisplayMetadata *metadata = (const AVMasteringDisplayMetadata*)side_data;
+        const AVMasteringDisplayMetadata *metadata = (const AVMasteringDisplayMetadata*)side_data->data;
         if (metadata->has_primaries) {
             mxf_write_local_tag(s, 12, 0x8301);
             avio_wb16(pb, rescale_mastering_chroma(metadata->display_primaries[0][0]));
diff --git a/libavformat/options.c b/libavformat/options.c
index 194042820e..0f79fe0fa4 100644
--- a/libavformat/options.c
+++ b/libavformat/options.c
@@ -311,7 +311,9 @@ AVStream *avformat_new_stream(AVFormatContext *s, const AVCodec *c)
 
     st->sample_aspect_ratio = (AVRational) { 0, 1 };
 
+#if FF_API_AVSTREAM_SIDE_DATA
     sti->inject_global_side_data = si->inject_global_side_data;
+#endif
 
     sti->need_context_update = 1;
 
diff --git a/libavformat/replaygain.c b/libavformat/replaygain.c
index 915bcb2382..ab62090ffe 100644
--- a/libavformat/replaygain.c
+++ b/libavformat/replaygain.c
@@ -69,16 +69,20 @@ static int32_t parse_value(const char *value, int32_t min)
 int ff_replaygain_export_raw(AVStream *st, int32_t tg, uint32_t tp,
                              int32_t ag, uint32_t ap)
 {
+    AVPacketSideData *sd;
     AVReplayGain *replaygain;
 
     if (tg == INT32_MIN && ag == INT32_MIN)
         return 0;
 
-    replaygain = (AVReplayGain*)av_stream_new_side_data(st, AV_PKT_DATA_REPLAYGAIN,
-                                                        sizeof(*replaygain));
-    if (!replaygain)
+    sd = av_packet_side_data_new(&st->codecpar->side_data,
+                                 &st->codecpar->nb_side_data,
+                                     AV_PKT_DATA_REPLAYGAIN,
+                                     sizeof(*replaygain), 0);
+    if (!sd)
         return AVERROR(ENOMEM);
 
+    replaygain = (AVReplayGain*)sd->data;
     replaygain->track_gain = tg;
     replaygain->track_peak = tp;
     replaygain->album_gain = ag;
diff --git a/libavformat/seek.c b/libavformat/seek.c
index 386312cd3a..0180188595 100644
--- a/libavformat/seek.c
+++ b/libavformat/seek.c
@@ -745,8 +745,10 @@ void ff_read_frame_flush(AVFormatContext *s)
         for (int j = 0; j < MAX_REORDER_DELAY + 1; j++)
             sti->pts_buffer[j] = AV_NOPTS_VALUE;
 
+#if FF_API_AVSTREAM_SIDE_DATA
         if (si->inject_global_side_data)
             sti->inject_global_side_data = 1;
+#endif
 
         sti->skip_samples = 0;
     }
diff --git a/libavformat/version_major.h b/libavformat/version_major.h
index d1d6f95b15..3c04b38871 100644
--- a/libavformat/version_major.h
+++ b/libavformat/version_major.h
@@ -47,6 +47,7 @@
 #define FF_API_AVFORMAT_IO_CLOSE        (LIBAVFORMAT_VERSION_MAJOR < 61)
 #define FF_API_AVIO_WRITE_NONCONST      (LIBAVFORMAT_VERSION_MAJOR < 61)
 #define FF_API_LAVF_SHORTEST            (LIBAVFORMAT_VERSION_MAJOR < 61)
+#define FF_API_AVSTREAM_SIDE_DATA       (LIBAVFORMAT_VERSION_MAJOR < 61)
 
 
 #define FF_API_R_FRAME_RATE            1
-- 
2.42.0

_______________________________________________
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".

^ permalink raw reply	[flat|nested] 27+ messages in thread

* [FFmpeg-devel] [PATCH 04/11] avcodec/packet: add some documentation for AVPacketSideData
  2023-09-27 13:12 [FFmpeg-devel] [PATCH 00/11 v5] AVCodecContext and AVCodecParameters side data James Almer
                   ` (2 preceding siblings ...)
  2023-09-27 13:12 ` [FFmpeg-devel] [PATCH 03/11] avformat/avformat: use the side data from AVStream.codecpar James Almer
@ 2023-09-27 13:12 ` James Almer
  2023-10-03 11:02   ` Anton Khirnov
  2023-09-27 13:12 ` [FFmpeg-devel] [PATCH 05/11] fftools/ffmpeg: stop using AVStream.side_data James Almer
                   ` (6 subsequent siblings)
  10 siblings, 1 reply; 27+ messages in thread
From: James Almer @ 2023-09-27 13:12 UTC (permalink / raw)
  To: ffmpeg-devel

Explaining what or who may use it, and in what scenarios.

Signed-off-by: James Almer <jamrial@gmail.com>
---
 libavcodec/packet.h | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/libavcodec/packet.h b/libavcodec/packet.h
index 96fc0084d6..f88dad2b3c 100644
--- a/libavcodec/packet.h
+++ b/libavcodec/packet.h
@@ -312,6 +312,21 @@ enum AVPacketSideDataType {
 
 #define AV_PKT_DATA_QUALITY_FACTOR AV_PKT_DATA_QUALITY_STATS //DEPRECATED
 
+/**
+ * This structure stores auxiliary data. It is typically exported by demuxers
+ * within @ref AVStream.codecpar.side_data "AVStream's codec parameters" or an
+ * @ref AVPacket.side_data "AVPacket" and then passed as input to decoders
+ * through the @ref AVCodecContext.coded_side_data "decoder context's side data"
+ * for initialization or through @ref AVPacket.side_data "AVPacket", or received
+ * as output from encoders within the @ref AVCodecContext.coded_side_data
+ * "encoder context's side data" or @ref AVPacket.side_data "AVPacket" and then
+ * passed to muxers through @ref AVStream.codecpar.side_data "AVStream's codec
+ * parameters" for initialization or through @ref AVPacket.side_data "AVPacket".
+ *
+ * Different modules may export or be provided different types of side data
+ * depending on media type and codec. Refer to @ref AVPacketSideDataType for a
+ * list of defined types and where they may be found or used.
+ */
 typedef struct AVPacketSideData {
     uint8_t *data;
     size_t   size;
-- 
2.42.0

_______________________________________________
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".

^ permalink raw reply	[flat|nested] 27+ messages in thread

* [FFmpeg-devel] [PATCH 05/11] fftools/ffmpeg: stop using AVStream.side_data
  2023-09-27 13:12 [FFmpeg-devel] [PATCH 00/11 v5] AVCodecContext and AVCodecParameters side data James Almer
                   ` (3 preceding siblings ...)
  2023-09-27 13:12 ` [FFmpeg-devel] [PATCH 04/11] avcodec/packet: add some documentation for AVPacketSideData James Almer
@ 2023-09-27 13:12 ` James Almer
  2023-10-03 11:50   ` Anton Khirnov
  2023-09-27 13:12 ` [FFmpeg-devel] [PATCH 06/11] fftools/ffplay: " James Almer
                   ` (5 subsequent siblings)
  10 siblings, 1 reply; 27+ messages in thread
From: James Almer @ 2023-09-27 13:12 UTC (permalink / raw)
  To: ffmpeg-devel

Signed-off-by: James Almer <jamrial@gmail.com>
---
 fftools/ffmpeg_demux.c    | 12 ++++++++----
 fftools/ffmpeg_enc.c      | 31 +++++++++----------------------
 fftools/ffmpeg_filter.c   |  6 +++++-
 fftools/ffmpeg_mux_init.c | 21 ++++++++++++---------
 4 files changed, 34 insertions(+), 36 deletions(-)

diff --git a/fftools/ffmpeg_demux.c b/fftools/ffmpeg_demux.c
index c01852d4cf..b312ff4922 100644
--- a/fftools/ffmpeg_demux.c
+++ b/fftools/ffmpeg_demux.c
@@ -482,8 +482,8 @@ static int input_packet_process(Demuxer *d, DemuxMsg *msg, AVPacket *src)
 
     /* add the stream-global side data to the first packet */
     if (ds->nb_packets == 1) {
-        for (int i = 0; i < ist->st->nb_side_data; i++) {
-            AVPacketSideData *src_sd = &ist->st->side_data[i];
+        for (int i = 0; i < ist->st->codecpar->nb_side_data; i++) {
+            AVPacketSideData *src_sd = &ist->st->codecpar->side_data[i];
             uint8_t *dst_data;
 
             if (src_sd->type == AV_PKT_DATA_DISPLAYMATRIX)
@@ -979,6 +979,7 @@ static int add_display_matrix_to_stream(const OptionsContext *o,
                                         AVFormatContext *ctx, InputStream *ist)
 {
     AVStream *st = ist->st;
+    AVPacketSideData *sd;
     double rotation = DBL_MAX;
     int hflip = -1, vflip = -1;
     int hflip_set = 0, vflip_set = 0, rotation_set = 0;
@@ -995,12 +996,15 @@ static int add_display_matrix_to_stream(const OptionsContext *o,
     if (!rotation_set && !hflip_set && !vflip_set)
         return 0;
 
-    buf = (int32_t *)av_stream_new_side_data(st, AV_PKT_DATA_DISPLAYMATRIX, sizeof(int32_t) * 9);
-    if (!buf) {
+    sd = av_packet_side_data_new(&st->codecpar->side_data, &st->codecpar->nb_side_data,
+                                     AV_PKT_DATA_DISPLAYMATRIX,
+                                     sizeof(int32_t) * 9, 0);
+    if (!sd) {
         av_log(ist, AV_LOG_FATAL, "Failed to generate a display matrix!\n");
         return AVERROR(ENOMEM);
     }
 
+    buf = (int32_t *)sd->data;
     av_display_rotation_set(buf,
                             rotation_set ? -(rotation) : -0.0f);
 
diff --git a/fftools/ffmpeg_enc.c b/fftools/ffmpeg_enc.c
index b40a6211a9..a106399279 100644
--- a/fftools/ffmpeg_enc.c
+++ b/fftools/ffmpeg_enc.c
@@ -457,20 +457,6 @@ int enc_open(OutputStream *ost, AVFrame *frame)
         return ret;
     }
 
-    if (ost->enc_ctx->nb_coded_side_data) {
-        int i;
-
-        for (i = 0; i < ost->enc_ctx->nb_coded_side_data; i++) {
-            const AVPacketSideData *sd_src = &ost->enc_ctx->coded_side_data[i];
-            uint8_t *dst_data;
-
-            dst_data = av_stream_new_side_data(ost->st, sd_src->type, sd_src->size);
-            if (!dst_data)
-                return AVERROR(ENOMEM);
-            memcpy(dst_data, sd_src->data, sd_src->size);
-        }
-    }
-
     /*
      * Add global input side data. For now this is naive, and copies it
      * from the input stream's global side data. All side data should
@@ -480,15 +466,16 @@ int enc_open(OutputStream *ost, AVFrame *frame)
      */
     if (ist) {
         int i;
-        for (i = 0; i < ist->st->nb_side_data; i++) {
-            AVPacketSideData *sd = &ist->st->side_data[i];
-            if (sd->type != AV_PKT_DATA_CPB_PROPERTIES) {
-                uint8_t *dst = av_stream_new_side_data(ost->st, sd->type, sd->size);
-                if (!dst)
+        for (i = 0; i < ist->st->codecpar->nb_side_data; i++) {
+            AVPacketSideData *sd_src = &ist->st->codecpar->side_data[i];
+            if (sd_src->type != AV_PKT_DATA_CPB_PROPERTIES) {
+                AVPacketSideData *sd_dst = av_packet_side_data_new(&ost->par_in->side_data, &ost->par_in->nb_side_data,
+                                                                       sd_src->type, sd_src->size, 0);
+                if (!sd_dst)
                     return AVERROR(ENOMEM);
-                memcpy(dst, sd->data, sd->size);
-                if (ist->autorotate && sd->type == AV_PKT_DATA_DISPLAYMATRIX)
-                    av_display_rotation_set((int32_t *)dst, 0);
+                memcpy(sd_dst->data, sd_src->data, sd_src->size);
+                if (ist->autorotate && sd_src->type == AV_PKT_DATA_DISPLAYMATRIX)
+                    av_display_rotation_set((int32_t *)sd_dst->data, 0);
             }
         }
     }
diff --git a/fftools/ffmpeg_filter.c b/fftools/ffmpeg_filter.c
index 9bf870b615..4c8e4c2d99 100644
--- a/fftools/ffmpeg_filter.c
+++ b/fftools/ffmpeg_filter.c
@@ -1383,11 +1383,15 @@ static int configure_input_video_filter(FilterGraph *fg, InputFilter *ifilter,
 
     // TODO: insert hwaccel enabled filters like transpose_vaapi into the graph
     if (ist->autorotate && !(desc->flags & AV_PIX_FMT_FLAG_HWACCEL)) {
+        const AVPacketSideData *sd = NULL;
         int32_t *displaymatrix = ifp->displaymatrix;
         double theta;
 
         if (!ifp->displaymatrix_present)
-            displaymatrix = (int32_t *)av_stream_get_side_data(ist->st, AV_PKT_DATA_DISPLAYMATRIX, NULL);
+            sd = av_packet_side_data_get(ist->st->codecpar->side_data, ist->st->codecpar->nb_side_data,
+                                         AV_PKT_DATA_DISPLAYMATRIX);
+        if (sd)
+            displaymatrix = (int32_t *)sd->data;
         theta = get_rotation(displaymatrix);
 
         if (fabs(theta - 90) < 1.0) {
diff --git a/fftools/ffmpeg_mux_init.c b/fftools/ffmpeg_mux_init.c
index 9d6f442068..201f09e3e2 100644
--- a/fftools/ffmpeg_mux_init.c
+++ b/fftools/ffmpeg_mux_init.c
@@ -1045,24 +1045,27 @@ static int streamcopy_init(const Muxer *mux, OutputStream *ost)
         }
     }
 
-    for (int i = 0; i < ist->st->nb_side_data; i++) {
-        const AVPacketSideData *sd_src = &ist->st->side_data[i];
-        uint8_t *dst_data;
+    for (int i = 0; i < ist->st->codecpar->nb_side_data; i++) {
+        const AVPacketSideData *sd_src = &ist->st->codecpar->side_data[i];
+        AVPacketSideData *sd_dst;
 
-        dst_data = av_stream_new_side_data(ost->st, sd_src->type, sd_src->size);
-        if (!dst_data) {
+        sd_dst = av_packet_side_data_new(&ost->st->codecpar->side_data, &ost->st->codecpar->nb_side_data,
+		                                 sd_src->type, sd_src->size, 0);
+        if (!sd_dst) {
             ret = AVERROR(ENOMEM);
             goto fail;
         }
-        memcpy(dst_data, sd_src->data, sd_src->size);
+        memcpy(sd_dst->data, sd_src->data, sd_src->size);
     }
 
 #if FFMPEG_ROTATION_METADATA
     if (ost->rotate_overridden) {
-        uint8_t *sd = av_stream_new_side_data(ost->st, AV_PKT_DATA_DISPLAYMATRIX,
-                                              sizeof(int32_t) * 9);
+        AVPacketSideData *sd = av_packet_side_data_new(&ost->st->codecpar->side_data,
+                                                       &ost->st->codecpar->nb_side_data,
+                                                           AV_PKT_DATA_DISPLAYMATRIX,
+                                                           sizeof(int32_t) * 9, 0);
         if (sd)
-            av_display_rotation_set((int32_t *)sd, -ost->rotate_override_value);
+            av_display_rotation_set((int32_t *)sd->data, -ost->rotate_override_value);
     }
 #endif
 
-- 
2.42.0

_______________________________________________
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".

^ permalink raw reply	[flat|nested] 27+ messages in thread

* [FFmpeg-devel] [PATCH 06/11] fftools/ffplay: stop using AVStream.side_data
  2023-09-27 13:12 [FFmpeg-devel] [PATCH 00/11 v5] AVCodecContext and AVCodecParameters side data James Almer
                   ` (4 preceding siblings ...)
  2023-09-27 13:12 ` [FFmpeg-devel] [PATCH 05/11] fftools/ffmpeg: stop using AVStream.side_data James Almer
@ 2023-09-27 13:12 ` James Almer
  2023-09-27 13:12 ` [FFmpeg-devel] [PATCH 07/11] fftools/ffprobe: " James Almer
                   ` (4 subsequent siblings)
  10 siblings, 0 replies; 27+ messages in thread
From: James Almer @ 2023-09-27 13:12 UTC (permalink / raw)
  To: ffmpeg-devel

Signed-off-by: James Almer <jamrial@gmail.com>
---
 fftools/ffplay.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/fftools/ffplay.c b/fftools/ffplay.c
index 006da7ab57..e29b0ad0f9 100644
--- a/fftools/ffplay.c
+++ b/fftools/ffplay.c
@@ -1916,8 +1916,13 @@ static int configure_video_filters(AVFilterGraph *graph, VideoState *is, const c
         AVFrameSideData *sd = av_frame_get_side_data(frame, AV_FRAME_DATA_DISPLAYMATRIX);
         if (sd)
             displaymatrix = (int32_t *)sd->data;
-        if (!displaymatrix)
-            displaymatrix = (int32_t *)av_stream_get_side_data(is->video_st, AV_PKT_DATA_DISPLAYMATRIX, NULL);
+        if (!displaymatrix) {
+            const AVPacketSideData *sd = av_packet_side_data_get(is->video_st->codecpar->side_data,
+                                                                 is->video_st->codecpar->nb_side_data,
+                                                               AV_PKT_DATA_DISPLAYMATRIX);
+            if (sd)
+                displaymatrix = (int32_t *)sd->data;
+        }
         theta = get_rotation(displaymatrix);
 
         if (fabs(theta - 90) < 1.0) {
-- 
2.42.0

_______________________________________________
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".

^ permalink raw reply	[flat|nested] 27+ messages in thread

* [FFmpeg-devel] [PATCH 07/11] fftools/ffprobe: stop using AVStream.side_data
  2023-09-27 13:12 [FFmpeg-devel] [PATCH 00/11 v5] AVCodecContext and AVCodecParameters side data James Almer
                   ` (5 preceding siblings ...)
  2023-09-27 13:12 ` [FFmpeg-devel] [PATCH 06/11] fftools/ffplay: " James Almer
@ 2023-09-27 13:12 ` James Almer
  2023-09-27 13:12 ` [FFmpeg-devel] [PATCH 08/11] avcodec/hevcdec: check for DOVI configuration record in AVCodecContext side data James Almer
                   ` (3 subsequent siblings)
  10 siblings, 0 replies; 27+ messages in thread
From: James Almer @ 2023-09-27 13:12 UTC (permalink / raw)
  To: ffmpeg-devel

Signed-off-by: James Almer <jamrial@gmail.com>
---
 fftools/ffprobe.c | 30 ++++++++++++++----------------
 1 file changed, 14 insertions(+), 16 deletions(-)

diff --git a/fftools/ffprobe.c b/fftools/ffprobe.c
index c20f464623..d5415be61a 100644
--- a/fftools/ffprobe.c
+++ b/fftools/ffprobe.c
@@ -2279,16 +2279,9 @@ static void print_ambient_viewing_environment(WriterContext *w,
 
 static void print_pkt_side_data(WriterContext *w,
                                 AVCodecParameters *par,
-                                const AVPacketSideData *side_data,
-                                int nb_side_data,
-                                SectionID id_data_list,
+                                const AVPacketSideData *sd,
                                 SectionID id_data)
 {
-    int i;
-
-    writer_print_section_header(w, id_data_list);
-    for (i = 0; i < nb_side_data; i++) {
-        const AVPacketSideData *sd = &side_data[i];
         const char *name = av_packet_side_data_name(sd->type);
 
         writer_print_section_header(w, id_data);
@@ -2382,9 +2375,6 @@ static void print_pkt_side_data(WriterContext *w,
         } else if (sd->type == AV_PKT_DATA_AFD && sd->size > 0) {
             print_int("active_format", *sd->data);
         }
-        writer_print_section_footer(w);
-    }
-    writer_print_section_footer(w);
 }
 
 static void print_private_data(WriterContext *w, void *priv_data)
@@ -2544,9 +2534,13 @@ static void show_packet(WriterContext *w, InputFile *ifile, AVPacket *pkt, int p
             av_dict_free(&dict);
         }
 
-        print_pkt_side_data(w, st->codecpar, pkt->side_data, pkt->side_data_elems,
-                            SECTION_ID_PACKET_SIDE_DATA_LIST,
+        writer_print_section_header(w, SECTION_ID_PACKET_SIDE_DATA_LIST);
+        for (int i = 0; i < pkt->side_data_elems; i++) {
+            print_pkt_side_data(w, st->codecpar, &pkt->side_data[i],
                             SECTION_ID_PACKET_SIDE_DATA);
+            writer_print_section_footer(w);
+        }
+        writer_print_section_footer(w);
     }
 
     writer_print_section_footer(w);
@@ -3188,10 +3182,14 @@ static int show_stream(WriterContext *w, AVFormatContext *fmt_ctx, int stream_id
     if (do_show_stream_tags)
         ret = show_tags(w, stream->metadata, in_program ? SECTION_ID_PROGRAM_STREAM_TAGS : SECTION_ID_STREAM_TAGS);
 
-    if (stream->nb_side_data) {
-        print_pkt_side_data(w, stream->codecpar, stream->side_data, stream->nb_side_data,
-                            SECTION_ID_STREAM_SIDE_DATA_LIST,
+    if (stream->codecpar->nb_side_data) {
+        writer_print_section_header(w, SECTION_ID_STREAM_SIDE_DATA_LIST);
+        for (int i = 0; i < stream->codecpar->nb_side_data; i++) {
+            print_pkt_side_data(w, stream->codecpar, &stream->codecpar->side_data[i],
                             SECTION_ID_STREAM_SIDE_DATA);
+            writer_print_section_footer(w);
+        }
+        writer_print_section_footer(w);
     }
 
     writer_print_section_footer(w);
-- 
2.42.0

_______________________________________________
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".

^ permalink raw reply	[flat|nested] 27+ messages in thread

* [FFmpeg-devel] [PATCH 08/11] avcodec/hevcdec: check for DOVI configuration record in AVCodecContext side data
  2023-09-27 13:12 [FFmpeg-devel] [PATCH 00/11 v5] AVCodecContext and AVCodecParameters side data James Almer
                   ` (6 preceding siblings ...)
  2023-09-27 13:12 ` [FFmpeg-devel] [PATCH 07/11] fftools/ffprobe: " James Almer
@ 2023-09-27 13:12 ` James Almer
  2023-10-03 10:18   ` Anton Khirnov
  2023-09-27 13:12 ` [FFmpeg-devel] [PATCH 09/11] avcodec/decode: check for global side data " James Almer
                   ` (2 subsequent siblings)
  10 siblings, 1 reply; 27+ messages in thread
From: James Almer @ 2023-09-27 13:12 UTC (permalink / raw)
  To: ffmpeg-devel

Signed-off-by: James Almer <jamrial@gmail.com>
---
 libavcodec/avcodec.h |  2 +-
 libavcodec/decode.c  | 10 ++++++++++
 libavcodec/decode.h  |  3 +++
 libavcodec/hevcdec.c | 15 ++++++++++++++-
 4 files changed, 28 insertions(+), 2 deletions(-)

diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
index da3c5234a0..48a4b73fd3 100644
--- a/libavcodec/avcodec.h
+++ b/libavcodec/avcodec.h
@@ -1903,7 +1903,7 @@ typedef struct AVCodecContext {
     /**
      * Additional data associated with the entire coded stream.
      *
-     * - decoding: unused
+     * - decoding: set by user before calling avcodec_open2().
      * - encoding: may be set by libavcodec after avcodec_open2().
      */
     AVPacketSideData *coded_side_data;
diff --git a/libavcodec/decode.c b/libavcodec/decode.c
index 466c393c1e..a7196b5740 100644
--- a/libavcodec/decode.c
+++ b/libavcodec/decode.c
@@ -1400,6 +1400,16 @@ int ff_get_format(AVCodecContext *avctx, const enum AVPixelFormat *fmt)
     return ret;
 }
 
+const AVPacketSideData *ff_get_coded_side_data(const AVCodecContext *avctx,
+                                               enum AVPacketSideDataType type)
+{
+    for (int i = 0; i < avctx->nb_coded_side_data; i++)
+        if (avctx->coded_side_data[i].type == type)
+            return &avctx->coded_side_data[i];
+
+    return NULL;
+}
+
 static int add_metadata_from_side_data(const AVPacket *avpkt, AVFrame *frame)
 {
     size_t size;
diff --git a/libavcodec/decode.h b/libavcodec/decode.h
index a52152e4a7..8a7dec4e2e 100644
--- a/libavcodec/decode.h
+++ b/libavcodec/decode.h
@@ -153,4 +153,7 @@ int ff_side_data_update_matrix_encoding(AVFrame *frame,
 int ff_hwaccel_frame_priv_alloc(AVCodecContext *avctx, void **hwaccel_picture_private,
                                 AVBufferRef **hwaccel_priv_buf);
 
+const AVPacketSideData *ff_get_coded_side_data(const AVCodecContext *avctx,
+                                               enum AVPacketSideDataType type);
+
 #endif /* AVCODEC_DECODE_H */
diff --git a/libavcodec/hevcdec.c b/libavcodec/hevcdec.c
index 81b9c5e089..59d59bbef4 100644
--- a/libavcodec/hevcdec.c
+++ b/libavcodec/hevcdec.c
@@ -3340,8 +3340,15 @@ static int hevc_decode_frame(AVCodecContext *avctx, AVFrame *rframe,
     }
 
     sd = av_packet_get_side_data(avpkt, AV_PKT_DATA_DOVI_CONF, &sd_size);
-    if (sd && sd_size > 0)
+    if (sd && sd_size > 0) {
+        int old = s->dovi_ctx.dv_profile;
+
         ff_dovi_update_cfg(&s->dovi_ctx, (AVDOVIDecoderConfigurationRecord *) sd);
+        if (old)
+            av_log(avctx, AV_LOG_DEBUG,
+                   "New DOVI configuration record from input packet (profile %d -> %u).\n",
+                   old, s->dovi_ctx.dv_profile);
+    }
 
     s->ref = NULL;
     ret    = decode_nal_units(s, avpkt->data, avpkt->size);
@@ -3644,12 +3651,18 @@ static av_cold int hevc_decode_init(AVCodecContext *avctx)
     atomic_init(&s->wpp_err, 0);
 
     if (!avctx->internal->is_copy) {
+        const AVPacketSideData *sd;
+
         if (avctx->extradata_size > 0 && avctx->extradata) {
             ret = hevc_decode_extradata(s, avctx->extradata, avctx->extradata_size, 1);
             if (ret < 0) {
                 return ret;
             }
         }
+
+        sd = ff_get_coded_side_data(avctx, AV_PKT_DATA_DOVI_CONF);
+        if (sd && sd->size > 0)
+            ff_dovi_update_cfg(&s->dovi_ctx, (AVDOVIDecoderConfigurationRecord *) sd->data);
     }
 
     return 0;
-- 
2.42.0

_______________________________________________
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".

^ permalink raw reply	[flat|nested] 27+ messages in thread

* [FFmpeg-devel] [PATCH 09/11] avcodec/decode: check for global side data in AVCodecContext side data
  2023-09-27 13:12 [FFmpeg-devel] [PATCH 00/11 v5] AVCodecContext and AVCodecParameters side data James Almer
                   ` (7 preceding siblings ...)
  2023-09-27 13:12 ` [FFmpeg-devel] [PATCH 08/11] avcodec/hevcdec: check for DOVI configuration record in AVCodecContext side data James Almer
@ 2023-09-27 13:12 ` James Almer
  2023-10-03 12:34   ` Anton Khirnov
  2023-09-27 13:12 ` [FFmpeg-devel] [PATCH 10/11] fftools/ffmpeg: stop injecting stream side data in packets James Almer
  2023-09-27 13:12 ` [FFmpeg-devel] [PATCH 11/11] fftools/ffplay: " James Almer
  10 siblings, 1 reply; 27+ messages in thread
From: James Almer @ 2023-09-27 13:12 UTC (permalink / raw)
  To: ffmpeg-devel

Signed-off-by: James Almer <jamrial@gmail.com>
---
 libavcodec/decode.c | 48 +++++++++++++++++++++++++++++++++++++--------
 1 file changed, 40 insertions(+), 8 deletions(-)

diff --git a/libavcodec/decode.c b/libavcodec/decode.c
index a7196b5740..3b4bb70689 100644
--- a/libavcodec/decode.c
+++ b/libavcodec/decode.c
@@ -1422,6 +1422,20 @@ static int add_metadata_from_side_data(const AVPacket *avpkt, AVFrame *frame)
     return av_packet_unpack_dictionary(side_metadata, size, frame_md);
 }
 
+static const struct {
+    enum AVPacketSideDataType packet;
+    enum AVFrameSideDataType frame;
+} sd_global_map[] = {
+    { AV_PKT_DATA_REPLAYGAIN ,                AV_FRAME_DATA_REPLAYGAIN },
+    { AV_PKT_DATA_SPHERICAL,                  AV_FRAME_DATA_SPHERICAL },
+    { AV_PKT_DATA_STEREO3D,                   AV_FRAME_DATA_STEREO3D },
+    { AV_PKT_DATA_AUDIO_SERVICE_TYPE,         AV_FRAME_DATA_AUDIO_SERVICE_TYPE },
+    { AV_PKT_DATA_MASTERING_DISPLAY_METADATA, AV_FRAME_DATA_MASTERING_DISPLAY_METADATA },
+    { AV_PKT_DATA_CONTENT_LIGHT_LEVEL,        AV_FRAME_DATA_CONTENT_LIGHT_LEVEL },
+    { AV_PKT_DATA_ICC_PROFILE,                AV_FRAME_DATA_ICC_PROFILE },
+    { AV_PKT_DATA_DYNAMIC_HDR10_PLUS,         AV_FRAME_DATA_DYNAMIC_HDR_PLUS },
+};
+
 int ff_decode_frame_props_from_pkt(const AVCodecContext *avctx,
                                    AVFrame *frame, const AVPacket *pkt)
 {
@@ -1429,18 +1443,10 @@ int ff_decode_frame_props_from_pkt(const AVCodecContext *avctx,
         enum AVPacketSideDataType packet;
         enum AVFrameSideDataType frame;
     } sd[] = {
-        { AV_PKT_DATA_REPLAYGAIN ,                AV_FRAME_DATA_REPLAYGAIN },
         { AV_PKT_DATA_DISPLAYMATRIX,              AV_FRAME_DATA_DISPLAYMATRIX },
-        { AV_PKT_DATA_SPHERICAL,                  AV_FRAME_DATA_SPHERICAL },
-        { AV_PKT_DATA_STEREO3D,                   AV_FRAME_DATA_STEREO3D },
-        { AV_PKT_DATA_AUDIO_SERVICE_TYPE,         AV_FRAME_DATA_AUDIO_SERVICE_TYPE },
-        { AV_PKT_DATA_MASTERING_DISPLAY_METADATA, AV_FRAME_DATA_MASTERING_DISPLAY_METADATA },
-        { AV_PKT_DATA_CONTENT_LIGHT_LEVEL,        AV_FRAME_DATA_CONTENT_LIGHT_LEVEL },
         { AV_PKT_DATA_A53_CC,                     AV_FRAME_DATA_A53_CC },
         { AV_PKT_DATA_AFD,                        AV_FRAME_DATA_AFD },
-        { AV_PKT_DATA_ICC_PROFILE,                AV_FRAME_DATA_ICC_PROFILE },
         { AV_PKT_DATA_S12M_TIMECODE,              AV_FRAME_DATA_S12M_TIMECODE },
-        { AV_PKT_DATA_DYNAMIC_HDR10_PLUS,         AV_FRAME_DATA_DYNAMIC_HDR_PLUS },
         { AV_PKT_DATA_SKIP_SAMPLES,               AV_FRAME_DATA_SKIP_SAMPLES },
     };
 
@@ -1453,6 +1459,18 @@ FF_DISABLE_DEPRECATION_WARNINGS
 FF_ENABLE_DEPRECATION_WARNINGS
 #endif
 
+    for (int i = 0; i < FF_ARRAY_ELEMS(sd_global_map); i++) {
+        size_t size;
+        const uint8_t *packet_sd = av_packet_get_side_data(pkt, sd_global_map[i].packet, &size);
+        if (packet_sd) {
+            AVFrameSideData *frame_sd;
+
+            frame_sd = av_frame_new_side_data(frame, sd_global_map[i].frame, size);
+            if (!frame_sd)
+                return AVERROR(ENOMEM);
+            memcpy(frame_sd->data, packet_sd, size);
+        }
+    }
     for (int i = 0; i < FF_ARRAY_ELEMS(sd); i++) {
         size_t size;
         uint8_t *packet_sd = av_packet_get_side_data(pkt, sd[i].packet, &size);
@@ -1489,6 +1507,20 @@ int ff_decode_frame_props(AVCodecContext *avctx, AVFrame *frame)
     const AVPacket *pkt = avctx->internal->last_pkt_props;
     int ret;
 
+    for (int i = 0; i < FF_ARRAY_ELEMS(sd_global_map); i++) {
+        const AVPacketSideData *packet_sd = ff_get_coded_side_data(avctx,
+                                                                   sd_global_map[i].packet);
+        if (packet_sd) {
+            AVFrameSideData *frame_sd = av_frame_new_side_data(frame,
+                                                               sd_global_map[i].frame,
+                                                               packet_sd->size);
+            if (!frame_sd)
+                return AVERROR(ENOMEM);
+
+            memcpy(frame_sd->data, packet_sd->data, packet_sd->size);
+        }
+    }
+
     if (!(ffcodec(avctx->codec)->caps_internal & FF_CODEC_CAP_SETS_FRAME_PROPS)) {
         ret = ff_decode_frame_props_from_pkt(avctx, frame, pkt);
         if (ret < 0)
-- 
2.42.0

_______________________________________________
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".

^ permalink raw reply	[flat|nested] 27+ messages in thread

* [FFmpeg-devel] [PATCH 10/11] fftools/ffmpeg: stop injecting stream side data in packets
  2023-09-27 13:12 [FFmpeg-devel] [PATCH 00/11 v5] AVCodecContext and AVCodecParameters side data James Almer
                   ` (8 preceding siblings ...)
  2023-09-27 13:12 ` [FFmpeg-devel] [PATCH 09/11] avcodec/decode: check for global side data " James Almer
@ 2023-09-27 13:12 ` James Almer
  2023-10-03 11:04   ` Anton Khirnov
  2023-09-27 13:12 ` [FFmpeg-devel] [PATCH 11/11] fftools/ffplay: " James Almer
  10 siblings, 1 reply; 27+ messages in thread
From: James Almer @ 2023-09-27 13:12 UTC (permalink / raw)
  To: ffmpeg-devel

This is no longer needed as the side data is available for decoders in the
AVCodecContext.
The tests affected reflect the removal of useless CPB and Stereo 3D side
data in packets.

Signed-off-by: James Almer <jamrial@gmail.com>
---
 fftools/ffmpeg_demux.c                        | 22 -------------------
 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 +-
 15 files changed, 21 insertions(+), 43 deletions(-)

diff --git a/fftools/ffmpeg_demux.c b/fftools/ffmpeg_demux.c
index b312ff4922..aad5215d94 100644
--- a/fftools/ffmpeg_demux.c
+++ b/fftools/ffmpeg_demux.c
@@ -480,28 +480,6 @@ static int input_packet_process(Demuxer *d, DemuxMsg *msg, AVPacket *src)
     ds->data_size += pkt->size;
     ds->nb_packets++;
 
-    /* add the stream-global side data to the first packet */
-    if (ds->nb_packets == 1) {
-        for (int i = 0; i < ist->st->codecpar->nb_side_data; i++) {
-            AVPacketSideData *src_sd = &ist->st->codecpar->side_data[i];
-            uint8_t *dst_data;
-
-            if (src_sd->type == AV_PKT_DATA_DISPLAYMATRIX)
-                continue;
-
-            if (av_packet_get_side_data(pkt, src_sd->type, NULL))
-                continue;
-
-            dst_data = av_packet_new_side_data(pkt, src_sd->type, src_sd->size);
-            if (!dst_data) {
-                ret = AVERROR(ENOMEM);
-                goto fail;
-            }
-
-            memcpy(dst_data, src_sd->data, src_sd->size);
-        }
-    }
-
     if (debug_ts) {
         av_log(NULL, AV_LOG_INFO, "demuxer+ffmpeg -> ist_index:%d:%d type:%s pkt_pts:%s pkt_pts_time:%s pkt_dts:%s pkt_dts_time:%s duration:%s duration_time:%s off:%s off_time:%s\n",
                f->index, pkt->stream_index,
diff --git a/tests/ref/fate/autorotate b/tests/ref/fate/autorotate
index dff628bbff..2aa29fafa7 100644
--- a/tests/ref/fate/autorotate
+++ b/tests/ref/fate/autorotate
@@ -11,8 +11,8 @@
 #codec_id 1: ac3
 #sample_rate 1: 44100
 #channel_layout_name 1: mono
-0,       -512,          0,      512,     6997, 0x55c700f6, S=1,       40
-1,       -256,       -256,     1536,      416, 0x92ddc529, S=2,       10,        4
+0,       -512,          0,      512,     6997, 0x55c700f6
+1,       -256,       -256,     1536,      416, 0x92ddc529, S=1,       10
 0,          0,        512,      512,     4847, 0xe74f522e, F=0x0
 1,       1280,       1280,     1536,      418, 0x0a7fcd2d
 0,        512,       1024,      512,     5281, 0xbd4a5dac, F=0x0
diff --git a/tests/ref/fate/copy-trac3074 b/tests/ref/fate/copy-trac3074
index b6d23f8c1c..53ba27e920 100644
--- a/tests/ref/fate/copy-trac3074
+++ b/tests/ref/fate/copy-trac3074
@@ -5,7 +5,7 @@
 #codec_id 0: eac3
 #sample_rate 0: 48000
 #channel_layout_name 0: stereo
-0,          0,          0,     1536,      512, 0x2beaf79f, S=1,        4
+0,          0,          0,     1536,      512, 0x2beaf79f
 0,       1536,       1536,     1536,      512, 0x29ddf9d6
 0,       3072,       3072,     1536,      512, 0xba0afa79
 0,       4608,       4608,     1536,      512, 0xe019f394
diff --git a/tests/ref/fate/matroska-avoid-negative-ts b/tests/ref/fate/matroska-avoid-negative-ts
index 05821cbf09..3ba289c6e6 100644
--- a/tests/ref/fate/matroska-avoid-negative-ts
+++ b/tests/ref/fate/matroska-avoid-negative-ts
@@ -11,7 +11,7 @@ dede1d72a28c7eb0a849acf230b08247 *tests/data/fate/matroska-avoid-negative-ts.mat
 #codec_id 1: mp3
 #sample_rate 1: 44100
 #channel_layout_name 1: mono
-0,        -37,         43,       40,     9156, 0xe5bd034a, S=1,       40
+0,        -37,         43,       40,     9156, 0xe5bd034a
 1,          0,          0,       26,      417, 0x7198c15e
 0,          3,          3,       40,     1740, 0x29ac4480, F=0x0
 1,         26,         26,       26,      417, 0x3c67c32d
diff --git a/tests/ref/fate/matroska-dovi-write-config7 b/tests/ref/fate/matroska-dovi-write-config7
index aaeeb34751..dc5b73a44e 100644
--- a/tests/ref/fate/matroska-dovi-write-config7
+++ b/tests/ref/fate/matroska-dovi-write-config7
@@ -13,7 +13,7 @@
 #dimensions 1: 1920x1080
 #sar 1: 0/1
 0,        -83,          0,       41,      699, 0x728548f1
-1,        -83,          0,       41,     1085, 0xfb2dba82, S=1,        8
+1,        -83,          0,       41,     1085, 0xfb2dba82
 0,        -42,        167,       41,       95, 0xc0312044, F=0x0
 1,        -42,        167,       41,      481, 0xf23f91d5, F=0x0
 0,          0,         83,       41,       99, 0x5e0a2221, F=0x0
diff --git a/tests/ref/fate/matroska-dovi-write-config8 b/tests/ref/fate/matroska-dovi-write-config8
index 55fe191047..472cbed708 100644
--- a/tests/ref/fate/matroska-dovi-write-config8
+++ b/tests/ref/fate/matroska-dovi-write-config8
@@ -12,7 +12,7 @@
 #codec_id 1: aac
 #sample_rate 1: 44100
 #channel_layout_name 1: stereo
-0,        -67,          0,       33,    63375, 0xc76606ab, S=1,        8
+0,        -67,          0,       33,    63375, 0xc76606ab
 0,        -34,        133,       33,    46706, 0x0e08a7e5, F=0x0
 0,          0,         67,       33,    29766, 0x753c031a, F=0x0
 1,          0,          0,       23,        6, 0x031e0108
diff --git a/tests/ref/fate/matroska-encoding-delay b/tests/ref/fate/matroska-encoding-delay
index d2ff2d07be..ee1989cbcb 100644
--- a/tests/ref/fate/matroska-encoding-delay
+++ b/tests/ref/fate/matroska-encoding-delay
@@ -12,7 +12,7 @@
 #sample_rate 1: 48000
 #channel_layout_name 1: stereo
 1,        -10,        -10,       24,     1152, 0x724077b8
-0,          0,          0,       40,   237628, 0xeff25579, S=1,       40
+0,          0,          0,       40,   237628, 0xeff25579
 1,         14,         14,       24,     1152, 0x80625572
 1,         38,         38,       24,     1152, 0x7d7f4dce
 0,         40,         40,       40,   238066, 0xb2265f41
diff --git a/tests/ref/fate/matroska-mastering-display-metadata b/tests/ref/fate/matroska-mastering-display-metadata
index 3726469213..53f84c1793 100644
--- a/tests/ref/fate/matroska-mastering-display-metadata
+++ b/tests/ref/fate/matroska-mastering-display-metadata
@@ -22,9 +22,9 @@
 #codec_id 3: ffv1
 #dimensions 3: 1280x720
 #sar 3: 1/1
-0,          0,          0,       16,    57008, 0x43416399, S=2,        8,       88
+0,          0,          0,       16,    57008, 0x43416399
 1,          0,          0,       16,     2403, 0xaa818522
-3,          0,          0,       16,   274117, 0xc439610f, S=2,        8,       88
+3,          0,          0,       16,   274117, 0xc439610f
 0,         17,         17,       16,    57248, 0xa06cd7b5
 1,         17,         17,       16,     2403, 0xe1a991e5
 2,         17,         17,       16,     1602, 0x5d868171
diff --git a/tests/ref/fate/matroska-spherical-mono-remux b/tests/ref/fate/matroska-spherical-mono-remux
index e9904b2c92..6fcda14822 100644
--- a/tests/ref/fate/matroska-spherical-mono-remux
+++ b/tests/ref/fate/matroska-spherical-mono-remux
@@ -12,8 +12,8 @@ fddfea5f05a7a9a0d187df9a72900055 *tests/data/fate/matroska-spherical-mono-remux.
 #codec_id 1: h264
 #dimensions 1: 1920x1080
 #sar 1: 0/1
-0,        -80,          0,       40,    69118, 0x73cb52f0, S=2,       12,       36
-1,        -80,          0,       40,    69118, 0x73cb52f0, S=2,       12,       36
+0,        -80,          0,       40,    69118, 0x73cb52f0
+1,        -80,          0,       40,    69118, 0x73cb52f0
 0,        -40,        160,       40,     1103, 0x082a059f, F=0x0
 1,        -40,        160,       40,     1103, 0x082a059f, F=0x0
 [STREAM]
diff --git a/tests/ref/fate/matroska-stereo_mode b/tests/ref/fate/matroska-stereo_mode
index 5c36a6d666..739b789fea 100644
--- a/tests/ref/fate/matroska-stereo_mode
+++ b/tests/ref/fate/matroska-stereo_mode
@@ -43,10 +43,10 @@ a7a220a77001e81685ec807ce5ac3bc6 *tests/data/fate/matroska-stereo_mode.matroska
 #dimensions 6: 512x512
 #sar 6: 2/1
 0,          0,          0,     1000,   206173, 0x95af7455
-1,          0,          0,     1000,   206173, 0x95af7455, S=1,       12
-2,          0,          0,     1000,   206173, 0x95af7455, S=1,       12
-3,          0,          0,     1000,   206173, 0x95af7455, S=1,       12
-4,          0,          0,     1000,   206173, 0x95af7455, S=1,       12
+1,          0,          0,     1000,   206173, 0x95af7455
+2,          0,          0,     1000,   206173, 0x95af7455
+3,          0,          0,     1000,   206173, 0x95af7455
+4,          0,          0,     1000,   206173, 0x95af7455
 5,          0,          0,     1000,   206173, 0x95af7455
 6,          0,          0,     1000,   206173, 0x95af7455
 0,       1000,       1000,     1000,       36, 0x34891010, F=0x0
diff --git a/tests/ref/fate/matroska-vp8-alpha-remux b/tests/ref/fate/matroska-vp8-alpha-remux
index eba3ffb77a..8117325433 100644
--- a/tests/ref/fate/matroska-vp8-alpha-remux
+++ b/tests/ref/fate/matroska-vp8-alpha-remux
@@ -5,7 +5,7 @@
 #codec_id 0: vp8
 #dimensions 0: 320x213
 #sar 0: 1/1
-0,          0,          0,       33,     2108, 0x59b92a34, S=2,     1900,       12
+0,          0,          0,       33,     2108, 0x59b92a34, S=1,     1900
 0,         32,         32,       33,      142, 0x2f2a3fed, F=0x0, S=1,      160
 0,         65,         65,       33,      157, 0x17804767, F=0x0, S=1,      209
 0,         99,         99,       33,      206, 0x537262ca, F=0x0, S=1,      317
diff --git a/tests/ref/fate/mov-mp4-disposition-mpegts-remux b/tests/ref/fate/mov-mp4-disposition-mpegts-remux
index efef043074..ba419843dc 100644
--- a/tests/ref/fate/mov-mp4-disposition-mpegts-remux
+++ b/tests/ref/fate/mov-mp4-disposition-mpegts-remux
@@ -10,9 +10,9 @@ adb3b95c07a5f3e0c86641dd62f01dae *tests/data/fate/mov-mp4-disposition-mpegts-rem
 #codec_id 1: ac3
 #sample_rate 1: 48000
 #channel_layout_name 1: stereo
-1,          0,          0,     1536,      768, 0xa63778d4, S=1,        4
+1,          0,          0,     1536,      768, 0xa63778d4
 1,       1536,       1536,     1536,      768, 0x7d577f3f
-0,       3072,       3072,     1536,      768, 0xc2867884, S=1,        4
+0,       3072,       3072,     1536,      768, 0xc2867884
 1,       3072,       3072,     1536,      768, 0xd86b7c8f
 0,       4608,       4608,     1536,      690, 0xa2714bf3
 1,       4608,       4608,     1536,      626, 0x09f4382f
diff --git a/tests/ref/fate/mxf-d10-user-comments b/tests/ref/fate/mxf-d10-user-comments
index 1b59beec7c..ccfdc83f11 100644
--- a/tests/ref/fate/mxf-d10-user-comments
+++ b/tests/ref/fate/mxf-d10-user-comments
@@ -6,7 +6,7 @@
 #codec_id 0: mpeg2video
 #dimensions 0: 1280x720
 #sar 0: 3/4
-0,         -1,          0,        1,   150000, 0x0547870d, S=1,       40
+0,         -1,          0,        1,   150000, 0x0547870d
 0,          0,          1,        1,   150000, 0xe80a1612, F=0x0
 0,          1,          2,        1,   150000, 0xc5c50e2f, F=0x0
 0,          2,          3,        1,   150000, 0x51e28a04, F=0x0
diff --git a/tests/ref/fate/mxf-remux-applehdr10 b/tests/ref/fate/mxf-remux-applehdr10
index 29e0e03a72..9fbf8b60c7 100644
--- a/tests/ref/fate/mxf-remux-applehdr10
+++ b/tests/ref/fate/mxf-remux-applehdr10
@@ -10,7 +10,7 @@
 #codec_id 1: pcm_s24le
 #sample_rate 1: 48000
 #channel_layout_name 1: mono
-0,          0,          0,        1,    57008, 0x43416399, S=1,       88
+0,          0,          0,        1,    57008, 0x43416399
 1,          0,          0,      801,     2403, 0x00000000
 0,          1,          1,        1,    57248, 0xa06cd7b5
 1,        801,        801,      801,     2403, 0x00000000
diff --git a/tests/ref/fate/vp9-superframe-bsf b/tests/ref/fate/vp9-superframe-bsf
index d7985c6973..485644dfb2 100644
--- a/tests/ref/fate/vp9-superframe-bsf
+++ b/tests/ref/fate/vp9-superframe-bsf
@@ -3,7 +3,7 @@
 #codec_id 0: vp9
 #dimensions 0: 352x288
 #sar 0: 1/1
-0,          0,          0,       33,     6958, 0x38e58ee6, S=1,       12
+0,          0,          0,       33,     6958, 0x38e58ee6
 0,         33,         33,       33,      852, 0x3edf9ed0, F=0x0
 0,         66,         66,       33,       27, 0x62d007e5, F=0x0
 0,        100,        100,       33,       25, 0x51980749, F=0x0
-- 
2.42.0

_______________________________________________
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".

^ permalink raw reply	[flat|nested] 27+ messages in thread

* [FFmpeg-devel] [PATCH 11/11] fftools/ffplay: stop injecting stream side data in packets
  2023-09-27 13:12 [FFmpeg-devel] [PATCH 00/11 v5] AVCodecContext and AVCodecParameters side data James Almer
                   ` (9 preceding siblings ...)
  2023-09-27 13:12 ` [FFmpeg-devel] [PATCH 10/11] fftools/ffmpeg: stop injecting stream side data in packets James Almer
@ 2023-09-27 13:12 ` James Almer
  2023-10-03 10:11   ` Anton Khirnov
  10 siblings, 1 reply; 27+ messages in thread
From: James Almer @ 2023-09-27 13:12 UTC (permalink / raw)
  To: ffmpeg-devel

This is no longer needed as the side data is available for decoders in the
AVCodecContext.

Signed-off-by: James Almer <jamrial@gmail.com>
---
 fftools/ffplay.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/fftools/ffplay.c b/fftools/ffplay.c
index e29b0ad0f9..87e04226c9 100644
--- a/fftools/ffplay.c
+++ b/fftools/ffplay.c
@@ -2794,8 +2794,6 @@ static int read_thread(void *arg)
     if (genpts)
         ic->flags |= AVFMT_FLAG_GENPTS;
 
-    av_format_inject_global_side_data(ic);
-
     if (find_stream_info) {
         AVDictionary **opts;
         int orig_nb_streams = ic->nb_streams;
-- 
2.42.0

_______________________________________________
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".

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [FFmpeg-devel] [PATCH 11/11] fftools/ffplay: stop injecting stream side data in packets
  2023-09-27 13:12 ` [FFmpeg-devel] [PATCH 11/11] fftools/ffplay: " James Almer
@ 2023-10-03 10:11   ` Anton Khirnov
  2023-10-03 11:28     ` Anton Khirnov
  0 siblings, 1 reply; 27+ messages in thread
From: Anton Khirnov @ 2023-10-03 10:11 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

Quoting James Almer (2023-09-27 15:12:42)
> This is no longer needed as the side data is available for decoders in the
> AVCodecContext.
> 
> Signed-off-by: James Almer <jamrial@gmail.com>
> ---
>  fftools/ffplay.c | 2 --
>  1 file changed, 2 deletions(-)
> 
> diff --git a/fftools/ffplay.c b/fftools/ffplay.c
> index e29b0ad0f9..87e04226c9 100644
> --- a/fftools/ffplay.c
> +++ b/fftools/ffplay.c
> @@ -2794,8 +2794,6 @@ static int read_thread(void *arg)
>      if (genpts)
>          ic->flags |= AVFMT_FLAG_GENPTS;
>  
> -    av_format_inject_global_side_data(ic);

Are you planning to remove this function entirely?

-- 
Anton Khirnov
_______________________________________________
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".

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [FFmpeg-devel] [PATCH 08/11] avcodec/hevcdec: check for DOVI configuration record in AVCodecContext side data
  2023-09-27 13:12 ` [FFmpeg-devel] [PATCH 08/11] avcodec/hevcdec: check for DOVI configuration record in AVCodecContext side data James Almer
@ 2023-10-03 10:18   ` Anton Khirnov
  2023-10-03 19:11     ` James Almer
  0 siblings, 1 reply; 27+ messages in thread
From: Anton Khirnov @ 2023-10-03 10:18 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

Quoting James Almer (2023-09-27 15:12:39)
> Signed-off-by: James Almer <jamrial@gmail.com>
> ---
>  libavcodec/avcodec.h |  2 +-
>  libavcodec/decode.c  | 10 ++++++++++
>  libavcodec/decode.h  |  3 +++
>  libavcodec/hevcdec.c | 15 ++++++++++++++-
>  4 files changed, 28 insertions(+), 2 deletions(-)
> 
> diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
> index da3c5234a0..48a4b73fd3 100644
> --- a/libavcodec/avcodec.h
> +++ b/libavcodec/avcodec.h
> @@ -1903,7 +1903,7 @@ typedef struct AVCodecContext {
>      /**
>       * Additional data associated with the entire coded stream.
>       *
> -     * - decoding: unused
> +     * - decoding: set by user before calling avcodec_open2().

Should be "may be set...", because it's optional.

Also, I think this deserves to be mentione in APIchanges.

> @@ -3644,12 +3651,18 @@ static av_cold int hevc_decode_init(AVCodecContext *avctx)
>      atomic_init(&s->wpp_err, 0);
>  
>      if (!avctx->internal->is_copy) {
> +        const AVPacketSideData *sd;
> +
>          if (avctx->extradata_size > 0 && avctx->extradata) {
>              ret = hevc_decode_extradata(s, avctx->extradata, avctx->extradata_size, 1);
>              if (ret < 0) {
>                  return ret;
>              }
>          }
> +
> +        sd = ff_get_coded_side_data(avctx, AV_PKT_DATA_DOVI_CONF);
> +        if (sd && sd->size > 0)
> +            ff_dovi_update_cfg(&s->dovi_ctx, (AVDOVIDecoderConfigurationRecord *) sd->data);

Do you have a sample for this? Would be very nice to have a test for
this functionality.

-- 
Anton Khirnov
_______________________________________________
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".

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [FFmpeg-devel] [PATCH 04/11] avcodec/packet: add some documentation for AVPacketSideData
  2023-09-27 13:12 ` [FFmpeg-devel] [PATCH 04/11] avcodec/packet: add some documentation for AVPacketSideData James Almer
@ 2023-10-03 11:02   ` Anton Khirnov
  0 siblings, 0 replies; 27+ messages in thread
From: Anton Khirnov @ 2023-10-03 11:02 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

Quoting James Almer (2023-09-27 15:12:35)
> Explaining what or who may use it, and in what scenarios.
> 
> Signed-off-by: James Almer <jamrial@gmail.com>
> ---
>  libavcodec/packet.h | 15 +++++++++++++++
>  1 file changed, 15 insertions(+)
> 
> diff --git a/libavcodec/packet.h b/libavcodec/packet.h
> index 96fc0084d6..f88dad2b3c 100644
> --- a/libavcodec/packet.h
> +++ b/libavcodec/packet.h
> @@ -312,6 +312,21 @@ enum AVPacketSideDataType {
>  
>  #define AV_PKT_DATA_QUALITY_FACTOR AV_PKT_DATA_QUALITY_STATS //DEPRECATED
>  
> +/**
> + * This structure stores auxiliary
...information for decoding, presenting, or otherwise processing the
coded stream.

> It is typically exported by demuxers
> + * within @ref AVStream.codecpar.side_data "AVStream's codec parameters" or an
> + * @ref AVPacket.side_data "AVPacket" and then passed as input to decoders
> + * through the @ref AVCodecContext.coded_side_data "decoder context's side data"
> + * for initialization or through @ref AVPacket.side_data "AVPacket", or received
> + * as output from encoders within the @ref AVCodecContext.coded_side_data
> + * "encoder context's side data" or @ref AVPacket.side_data "AVPacket" and then
> + * passed to muxers through @ref AVStream.codecpar.side_data "AVStream's codec
> + * parameters" for initialization or through @ref AVPacket.side_data "AVPacket".

Long sentence is long. Consider the following:
* first state that it may be global or per-packet
* then describe the typical decoding path (demuxer->decoder, mention
  that it may be mapped to frame side data)
* then same for encoding

> + * Different modules may export or be provided different types of side data
                            ^^^^^^^^^^^^^^^^^^^^^
accept or export

Also, the doxy for AVCodecContext.coded_side_data,
AVCodecParameters.side_data and AVPacket.side_data should link to this
text, so it's actually discoverable for readers.

-- 
Anton Khirnov
_______________________________________________
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".

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [FFmpeg-devel] [PATCH 10/11] fftools/ffmpeg: stop injecting stream side data in packets
  2023-09-27 13:12 ` [FFmpeg-devel] [PATCH 10/11] fftools/ffmpeg: stop injecting stream side data in packets James Almer
@ 2023-10-03 11:04   ` Anton Khirnov
  0 siblings, 0 replies; 27+ messages in thread
From: Anton Khirnov @ 2023-10-03 11:04 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

Quoting James Almer (2023-09-27 15:12:41)
> This is no longer needed as the side data is available for decoders in the
> AVCodecContext.
> The tests affected reflect the removal of useless CPB and Stereo 3D side
> data in packets.
> 
> Signed-off-by: James Almer <jamrial@gmail.com>
> ---
>  fftools/ffmpeg_demux.c                        | 22 -------------------
>  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 +-
>  15 files changed, 21 insertions(+), 43 deletions(-)
> 
> diff --git a/fftools/ffmpeg_demux.c b/fftools/ffmpeg_demux.c
> index b312ff4922..aad5215d94 100644
> --- a/fftools/ffmpeg_demux.c
> +++ b/fftools/ffmpeg_demux.c
> @@ -480,28 +480,6 @@ static int input_packet_process(Demuxer *d, DemuxMsg *msg, AVPacket *src)
>      ds->data_size += pkt->size;
>      ds->nb_packets++;
>  
> -    /* add the stream-global side data to the first packet */
> -    if (ds->nb_packets == 1) {
> -        for (int i = 0; i < ist->st->codecpar->nb_side_data; i++) {
> -            AVPacketSideData *src_sd = &ist->st->codecpar->side_data[i];
> -            uint8_t *dst_data;
> -
> -            if (src_sd->type == AV_PKT_DATA_DISPLAYMATRIX)
> -                continue;
> -
> -            if (av_packet_get_side_data(pkt, src_sd->type, NULL))
> -                continue;
> -
> -            dst_data = av_packet_new_side_data(pkt, src_sd->type, src_sd->size);
> -            if (!dst_data) {
> -                ret = AVERROR(ENOMEM);
> -                goto fail;
> -            }
> -
> -            memcpy(dst_data, src_sd->data, src_sd->size);
> -        }
> -    }

🎉

-- 
Anton Khirnov
_______________________________________________
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".

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [FFmpeg-devel] [PATCH 02/11] avcodec/codec_par: add side data to AVCodecParameters
  2023-09-27 13:12 ` [FFmpeg-devel] [PATCH 02/11] avcodec/codec_par: add side data to AVCodecParameters James Almer
@ 2023-10-03 11:23   ` Anton Khirnov
  0 siblings, 0 replies; 27+ messages in thread
From: Anton Khirnov @ 2023-10-03 11:23 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

Quoting James Almer (2023-09-27 15:12:33)
> This will simplify the propagation of side data to decoders and from encoders.
> Global side data will now reside in the AVCodecContext, thus be available
> during init(), removing the need to propagate it inside packets.
> 
> Global and frame specific side data will therefore be distinct.
> 
> Signed-off-by: James Almer <jamrial@gmail.com>
> ---
>  libavcodec/codec_par.c | 48 ++++++++++++++++++++++++++++++++++++++++++
>  libavcodec/codec_par.h | 11 ++++++++++
>  2 files changed, 59 insertions(+)

LGTM

-- 
Anton Khirnov
_______________________________________________
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".

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [FFmpeg-devel] [PATCH 11/11] fftools/ffplay: stop injecting stream side data in packets
  2023-10-03 10:11   ` Anton Khirnov
@ 2023-10-03 11:28     ` Anton Khirnov
  0 siblings, 0 replies; 27+ messages in thread
From: Anton Khirnov @ 2023-10-03 11:28 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

Quoting Anton Khirnov (2023-10-03 12:11:52)
> Quoting James Almer (2023-09-27 15:12:42)
> > This is no longer needed as the side data is available for decoders in the
> > AVCodecContext.
> > 
> > Signed-off-by: James Almer <jamrial@gmail.com>
> > ---
> >  fftools/ffplay.c | 2 --
> >  1 file changed, 2 deletions(-)
> > 
> > diff --git a/fftools/ffplay.c b/fftools/ffplay.c
> > index e29b0ad0f9..87e04226c9 100644
> > --- a/fftools/ffplay.c
> > +++ b/fftools/ffplay.c
> > @@ -2794,8 +2794,6 @@ static int read_thread(void *arg)
> >      if (genpts)
> >          ic->flags |= AVFMT_FLAG_GENPTS;
> >  
> > -    av_format_inject_global_side_data(ic);
> 
> Are you planning to remove this function entirely?

Oh, I didn't notice it's being deprecated in an earlier patch.
Nevermind then.

-- 
Anton Khirnov
_______________________________________________
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".

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [FFmpeg-devel] [PATCH 03/11] avformat/avformat: use the side data from AVStream.codecpar
  2023-09-27 13:12 ` [FFmpeg-devel] [PATCH 03/11] avformat/avformat: use the side data from AVStream.codecpar James Almer
@ 2023-10-03 11:38   ` Anton Khirnov
  0 siblings, 0 replies; 27+ messages in thread
From: Anton Khirnov @ 2023-10-03 11:38 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

Quoting James Almer (2023-09-27 15:12:34)
> @@ -807,11 +808,14 @@ static int mov_read_dac3(MOVContext *c, AVIOContext *pb, MOVAtom atom)
>          return 0;
>      st = c->fc->streams[c->fc->nb_streams-1];
>  
> -    ast = (enum AVAudioServiceType*)av_stream_new_side_data(st, AV_PKT_DATA_AUDIO_SERVICE_TYPE,
> -                                                            sizeof(*ast));
> -    if (!ast)
> +    sd = av_packet_side_data_new(&st->codecpar->side_data,
> +                                 &st->codecpar->nb_side_data,
> +                                     AV_PKT_DATA_AUDIO_SERVICE_TYPE,
> +                                     sizeof(*ast), 0);

Weird indentation. Also below.

Overall looks very good to me.


-- 
Anton Khirnov
_______________________________________________
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".

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [FFmpeg-devel] [PATCH 05/11] fftools/ffmpeg: stop using AVStream.side_data
  2023-09-27 13:12 ` [FFmpeg-devel] [PATCH 05/11] fftools/ffmpeg: stop using AVStream.side_data James Almer
@ 2023-10-03 11:50   ` Anton Khirnov
  0 siblings, 0 replies; 27+ messages in thread
From: Anton Khirnov @ 2023-10-03 11:50 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

Quoting James Almer (2023-09-27 15:12:36)
> Signed-off-by: James Almer <jamrial@gmail.com>
> ---
>  fftools/ffmpeg_demux.c    | 12 ++++++++----
>  fftools/ffmpeg_enc.c      | 31 +++++++++----------------------
>  fftools/ffmpeg_filter.c   |  6 +++++-
>  fftools/ffmpeg_mux_init.c | 21 ++++++++++++---------
>  4 files changed, 34 insertions(+), 36 deletions(-)

Looks good, except for weird indentation in places.

-- 
Anton Khirnov
_______________________________________________
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".

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [FFmpeg-devel] [PATCH 09/11] avcodec/decode: check for global side data in AVCodecContext side data
  2023-09-27 13:12 ` [FFmpeg-devel] [PATCH 09/11] avcodec/decode: check for global side data " James Almer
@ 2023-10-03 12:34   ` Anton Khirnov
  2023-10-03 18:46     ` James Almer
  0 siblings, 1 reply; 27+ messages in thread
From: Anton Khirnov @ 2023-10-03 12:34 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

Quoting James Almer (2023-09-27 15:12:40)
> avcodec/decode: check for global side data in AVCodecContext side data

I don't think this makes it clear what this commit actually does.
Make it something like 'propagate global side data to frames'.

> Signed-off-by: James Almer <jamrial@gmail.com>
> ---
>  libavcodec/decode.c | 48 +++++++++++++++++++++++++++++++++++++--------
>  1 file changed, 40 insertions(+), 8 deletions(-)
> 
> diff --git a/libavcodec/decode.c b/libavcodec/decode.c
> index a7196b5740..3b4bb70689 100644
> --- a/libavcodec/decode.c
> +++ b/libavcodec/decode.c
> @@ -1422,6 +1422,20 @@ static int add_metadata_from_side_data(const AVPacket *avpkt, AVFrame *frame)
>      return av_packet_unpack_dictionary(side_metadata, size, frame_md);
>  }
>  
> +static const struct {
> +    enum AVPacketSideDataType packet;
> +    enum AVFrameSideDataType frame;
> +} sd_global_map[] = {
> +    { AV_PKT_DATA_REPLAYGAIN ,                AV_FRAME_DATA_REPLAYGAIN },
> +    { AV_PKT_DATA_SPHERICAL,                  AV_FRAME_DATA_SPHERICAL },
> +    { AV_PKT_DATA_STEREO3D,                   AV_FRAME_DATA_STEREO3D },
> +    { AV_PKT_DATA_AUDIO_SERVICE_TYPE,         AV_FRAME_DATA_AUDIO_SERVICE_TYPE },
> +    { AV_PKT_DATA_MASTERING_DISPLAY_METADATA, AV_FRAME_DATA_MASTERING_DISPLAY_METADATA },
> +    { AV_PKT_DATA_CONTENT_LIGHT_LEVEL,        AV_FRAME_DATA_CONTENT_LIGHT_LEVEL },
> +    { AV_PKT_DATA_ICC_PROFILE,                AV_FRAME_DATA_ICC_PROFILE },
> +    { AV_PKT_DATA_DYNAMIC_HDR10_PLUS,         AV_FRAME_DATA_DYNAMIC_HDR_PLUS },
> +};
> +
>  int ff_decode_frame_props_from_pkt(const AVCodecContext *avctx,
>                                     AVFrame *frame, const AVPacket *pkt)
>  {
> @@ -1429,18 +1443,10 @@ int ff_decode_frame_props_from_pkt(const AVCodecContext *avctx,
>          enum AVPacketSideDataType packet;
>          enum AVFrameSideDataType frame;
>      } sd[] = {
> -        { AV_PKT_DATA_REPLAYGAIN ,                AV_FRAME_DATA_REPLAYGAIN },
>          { AV_PKT_DATA_DISPLAYMATRIX,              AV_FRAME_DATA_DISPLAYMATRIX },

Why are you leaving displaymatrix out?

Also, what happens if the same side data is present at both global and
packet level? Won't you get two instances in the frame?
I think the correct behaviour would be that packet overrides global.

-- 
Anton Khirnov
_______________________________________________
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".

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [FFmpeg-devel] [PATCH 01/11] avcodec/packet: add generic side data helpers
  2023-09-27 13:12 ` [FFmpeg-devel] [PATCH 01/11] avcodec/packet: add generic side data helpers James Almer
@ 2023-10-03 12:54   ` Anton Khirnov
  0 siblings, 0 replies; 27+ messages in thread
From: Anton Khirnov @ 2023-10-03 12:54 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

Quoting James Almer (2023-09-27 15:12:32)
> +static AVPacketSideData *packet_side_data_add(AVPacketSideData **psd, int *pnb_sd,
> +                                              enum AVPacketSideDataType type,
> +                                              void *data, size_t size)
> +{
> +    AVPacketSideData *sd = *psd, *tmp;
> +    int nb_sd = *pnb_sd;
> +
> +    for (int i = 0; i < nb_sd; i++) {
> +        if (sd[i].type != type)
> +            continue;
> +
> +        av_free(sd[i].data);
> +        sd[i].data = data;
> +        sd[i].size = size;
> +        return &sd[i];
> +    }
> +
> +    if (nb_sd + 1U > INT_MAX)

seems simpler to write it as nb_sd == INT_MAX

> +AVPacketSideData *av_packet_side_data_new(AVPacketSideData **psd, int *pnb_sd,
> +                                          enum AVPacketSideDataType type,
> +                                          size_t size, int flags)
> +{
> +    AVPacketSideData *sd = NULL;
> +    void *data;
> +
> +    if (size > SIZE_MAX - AV_INPUT_BUFFER_PADDING_SIZE)
> +        return NULL;
> +
> +    data = av_malloc(size + AV_INPUT_BUFFER_PADDING_SIZE);
> +    if (!data)
> +        return NULL;

IIRC padding needs to be memset to zero

-- 
Anton Khirnov
_______________________________________________
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".

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [FFmpeg-devel] [PATCH 09/11] avcodec/decode: check for global side data in AVCodecContext side data
  2023-10-03 12:34   ` Anton Khirnov
@ 2023-10-03 18:46     ` James Almer
  2023-10-04  3:22       ` James Almer
  0 siblings, 1 reply; 27+ messages in thread
From: James Almer @ 2023-10-03 18:46 UTC (permalink / raw)
  To: ffmpeg-devel

On 10/3/2023 9:34 AM, Anton Khirnov wrote:
> Quoting James Almer (2023-09-27 15:12:40)
>> avcodec/decode: check for global side data in AVCodecContext side data
> 
> I don't think this makes it clear what this commit actually does.
> Make it something like 'propagate global side data to frames'.
> 
>> Signed-off-by: James Almer <jamrial@gmail.com>
>> ---
>>   libavcodec/decode.c | 48 +++++++++++++++++++++++++++++++++++++--------
>>   1 file changed, 40 insertions(+), 8 deletions(-)
>>
>> diff --git a/libavcodec/decode.c b/libavcodec/decode.c
>> index a7196b5740..3b4bb70689 100644
>> --- a/libavcodec/decode.c
>> +++ b/libavcodec/decode.c
>> @@ -1422,6 +1422,20 @@ static int add_metadata_from_side_data(const AVPacket *avpkt, AVFrame *frame)
>>       return av_packet_unpack_dictionary(side_metadata, size, frame_md);
>>   }
>>   
>> +static const struct {
>> +    enum AVPacketSideDataType packet;
>> +    enum AVFrameSideDataType frame;
>> +} sd_global_map[] = {
>> +    { AV_PKT_DATA_REPLAYGAIN ,                AV_FRAME_DATA_REPLAYGAIN },
>> +    { AV_PKT_DATA_SPHERICAL,                  AV_FRAME_DATA_SPHERICAL },
>> +    { AV_PKT_DATA_STEREO3D,                   AV_FRAME_DATA_STEREO3D },
>> +    { AV_PKT_DATA_AUDIO_SERVICE_TYPE,         AV_FRAME_DATA_AUDIO_SERVICE_TYPE },
>> +    { AV_PKT_DATA_MASTERING_DISPLAY_METADATA, AV_FRAME_DATA_MASTERING_DISPLAY_METADATA },
>> +    { AV_PKT_DATA_CONTENT_LIGHT_LEVEL,        AV_FRAME_DATA_CONTENT_LIGHT_LEVEL },
>> +    { AV_PKT_DATA_ICC_PROFILE,                AV_FRAME_DATA_ICC_PROFILE },
>> +    { AV_PKT_DATA_DYNAMIC_HDR10_PLUS,         AV_FRAME_DATA_DYNAMIC_HDR_PLUS },
>> +};
>> +
>>   int ff_decode_frame_props_from_pkt(const AVCodecContext *avctx,
>>                                      AVFrame *frame, const AVPacket *pkt)
>>   {
>> @@ -1429,18 +1443,10 @@ int ff_decode_frame_props_from_pkt(const AVCodecContext *avctx,
>>           enum AVPacketSideDataType packet;
>>           enum AVFrameSideDataType frame;
>>       } sd[] = {
>> -        { AV_PKT_DATA_REPLAYGAIN ,                AV_FRAME_DATA_REPLAYGAIN },
>>           { AV_PKT_DATA_DISPLAYMATRIX,              AV_FRAME_DATA_DISPLAYMATRIX },
> 
> Why are you leaving displaymatrix out?

See the code patch 10/11 removes. Display matrix in global side data is 
apparently not meant to be propagated to frames. If i move this line to 
the global map, a couple tests change their output due to new side data 
in frames.
If you want that to happen (After all, the CLI is not the only library 
user), I'd rather remove the skipping code in the CLI first, with the 
relevant test refs changes, so this patch is not the one to change them.

> 
> Also, what happens if the same side data is present at both global and
> packet level? Won't you get two instances in the frame?
> I think the correct behaviour would be that packet overrides global.

I'm keeping the behavior from before this set intact with this at 
Andreas' request.
In a previous iteration i ensured packet side data would replace global 
side data in the output frames, but Andreas asked me to not do that, as 
a decoder could add that same side data type and it should have priority 
over container level side data (All entries will be added to the frame 
anyway).
_______________________________________________
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".

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [FFmpeg-devel] [PATCH 08/11] avcodec/hevcdec: check for DOVI configuration record in AVCodecContext side data
  2023-10-03 10:18   ` Anton Khirnov
@ 2023-10-03 19:11     ` James Almer
  0 siblings, 0 replies; 27+ messages in thread
From: James Almer @ 2023-10-03 19:11 UTC (permalink / raw)
  To: ffmpeg-devel

On 10/3/2023 7:18 AM, Anton Khirnov wrote:
> Quoting James Almer (2023-09-27 15:12:39)
>> Signed-off-by: James Almer <jamrial@gmail.com>
>> ---
>>   libavcodec/avcodec.h |  2 +-
>>   libavcodec/decode.c  | 10 ++++++++++
>>   libavcodec/decode.h  |  3 +++
>>   libavcodec/hevcdec.c | 15 ++++++++++++++-
>>   4 files changed, 28 insertions(+), 2 deletions(-)
>>
>> diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
>> index da3c5234a0..48a4b73fd3 100644
>> --- a/libavcodec/avcodec.h
>> +++ b/libavcodec/avcodec.h
>> @@ -1903,7 +1903,7 @@ typedef struct AVCodecContext {
>>       /**
>>        * Additional data associated with the entire coded stream.
>>        *
>> -     * - decoding: unused
>> +     * - decoding: set by user before calling avcodec_open2().
> 
> Should be "may be set...", because it's optional.
> 
> Also, I think this deserves to be mentione in APIchanges.

Ok.

> 
>> @@ -3644,12 +3651,18 @@ static av_cold int hevc_decode_init(AVCodecContext *avctx)
>>       atomic_init(&s->wpp_err, 0);
>>   
>>       if (!avctx->internal->is_copy) {
>> +        const AVPacketSideData *sd;
>> +
>>           if (avctx->extradata_size > 0 && avctx->extradata) {
>>               ret = hevc_decode_extradata(s, avctx->extradata, avctx->extradata_size, 1);
>>               if (ret < 0) {
>>                   return ret;
>>               }
>>           }
>> +
>> +        sd = ff_get_coded_side_data(avctx, AV_PKT_DATA_DOVI_CONF);
>> +        if (sd && sd->size > 0)
>> +            ff_dovi_update_cfg(&s->dovi_ctx, (AVDOVIDecoderConfigurationRecord *) sd->data);
> 
> Do you have a sample for this? Would be very nice to have a test for
> this functionality.

There's a sample in fate, but apparently it does stream copy (testing 
demux and mux code), so the hevc decoder never handles it.
_______________________________________________
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".

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [FFmpeg-devel] [PATCH 09/11] avcodec/decode: check for global side data in AVCodecContext side data
  2023-10-03 18:46     ` James Almer
@ 2023-10-04  3:22       ` James Almer
  2023-10-04 14:36         ` Anton Khirnov
  0 siblings, 1 reply; 27+ messages in thread
From: James Almer @ 2023-10-04  3:22 UTC (permalink / raw)
  To: ffmpeg-devel



On 10/3/2023 3:46 PM, James Almer wrote:
> On 10/3/2023 9:34 AM, Anton Khirnov wrote:
>> Quoting James Almer (2023-09-27 15:12:40)
>>> avcodec/decode: check for global side data in AVCodecContext side data
>>
>> I don't think this makes it clear what this commit actually does.
>> Make it something like 'propagate global side data to frames'.
>>
>>> Signed-off-by: James Almer <jamrial@gmail.com>
>>> ---
>>>   libavcodec/decode.c | 48 +++++++++++++++++++++++++++++++++++++--------
>>>   1 file changed, 40 insertions(+), 8 deletions(-)
>>>
>>> diff --git a/libavcodec/decode.c b/libavcodec/decode.c
>>> index a7196b5740..3b4bb70689 100644
>>> --- a/libavcodec/decode.c
>>> +++ b/libavcodec/decode.c
>>> @@ -1422,6 +1422,20 @@ static int add_metadata_from_side_data(const 
>>> AVPacket *avpkt, AVFrame *frame)
>>>       return av_packet_unpack_dictionary(side_metadata, size, frame_md);
>>>   }
>>> +static const struct {
>>> +    enum AVPacketSideDataType packet;
>>> +    enum AVFrameSideDataType frame;
>>> +} sd_global_map[] = {
>>> +    { AV_PKT_DATA_REPLAYGAIN ,                
>>> AV_FRAME_DATA_REPLAYGAIN },
>>> +    { AV_PKT_DATA_SPHERICAL,                  
>>> AV_FRAME_DATA_SPHERICAL },
>>> +    { AV_PKT_DATA_STEREO3D,                   AV_FRAME_DATA_STEREO3D },
>>> +    { AV_PKT_DATA_AUDIO_SERVICE_TYPE,         
>>> AV_FRAME_DATA_AUDIO_SERVICE_TYPE },
>>> +    { AV_PKT_DATA_MASTERING_DISPLAY_METADATA, 
>>> AV_FRAME_DATA_MASTERING_DISPLAY_METADATA },
>>> +    { AV_PKT_DATA_CONTENT_LIGHT_LEVEL,        
>>> AV_FRAME_DATA_CONTENT_LIGHT_LEVEL },
>>> +    { AV_PKT_DATA_ICC_PROFILE,                
>>> AV_FRAME_DATA_ICC_PROFILE },
>>> +    { AV_PKT_DATA_DYNAMIC_HDR10_PLUS,         
>>> AV_FRAME_DATA_DYNAMIC_HDR_PLUS },
>>> +};
>>> +
>>>   int ff_decode_frame_props_from_pkt(const AVCodecContext *avctx,
>>>                                      AVFrame *frame, const AVPacket 
>>> *pkt)
>>>   {
>>> @@ -1429,18 +1443,10 @@ int ff_decode_frame_props_from_pkt(const 
>>> AVCodecContext *avctx,
>>>           enum AVPacketSideDataType packet;
>>>           enum AVFrameSideDataType frame;
>>>       } sd[] = {
>>> -        { AV_PKT_DATA_REPLAYGAIN ,                
>>> AV_FRAME_DATA_REPLAYGAIN },
>>>           { AV_PKT_DATA_DISPLAYMATRIX,              
>>> AV_FRAME_DATA_DISPLAYMATRIX },
>>
>> Why are you leaving displaymatrix out?
> 
> See the code patch 10/11 removes. Display matrix in global side data is 
> apparently not meant to be propagated to frames. If i move this line to 
> the global map, a couple tests change their output due to new side data 
> in frames.
> If you want that to happen (After all, the CLI is not the only library 
> user), I'd rather remove the skipping code in the CLI first, with the 
> relevant test refs changes, so this patch is not the one to change them.

Actually, both tests use ffprobe, which never injected stream side data 
into packets before this set, so the ffmpeg code removed in 10/11 makes 
no difference.

Adding DISPLAYMATRIX to the global map here will still mean ffmpeg.c 
will pass stream side data to decoded frames, though, even if no test 
covers it. So it would be nice to know why was it being skipped.

> 
>>
>> Also, what happens if the same side data is present at both global and
>> packet level? Won't you get two instances in the frame?
>> I think the correct behaviour would be that packet overrides global.
> 
> I'm keeping the behavior from before this set intact with this at 
> Andreas' request.
> In a previous iteration i ensured packet side data would replace global 
> side data in the output frames, but Andreas asked me to not do that, as 
> a decoder could add that same side data type and it should have priority 
> over container level side data (All entries will be added to the frame 
> anyway).
_______________________________________________
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".

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [FFmpeg-devel] [PATCH 09/11] avcodec/decode: check for global side data in AVCodecContext side data
  2023-10-04  3:22       ` James Almer
@ 2023-10-04 14:36         ` Anton Khirnov
  0 siblings, 0 replies; 27+ messages in thread
From: Anton Khirnov @ 2023-10-04 14:36 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

Quoting James Almer (2023-10-04 05:22:38)
> 
> Actually, both tests use ffprobe, which never injected stream side data 
> into packets before this set, so the ffmpeg code removed in 10/11 makes 
> no difference.
> 
> Adding DISPLAYMATRIX to the global map here will still mean ffmpeg.c 
> will pass stream side data to decoded frames, though, even if no test 
> covers it. So it would be nice to know why was it being skipped.

Honestly I doubt there's a good reason, the handling of displaymatrix in
ffmpeg CLI is a convoluted mess.

-- 
Anton Khirnov
_______________________________________________
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".

^ permalink raw reply	[flat|nested] 27+ messages in thread

* [FFmpeg-devel] [PATCH 10/11] fftools/ffmpeg: stop injecting stream side data in packets
  2023-10-04 12:28 [FFmpeg-devel] [PATCH 00/11 v6] AVCodecContext and AVCodecParameters side data James Almer
@ 2023-10-04 12:28 ` James Almer
  0 siblings, 0 replies; 27+ messages in thread
From: James Almer @ 2023-10-04 12:28 UTC (permalink / raw)
  To: ffmpeg-devel

This is no longer needed as the side data is available for decoders in the
AVCodecContext.
The tests affected reflect the removal of useless CPB and Stereo 3D side
data in packets.

Signed-off-by: James Almer <jamrial@gmail.com>
---
 fftools/ffmpeg_demux.c                        | 22 -------------------
 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 +-
 15 files changed, 21 insertions(+), 43 deletions(-)

diff --git a/fftools/ffmpeg_demux.c b/fftools/ffmpeg_demux.c
index 296a66cd11..c71edf01a5 100644
--- a/fftools/ffmpeg_demux.c
+++ b/fftools/ffmpeg_demux.c
@@ -480,28 +480,6 @@ static int input_packet_process(Demuxer *d, DemuxMsg *msg, AVPacket *src)
     ds->data_size += pkt->size;
     ds->nb_packets++;
 
-    /* add the stream-global side data to the first packet */
-    if (ds->nb_packets == 1) {
-        for (int i = 0; i < ist->st->codecpar->nb_coded_side_data; i++) {
-            AVPacketSideData *src_sd = &ist->st->codecpar->coded_side_data[i];
-            uint8_t *dst_data;
-
-            if (src_sd->type == AV_PKT_DATA_DISPLAYMATRIX)
-                continue;
-
-            if (av_packet_get_side_data(pkt, src_sd->type, NULL))
-                continue;
-
-            dst_data = av_packet_new_side_data(pkt, src_sd->type, src_sd->size);
-            if (!dst_data) {
-                ret = AVERROR(ENOMEM);
-                goto fail;
-            }
-
-            memcpy(dst_data, src_sd->data, src_sd->size);
-        }
-    }
-
     if (debug_ts) {
         av_log(NULL, AV_LOG_INFO, "demuxer+ffmpeg -> ist_index:%d:%d type:%s pkt_pts:%s pkt_pts_time:%s pkt_dts:%s pkt_dts_time:%s duration:%s duration_time:%s off:%s off_time:%s\n",
                f->index, pkt->stream_index,
diff --git a/tests/ref/fate/autorotate b/tests/ref/fate/autorotate
index dff628bbff..2aa29fafa7 100644
--- a/tests/ref/fate/autorotate
+++ b/tests/ref/fate/autorotate
@@ -11,8 +11,8 @@
 #codec_id 1: ac3
 #sample_rate 1: 44100
 #channel_layout_name 1: mono
-0,       -512,          0,      512,     6997, 0x55c700f6, S=1,       40
-1,       -256,       -256,     1536,      416, 0x92ddc529, S=2,       10,        4
+0,       -512,          0,      512,     6997, 0x55c700f6
+1,       -256,       -256,     1536,      416, 0x92ddc529, S=1,       10
 0,          0,        512,      512,     4847, 0xe74f522e, F=0x0
 1,       1280,       1280,     1536,      418, 0x0a7fcd2d
 0,        512,       1024,      512,     5281, 0xbd4a5dac, F=0x0
diff --git a/tests/ref/fate/copy-trac3074 b/tests/ref/fate/copy-trac3074
index b6d23f8c1c..53ba27e920 100644
--- a/tests/ref/fate/copy-trac3074
+++ b/tests/ref/fate/copy-trac3074
@@ -5,7 +5,7 @@
 #codec_id 0: eac3
 #sample_rate 0: 48000
 #channel_layout_name 0: stereo
-0,          0,          0,     1536,      512, 0x2beaf79f, S=1,        4
+0,          0,          0,     1536,      512, 0x2beaf79f
 0,       1536,       1536,     1536,      512, 0x29ddf9d6
 0,       3072,       3072,     1536,      512, 0xba0afa79
 0,       4608,       4608,     1536,      512, 0xe019f394
diff --git a/tests/ref/fate/matroska-avoid-negative-ts b/tests/ref/fate/matroska-avoid-negative-ts
index 880d53e1b0..22959695ec 100644
--- a/tests/ref/fate/matroska-avoid-negative-ts
+++ b/tests/ref/fate/matroska-avoid-negative-ts
@@ -11,7 +11,7 @@ fb4e7a969ef65f61c4c45d5976188aa2 *tests/data/fate/matroska-avoid-negative-ts.mat
 #codec_id 1: mp3
 #sample_rate 1: 44100
 #channel_layout_name 1: mono
-0,        -37,         43,       40,     9156, 0xe5bd034a, S=1,       40
+0,        -37,         43,       40,     9156, 0xe5bd034a
 1,          0,          0,       26,      417, 0x7198c15e
 0,          3,          3,       40,     1740, 0x29ac4480, F=0x0
 1,         26,         26,       26,      417, 0x3c67c32d
diff --git a/tests/ref/fate/matroska-dovi-write-config7 b/tests/ref/fate/matroska-dovi-write-config7
index aaeeb34751..dc5b73a44e 100644
--- a/tests/ref/fate/matroska-dovi-write-config7
+++ b/tests/ref/fate/matroska-dovi-write-config7
@@ -13,7 +13,7 @@
 #dimensions 1: 1920x1080
 #sar 1: 0/1
 0,        -83,          0,       41,      699, 0x728548f1
-1,        -83,          0,       41,     1085, 0xfb2dba82, S=1,        8
+1,        -83,          0,       41,     1085, 0xfb2dba82
 0,        -42,        167,       41,       95, 0xc0312044, F=0x0
 1,        -42,        167,       41,      481, 0xf23f91d5, F=0x0
 0,          0,         83,       41,       99, 0x5e0a2221, F=0x0
diff --git a/tests/ref/fate/matroska-dovi-write-config8 b/tests/ref/fate/matroska-dovi-write-config8
index 55fe191047..472cbed708 100644
--- a/tests/ref/fate/matroska-dovi-write-config8
+++ b/tests/ref/fate/matroska-dovi-write-config8
@@ -12,7 +12,7 @@
 #codec_id 1: aac
 #sample_rate 1: 44100
 #channel_layout_name 1: stereo
-0,        -67,          0,       33,    63375, 0xc76606ab, S=1,        8
+0,        -67,          0,       33,    63375, 0xc76606ab
 0,        -34,        133,       33,    46706, 0x0e08a7e5, F=0x0
 0,          0,         67,       33,    29766, 0x753c031a, F=0x0
 1,          0,          0,       23,        6, 0x031e0108
diff --git a/tests/ref/fate/matroska-encoding-delay b/tests/ref/fate/matroska-encoding-delay
index f1085e9752..b828dec2e6 100644
--- a/tests/ref/fate/matroska-encoding-delay
+++ b/tests/ref/fate/matroska-encoding-delay
@@ -12,7 +12,7 @@
 #sample_rate 1: 48000
 #channel_layout_name 1: stereo
 1,        -10,        -10,       24,     1152, 0x724077b8
-0,          0,          0,       40,   237628, 0xeff25579, S=1,       40
+0,          0,          0,       40,   237628, 0xeff25579
 1,         14,         14,       24,     1152, 0x80625572
 1,         38,         38,       24,     1152, 0x7d7f4dce
 0,         40,         40,       40,   238066, 0xb2265f41
diff --git a/tests/ref/fate/matroska-mastering-display-metadata b/tests/ref/fate/matroska-mastering-display-metadata
index 3726469213..53f84c1793 100644
--- a/tests/ref/fate/matroska-mastering-display-metadata
+++ b/tests/ref/fate/matroska-mastering-display-metadata
@@ -22,9 +22,9 @@
 #codec_id 3: ffv1
 #dimensions 3: 1280x720
 #sar 3: 1/1
-0,          0,          0,       16,    57008, 0x43416399, S=2,        8,       88
+0,          0,          0,       16,    57008, 0x43416399
 1,          0,          0,       16,     2403, 0xaa818522
-3,          0,          0,       16,   274117, 0xc439610f, S=2,        8,       88
+3,          0,          0,       16,   274117, 0xc439610f
 0,         17,         17,       16,    57248, 0xa06cd7b5
 1,         17,         17,       16,     2403, 0xe1a991e5
 2,         17,         17,       16,     1602, 0x5d868171
diff --git a/tests/ref/fate/matroska-spherical-mono-remux b/tests/ref/fate/matroska-spherical-mono-remux
index e9904b2c92..6fcda14822 100644
--- a/tests/ref/fate/matroska-spherical-mono-remux
+++ b/tests/ref/fate/matroska-spherical-mono-remux
@@ -12,8 +12,8 @@ fddfea5f05a7a9a0d187df9a72900055 *tests/data/fate/matroska-spherical-mono-remux.
 #codec_id 1: h264
 #dimensions 1: 1920x1080
 #sar 1: 0/1
-0,        -80,          0,       40,    69118, 0x73cb52f0, S=2,       12,       36
-1,        -80,          0,       40,    69118, 0x73cb52f0, S=2,       12,       36
+0,        -80,          0,       40,    69118, 0x73cb52f0
+1,        -80,          0,       40,    69118, 0x73cb52f0
 0,        -40,        160,       40,     1103, 0x082a059f, F=0x0
 1,        -40,        160,       40,     1103, 0x082a059f, F=0x0
 [STREAM]
diff --git a/tests/ref/fate/matroska-stereo_mode b/tests/ref/fate/matroska-stereo_mode
index 5c36a6d666..739b789fea 100644
--- a/tests/ref/fate/matroska-stereo_mode
+++ b/tests/ref/fate/matroska-stereo_mode
@@ -43,10 +43,10 @@ a7a220a77001e81685ec807ce5ac3bc6 *tests/data/fate/matroska-stereo_mode.matroska
 #dimensions 6: 512x512
 #sar 6: 2/1
 0,          0,          0,     1000,   206173, 0x95af7455
-1,          0,          0,     1000,   206173, 0x95af7455, S=1,       12
-2,          0,          0,     1000,   206173, 0x95af7455, S=1,       12
-3,          0,          0,     1000,   206173, 0x95af7455, S=1,       12
-4,          0,          0,     1000,   206173, 0x95af7455, S=1,       12
+1,          0,          0,     1000,   206173, 0x95af7455
+2,          0,          0,     1000,   206173, 0x95af7455
+3,          0,          0,     1000,   206173, 0x95af7455
+4,          0,          0,     1000,   206173, 0x95af7455
 5,          0,          0,     1000,   206173, 0x95af7455
 6,          0,          0,     1000,   206173, 0x95af7455
 0,       1000,       1000,     1000,       36, 0x34891010, F=0x0
diff --git a/tests/ref/fate/matroska-vp8-alpha-remux b/tests/ref/fate/matroska-vp8-alpha-remux
index eba3ffb77a..8117325433 100644
--- a/tests/ref/fate/matroska-vp8-alpha-remux
+++ b/tests/ref/fate/matroska-vp8-alpha-remux
@@ -5,7 +5,7 @@
 #codec_id 0: vp8
 #dimensions 0: 320x213
 #sar 0: 1/1
-0,          0,          0,       33,     2108, 0x59b92a34, S=2,     1900,       12
+0,          0,          0,       33,     2108, 0x59b92a34, S=1,     1900
 0,         32,         32,       33,      142, 0x2f2a3fed, F=0x0, S=1,      160
 0,         65,         65,       33,      157, 0x17804767, F=0x0, S=1,      209
 0,         99,         99,       33,      206, 0x537262ca, F=0x0, S=1,      317
diff --git a/tests/ref/fate/mov-mp4-disposition-mpegts-remux b/tests/ref/fate/mov-mp4-disposition-mpegts-remux
index efef043074..ba419843dc 100644
--- a/tests/ref/fate/mov-mp4-disposition-mpegts-remux
+++ b/tests/ref/fate/mov-mp4-disposition-mpegts-remux
@@ -10,9 +10,9 @@ adb3b95c07a5f3e0c86641dd62f01dae *tests/data/fate/mov-mp4-disposition-mpegts-rem
 #codec_id 1: ac3
 #sample_rate 1: 48000
 #channel_layout_name 1: stereo
-1,          0,          0,     1536,      768, 0xa63778d4, S=1,        4
+1,          0,          0,     1536,      768, 0xa63778d4
 1,       1536,       1536,     1536,      768, 0x7d577f3f
-0,       3072,       3072,     1536,      768, 0xc2867884, S=1,        4
+0,       3072,       3072,     1536,      768, 0xc2867884
 1,       3072,       3072,     1536,      768, 0xd86b7c8f
 0,       4608,       4608,     1536,      690, 0xa2714bf3
 1,       4608,       4608,     1536,      626, 0x09f4382f
diff --git a/tests/ref/fate/mxf-d10-user-comments b/tests/ref/fate/mxf-d10-user-comments
index 1b59beec7c..ccfdc83f11 100644
--- a/tests/ref/fate/mxf-d10-user-comments
+++ b/tests/ref/fate/mxf-d10-user-comments
@@ -6,7 +6,7 @@
 #codec_id 0: mpeg2video
 #dimensions 0: 1280x720
 #sar 0: 3/4
-0,         -1,          0,        1,   150000, 0x0547870d, S=1,       40
+0,         -1,          0,        1,   150000, 0x0547870d
 0,          0,          1,        1,   150000, 0xe80a1612, F=0x0
 0,          1,          2,        1,   150000, 0xc5c50e2f, F=0x0
 0,          2,          3,        1,   150000, 0x51e28a04, F=0x0
diff --git a/tests/ref/fate/mxf-remux-applehdr10 b/tests/ref/fate/mxf-remux-applehdr10
index 29e0e03a72..9fbf8b60c7 100644
--- a/tests/ref/fate/mxf-remux-applehdr10
+++ b/tests/ref/fate/mxf-remux-applehdr10
@@ -10,7 +10,7 @@
 #codec_id 1: pcm_s24le
 #sample_rate 1: 48000
 #channel_layout_name 1: mono
-0,          0,          0,        1,    57008, 0x43416399, S=1,       88
+0,          0,          0,        1,    57008, 0x43416399
 1,          0,          0,      801,     2403, 0x00000000
 0,          1,          1,        1,    57248, 0xa06cd7b5
 1,        801,        801,      801,     2403, 0x00000000
diff --git a/tests/ref/fate/vp9-superframe-bsf b/tests/ref/fate/vp9-superframe-bsf
index d7985c6973..485644dfb2 100644
--- a/tests/ref/fate/vp9-superframe-bsf
+++ b/tests/ref/fate/vp9-superframe-bsf
@@ -3,7 +3,7 @@
 #codec_id 0: vp9
 #dimensions 0: 352x288
 #sar 0: 1/1
-0,          0,          0,       33,     6958, 0x38e58ee6, S=1,       12
+0,          0,          0,       33,     6958, 0x38e58ee6
 0,         33,         33,       33,      852, 0x3edf9ed0, F=0x0
 0,         66,         66,       33,       27, 0x62d007e5, F=0x0
 0,        100,        100,       33,       25, 0x51980749, F=0x0
-- 
2.42.0

_______________________________________________
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".

^ permalink raw reply	[flat|nested] 27+ messages in thread

end of thread, other threads:[~2023-10-04 14:36 UTC | newest]

Thread overview: 27+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-09-27 13:12 [FFmpeg-devel] [PATCH 00/11 v5] AVCodecContext and AVCodecParameters side data James Almer
2023-09-27 13:12 ` [FFmpeg-devel] [PATCH 01/11] avcodec/packet: add generic side data helpers James Almer
2023-10-03 12:54   ` Anton Khirnov
2023-09-27 13:12 ` [FFmpeg-devel] [PATCH 02/11] avcodec/codec_par: add side data to AVCodecParameters James Almer
2023-10-03 11:23   ` Anton Khirnov
2023-09-27 13:12 ` [FFmpeg-devel] [PATCH 03/11] avformat/avformat: use the side data from AVStream.codecpar James Almer
2023-10-03 11:38   ` Anton Khirnov
2023-09-27 13:12 ` [FFmpeg-devel] [PATCH 04/11] avcodec/packet: add some documentation for AVPacketSideData James Almer
2023-10-03 11:02   ` Anton Khirnov
2023-09-27 13:12 ` [FFmpeg-devel] [PATCH 05/11] fftools/ffmpeg: stop using AVStream.side_data James Almer
2023-10-03 11:50   ` Anton Khirnov
2023-09-27 13:12 ` [FFmpeg-devel] [PATCH 06/11] fftools/ffplay: " James Almer
2023-09-27 13:12 ` [FFmpeg-devel] [PATCH 07/11] fftools/ffprobe: " James Almer
2023-09-27 13:12 ` [FFmpeg-devel] [PATCH 08/11] avcodec/hevcdec: check for DOVI configuration record in AVCodecContext side data James Almer
2023-10-03 10:18   ` Anton Khirnov
2023-10-03 19:11     ` James Almer
2023-09-27 13:12 ` [FFmpeg-devel] [PATCH 09/11] avcodec/decode: check for global side data " James Almer
2023-10-03 12:34   ` Anton Khirnov
2023-10-03 18:46     ` James Almer
2023-10-04  3:22       ` James Almer
2023-10-04 14:36         ` Anton Khirnov
2023-09-27 13:12 ` [FFmpeg-devel] [PATCH 10/11] fftools/ffmpeg: stop injecting stream side data in packets James Almer
2023-10-03 11:04   ` Anton Khirnov
2023-09-27 13:12 ` [FFmpeg-devel] [PATCH 11/11] fftools/ffplay: " James Almer
2023-10-03 10:11   ` Anton Khirnov
2023-10-03 11:28     ` Anton Khirnov
2023-10-04 12:28 [FFmpeg-devel] [PATCH 00/11 v6] AVCodecContext and AVCodecParameters side data James Almer
2023-10-04 12:28 ` [FFmpeg-devel] [PATCH 10/11] fftools/ffmpeg: stop injecting stream side data in packets James Almer

Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
		ffmpegdev@gitmailbox.com
	public-inbox-index ffmpegdev

Example config snippet for mirrors.


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git