FFmpeg
apv_decode.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 <stdatomic.h>
20 
21 #include "libavutil/attributes.h"
22 #include "libavutil/avassert.h"
24 #include "libavutil/mem_internal.h"
25 #include "libavutil/pixdesc.h"
26 #include "libavutil/thread.h"
27 
28 #include "apv.h"
29 #include "apv_decode.h"
30 #include "avcodec.h"
31 #include "cbs_apv.h"
32 #include "codec_internal.h"
33 #include "decode.h"
34 #include "internal.h"
35 #include "thread.h"
36 #include "hwconfig.h"
37 #include "hwaccel_internal.h"
38 #include "config_components.h"
39 
40 static const enum AVPixelFormat apv_format_table[5][4] = {
42  { AV_PIX_FMT_NONE, AV_PIX_FMT_NONE, AV_PIX_FMT_NONE, AV_PIX_FMT_NONE }, // 4:2:0 is not valid.
46 };
47 
49 
52 {
53  enum AVPixelFormat pix_fmts[] = {
54 #if CONFIG_APV_VULKAN_HWACCEL
56 #endif
57  pix_fmt,
59  };
60 
61  return ff_get_format(avctx, pix_fmts);
62 }
63 
66 {
67  int err, bit_depth;
69  int coded_width = FFALIGN(header->frame_info.frame_width, 16);
70  int coded_height = FFALIGN(header->frame_info.frame_height, 16);
71  APVDecodeContext *apv = avctx->priv_data;
72 
73  avctx->profile = header->frame_info.profile_idc;
74  avctx->level = header->frame_info.level_idc;
75 
76  bit_depth = header->frame_info.bit_depth_minus8 + 8;
77  av_assert1(bit_depth >= 10 && bit_depth <= 16); // checked by CBS
78  if (bit_depth % 2) {
79  avpriv_request_sample(avctx, "Bit depth %d", bit_depth);
80  return AVERROR_PATCHWELCOME;
81  }
82 
83  pix_fmt = apv_format_table[header->frame_info.chroma_format_idc][(bit_depth - 10) >> 1];
84  if (pix_fmt == AV_PIX_FMT_NONE) {
85  avpriv_request_sample(avctx, "YUVA444P14");
86  return AVERROR_PATCHWELCOME;
87  }
88 
89  if (avctx->coded_width != coded_width ||
90  avctx->coded_height != coded_height) {
91  err = ff_set_dimensions(avctx, coded_width, coded_height);
92  if (err < 0) {
93  // Unsupported frame size.
94  return err;
95  }
96  }
97 
98  avctx->width = header->frame_info.frame_width;
99  avctx->height = header->frame_info.frame_height;
100 
101  if (pix_fmt != apv->pix_fmt) {
102  apv->pix_fmt = pix_fmt;
103 
104  err = get_pixel_format(avctx, pix_fmt);
105  if (err < 0)
106  return err;
107 
108  avctx->pix_fmt = err;
109  }
110 
111  avctx->sample_aspect_ratio = (AVRational){ 1, 1 };
112 
113  avctx->color_primaries = header->color_primaries;
114  avctx->color_trc = header->transfer_characteristics;
115  avctx->colorspace = header->matrix_coefficients;
116  avctx->color_range = header->full_range_flag ? AVCOL_RANGE_JPEG
119 
120  avctx->refs = 0;
121  avctx->has_b_frames = 0;
122 
123  return 0;
124 }
125 
129 };
130 
132 
134 {
136 }
137 
139 {
140  APVDecodeContext *apv = avctx->priv_data;
141  int err;
142 
143  apv->pix_fmt = AV_PIX_FMT_NONE;
144 
146 
147  err = ff_cbs_init(&apv->cbc, AV_CODEC_ID_APV, avctx);
148  if (err < 0)
149  return err;
150 
151  apv->cbc->decompose_unit_types =
155 
156  // Extradata could be set here, but is ignored by the decoder.
157 
158  apv->pkt = avctx->internal->in_pkt;
159  ff_apv_dsp_init(&apv->dsp);
160 
161  atomic_init(&apv->tile_errors, 0);
162 
163  return 0;
164 }
165 
167 {
168  APVDecodeContext *apv = avctx->priv_data;
169 
170  apv->nb_unit = 0;
171  av_packet_unref(apv->pkt);
172  ff_cbs_fragment_reset(&apv->au);
173  ff_cbs_flush(apv->cbc);
174 }
175 
177 {
178  APVDecodeContext *apv = avctx->priv_data;
179 
180  ff_cbs_fragment_free(&apv->au);
181  ff_cbs_close(&apv->cbc);
182 
183  return 0;
184 }
185 
187  void *output,
188  ptrdiff_t pitch,
189  GetBitContext *gbc,
190  APVEntropyState *entropy_state,
191  int bit_depth,
192  int qp_shift,
193  const uint16_t *qmatrix)
194 {
195  APVDecodeContext *apv = avctx->priv_data;
196  int err;
197 
198  LOCAL_ALIGNED_32(int16_t, coeff, [64]);
199  memset(coeff, 0, 64 * sizeof(int16_t));
200 
201  err = ff_apv_entropy_decode_block(coeff, gbc, entropy_state);
202  if (err < 0)
203  return err;
204 
205  apv->dsp.decode_transquant(output, pitch,
206  coeff, qmatrix,
207  bit_depth, qp_shift);
208 
209  return 0;
210 }
211 
213  int job, int thread)
214 {
216  APVDecodeContext *apv = avctx->priv_data;
217  const APVDerivedTileInfo *tile_info = &apv->tile_info;
218  const AVPixFmtDescriptor *pix_fmt_desc =
220  int nb_components = pix_fmt_desc->nb_components;
221 
222  int tile_index = job / nb_components;
223  int comp_index = job % nb_components;
224 
225  int sub_w_shift = comp_index == 0 ? 0 : pix_fmt_desc->log2_chroma_w;
226  int sub_h_shift = comp_index == 0 ? 0 : pix_fmt_desc->log2_chroma_h;
227 
228  APVRawTile *tile = &input->tile[tile_index];
229 
230  int tile_y = tile_index / tile_info->tile_cols;
231  int tile_x = tile_index % tile_info->tile_cols;
232 
233  int tile_start_x = tile_info->col_starts[tile_x];
234  int tile_start_y = tile_info->row_starts[tile_y];
235 
236  int tile_width = tile_info->col_starts[tile_x + 1] - tile_start_x;
237  int tile_height = tile_info->row_starts[tile_y + 1] - tile_start_y;
238 
239  int tile_mb_width = tile_width / APV_MB_WIDTH;
240  int tile_mb_height = tile_height / APV_MB_HEIGHT;
241 
242  int blk_mb_width = 2 >> sub_w_shift;
243  int blk_mb_height = 2 >> sub_h_shift;
244 
245  int bit_depth;
246  int qp_shift;
247  LOCAL_ALIGNED_32(uint16_t, qmatrix_scaled, [64]);
248 
249  GetBitContext gbc;
250 
251  APVEntropyState entropy_state = {
252  .log_ctx = avctx,
253  .decode_lut = &ff_apv_decode_lut,
254  .prev_dc = 0,
255  .prev_k_dc = 5,
256  .prev_k_level = 0,
257  };
258 
259  int err;
260 
261  err = init_get_bits8(&gbc, tile->tile_data[comp_index],
262  tile->tile_header.tile_data_size[comp_index]);
263  if (err < 0)
264  goto fail;
265 
266  // Combine the bitstream quantisation matrix with the qp scaling
267  // in advance. (Including qp_shift as well would overflow 16 bits.)
268  // Fix the row ordering at the same time.
269  {
270  static const uint8_t apv_level_scale[6] = { 40, 45, 51, 57, 64, 71 };
271  int qp = tile->tile_header.tile_qp[comp_index];
272  int level_scale = apv_level_scale[qp % 6];
273 
274  bit_depth = input->frame_header.frame_info.bit_depth_minus8 + 8;
275  qp_shift = qp / 6;
276 
277  for (int y = 0; y < 8; y++) {
278  for (int x = 0; x < 8; x++)
279  qmatrix_scaled[y * 8 + x] = level_scale *
280  input->frame_header.quantization_matrix.q_matrix[comp_index][x][y];
281  }
282  }
283 
284  for (int mb_y = 0; mb_y < tile_mb_height; mb_y++) {
285  for (int mb_x = 0; mb_x < tile_mb_width; mb_x++) {
286  for (int blk_y = 0; blk_y < blk_mb_height; blk_y++) {
287  for (int blk_x = 0; blk_x < blk_mb_width; blk_x++) {
288  int frame_y = (tile_start_y +
289  APV_MB_HEIGHT * mb_y +
290  APV_TR_SIZE * blk_y) >> sub_h_shift;
291  int frame_x = (tile_start_x +
292  APV_MB_WIDTH * mb_x +
293  APV_TR_SIZE * blk_x) >> sub_w_shift;
294 
295  ptrdiff_t frame_pitch = apv->output_frame->linesize[comp_index];
296  uint8_t *block_start = apv->output_frame->data[comp_index] +
297  frame_y * frame_pitch + 2 * frame_x;
298 
299  err = apv_decode_block(avctx,
300  block_start, frame_pitch,
301  &gbc, &entropy_state,
302  bit_depth,
303  qp_shift,
304  qmatrix_scaled);
305  if (err < 0) {
306  // Error in block decode means entropy desync,
307  // so this is not recoverable.
308  goto fail;
309  }
310  }
311  }
312  }
313  }
314 
315  av_log(avctx, AV_LOG_TRACE,
316  "Decoded tile %d component %d: %dx%d MBs starting at (%d,%d)\n",
317  tile_index, comp_index, tile_mb_width, tile_mb_height,
318  tile_start_x, tile_start_y);
319 
320  return 0;
321 
322 fail:
323  av_log(avctx, AV_LOG_VERBOSE,
324  "Decode error in tile %d component %d.\n",
325  tile_index, comp_index);
326  atomic_fetch_add_explicit(&apv->tile_errors, 1, memory_order_relaxed);
327  return err;
328 }
329 
331  const APVRawFrameHeader *fh)
332 {
333  int frame_width_in_mbs = (fh->frame_info.frame_width + (APV_MB_WIDTH - 1)) >> 4;
334  int frame_height_in_mbs = (fh->frame_info.frame_height + (APV_MB_HEIGHT - 1)) >> 4;
335  int start_mb, i;
336 
337  start_mb = 0;
338  for (i = 0; start_mb < frame_width_in_mbs; i++) {
339  ti->col_starts[i] = start_mb * APV_MB_WIDTH;
340  start_mb += fh->tile_info.tile_width_in_mbs;
341  }
342  ti->col_starts[i] = frame_width_in_mbs * APV_MB_WIDTH;
343  ti->tile_cols = i;
344 
345  start_mb = 0;
346  for (i = 0; start_mb < frame_height_in_mbs; i++) {
347  ti->row_starts[i] = start_mb * APV_MB_HEIGHT;
348  start_mb += fh->tile_info.tile_height_in_mbs;
349  }
350  ti->row_starts[i] = frame_height_in_mbs * APV_MB_HEIGHT;
351  ti->tile_rows = i;
352 
353  ti->num_tiles = ti->tile_cols * ti->tile_rows;
354 }
355 
358 {
359  APVDecodeContext *apv = avctx->priv_data;
360  const AVPixFmtDescriptor *desc = NULL;
362  int err, job_count;
363 
364  err = apv_decode_check_format(avctx, &input->frame_header);
365  if (err < 0) {
366  av_log(avctx, AV_LOG_ERROR, "Unsupported format parameters.\n");
367  return err;
368  }
369 
370  if (avctx->skip_frame == AVDISCARD_ALL)
371  return 0;
372 
374  av_assert0(desc);
375 
376  err = ff_thread_get_buffer(avctx, output, 0);
377  if (err < 0)
378  return err;
379 
380  apv->cur_raw_frame = input;
381  apv->output_frame = output;
382  atomic_store_explicit(&apv->tile_errors, 0, memory_order_relaxed);
383 
384  apv_derive_tile_info(tile_info, &input->frame_header);
385 
386  if (avctx->hwaccel) {
387  const FFHWAccel *hwaccel = ffhwaccel(avctx->hwaccel);
388 
390  if (err < 0)
391  return err;
392 
393  err = hwaccel->start_frame(avctx, apv->pkt->buf,
394  apv->pkt->data, apv->pkt->size);
395  if (err < 0)
396  return err;
397 
398  for (int j = 0; j < desc->nb_components; j++) {
399  for (int i = 0; i < tile_info->num_tiles; i++) {
400  APVRawTile *tile = &input->tile[i];
401  err = hwaccel->decode_slice(avctx, tile->tile_data[j],
402  tile->tile_header.tile_data_size[j]);
403  if (err < 0)
404  return err;
405  }
406  }
407 
408  err = hwaccel->end_frame(avctx);
409  if (err < 0)
410  return err;
411 
413  } else {
414  // Each component within a tile is independent of every other,
415  // so we can decode all in parallel.
416  job_count = tile_info->num_tiles * desc->nb_components;
417 
418  avctx->execute2(avctx, apv_decode_tile_component,
419  input, NULL, job_count);
420 
421  err = atomic_load_explicit(&apv->tile_errors, memory_order_relaxed);
422  if (err > 0) {
423  av_log(avctx, AV_LOG_ERROR,
424  "Decode errors in %d tile components.\n", err);
425  if (avctx->flags & AV_CODEC_FLAG_OUTPUT_CORRUPT) {
426  // Output the frame anyway.
427  output->flags |= AV_FRAME_FLAG_CORRUPT;
428  } else {
429  return AVERROR_INVALIDDATA;
430  }
431  }
432  }
433 
434  return 0;
435 }
436 
438  const APVRawMetadata *md)
439 {
440  int err;
441 
442  for (int i = 0; i < md->metadata_count; i++) {
443  const APVRawMetadataPayload *pl = &md->payloads[i];
444 
445  switch (pl->payload_type) {
446  case APV_METADATA_MDCV:
447  {
448  const APVRawMetadataMDCV *mdcv = &pl->mdcv;
450 
451  err = ff_decode_mastering_display_new(avctx, frame, &mdm);
452  if (err < 0)
453  return err;
454 
455  if (mdm) {
456  for (int j = 0; j < 3; j++) {
457  mdm->display_primaries[j][0] =
458  av_make_q(mdcv->primary_chromaticity_x[j], 1 << 16);
459  mdm->display_primaries[j][1] =
460  av_make_q(mdcv->primary_chromaticity_y[j], 1 << 16);
461  }
462 
463  mdm->white_point[0] =
464  av_make_q(mdcv->white_point_chromaticity_x, 1 << 16);
465  mdm->white_point[1] =
466  av_make_q(mdcv->white_point_chromaticity_y, 1 << 16);
467 
468  mdm->max_luminance =
469  av_make_q(mdcv->max_mastering_luminance, 1 << 8);
470  mdm->min_luminance =
471  av_make_q(mdcv->min_mastering_luminance, 1 << 14);
472 
473  mdm->has_primaries = 1;
474  mdm->has_luminance = 1;
475  }
476  }
477  break;
478  case APV_METADATA_CLL:
479  {
480  const APVRawMetadataCLL *cll = &pl->cll;
482 
483  err = ff_decode_content_light_new(avctx, frame, &clm);
484  if (err < 0)
485  return err;
486 
487  if (clm) {
488  clm->MaxCLL = cll->max_cll;
489  clm->MaxFALL = cll->max_fall;
490  }
491  }
492  break;
493  default:
494  // Ignore other types of metadata.
495  break;
496  }
497  }
498 
499  return 0;
500 }
501 
503 {
504  APVDecodeContext *apv = avctx->priv_data;
505  CodedBitstreamFragment *au = &apv->au;
506  int i, err;
507 
508  for (i = apv->nb_unit; i < au->nb_units; i++) {
509  CodedBitstreamUnit *pbu = &au->units[i];
510 
511  switch (pbu->type) {
513  err = apv_decode(avctx, frame, pbu->content);
514  i++;
515  goto end;
516  case APV_PBU_METADATA:
517  apv_decode_metadata(avctx, frame, pbu->content);
518  break;
521  case APV_PBU_DEPTH_FRAME:
522  case APV_PBU_ALPHA_FRAME:
523  if (!avctx->internal->is_copy &&
524  !apv->warned_additional_frames) {
525  av_log(avctx, AV_LOG_WARNING,
526  "Stream contains additional non-primary frames "
527  "which will be ignored by the decoder.\n");
528  apv->warned_additional_frames = 1;
529  }
530  break;
532  case APV_PBU_FILLER:
533  // Not relevant to the decoder.
534  break;
535  default:
536  if (!avctx->internal->is_copy &&
537  !apv->warned_unknown_pbu_types) {
538  av_log(avctx, AV_LOG_WARNING,
539  "Stream contains PBUs with unknown types "
540  "which will be ignored by the decoder.\n");
541  apv->warned_unknown_pbu_types = 1;
542  }
543  break;
544  }
545  }
546 
547  err = AVERROR(EAGAIN);
548 end:
549  av_assert0(i <= apv->au.nb_units);
550  apv->nb_unit = i;
551 
552  if ((err < 0 && err != AVERROR(EAGAIN)) || apv->au.nb_units == i) {
553  av_packet_unref(apv->pkt);
554  ff_cbs_fragment_reset(&apv->au);
555  apv->nb_unit = 0;
556  }
557  if (!err && !frame->buf[0])
558  err = AVERROR(EAGAIN);
559 
560  return err;
561 }
562 
564 {
565  APVDecodeContext *apv = avctx->priv_data;
566  int err;
567 
568  do {
569  if (!apv->au.nb_units) {
570  err = ff_decode_get_packet(avctx, apv->pkt);
571  if (err < 0)
572  return err;
573 
574  err = ff_cbs_read_packet(apv->cbc, &apv->au, apv->pkt);
575  if (err < 0) {
576  ff_cbs_fragment_reset(&apv->au);
577  av_packet_unref(apv->pkt);
578  av_log(avctx, AV_LOG_ERROR, "Failed to read packet.\n");
579  return err;
580  }
581 
582  apv->nb_unit = 0;
583  av_log(avctx, AV_LOG_DEBUG, "Total PBUs on this packet: %d.\n",
584  apv->au.nb_units);
585  }
586 
587  err = apv_receive_frame_internal(avctx, frame);
588  } while (err == AVERROR(EAGAIN));
589 
590  return err;
591 }
592 
593 #if HAVE_THREADS
595 {
596  APVDecodeContext *asrc = src->priv_data;
597  APVDecodeContext *adst = dst->priv_data;
598 
599  adst->pix_fmt = asrc->pix_fmt;
600 
601  return 0;
602 }
603 #endif
604 
606  .p.name = "apv",
607  CODEC_LONG_NAME("Advanced Professional Video"),
608  .p.type = AVMEDIA_TYPE_VIDEO,
609  .p.id = AV_CODEC_ID_APV,
610  .priv_data_size = sizeof(APVDecodeContext),
616  .p.capabilities = AV_CODEC_CAP_DR1 |
619  .caps_internal = FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM,
620  .hw_configs = (const AVCodecHWConfigInternal *const []) {
621 #if CONFIG_APV_VULKAN_HWACCEL
622  HWACCEL_VULKAN(apv),
623 #endif
624  NULL
625  },
626 };
hwconfig.h
AVMasteringDisplayMetadata::has_primaries
int has_primaries
Flag indicating whether the display primaries (and white point) are set.
Definition: mastering_display_metadata.h:62
av_packet_unref
void av_packet_unref(AVPacket *pkt)
Wipe the packet.
Definition: packet.c:434
AVCodecContext::hwaccel
const struct AVHWAccel * hwaccel
Hardware accelerator in use.
Definition: avcodec.h:1423
APVRawMetadataCLL
Definition: cbs_apv.h:142
ff_decode_get_packet
int ff_decode_get_packet(AVCodecContext *avctx, AVPacket *pkt)
Called by decoders to get the next packet for decoding.
Definition: decode.c:253
AV_LOG_WARNING
#define AV_LOG_WARNING
Something somehow does not look correct.
Definition: log.h:216
AVMasteringDisplayMetadata::max_luminance
AVRational max_luminance
Max luminance of mastering display (cd/m^2).
Definition: mastering_display_metadata.h:57
AVPixelFormat
AVPixelFormat
Pixel format.
Definition: pixfmt.h:71
APVDecodeContext::dsp
APVDSPContext dsp
Definition: apv_decode.h:100
APVDerivedTileInfo::tile_cols
uint8_t tile_cols
Definition: apv_decode.h:89
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
AVCodecContext::colorspace
enum AVColorSpace colorspace
YUV colorspace type.
Definition: avcodec.h:671
mem_internal.h
ff_get_format
int ff_get_format(AVCodecContext *avctx, const enum AVPixelFormat *fmt)
Select the (possibly hardware accelerated) pixel format.
Definition: decode.c:1220
APVDecodeContext::output_frame
AVFrame * output_frame
Definition: apv_decode.h:107
get_pixel_format
static enum AVPixelFormat get_pixel_format(AVCodecContext *avctx, enum AVPixelFormat pix_fmt)
Definition: apv_decode.c:50
thread.h
av_pix_fmt_desc_get
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
Definition: pixdesc.c:3456
apv_receive_frame_internal
static int apv_receive_frame_internal(AVCodecContext *avctx, AVFrame *frame)
Definition: apv_decode.c:502
AVMasteringDisplayMetadata::display_primaries
AVRational display_primaries[3][2]
CIE 1931 xy chromaticity coords of color primaries (r, g, b order).
Definition: mastering_display_metadata.h:42
AVMasteringDisplayMetadata::has_luminance
int has_luminance
Flag indicating whether the luminance (min_ and max_) have been set.
Definition: mastering_display_metadata.h:67
CodedBitstreamUnit::content
void * content
Pointer to the decomposed form of this unit.
Definition: cbs.h:114
output
filter_frame For filters that do not use the this method is called when a frame is pushed to the filter s input It can be called at any time except in a reentrant way If the input frame is enough to produce output
Definition: filter_design.txt:226
APVDecodeContext
Definition: apv_decode.h:98
md
#define md
Definition: vf_colormatrix.c:101
AVContentLightMetadata::MaxCLL
unsigned MaxCLL
Max content light level (cd/m^2).
Definition: mastering_display_metadata.h:111
apv_decode.h
AVFrame
This structure describes decoded (raw) audio or video data.
Definition: frame.h:459
pixdesc.h
AVCodecContext::color_trc
enum AVColorTransferCharacteristic color_trc
Color Transfer Characteristic.
Definition: avcodec.h:664
AVCOL_RANGE_JPEG
@ AVCOL_RANGE_JPEG
Full range content.
Definition: pixfmt.h:777
level_scale
const static int level_scale[2][6]
Definition: intra.c:336
internal.h
AVPacket::data
uint8_t * data
Definition: packet.h:603
apv_receive_frame
static int apv_receive_frame(AVCodecContext *avctx, AVFrame *frame)
Definition: apv_decode.c:563
APVRawFrameInfo::frame_width
uint32_t frame_width
Definition: cbs_apv.h:48
data
const char data[16]
Definition: mxf.c:149
FFCodec
Definition: codec_internal.h:127
apv_decode_block
static int apv_decode_block(AVCodecContext *avctx, void *output, ptrdiff_t pitch, GetBitContext *gbc, APVEntropyState *entropy_state, int bit_depth, int qp_shift, const uint16_t *qmatrix)
Definition: apv_decode.c:186
AV_LOG_VERBOSE
#define AV_LOG_VERBOSE
Detailed information.
Definition: log.h:226
CodedBitstreamUnit::type
CodedBitstreamUnitType type
Codec-specific type of this unit.
Definition: cbs.h:81
APVRawTileInfo::tile_width_in_mbs
uint32_t tile_width_in_mbs
Definition: cbs_apv.h:61
bit_depth
static void bit_depth(AudioStatsContext *s, const uint64_t *const mask, uint8_t *depth)
Definition: af_astats.c:246
ff_set_dimensions
int ff_set_dimensions(AVCodecContext *s, int width, int height)
Definition: utils.c:91
thread.h
AV_PIX_FMT_VULKAN
@ AV_PIX_FMT_VULKAN
Vulkan hardware images.
Definition: pixfmt.h:379
APVDecodeContext::tile_info
APVDerivedTileInfo tile_info
Definition: apv_decode.h:103
APVRawMetadataMDCV::max_mastering_luminance
uint32_t max_mastering_luminance
Definition: cbs_apv.h:138
CodedBitstreamUnit
Coded bitstream unit structure.
Definition: cbs.h:77
AVFrame::data
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
Definition: frame.h:480
APV_METADATA_CLL
@ APV_METADATA_CLL
Definition: apv.h:84
AVContentLightMetadata
Content light level needed by to transmit HDR over HDMI (CTA-861.3).
Definition: mastering_display_metadata.h:107
close
static av_cold void close(AVCodecParserContext *s)
Definition: apv_parser.c:197
AVCodecInternal::is_copy
int is_copy
When using frame-threaded decoding, this field is set for the first worker thread (e....
Definition: internal.h:54
AV_CODEC_FLAG_OUTPUT_CORRUPT
#define AV_CODEC_FLAG_OUTPUT_CORRUPT
Output even those frames that might be corrupted.
Definition: avcodec.h:221
APVDecodeContext::tile_errors
atomic_int tile_errors
Definition: apv_decode.h:109
FFCodec::p
AVCodec p
The public AVCodec.
Definition: codec_internal.h:131
FFHWAccel
Definition: hwaccel_internal.h:34
apv_entropy_once
static AVOnce apv_entropy_once
Definition: apv_decode.c:131
tile_info
static int FUNC() tile_info(CodedBitstreamContext *ctx, RWContext *rw, APVRawTileInfo *current, const APVRawFrameHeader *fh)
Definition: cbs_apv_syntax_template.c:111
AVCodecContext::skip_frame
enum AVDiscard skip_frame
Skip decoding for selected frames.
Definition: avcodec.h:1680
fail
#define fail()
Definition: checkasm.h:225
APV_PBU_ACCESS_UNIT_INFORMATION
@ APV_PBU_ACCESS_UNIT_INFORMATION
Definition: apv.h:32
AV_PIX_FMT_YUVA444P16
#define AV_PIX_FMT_YUVA444P16
Definition: pixfmt.h:597
GetBitContext
Definition: get_bits.h:109
apv_decode_init
static av_cold int apv_decode_init(AVCodecContext *avctx)
Definition: apv_decode.c:138
APVDecodeContext::nb_unit
int nb_unit
Definition: apv_decode.h:112
AVCodecContext::refs
int refs
number of reference frames
Definition: avcodec.h:701
apv_entropy_build_decode_lut
static av_cold void apv_entropy_build_decode_lut(void)
Definition: apv_decode.c:133
APVRawMetadataMDCV::primary_chromaticity_y
uint16_t primary_chromaticity_y[3]
Definition: cbs_apv.h:135
AVCodecContext::flags
int flags
AV_CODEC_FLAG_*.
Definition: avcodec.h:500
AVCodecContext::coded_height
int coded_height
Definition: avcodec.h:619
APVRawFrameHeader::frame_info
APVRawFrameInfo frame_info
Definition: cbs_apv.h:68
AV_PIX_FMT_GRAY16
#define AV_PIX_FMT_GRAY16
Definition: pixfmt.h:522
apv_decode_tile_component
static int apv_decode_tile_component(AVCodecContext *avctx, void *data, int job, int thread)
Definition: apv_decode.c:212
AV_PIX_FMT_YUV444P10
#define AV_PIX_FMT_YUV444P10
Definition: pixfmt.h:542
CodedBitstreamFragment::units
CodedBitstreamUnit * units
Pointer to an array of units of length nb_units_allocated.
Definition: cbs.h:175
APVRawMetadataPayload::cll
APVRawMetadataCLL cll
Definition: cbs_apv.h:171
avassert.h
AVCodecContext::color_primaries
enum AVColorPrimaries color_primaries
Chromaticity coordinates of the source primaries.
Definition: avcodec.h:657
ff_thread_once
static int ff_thread_once(char *control, void(*routine)(void))
Definition: thread.h:205
AV_LOG_TRACE
#define AV_LOG_TRACE
Extremely verbose debugging, useful for libav* development.
Definition: log.h:236
AV_LOG_ERROR
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:210
FF_ARRAY_ELEMS
#define FF_ARRAY_ELEMS(a)
Definition: sinewin_tablegen.c:29
av_cold
#define av_cold
Definition: attributes.h:119
AV_PIX_FMT_YUV422P16
#define AV_PIX_FMT_YUV422P16
Definition: pixfmt.h:551
init_get_bits8
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
Definition: get_bits.h:544
apv_decode
static int apv_decode(AVCodecContext *avctx, AVFrame *output, APVRawFrame *input)
Definition: apv_decode.c:356
AVCodecContext::has_b_frames
int has_b_frames
Size of the frame reordering buffer in the decoder.
Definition: avcodec.h:709
CodedBitstreamFragment
Coded bitstream fragment structure, combining one or more units.
Definition: cbs.h:129
APV_PBU_DEPTH_FRAME
@ APV_PBU_DEPTH_FRAME
Definition: apv.h:30
ff_hwaccel_frame_priv_alloc
int ff_hwaccel_frame_priv_alloc(AVCodecContext *avctx, void **hwaccel_picture_private)
Allocate a hwaccel frame private data if the provided avctx uses a hwaccel method that needs it.
Definition: decode.c:2327
AVMasteringDisplayMetadata::white_point
AVRational white_point[2]
CIE 1931 xy chromaticity coords of white point.
Definition: mastering_display_metadata.h:47
AV_PIX_FMT_YUV444P16
#define AV_PIX_FMT_YUV444P16
Definition: pixfmt.h:552
pix_fmt
static enum AVPixelFormat pix_fmt
Definition: demux_decode.c:41
ff_thread_get_buffer
int ff_thread_get_buffer(AVCodecContext *avctx, AVFrame *f, int flags)
Wrapper around get_buffer() for frame-multithreaded codecs.
Definition: pthread_frame.c:1044
av_assert0
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Definition: avassert.h:42
APVRawTileInfo::tile_height_in_mbs
uint32_t tile_height_in_mbs
Definition: cbs_apv.h:62
pix_fmts
static enum AVPixelFormat pix_fmts[]
Definition: libkvazaar.c:296
CodedBitstreamUnitType
uint32_t CodedBitstreamUnitType
The codec-specific type of a bitstream unit.
Definition: cbs.h:54
AV_PIX_FMT_YUVA444P12
#define AV_PIX_FMT_YUVA444P12
Definition: pixfmt.h:594
AV_LOG_DEBUG
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Definition: log.h:231
APVDecodeContext::au
CodedBitstreamFragment au
Definition: apv_decode.h:102
decode.h
APVRawMetadataMDCV::white_point_chromaticity_y
uint16_t white_point_chromaticity_y
Definition: cbs_apv.h:137
AV_PIX_FMT_GRAY14
#define AV_PIX_FMT_GRAY14
Definition: pixfmt.h:521
AVPixFmtDescriptor::log2_chroma_w
uint8_t log2_chroma_w
Amount to shift the luma width right to find the chroma width.
Definition: pixdesc.h:80
apv_decode_flush
static av_cold void apv_decode_flush(AVCodecContext *avctx)
Definition: apv_decode.c:166
apv_format_table
static enum AVPixelFormat apv_format_table[5][4]
Definition: apv_decode.c:40
CODEC_LONG_NAME
#define CODEC_LONG_NAME(str)
Definition: codec_internal.h:332
ff_decode_mastering_display_new
int ff_decode_mastering_display_new(const AVCodecContext *avctx, AVFrame *frame, AVMasteringDisplayMetadata **mdm)
Wrapper around av_mastering_display_metadata_create_side_data(), which rejects side data overridden b...
Definition: decode.c:2254
APVDecodeContext::cur_raw_frame
APVRawFrame * cur_raw_frame
Definition: apv_decode.h:104
APVRawMetadataMDCV::white_point_chromaticity_x
uint16_t white_point_chromaticity_x
Definition: cbs_apv.h:136
AV_PIX_FMT_GRAY10
#define AV_PIX_FMT_GRAY10
Definition: pixfmt.h:519
AV_CODEC_CAP_FRAME_THREADS
#define AV_CODEC_CAP_FRAME_THREADS
Codec supports frame-level multithreading.
Definition: codec.h:95
AVDISCARD_ALL
@ AVDISCARD_ALL
discard all
Definition: defs.h:232
APVRawMetadataCLL::max_cll
uint16_t max_cll
Definition: cbs_apv.h:143
AVPacket::buf
AVBufferRef * buf
A reference to the reference-counted buffer where the packet data is stored.
Definition: packet.h:586
AV_ONCE_INIT
#define AV_ONCE_INIT
Definition: thread.h:203
APVRawMetadata
Definition: cbs_apv.h:178
NULL
#define NULL
Definition: coverity.c:32
LOCAL_ALIGNED_32
#define LOCAL_ALIGNED_32(t, v,...)
Definition: mem_internal.h:132
AVERROR_PATCHWELCOME
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
Definition: error.h:64
AVCodecContext::color_range
enum AVColorRange color_range
MPEG vs JPEG YUV range.
Definition: avcodec.h:681
AVPixFmtDescriptor::nb_components
uint8_t nb_components
The number of components each pixel has, (1-4)
Definition: pixdesc.h:71
hwaccel_internal.h
AVRational
Rational number (pair of numerator and denominator).
Definition: rational.h:58
AVCHROMA_LOC_TOPLEFT
@ AVCHROMA_LOC_TOPLEFT
ITU-R 601, SMPTE 274M 296M S314M(DV 4:1:1), mpeg2 4:2:2.
Definition: pixfmt.h:800
AVCodecContext::internal
struct AVCodecInternal * internal
Private context used for internal data.
Definition: avcodec.h:478
APV_MB_HEIGHT
@ APV_MB_HEIGHT
Definition: apv.h:41
APV_MB_WIDTH
@ APV_MB_WIDTH
Definition: apv.h:40
apv.h
APVRawMetadataCLL::max_fall
uint16_t max_fall
Definition: cbs_apv.h:144
flush
void(* flush)(AVBSFContext *ctx)
Definition: dts2pts.c:581
UPDATE_THREAD_CONTEXT
#define UPDATE_THREAD_CONTEXT(func)
Definition: codec_internal.h:341
AV_PIX_FMT_YUV422P10
#define AV_PIX_FMT_YUV422P10
Definition: pixfmt.h:540
ff_apv_entropy_build_decode_lut
void ff_apv_entropy_build_decode_lut(APVVLCLUT *decode_lut)
Build the decoder VLC look-up tables.
Definition: apv_entropy.c:62
apv_derive_tile_info
static void apv_derive_tile_info(APVDerivedTileInfo *ti, const APVRawFrameHeader *fh)
Definition: apv_decode.c:330
ff_apv_decode_lut
APVVLCLUT ff_apv_decode_lut
Definition: apv_decode.c:48
AVCodecContext::level
int level
Encoding level descriptor.
Definition: avcodec.h:1646
atomic_load_explicit
#define atomic_load_explicit(object, order)
Definition: stdatomic.h:96
AVOnce
#define AVOnce
Definition: thread.h:202
APVRawFrame
Definition: cbs_apv.h:101
APVRawMetadataPayload
Definition: cbs_apv.h:165
APV_PBU_PRIMARY_FRAME
@ APV_PBU_PRIMARY_FRAME
Definition: apv.h:27
APVRawFrameInfo::frame_height
uint32_t frame_height
Definition: cbs_apv.h:49
init
int(* init)(AVBSFContext *ctx)
Definition: dts2pts.c:579
AV_CODEC_CAP_DR1
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() or get_encode_buffer() for allocating buffers and supports custom allocators.
Definition: codec.h:52
AVPacket::size
int size
Definition: packet.h:604
codec_internal.h
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
APVRawFrameHeader
Definition: cbs_apv.h:67
apv_decode_check_format
static int apv_decode_check_format(AVCodecContext *avctx, const APVRawFrameHeader *header)
Definition: apv_decode.c:64
AV_PIX_FMT_YUV422P12
#define AV_PIX_FMT_YUV422P12
Definition: pixfmt.h:544
atomic_fetch_add_explicit
#define atomic_fetch_add_explicit(object, operand, order)
Definition: stdatomic.h:149
av_make_q
static AVRational av_make_q(int num, int den)
Create an AVRational.
Definition: rational.h:71
APVEntropyState
Definition: apv_decode.h:75
ff_apv_dsp_init
av_cold void ff_apv_dsp_init(APVDSPContext *dsp)
Definition: apv_dsp.c:120
FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM
#define FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM
The decoder extracts and fills its parameters even if the frame is skipped due to the skip_frame sett...
Definition: codec_internal.h:55
AV_PIX_FMT_YUV444P12
#define AV_PIX_FMT_YUV444P12
Definition: pixfmt.h:546
APVEntropyState::log_ctx
void * log_ctx
Definition: apv_decode.h:76
APVRawMetadataPayload::payload_type
uint32_t payload_type
Definition: cbs_apv.h:166
AVCodecHWConfigInternal
Definition: hwconfig.h:25
header
static const uint8_t header[24]
Definition: sdr2.c:68
APVRawFrameHeader::tile_info
APVRawTileInfo tile_info
Definition: cbs_apv.h:80
AV_CODEC_CAP_SLICE_THREADS
#define AV_CODEC_CAP_SLICE_THREADS
Codec supports slice-based (or partition-based) multithreading.
Definition: codec.h:99
AV_PIX_FMT_YUVA444P10
#define AV_PIX_FMT_YUVA444P10
Definition: pixfmt.h:592
APVDecodeContext::warned_unknown_pbu_types
uint8_t warned_unknown_pbu_types
Definition: apv_decode.h:115
attributes.h
input
and forward the test the status of outputs and forward it to the corresponding return FFERROR_NOT_READY If the filters stores internally one or a few frame for some input
Definition: filter_design.txt:172
av_refstruct_unref
void av_refstruct_unref(void *objp)
Decrement the reference count of the underlying object and automatically free the object if there are...
Definition: refstruct.c:120
APVDerivedTileInfo::row_starts
uint16_t row_starts[APV_MAX_TILE_ROWS+1]
Definition: apv_decode.h:95
APV_PBU_NON_PRIMARY_FRAME
@ APV_PBU_NON_PRIMARY_FRAME
Definition: apv.h:28
AV_FRAME_FLAG_CORRUPT
#define AV_FRAME_FLAG_CORRUPT
The frame data may be corrupted, e.g.
Definition: frame.h:670
apv_decode_close
static av_cold int apv_decode_close(AVCodecContext *avctx)
Definition: apv_decode.c:176
AVCodecInternal::in_pkt
AVPacket * in_pkt
This packet is used to hold the packet given to decoders implementing the .decode API; it is unused b...
Definition: internal.h:83
av_assert1
#define av_assert1(cond)
assert() equivalent, that does not lie in speed critical code.
Definition: avassert.h:58
atomic_store_explicit
#define atomic_store_explicit(object, desired, order)
Definition: stdatomic.h:90
APVRawMetadataPayload::mdcv
APVRawMetadataMDCV mdcv
Definition: cbs_apv.h:170
APV_PBU_METADATA
@ APV_PBU_METADATA
Definition: apv.h:33
APV_PBU_FILLER
@ APV_PBU_FILLER
Definition: apv.h:34
AVCodec::name
const char * name
Name of the codec implementation.
Definition: codec.h:179
AVCodecContext::chroma_sample_location
enum AVChromaLocation chroma_sample_location
This defines the location of chroma samples.
Definition: avcodec.h:688
AVMasteringDisplayMetadata
Mastering display metadata capable of representing the color volume of the display used to master the...
Definition: mastering_display_metadata.h:38
AVCodecContext::height
int height
Definition: avcodec.h:604
AVCodecContext::pix_fmt
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
Definition: avcodec.h:643
AVCOL_RANGE_MPEG
@ AVCOL_RANGE_MPEG
Narrow or limited range content.
Definition: pixfmt.h:760
APVRawMetadataMDCV::primary_chromaticity_x
uint16_t primary_chromaticity_x[3]
Definition: cbs_apv.h:134
avcodec.h
APVDecodeContext::pix_fmt
enum AVPixelFormat pix_fmt
Definition: apv_decode.h:111
APVDerivedTileInfo
Definition: apv_decode.h:88
APV_PBU_ALPHA_FRAME
@ APV_PBU_ALPHA_FRAME
Definition: apv.h:31
AV_CODEC_ID_APV
@ AV_CODEC_ID_APV
Definition: codec_id.h:332
APVDecodeContext::pkt
AVPacket * pkt
Definition: apv_decode.h:106
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:265
ff_apv_decoder
const FFCodec ff_apv_decoder
Definition: apv_decode.c:605
tile
static int FUNC() tile(CodedBitstreamContext *ctx, RWContext *rw, APVRawTile *current, int tile_idx, uint32_t tile_size)
Definition: cbs_apv_syntax_template.c:224
APVVLCLUT
Definition: apv_decode.h:63
hwaccel
static const char * hwaccel
Definition: ffplay.c:356
ff_decode_content_light_new
int ff_decode_content_light_new(const AVCodecContext *avctx, AVFrame *frame, AVContentLightMetadata **clm)
Wrapper around av_content_light_metadata_create_side_data(), which rejects side data overridden by th...
Definition: decode.c:2299
APVDerivedTileInfo::tile_rows
uint8_t tile_rows
Definition: apv_decode.h:90
AV_PIX_FMT_YUV422P14
#define AV_PIX_FMT_YUV422P14
Definition: pixfmt.h:548
HWACCEL_VULKAN
#define HWACCEL_VULKAN(codec)
Definition: hwconfig.h:76
AVCodecContext
main external API structure.
Definition: avcodec.h:443
FF_CODEC_RECEIVE_FRAME_CB
#define FF_CODEC_RECEIVE_FRAME_CB(func)
Definition: codec_internal.h:355
AV_PIX_FMT_NONE
@ AV_PIX_FMT_NONE
Definition: pixfmt.h:72
AVCodecContext::profile
int profile
profile
Definition: avcodec.h:1636
ffhwaccel
static const FFHWAccel * ffhwaccel(const AVHWAccel *codec)
Definition: hwaccel_internal.h:168
update_thread_context
the pkt_dts and pkt_pts fields in AVFrame will work as usual Restrictions on codec whose streams don t reset across will not work because their bitstreams cannot be decoded in parallel *The contents of buffers must not be read before as well as code calling up to before the decode process starts Call have update_thread_context() run it in the next thread. Add AV_CODEC_CAP_FRAME_THREADS to the codec capabilities. There will be very little speed gain at this point but it should work. Use ff_thread_get_buffer()(or ff_progress_frame_get_buffer() in case you have inter-frame dependencies and use the ProgressFrame API) to allocate frame buffers. Call ff_progress_frame_report() after some part of the current picture has decoded. A good place to put this is where draw_horiz_band() is called - add this if it isn 't called anywhere
APVDerivedTileInfo::col_starts
uint16_t col_starts[APV_MAX_TILE_COLS+1]
Definition: apv_decode.h:94
APVRawMetadataMDCV
Definition: cbs_apv.h:133
APVDecodeContext::warned_additional_frames
uint8_t warned_additional_frames
Definition: apv_decode.h:114
AVMasteringDisplayMetadata::min_luminance
AVRational min_luminance
Min luminance of mastering display (cd/m^2).
Definition: mastering_display_metadata.h:52
APV_METADATA_MDCV
@ APV_METADATA_MDCV
Definition: apv.h:83
AVCodecContext::coded_width
int coded_width
Bitstream width / height, may be different from width/height e.g.
Definition: avcodec.h:619
desc
const char * desc
Definition: libsvtav1.c:83
AVMEDIA_TYPE_VIDEO
@ AVMEDIA_TYPE_VIDEO
Definition: avutil.h:200
apv_decompose_unit_types
static const CodedBitstreamUnitType apv_decompose_unit_types[]
Definition: apv_decode.c:126
mastering_display_metadata.h
avpriv_request_sample
#define avpriv_request_sample(...)
Definition: tableprint_vlc.h:37
APV_TR_SIZE
@ APV_TR_SIZE
Definition: apv.h:42
AVPixFmtDescriptor
Descriptor that unambiguously describes how the bits of a pixel are stored in the up to 4 data planes...
Definition: pixdesc.h:69
APVDecodeContext::cbc
CodedBitstreamContext * cbc
Definition: apv_decode.h:99
FFALIGN
#define FFALIGN(x, a)
Definition: macros.h:78
AVContentLightMetadata::MaxFALL
unsigned MaxFALL
Max average light level per frame (cd/m^2).
Definition: mastering_display_metadata.h:116
AVCodecContext::priv_data
void * priv_data
Definition: avcodec.h:470
CodedBitstreamContext::nb_decompose_unit_types
int nb_decompose_unit_types
Length of the decompose_unit_types array.
Definition: cbs.h:259
CodedBitstreamContext::decompose_unit_types
const CodedBitstreamUnitType * decompose_unit_types
Array of unit types which should be decomposed when reading.
Definition: cbs.h:255
AVCodecContext::width
int width
picture width / height.
Definition: avcodec.h:604
AVFrame::linesize
int linesize[AV_NUM_DATA_POINTERS]
For video, a positive or negative value, which is typically indicating the size in bytes of each pict...
Definition: frame.h:504
APVDecodeContext::hwaccel_picture_private
void * hwaccel_picture_private
Definition: apv_decode.h:108
coeff
static const double coeff[2][5]
Definition: vf_owdenoise.c:80
av_log
#define av_log(a,...)
Definition: tableprint_vlc.h:27
AVERROR_INVALIDDATA
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition: error.h:61
apv_decode_metadata
static int apv_decode_metadata(AVCodecContext *avctx, AVFrame *frame, const APVRawMetadata *md)
Definition: apv_decode.c:437
AV_PIX_FMT_YUV444P14
#define AV_PIX_FMT_YUV444P14
Definition: pixfmt.h:549
ff_apv_entropy_decode_block
int ff_apv_entropy_decode_block(int16_t *restrict coeff, GetBitContext *restrict gbc, APVEntropyState *restrict state)
Entropy decode a single 8x8 block to coefficients.
Definition: apv_entropy.c:208
APVRawMetadataMDCV::min_mastering_luminance
uint32_t min_mastering_luminance
Definition: cbs_apv.h:139
atomic_init
#define atomic_init(obj, value)
Definition: stdatomic.h:33
APV_PBU_PREVIEW_FRAME
@ APV_PBU_PREVIEW_FRAME
Definition: apv.h:29
APVDerivedTileInfo::num_tiles
uint16_t num_tiles
Definition: apv_decode.h:91
AV_PIX_FMT_GRAY12
#define AV_PIX_FMT_GRAY12
Definition: pixfmt.h:520
APVRawTile
Definition: cbs_apv.h:93
cbs_apv.h
AVCodecContext::execute2
int(* execute2)(struct AVCodecContext *c, int(*func)(struct AVCodecContext *c2, void *arg, int jobnr, int threadnr), void *arg2, int *ret, int count)
The codec may call this to execute several independent things.
Definition: avcodec.h:1628
AVCodecContext::sample_aspect_ratio
AVRational sample_aspect_ratio
sample aspect ratio (0 if unknown) That is the width of a pixel divided by the height of the pixel.
Definition: avcodec.h:628
AVPixFmtDescriptor::log2_chroma_h
uint8_t log2_chroma_h
Amount to shift the luma height right to find the chroma height.
Definition: pixdesc.h:89
src
#define src
Definition: vp8dsp.c:248
CodedBitstreamFragment::nb_units
int nb_units
Number of units in this fragment.
Definition: cbs.h:160
APVDSPContext::decode_transquant
void(* decode_transquant)(void *output, ptrdiff_t pitch, const int16_t *input, const int16_t *qmatrix, int bit_depth, int qp_shift)
Definition: apv_dsp.h:27