FFmpeg
cbs_apv.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 "libavutil/mem.h"
20 #include "cbs.h"
21 #include "cbs_internal.h"
22 #include "cbs_apv.h"
23 
24 
26 {
27  switch (fh->frame_info.chroma_format_idc) {
29  return 1;
32  return 3;
34  return 4;
35  default:
36  av_assert0(0 && "Invalid chroma_format_idc");
37  }
38 }
39 
41  const APVRawFrameHeader *fh)
42 {
43  int frame_width_in_mbs = (fh->frame_info.frame_width + 15) / 16;
44  int frame_height_in_mbs = (fh->frame_info.frame_height + 15) / 16;
45  int start_mb, i;
46 
47  start_mb = 0;
48  for (i = 0; start_mb < frame_width_in_mbs; i++) {
49  ti->col_starts[i] = start_mb * APV_MB_WIDTH;
50  start_mb += fh->tile_info.tile_width_in_mbs;
51  }
53  ti->col_starts[i] = frame_width_in_mbs * APV_MB_WIDTH;
54  ti->tile_cols = i;
55 
56  start_mb = 0;
57  for (i = 0; start_mb < frame_height_in_mbs; i++) {
59  ti->row_starts[i] = start_mb * APV_MB_HEIGHT;
60  start_mb += fh->tile_info.tile_height_in_mbs;
61  }
63  ti->row_starts[i] = frame_height_in_mbs * APV_MB_HEIGHT;
64  ti->tile_rows = i;
65 
66  ti->num_tiles = ti->tile_cols * ti->tile_rows;
67 }
68 
69 
70 #define HEADER(name) do { \
71  ff_cbs_trace_header(ctx, name); \
72  } while (0)
73 
74 #define CHECK(call) do { \
75  err = (call); \
76  if (err < 0) \
77  return err; \
78  } while (0)
79 
80 #define SUBSCRIPTS(subs, ...) (subs > 0 ? ((int[subs + 1]){ subs, __VA_ARGS__ }) : NULL)
81 
82 
83 #define u(width, name, range_min, range_max) \
84  xu(width, name, current->name, range_min, range_max, 0, )
85 #define ub(width, name) \
86  xu(width, name, current->name, 0, MAX_UINT_BITS(width), 0, )
87 #define us(width, name, range_min, range_max, subs, ...) \
88  xu(width, name, current->name, range_min, range_max, subs, __VA_ARGS__)
89 #define ubs(width, name, subs, ...) \
90  xu(width, name, current->name, 0, MAX_UINT_BITS(width), subs, __VA_ARGS__)
91 
92 #define fixed(width, name, value) do { \
93  av_unused uint32_t fixed_value = value; \
94  xu(width, name, fixed_value, value, value, 0, ); \
95  } while (0)
96 
97 
98 #define READ
99 #define READWRITE read
100 #define RWContext GetBitContext
101 #define FUNC(name) cbs_apv_read_ ## name
102 
103 #define xu(width, name, var, range_min, range_max, subs, ...) do { \
104  uint32_t value; \
105  CHECK(ff_cbs_read_unsigned(ctx, rw, width, #name, \
106  SUBSCRIPTS(subs, __VA_ARGS__), \
107  &value, range_min, range_max)); \
108  var = value; \
109  } while (0)
110 
111 #define infer(name, value) do { \
112  current->name = value; \
113  } while (0)
114 
115 #define byte_alignment(rw) (get_bits_count(rw) % 8)
116 
117 #include "cbs_apv_syntax_template.c"
118 
119 #undef READ
120 #undef READWRITE
121 #undef RWContext
122 #undef FUNC
123 #undef xu
124 #undef infer
125 #undef byte_alignment
126 
127 #define WRITE
128 #define READWRITE write
129 #define RWContext PutBitContext
130 #define FUNC(name) cbs_apv_write_ ## name
131 
132 #define xu(width, name, var, range_min, range_max, subs, ...) do { \
133  uint32_t value = var; \
134  CHECK(ff_cbs_write_unsigned(ctx, rw, width, #name, \
135  SUBSCRIPTS(subs, __VA_ARGS__), \
136  value, range_min, range_max)); \
137  } while (0)
138 
139 #define infer(name, value) do { \
140  if (current->name != (value)) { \
141  av_log(ctx->log_ctx, AV_LOG_ERROR, \
142  "%s does not match inferred value: " \
143  "%"PRId64", but should be %"PRId64".\n", \
144  #name, (int64_t)current->name, (int64_t)(value)); \
145  return AVERROR_INVALIDDATA; \
146  } \
147  } while (0)
148 
149 #define byte_alignment(rw) (put_bits_count(rw) % 8)
150 
151 #include "cbs_apv_syntax_template.c"
152 
153 #undef WRITE
154 #undef READWRITE
155 #undef RWContext
156 #undef FUNC
157 #undef xu
158 #undef infer
159 #undef byte_alignment
160 
161 
164  int header)
165 {
166  uint8_t *data = frag->data;
167  size_t size = frag->data_size;
168  uint32_t signature;
169  int err, trace;
170 
171  if (header) {
172  // Ignore extradata fragments.
173  return 0;
174  }
175 
176  if (frag->data_size < 4) {
177  // Too small to be a valid fragment.
178  return AVERROR_INVALIDDATA;
179  }
180 
181  // Don't include parsing here in trace output.
182  trace = ctx->trace_enable;
183  ctx->trace_enable = 0;
184 
186  if (signature != APV_SIGNATURE) {
187  av_log(ctx->log_ctx, AV_LOG_ERROR,
188  "Invalid APV access unit: bad signature %08x.\n",
189  signature);
190  err = AVERROR_INVALIDDATA;
191  goto fail;
192  }
193  data += 4;
194  size -= 4;
195 
196  while (size > 0) {
197  GetBitContext gbc;
198  uint32_t pbu_size;
200 
201  if (size < 8) {
202  av_log(ctx->log_ctx, AV_LOG_ERROR, "Invalid PBU: "
203  "fragment too short (%"SIZE_SPECIFIER" bytes).\n",
204  size);
205  err = AVERROR_INVALIDDATA;
206  goto fail;
207  }
208 
209  pbu_size = AV_RB32(data);
210  if (pbu_size < 8) {
211  av_log(ctx->log_ctx, AV_LOG_ERROR, "Invalid PBU: "
212  "pbu_size too small (%"PRIu32" bytes).\n",
213  pbu_size);
214  err = AVERROR_INVALIDDATA;
215  goto fail;
216  }
217 
218  data += 4;
219  size -= 4;
220 
221  if (pbu_size > size) {
222  av_log(ctx->log_ctx, AV_LOG_ERROR, "Invalid PBU: "
223  "pbu_size too large (%"PRIu32" bytes).\n",
224  pbu_size);
225  err = AVERROR_INVALIDDATA;
226  goto fail;
227  }
228 
229  init_get_bits(&gbc, data, 8 * pbu_size);
230 
231  err = cbs_apv_read_pbu_header(ctx, &gbc, &pbu_header);
232  if (err < 0)
233  return err;
234 
235  // Could select/skip frames based on type/group_id here.
236 
237  err = ff_cbs_append_unit_data(frag, pbu_header.pbu_type,
238  data, pbu_size, frag->data_ref);
239  if (err < 0)
240  return err;
241 
242  data += pbu_size;
243  size -= pbu_size;
244  }
245 
246  err = 0;
247 fail:
248  ctx->trace_enable = trace;
249  return err;
250 }
251 
253  CodedBitstreamUnit *unit)
254 {
255  GetBitContext gbc;
256  int err;
257 
258  err = init_get_bits(&gbc, unit->data, 8 * unit->data_size);
259  if (err < 0)
260  return err;
261 
262  err = ff_cbs_alloc_unit_content(ctx, unit);
263  if (err < 0)
264  return err;
265 
266  switch (unit->type) {
270  case APV_PBU_DEPTH_FRAME:
271  case APV_PBU_ALPHA_FRAME:
272  {
273  APVRawFrame *frame = unit->content;
274 
275  err = cbs_apv_read_frame(ctx, &gbc, frame);
276  if (err < 0)
277  return err;
278 
279  // Each tile inside the frame has pointers into the unit
280  // data buffer; make a single reference here for all of
281  // them together.
282  frame->tile_data_ref = av_buffer_ref(unit->data_ref);
283  if (!frame->tile_data_ref)
284  return AVERROR(ENOMEM);
285  }
286  break;
288  {
289  err = cbs_apv_read_au_info(ctx, &gbc, unit->content);
290  if (err < 0)
291  return err;
292  }
293  break;
294  case APV_PBU_METADATA:
295  {
296  err = cbs_apv_read_metadata(ctx, &gbc, unit->content);
297  if (err < 0)
298  return err;
299  }
300  break;
301  case APV_PBU_FILLER:
302  {
303  err = cbs_apv_read_filler(ctx, &gbc, unit->content);
304  if (err < 0)
305  return err;
306  }
307  break;
308  default:
309  return AVERROR(ENOSYS);
310  }
311 
312  return 0;
313 }
314 
316  CodedBitstreamUnit *unit,
317  PutBitContext *pbc)
318 {
319  int err;
320 
321  switch (unit->type) {
325  case APV_PBU_DEPTH_FRAME:
326  case APV_PBU_ALPHA_FRAME:
327  {
328  APVRawFrame *frame = unit->content;
329 
330  err = cbs_apv_write_frame(ctx, pbc, frame);
331  if (err < 0)
332  return err;
333  }
334  break;
336  {
337  err = cbs_apv_write_au_info(ctx, pbc, unit->content);
338  if (err < 0)
339  return err;
340  }
341  break;
342  case APV_PBU_METADATA:
343  {
344  err = cbs_apv_write_metadata(ctx, pbc, unit->content);
345  if (err < 0)
346  return err;
347  }
348  break;
349  case APV_PBU_FILLER:
350  {
351  err = cbs_apv_write_filler(ctx, pbc, unit->content);
352  if (err < 0)
353  return err;
354  }
355  break;
356  default:
357  return AVERROR(ENOSYS);
358  }
359 
360  return 0;
361 }
362 
365 {
366  size_t size = 4, pos;
367 
368  for (int i = 0; i < frag->nb_units; i++)
369  size += frag->units[i].data_size + 4;
370 
372  if (!frag->data_ref)
373  return AVERROR(ENOMEM);
374  frag->data = frag->data_ref->data;
375  memset(frag->data + size, 0, AV_INPUT_BUFFER_PADDING_SIZE);
376 
377  AV_WB32(frag->data, APV_SIGNATURE);
378  pos = 4;
379  for (int i = 0; i < frag->nb_units; i++) {
380  AV_WB32(frag->data + pos, frag->units[i].data_size);
381  pos += 4;
382 
383  memcpy(frag->data + pos, frag->units[i].data,
384  frag->units[i].data_size);
385  pos += frag->units[i].data_size;
386  }
387  av_assert0(pos == size);
388  frag->data_size = size;
389 
390  return 0;
391 }
392 
393 
394 static void cbs_apv_free_metadata(AVRefStructOpaque unused, void *content)
395 {
396  APVRawMetadata *md = content;
397  av_assert0(md->pbu_header.pbu_type == APV_PBU_METADATA);
398 
399  for (int i = 0; i < md->metadata_count; i++) {
400  APVRawMetadataPayload *pl = &md->payloads[i];
401 
402  switch (pl->payload_type) {
403  case APV_METADATA_MDCV:
404  case APV_METADATA_CLL:
405  case APV_METADATA_FILLER:
406  break;
409  break;
412  break;
413  default:
415  }
416  }
417 }
418 
420  {
422  .unit_type.range = {
423  .start = APV_PBU_PRIMARY_FRAME,
424  .end = APV_PBU_ALPHA_FRAME,
425  },
426  .content_type = CBS_CONTENT_TYPE_INTERNAL_REFS,
427  .content_size = sizeof(APVRawFrame),
428  .type.ref = {
429  .nb_offsets = 1,
430  .offsets = { offsetof(APVRawFrame, tile_data_ref) -
431  sizeof(void*) },
432  },
433  },
434 
437 
440 
442 };
443 
446 
447  .priv_data_size = sizeof(CodedBitstreamAPVContext),
448 
449  .unit_types = cbs_apv_unit_types,
450 
451  .split_fragment = &cbs_apv_split_fragment,
452  .read_unit = &cbs_apv_read_unit,
453  .write_unit = &cbs_apv_write_unit,
454  .assemble_fragment = &cbs_apv_assemble_fragment,
455 };
cbs.h
CBS_UNIT_TYPE_RANGE
@ CBS_UNIT_TYPE_RANGE
Definition: cbs_internal.h:92
CBS_UNIT_TYPE_COMPLEX
#define CBS_UNIT_TYPE_COMPLEX(type, structure, free_func)
Definition: cbs_internal.h:383
APVDerivedTileInfo::tile_cols
uint8_t tile_cols
Definition: cbs_apv.h:191
APV_PBU_PREVIEW_FRAME
@ APV_PBU_PREVIEW_FRAME
Definition: apv.h:29
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
cbs_apv_write_unit
static int cbs_apv_write_unit(CodedBitstreamContext *ctx, CodedBitstreamUnit *unit, PutBitContext *pbc)
Definition: cbs_apv.c:315
APV_CHROMA_FORMAT_444
@ APV_CHROMA_FORMAT_444
Definition: apv.h:49
AVBufferRef::data
uint8_t * data
The data buffer.
Definition: buffer.h:90
AVRefStructOpaque
RefStruct is an API for creating reference-counted objects with minimal overhead.
Definition: refstruct.h:58
APV_SIGNATURE
#define APV_SIGNATURE
Definition: apv.h:23
CodedBitstreamUnit::content
void * content
Pointer to the decomposed form of this unit.
Definition: cbs.h:114
md
#define md
Definition: vf_colormatrix.c:101
APV_PBU_METADATA
@ APV_PBU_METADATA
Definition: apv.h:33
APVRawAUInfo
Definition: cbs_apv.h:111
CodedBitstreamContext
Context structure for coded bitstream operations.
Definition: cbs.h:226
APVRawFrameInfo::frame_width
uint32_t frame_width
Definition: cbs_apv.h:48
data
const char data[16]
Definition: mxf.c:149
cbs_apv_unit_types
static const CodedBitstreamUnitTypeDescriptor cbs_apv_unit_types[]
Definition: cbs_apv.c:419
CodedBitstreamUnit::type
CodedBitstreamUnitType type
Codec-specific type of this unit.
Definition: cbs.h:81
av_buffer_ref
AVBufferRef * av_buffer_ref(const AVBufferRef *buf)
Create a new reference to an AVBuffer.
Definition: buffer.c:103
APVRawTileInfo::tile_width_in_mbs
uint32_t tile_width_in_mbs
Definition: cbs_apv.h:61
cbs_apv_free_metadata
static void cbs_apv_free_metadata(AVRefStructOpaque unused, void *content)
Definition: cbs_apv.c:394
init_get_bits
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
Definition: get_bits.h:497
APV_CHROMA_FORMAT_400
@ APV_CHROMA_FORMAT_400
Definition: apv.h:47
CodedBitstreamUnit
Coded bitstream unit structure.
Definition: cbs.h:77
fail
#define fail()
Definition: checkasm.h:195
GetBitContext
Definition: get_bits.h:108
APVRawMetadataUndefined::data_ref
AVBufferRef * data_ref
Definition: cbs_apv.h:161
CBS_CONTENT_TYPE_INTERNAL_REFS
@ CBS_CONTENT_TYPE_INTERNAL_REFS
Definition: cbs_internal.h:77
cbs_apv_syntax_template.c
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
CodedBitstreamUnit::data
uint8_t * data
Pointer to the directly-parsable bitstream form of this unit.
Definition: cbs.h:88
APVRawFrameHeader::frame_info
APVRawFrameInfo frame_info
Definition: cbs_apv.h:68
signature
static const char signature[]
Definition: ipmovie.c:592
CodedBitstreamFragment::units
CodedBitstreamUnit * units
Pointer to an array of units of length nb_units_allocated.
Definition: cbs.h:175
CodedBitstreamUnitTypeDescriptor
Definition: cbs_internal.h:95
AV_LOG_ERROR
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:210
APV_PBU_NON_PRIMARY_FRAME
@ APV_PBU_NON_PRIMARY_FRAME
Definition: apv.h:28
CodedBitstreamFragment
Coded bitstream fragment structure, combining one or more units.
Definition: cbs.h:129
CodedBitstreamUnitTypeDescriptor::nb_unit_types
int nb_unit_types
Definition: cbs_internal.h:99
CodedBitstreamFragment::data_size
size_t data_size
The number of bytes in the bitstream.
Definition: cbs.h:142
ff_cbs_type_apv
const CodedBitstreamType ff_cbs_type_apv
Definition: cbs_apv.c:444
av_assert0
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Definition: avassert.h:40
APVRawTileInfo::tile_height_in_mbs
uint32_t tile_height_in_mbs
Definition: cbs_apv.h:62
APVRawPBUHeader
Definition: cbs_apv.h:33
ctx
AVFormatContext * ctx
Definition: movenc.c:49
cbs_internal.h
APV_MB_HEIGHT
@ APV_MB_HEIGHT
Definition: apv.h:41
CodedBitstreamType::codec_id
enum AVCodecID codec_id
Definition: cbs_internal.h:142
PutBitContext
Definition: put_bits.h:50
APVRawMetadata
Definition: cbs_apv.h:178
APV_MB_WIDTH
@ APV_MB_WIDTH
Definition: apv.h:40
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
cbs_apv_derive_tile_info
static void cbs_apv_derive_tile_info(APVDerivedTileInfo *ti, const APVRawFrameHeader *fh)
Definition: cbs_apv.c:40
APV_PBU_ACCESS_UNIT_INFORMATION
@ APV_PBU_ACCESS_UNIT_INFORMATION
Definition: apv.h:32
APV_MAX_TILE_COLS
@ APV_MAX_TILE_COLS
Definition: apv.h:75
APV_METADATA_CLL
@ APV_METADATA_CLL
Definition: apv.h:84
CodedBitstreamUnit::data_size
size_t data_size
The number of bytes in the bitstream (including any padding bits in the final byte).
Definition: cbs.h:93
cbs_apv_get_num_comp
static int cbs_apv_get_num_comp(const APVRawFrameHeader *fh)
Definition: cbs_apv.c:25
APVRawFrame
Definition: cbs_apv.h:101
AV_WB32
#define AV_WB32(p, v)
Definition: intreadwrite.h:415
APVRawMetadataPayload
Definition: cbs_apv.h:165
APVRawFrameInfo::frame_height
uint32_t frame_height
Definition: cbs_apv.h:49
pbu_header
static int FUNC() pbu_header(CodedBitstreamContext *ctx, RWContext *rw, APVRawPBUHeader *current)
Definition: cbs_apv_syntax_template.c:19
APVRawFrameHeader
Definition: cbs_apv.h:67
size
int size
Definition: twinvq_data.h:10344
CodedBitstreamFragment::data
uint8_t * data
Pointer to the bitstream form of this fragment.
Definition: cbs.h:135
AV_RB32
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_WL32 unsigned int_TMPL AV_WL24 unsigned int_TMPL AV_WL16 uint64_t_TMPL AV_WB64 unsigned int_TMPL AV_RB32
Definition: bytestream.h:96
APVRawMetadataPayload::user_defined
APVRawMetadataUserDefined user_defined
Definition: cbs_apv.h:173
APVRawMetadataPayload::payload_type
uint32_t payload_type
Definition: cbs_apv.h:166
APVRawFrameInfo::chroma_format_idc
uint8_t chroma_format_idc
Definition: cbs_apv.h:50
header
static const uint8_t header[24]
Definition: sdr2.c:68
CodedBitstreamAPVContext
Definition: cbs_apv.h:200
APVRawMetadataUserDefined::data_ref
AVBufferRef * data_ref
Definition: cbs_apv.h:155
APVRawMetadataPayload::itu_t_t35
APVRawMetadataITUTT35 itu_t_t35
Definition: cbs_apv.h:169
cbs_apv_read_unit
static int cbs_apv_read_unit(CodedBitstreamContext *ctx, CodedBitstreamUnit *unit)
Definition: cbs_apv.c:252
CBS_UNIT_TYPE_POD
#define CBS_UNIT_TYPE_POD(type_, structure)
Definition: cbs_internal.h:339
APVRawFrameHeader::tile_info
APVRawTileInfo tile_info
Definition: cbs_apv.h:80
CodedBitstreamType
Definition: cbs_internal.h:141
av_buffer_alloc
AVBufferRef * av_buffer_alloc(size_t size)
Allocate an AVBuffer of the given size using av_malloc().
Definition: buffer.c:77
APV_METADATA_USER_DEFINED
@ APV_METADATA_USER_DEFINED
Definition: apv.h:86
APVDerivedTileInfo::row_starts
uint16_t row_starts[APV_MAX_TILE_ROWS+1]
Definition: cbs_apv.h:197
CodedBitstreamUnit::data_ref
AVBufferRef * data_ref
A reference to the buffer containing data.
Definition: cbs.h:105
i
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:256
cbs_apv_split_fragment
static int cbs_apv_split_fragment(CodedBitstreamContext *ctx, CodedBitstreamFragment *frag, int header)
Definition: cbs_apv.c:162
APV_CHROMA_FORMAT_422
@ APV_CHROMA_FORMAT_422
Definition: apv.h:48
APVDerivedTileInfo
Definition: cbs_apv.h:190
CBS_UNIT_TYPE_END_OF_LIST
#define CBS_UNIT_TYPE_END_OF_LIST
Definition: cbs_internal.h:386
AV_CODEC_ID_APV
@ AV_CODEC_ID_APV
Definition: codec_id.h:332
frame
these buffered frames must be flushed immediately if a new input produces new the filter must not call request_frame to get more It must just process the frame or queue it The task of requesting more frames is left to the filter s request_frame method or the application If a filter has several the filter must be ready for frames arriving randomly on any input any filter with several inputs will most likely require some kind of queuing mechanism It is perfectly acceptable to have a limited queue and to drop frames when the inputs are too unbalanced request_frame For filters that do not use the this method is called when a frame is wanted on an output For a it should directly call filter_frame on the corresponding output For a if there are queued frames already one of these frames should be pushed If the filter should request a frame on one of its repeatedly until at least one frame has been pushed Return or at least make progress towards producing a frame
Definition: filter_design.txt:264
pos
unsigned int pos
Definition: spdifenc.c:414
APVDerivedTileInfo::tile_rows
uint8_t tile_rows
Definition: cbs_apv.h:192
AV_INPUT_BUFFER_PADDING_SIZE
#define AV_INPUT_BUFFER_PADDING_SIZE
Definition: defs.h:40
SIZE_SPECIFIER
#define SIZE_SPECIFIER
Definition: internal.h:129
APV_PBU_PRIMARY_FRAME
@ APV_PBU_PRIMARY_FRAME
Definition: apv.h:27
APVDerivedTileInfo::col_starts
uint16_t col_starts[APV_MAX_TILE_COLS+1]
Definition: cbs_apv.h:196
APV_METADATA_MDCV
@ APV_METADATA_MDCV
Definition: apv.h:83
APV_CHROMA_FORMAT_4444
@ APV_CHROMA_FORMAT_4444
Definition: apv.h:50
APV_PBU_FILLER
@ APV_PBU_FILLER
Definition: apv.h:34
APV_MAX_TILE_ROWS
@ APV_MAX_TILE_ROWS
Definition: apv.h:76
mem.h
APV_METADATA_FILLER
@ APV_METADATA_FILLER
Definition: apv.h:85
APVRawMetadataITUTT35::data_ref
AVBufferRef * data_ref
Definition: cbs_apv.h:129
APV_PBU_DEPTH_FRAME
@ APV_PBU_DEPTH_FRAME
Definition: apv.h:30
cbs_apv_assemble_fragment
static int cbs_apv_assemble_fragment(CodedBitstreamContext *ctx, CodedBitstreamFragment *frag)
Definition: cbs_apv.c:363
av_log
#define av_log(a,...)
Definition: tableprint_vlc.h:27
APV_PBU_ALPHA_FRAME
@ APV_PBU_ALPHA_FRAME
Definition: apv.h:31
AVERROR_INVALIDDATA
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition: error.h:61
CodedBitstreamFragment::data_ref
AVBufferRef * data_ref
A reference to the buffer containing data.
Definition: cbs.h:152
APVDerivedTileInfo::num_tiles
uint16_t num_tiles
Definition: cbs_apv.h:193
APVRawFiller
Definition: cbs_apv.h:39
APV_METADATA_ITU_T_T35
@ APV_METADATA_ITU_T_T35
Definition: apv.h:82
cbs_apv.h
APVRawMetadataPayload::undefined
APVRawMetadataUndefined undefined
Definition: cbs_apv.h:174
CodedBitstreamFragment::nb_units
int nb_units
Number of units in this fragment.
Definition: cbs.h:160