FFmpeg
side_data.c
Go to the documentation of this file.
1 /*
2  * This file is part of FFmpeg.
3  *
4  * FFmpeg is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * FFmpeg is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with FFmpeg; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17  */
18 
19 #include "avassert.h"
20 #include "buffer.h"
21 #include "common.h"
22 #include "dict.h"
23 #include "frame.h"
24 #include "mem.h"
25 #include "side_data.h"
26 
27 static const AVSideDataDescriptor sd_props[] = {
29  [AV_FRAME_DATA_A53_CC] = { "ATSC A53 Part 4 Closed Captions" },
31  [AV_FRAME_DATA_DOWNMIX_INFO] = { "Metadata relevant to a downmix procedure", AV_SIDE_DATA_PROP_CHANNEL_DEPENDENT },
32  [AV_FRAME_DATA_AFD] = { "Active format description" },
34  [AV_FRAME_DATA_SKIP_SAMPLES] = { "Skip samples" },
35  [AV_FRAME_DATA_GOP_TIMECODE] = { "GOP timecode" },
36  [AV_FRAME_DATA_S12M_TIMECODE] = { "SMPTE 12-1 timecode" },
37  [AV_FRAME_DATA_DYNAMIC_HDR_PLUS] = { "HDR Dynamic Metadata SMPTE2094-40 (HDR10+)", AV_SIDE_DATA_PROP_COLOR_DEPENDENT },
38  [AV_FRAME_DATA_DYNAMIC_HDR_VIVID] = { "HDR Dynamic Metadata CUVA 005.1 2021 (Vivid)", AV_SIDE_DATA_PROP_COLOR_DEPENDENT },
39  [AV_FRAME_DATA_DYNAMIC_HDR_SMPTE_2094_APP5] = { "HDR Dynamic Metadata SMPTE2094-50", AV_SIDE_DATA_PROP_COLOR_DEPENDENT },
41  [AV_FRAME_DATA_VIDEO_ENC_PARAMS] = { "Video encoding parameters" },
42  [AV_FRAME_DATA_FILM_GRAIN_PARAMS] = { "Film grain parameters" },
43  [AV_FRAME_DATA_DETECTION_BBOXES] = { "Bounding boxes for object detection and classification", AV_SIDE_DATA_PROP_SIZE_DEPENDENT },
45  [AV_FRAME_DATA_DOVI_METADATA] = { "Dolby Vision Metadata", AV_SIDE_DATA_PROP_COLOR_DEPENDENT },
46  [AV_FRAME_DATA_LCEVC] = { "LCEVC NAL data", AV_SIDE_DATA_PROP_SIZE_DEPENDENT },
47  [AV_FRAME_DATA_VIEW_ID] = { "View ID" },
49  [AV_FRAME_DATA_REPLAYGAIN] = { "AVReplayGain", AV_SIDE_DATA_PROP_GLOBAL },
50  [AV_FRAME_DATA_DISPLAYMATRIX] = { "3x3 displaymatrix", AV_SIDE_DATA_PROP_GLOBAL },
51  [AV_FRAME_DATA_AUDIO_SERVICE_TYPE] = { "Audio service type", AV_SIDE_DATA_PROP_GLOBAL },
54  [AV_FRAME_DATA_AMBIENT_VIEWING_ENVIRONMENT] = { "Ambient viewing environment", AV_SIDE_DATA_PROP_GLOBAL },
57  [AV_FRAME_DATA_EXIF] = { "EXIF metadata", AV_SIDE_DATA_PROP_GLOBAL },
58  [AV_FRAME_DATA_SEI_UNREGISTERED] = { "H.26[45] User Data Unregistered SEI message", AV_SIDE_DATA_PROP_MULTI },
59  [AV_FRAME_DATA_VIDEO_HINT] = { "Encoding video hint", AV_SIDE_DATA_PROP_SIZE_DEPENDENT },
60  [AV_FRAME_DATA_3D_REFERENCE_DISPLAYS] = { "3D Reference Displays Information", AV_SIDE_DATA_PROP_GLOBAL },
61  [AV_FRAME_DATA_IAMF_MIX_GAIN_PARAM] = { "IAMF Mix Gain Parameter Data" },
62  [AV_FRAME_DATA_IAMF_DEMIXING_INFO_PARAM] = { "IAMF Demixing Info Parameter Data", AV_SIDE_DATA_PROP_CHANNEL_DEPENDENT },
63  [AV_FRAME_DATA_IAMF_RECON_GAIN_INFO_PARAM] = { "IAMF Recon Gain Info Parameter Data" },
66 };
67 
69 {
70  unsigned t = type;
71  if (t < FF_ARRAY_ELEMS(sd_props) && sd_props[t].name)
72  return &sd_props[t];
73  return NULL;
74 }
75 
77 {
79  return desc ? desc->name : NULL;
80 }
81 
83 {
84  AVFrameSideData *sd = *ptr_sd;
85 
86  av_buffer_unref(&sd->buf);
87  av_dict_free(&sd->metadata);
88  av_freep(ptr_sd);
89 }
90 
91 static void remove_side_data_by_entry(AVFrameSideData ***sd, int *nb_sd,
92  const AVFrameSideData *target)
93 {
94  for (int i = *nb_sd - 1; i >= 0; i--) {
95  AVFrameSideData *entry = ((*sd)[i]);
96  if (entry != target)
97  continue;
98 
100 
101  ((*sd)[i]) = ((*sd)[*nb_sd - 1]);
102  (*nb_sd)--;
103 
104  return;
105  }
106 }
107 
110 {
111  for (int i = *nb_sd - 1; i >= 0; i--) {
112  AVFrameSideData *entry = ((*sd)[i]);
113  if (entry->type != type)
114  continue;
115 
117 
118  ((*sd)[i]) = ((*sd)[*nb_sd - 1]);
119  (*nb_sd)--;
120  }
121 }
122 
124  int props)
125 {
126  for (int i = *nb_sd - 1; i >= 0; i--) {
127  AVFrameSideData *entry = ((*sd)[i]);
129  if (!desc || !(desc->props & props))
130  continue;
131 
133 
134  ((*sd)[i]) = ((*sd)[*nb_sd - 1]);
135  (*nb_sd)--;
136  }
137 }
138 
140 {
141  for (int i = 0; i < *nb_sd; i++)
142  free_side_data_entry(&((*sd)[i]));
143  *nb_sd = 0;
144 
145  av_freep(sd);
146 }
147 
149  int *nb_sd,
151  AVBufferRef *buf, uint8_t *data,
152  size_t size)
153 {
154  AVFrameSideData *ret, **tmp;
155 
156  // *nb_sd + 1 needs to fit into an int and a size_t.
157  if ((unsigned)*nb_sd >= FFMIN(INT_MAX, SIZE_MAX))
158  return NULL;
159 
160  tmp = av_realloc_array(*sd, *nb_sd + 1, sizeof(**sd));
161  if (!tmp)
162  return NULL;
163  *sd = tmp;
164 
165  ret = av_mallocz(sizeof(*ret));
166  if (!ret)
167  return NULL;
168 
169  ret->buf = buf;
170  ret->data = data;
171  ret->size = size;
172  ret->type = type;
173 
174  (*sd)[(*nb_sd)++] = ret;
175 
176  return ret;
177 }
178 
180  int *nb_sd,
182  AVBufferRef *buf)
183 {
184  if (!buf)
185  return NULL;
186 
187  return add_side_data_from_buf_ext(sd, nb_sd, type, buf, buf->data, buf->size);
188 }
189 
191  AVBufferRef *buf, int flags)
192 {
194  return NULL;
195 
196  av_dict_free(&dst->metadata);
197  av_buffer_unref(&dst->buf);
198  dst->buf = buf;
199  dst->data = buf->data;
200  dst->size = buf->size;
201  return dst;
202 }
203 
206  size_t size, unsigned int flags)
207 {
211 
213  av_frame_side_data_remove(sd, nb_sd, type);
214  if ((!desc || !(desc->props & AV_SIDE_DATA_PROP_MULTI)) &&
215  (ret = (AVFrameSideData *)av_frame_side_data_get(*sd, *nb_sd, type))) {
217  if (!ret)
218  av_buffer_unref(&buf);
219  return ret;
220  }
221 
222  ret = ff_frame_side_data_add_from_buf(sd, nb_sd, type, buf);
223  if (!ret)
224  av_buffer_unref(&buf);
225 
226  return ret;
227 }
228 
231  AVBufferRef **pbuf, unsigned int flags)
232 {
234  AVFrameSideData *sd_dst = NULL;
235  AVBufferRef *buf = *pbuf;
236 
237  if ((flags & AV_FRAME_SIDE_DATA_FLAG_NEW_REF) && !(buf = av_buffer_ref(*pbuf)))
238  return NULL;
240  av_frame_side_data_remove(sd, nb_sd, type);
241  if ((!desc || !(desc->props & AV_SIDE_DATA_PROP_MULTI)) &&
242  (sd_dst = (AVFrameSideData *)av_frame_side_data_get(*sd, *nb_sd, type))) {
243  sd_dst = replace_side_data_from_buf(sd_dst, buf, flags);
244  } else
245  sd_dst = ff_frame_side_data_add_from_buf(sd, nb_sd, type, buf);
246 
247  if (sd_dst && !(flags & AV_FRAME_SIDE_DATA_FLAG_NEW_REF))
248  *pbuf = NULL;
249  else if (!sd_dst && (flags & AV_FRAME_SIDE_DATA_FLAG_NEW_REF))
250  av_buffer_unref(&buf);
251  return sd_dst;
252 }
253 
255  const AVFrameSideData *src, unsigned int flags)
256 {
257  const AVSideDataDescriptor *desc;
258  AVBufferRef *buf = NULL;
259  AVFrameSideData *sd_dst = NULL;
260  int ret = AVERROR_BUG;
261 
262  if (!sd || !src || !nb_sd || (*nb_sd && !*sd))
263  return AVERROR(EINVAL);
264 
267  av_frame_side_data_remove(sd, nb_sd, src->type);
268  if ((!desc || !(desc->props & AV_SIDE_DATA_PROP_MULTI)) &&
269  (sd_dst = (AVFrameSideData *)av_frame_side_data_get(*sd, *nb_sd, src->type))) {
270  AVDictionary *dict = NULL;
271 
273  return AVERROR(EEXIST);
274 
275  ret = av_dict_copy(&dict, src->metadata, 0);
276  if (ret < 0)
277  return ret;
278 
279  ret = av_buffer_replace(&sd_dst->buf, src->buf);
280  if (ret < 0) {
281  av_dict_free(&dict);
282  return ret;
283  }
284 
285  av_dict_free(&sd_dst->metadata);
286  sd_dst->metadata = dict;
287  sd_dst->data = src->data;
288  sd_dst->size = src->size;
289  return 0;
290  }
291 
292  buf = av_buffer_ref(src->buf);
293  if (!buf)
294  return AVERROR(ENOMEM);
295 
296  sd_dst = add_side_data_from_buf_ext(sd, nb_sd, src->type, buf,
297  src->data, src->size);
298  if (!sd_dst) {
299  av_buffer_unref(&buf);
300  return AVERROR(ENOMEM);
301  }
302 
303  ret = av_dict_copy(&sd_dst->metadata, src->metadata, 0);
304  if (ret < 0) {
305  remove_side_data_by_entry(sd, nb_sd, sd_dst);
306  return ret;
307  }
308 
309  return 0;
310 }
311 
313  const int nb_sd,
315 {
316  for (int i = 0; i < nb_sd; i++) {
317  if (sd[i]->type == type)
318  return sd[i];
319  }
320  return NULL;
321 }
AV_FRAME_DATA_IAMF_MIX_GAIN_PARAM
@ AV_FRAME_DATA_IAMF_MIX_GAIN_PARAM
IAMF Mix Gain Parameter Data associated with the audio frame.
Definition: frame.h:278
name
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf default minimum maximum flags name is the option name
Definition: writing_filters.txt:88
entry
#define entry
Definition: aom_film_grain_template.c:66
AVERROR
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later. That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another. Frame references ownership and permissions
AVBufferRef::data
uint8_t * data
The data buffer.
Definition: buffer.h:90
AV_FRAME_DATA_IAMF_RECON_GAIN_INFO_PARAM
@ AV_FRAME_DATA_IAMF_RECON_GAIN_INFO_PARAM
IAMF Recon Gain Info Parameter Data associated with the audio frame.
Definition: frame.h:294
AV_FRAME_DATA_A53_CC
@ AV_FRAME_DATA_A53_CC
ATSC A53 Part 4 Closed Captions.
Definition: frame.h:59
free_side_data_entry
static void free_side_data_entry(AVFrameSideData **ptr_sd)
Definition: side_data.c:82
AV_FRAME_DATA_DOVI_METADATA
@ AV_FRAME_DATA_DOVI_METADATA
Parsed Dolby Vision metadata, suitable for passing to a software implementation.
Definition: frame.h:208
AV_FRAME_DATA_FILM_GRAIN_PARAMS
@ AV_FRAME_DATA_FILM_GRAIN_PARAMS
Film grain parameters for a frame, described by AVFilmGrainParams.
Definition: frame.h:188
AV_FRAME_DATA_S12M_TIMECODE
@ AV_FRAME_DATA_S12M_TIMECODE
Timecode which conforms to SMPTE ST 12-1.
Definition: frame.h:152
remove_side_data_by_entry
static void remove_side_data_by_entry(AVFrameSideData ***sd, int *nb_sd, const AVFrameSideData *target)
Definition: side_data.c:91
AVFrameSideData::buf
AVBufferRef * buf
Definition: frame.h:332
data
const char data[16]
Definition: mxf.c:149
AV_FRAME_DATA_DOVI_RPU_BUFFER
@ AV_FRAME_DATA_DOVI_RPU_BUFFER
Dolby Vision RPU raw data, suitable for passing to x265 or other libraries.
Definition: frame.h:201
AV_FRAME_DATA_DISPLAYMATRIX
@ AV_FRAME_DATA_DISPLAYMATRIX
This side data contains a 3x3 transformation matrix describing an affine transformation that needs to...
Definition: frame.h:85
AVDictionary
Definition: dict.c:32
av_buffer_ref
AVBufferRef * av_buffer_ref(const AVBufferRef *buf)
Create a new reference to an AVBuffer.
Definition: buffer.c:103
av_frame_side_data_clone
int av_frame_side_data_clone(AVFrameSideData ***sd, int *nb_sd, const AVFrameSideData *src, unsigned int flags)
Add a new side data entry to an array based on existing side data, taking a reference towards the con...
Definition: side_data.c:254
replace_side_data_from_buf
static AVFrameSideData * replace_side_data_from_buf(AVFrameSideData *dst, AVBufferRef *buf, int flags)
Definition: side_data.c:190
AV_FRAME_DATA_MATRIXENCODING
@ AV_FRAME_DATA_MATRIXENCODING
The data is the AVMatrixEncoding enum defined in libavutil/channel_layout.h.
Definition: frame.h:68
AV_FRAME_DATA_DOWNMIX_MATRIX
@ AV_FRAME_DATA_DOWNMIX_MATRIX
Metadata relevant to a downmix procedure in the form of a remixig matrix.
Definition: frame.h:307
type
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf type
Definition: writing_filters.txt:86
AVFrameSideDataType
AVFrameSideDataType
Definition: frame.h:49
AV_SIDE_DATA_PROP_SIZE_DEPENDENT
@ AV_SIDE_DATA_PROP_SIZE_DEPENDENT
Side data depends on the video dimensions.
Definition: frame.h:354
avassert.h
AV_FRAME_SIDE_DATA_FLAG_UNIQUE
#define AV_FRAME_SIDE_DATA_FLAG_UNIQUE
Remove existing entries before adding new ones.
Definition: frame.h:1093
AVFrameSideData::size
size_t size
Definition: frame.h:330
FF_ARRAY_ELEMS
#define FF_ARRAY_ELEMS(a)
Definition: sinewin_tablegen.c:29
flags
#define flags(name, subs,...)
Definition: cbs_av1.c:504
AV_FRAME_SIDE_DATA_FLAG_NEW_REF
#define AV_FRAME_SIDE_DATA_FLAG_NEW_REF
Create a new reference to the passed in buffer instead of taking ownership of it.
Definition: frame.h:1103
AV_FRAME_DATA_IAMF_DEMIXING_INFO_PARAM
@ AV_FRAME_DATA_IAMF_DEMIXING_INFO_PARAM
IAMF Demixing Info Parameter Data associated with the audio frame.
Definition: frame.h:286
av_realloc_array
void * av_realloc_array(void *ptr, size_t nmemb, size_t size)
Definition: mem.c:217
AV_FRAME_DATA_AUDIO_SERVICE_TYPE
@ AV_FRAME_DATA_AUDIO_SERVICE_TYPE
This side data must be associated with an audio frame and corresponds to enum AVAudioServiceType defi...
Definition: frame.h:114
sd_props
static const AVSideDataDescriptor sd_props[]
Definition: side_data.c:27
AV_SIDE_DATA_PROP_MULTI
@ AV_SIDE_DATA_PROP_MULTI
Multiple instances of this side data type can be meaningfully present in a single side data array.
Definition: frame.h:347
AV_FRAME_DATA_DYNAMIC_HDR_SMPTE_2094_APP5
@ AV_FRAME_DATA_DYNAMIC_HDR_SMPTE_2094_APP5
HDR dynamic metadata associated with a video frame.
Definition: frame.h:270
AV_FRAME_DATA_3D_REFERENCE_DISPLAYS
@ AV_FRAME_DATA_3D_REFERENCE_DISPLAYS
This side data contains information about the reference display width(s) and reference viewing distan...
Definition: frame.h:256
AV_SIDE_DATA_PROP_GLOBAL
@ AV_SIDE_DATA_PROP_GLOBAL
The side data type can be used in stream-global structures.
Definition: frame.h:341
av_mallocz
#define av_mallocz(s)
Definition: tableprint_vlc.h:31
AV_FRAME_DATA_DYNAMIC_HDR_VIVID
@ AV_FRAME_DATA_DYNAMIC_HDR_VIVID
HDR Vivid dynamic metadata associated with a video frame.
Definition: frame.h:215
tmp
static uint8_t tmp[40]
Definition: aes_ctr.c:52
AV_FRAME_DATA_SPHERICAL
@ AV_FRAME_DATA_SPHERICAL
The data represents the AVSphericalMapping structure defined in libavutil/spherical....
Definition: frame.h:131
ff_frame_side_data_add_from_buf
AVFrameSideData * ff_frame_side_data_add_from_buf(AVFrameSideData ***sd, int *nb_sd, enum AVFrameSideDataType type, AVBufferRef *buf)
Definition: side_data.c:179
NULL
#define NULL
Definition: coverity.c:32
av_buffer_unref
void av_buffer_unref(AVBufferRef **buf)
Free a given reference and automatically free the buffer if there are no more references to it.
Definition: buffer.c:139
av_frame_side_data_remove
void av_frame_side_data_remove(AVFrameSideData ***sd, int *nb_sd, enum AVFrameSideDataType type)
Remove and free all side data instances of the given type from an array.
Definition: side_data.c:108
AV_FRAME_DATA_ICC_PROFILE
@ AV_FRAME_DATA_ICC_PROFILE
The data contains an ICC profile as an opaque octet buffer following the format described by ISO 1507...
Definition: frame.h:144
AV_FRAME_DATA_MASTERING_DISPLAY_METADATA
@ AV_FRAME_DATA_MASTERING_DISPLAY_METADATA
Mastering display metadata associated with a video frame.
Definition: frame.h:120
AV_FRAME_SIDE_DATA_FLAG_REPLACE
#define AV_FRAME_SIDE_DATA_FLAG_REPLACE
Don't add a new entry if another of the same type exists.
Definition: frame.h:1098
AV_FRAME_DATA_AFD
@ AV_FRAME_DATA_AFD
Active Format Description data consisting of a single byte as specified in ETSI TS 101 154 using AVAc...
Definition: frame.h:90
AV_FRAME_DATA_SEI_UNREGISTERED
@ AV_FRAME_DATA_SEI_UNREGISTERED
User data unregistered metadata associated with a video frame.
Definition: frame.h:178
AV_FRAME_DATA_REPLAYGAIN
@ AV_FRAME_DATA_REPLAYGAIN
ReplayGain information in the form of the AVReplayGain struct.
Definition: frame.h:77
AV_FRAME_DATA_AMBIENT_VIEWING_ENVIRONMENT
@ AV_FRAME_DATA_AMBIENT_VIEWING_ENVIRONMENT
Ambient viewing environment metadata, as defined by H.274.
Definition: frame.h:220
AV_FRAME_DATA_PANSCAN
@ AV_FRAME_DATA_PANSCAN
The data is the AVPanScan struct defined in libavcodec.
Definition: frame.h:53
dst
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
Definition: dsp.h:87
i
#define i(width, name, range_min, range_max)
Definition: cbs_h264.c:63
AV_FRAME_DATA_LCEVC
@ AV_FRAME_DATA_LCEVC
Raw LCEVC payload data, as a uint8_t array, with NAL emulation bytes intact.
Definition: frame.h:236
size
int size
Definition: twinvq_data.h:10344
AVFrameSideData::data
uint8_t * data
Definition: frame.h:329
AV_FRAME_DATA_RAW_COLOR_PARAMS
@ AV_FRAME_DATA_RAW_COLOR_PARAMS
Color information from a RAW camera codecs, needed to correctly process the video data.
Definition: frame.h:301
frame.h
buffer.h
av_dict_free
void av_dict_free(AVDictionary **pm)
Free all the memory allocated for an AVDictionary struct and all keys and values.
Definition: dict.c:233
av_buffer_alloc
AVBufferRef * av_buffer_alloc(size_t size)
Allocate an AVBuffer of the given size using av_malloc().
Definition: buffer.c:77
av_frame_side_data_remove_by_props
void av_frame_side_data_remove_by_props(AVFrameSideData ***sd, int *nb_sd, int props)
Remove and free all side data instances that match any of the given side data properties.
Definition: side_data.c:123
AVBufferRef::size
size_t size
Size of data in bytes.
Definition: buffer.h:94
AV_FRAME_DATA_VIEW_ID
@ AV_FRAME_DATA_VIEW_ID
This side data must be associated with a video frame.
Definition: frame.h:245
AV_FRAME_DATA_SKIP_SAMPLES
@ AV_FRAME_DATA_SKIP_SAMPLES
Recommends skipping the specified number of samples.
Definition: frame.h:109
AV_FRAME_DATA_CONTENT_LIGHT_LEVEL
@ AV_FRAME_DATA_CONTENT_LIGHT_LEVEL
Content light level (based on CTA-861.3).
Definition: frame.h:137
AV_SIDE_DATA_PROP_CHANNEL_DEPENDENT
@ AV_SIDE_DATA_PROP_CHANNEL_DEPENDENT
Side data depends on the channel layout.
Definition: frame.h:368
av_frame_side_data_free
void av_frame_side_data_free(AVFrameSideData ***sd, int *nb_sd)
Free all side data entries and their contents, then zeroes out the values which the pointers are poin...
Definition: side_data.c:139
common.h
AV_FRAME_DATA_STEREO3D
@ AV_FRAME_DATA_STEREO3D
Stereoscopic 3d metadata.
Definition: frame.h:64
FFMIN
#define FFMIN(a, b)
Definition: macros.h:49
av_buffer_replace
int av_buffer_replace(AVBufferRef **pdst, const AVBufferRef *src)
Ensure dst refers to the same data as src.
Definition: buffer.c:233
AV_SIDE_DATA_PROP_COLOR_DEPENDENT
@ AV_SIDE_DATA_PROP_COLOR_DEPENDENT
Side data depends on the video color space.
Definition: frame.h:361
ret
ret
Definition: filter_design.txt:187
AV_FRAME_DATA_GOP_TIMECODE
@ AV_FRAME_DATA_GOP_TIMECODE
The GOP timecode in 25 bit timecode format.
Definition: frame.h:125
AV_FRAME_DATA_VIDEO_HINT
@ AV_FRAME_DATA_VIDEO_HINT
Provide encoder-specific hinting information about changed/unchanged portions of a frame.
Definition: frame.h:230
side_data.h
dict.h
AV_FRAME_DATA_DYNAMIC_HDR_PLUS
@ AV_FRAME_DATA_DYNAMIC_HDR_PLUS
HDR dynamic metadata associated with a video frame.
Definition: frame.h:159
add_side_data_from_buf_ext
static AVFrameSideData * add_side_data_from_buf_ext(AVFrameSideData ***sd, int *nb_sd, enum AVFrameSideDataType type, AVBufferRef *buf, uint8_t *data, size_t size)
Definition: side_data.c:148
av_frame_side_data_new
AVFrameSideData * av_frame_side_data_new(AVFrameSideData ***sd, int *nb_sd, enum AVFrameSideDataType type, size_t size, unsigned int flags)
Add new side data entry to an array.
Definition: side_data.c:204
AV_FRAME_DATA_VIDEO_ENC_PARAMS
@ AV_FRAME_DATA_VIDEO_ENC_PARAMS
Encoding parameters for a video frame, as described by AVVideoEncParams.
Definition: frame.h:170
AVSideDataDescriptor
This struct describes the properties of a side data type.
Definition: frame.h:375
desc
const char * desc
Definition: libsvtav1.c:83
mem.h
AVBufferRef
A reference to a data buffer.
Definition: buffer.h:82
AVFrameSideData
Structure to hold side data for an AVFrame.
Definition: frame.h:327
av_frame_side_data_desc
const AVSideDataDescriptor * av_frame_side_data_desc(enum AVFrameSideDataType type)
Definition: side_data.c:68
av_freep
#define av_freep(p)
Definition: tableprint_vlc.h:35
av_dict_copy
int av_dict_copy(AVDictionary **dst, const AVDictionary *src, int flags)
Copy entries from one AVDictionary struct into another.
Definition: dict.c:247
av_frame_side_data_name
const char * av_frame_side_data_name(enum AVFrameSideDataType type)
Definition: side_data.c:76
av_frame_side_data_get
static const AVFrameSideData * av_frame_side_data_get(AVFrameSideData *const *sd, const int nb_sd, enum AVFrameSideDataType type)
Wrapper around av_frame_side_data_get_c() to workaround the limitation that for any type T the conver...
Definition: frame.h:1196
AV_FRAME_DATA_EXIF
@ AV_FRAME_DATA_EXIF
Exchangeable image file format metadata.
Definition: frame.h:263
AV_FRAME_DATA_REGIONS_OF_INTEREST
@ AV_FRAME_DATA_REGIONS_OF_INTEREST
Regions Of Interest, the data is an array of AVRegionOfInterest type, the number of array element is ...
Definition: frame.h:165
AVERROR_BUG
#define AVERROR_BUG
Internal bug, also see AVERROR_BUG2.
Definition: error.h:52
AVFrameSideData::metadata
AVDictionary * metadata
Definition: frame.h:331
av_frame_side_data_get_c
const AVFrameSideData * av_frame_side_data_get_c(const AVFrameSideData *const *sd, const int nb_sd, enum AVFrameSideDataType type)
Get a side data entry of a specific type from an array.
Definition: side_data.c:312
AV_FRAME_DATA_MOTION_VECTORS
@ AV_FRAME_DATA_MOTION_VECTORS
Motion vectors exported by some codecs (on demand through the export_mvs flag set in the libavcodec A...
Definition: frame.h:97
AV_FRAME_DATA_DOWNMIX_INFO
@ AV_FRAME_DATA_DOWNMIX_INFO
Metadata relevant to a downmix procedure.
Definition: frame.h:73
av_frame_side_data_add
AVFrameSideData * av_frame_side_data_add(AVFrameSideData ***sd, int *nb_sd, enum AVFrameSideDataType type, AVBufferRef **pbuf, unsigned int flags)
Add a new side data entry to an array from an existing AVBufferRef.
Definition: side_data.c:229
src
#define src
Definition: vp8dsp.c:248
AV_FRAME_DATA_DETECTION_BBOXES
@ AV_FRAME_DATA_DETECTION_BBOXES
Bounding boxes for object detection and classification, as described by AVDetectionBBoxHeader.
Definition: frame.h:194