FFmpeg
Loading...
Searching...
No Matches
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
22#include "libavutil/avassert.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
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);
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");
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
130
132
137
139{
140 APVDecodeContext *apv = avctx->priv_data;
141 int err;
142
144
146
147 err = ff_cbs_init(&apv->cbc, AV_CODEC_ID_APV, avctx);
148 if (err < 0)
149 return err;
150
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{
215 APVRawFrame *input = data;
216 APVDecodeContext *apv = avctx->priv_data;
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
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
322fail:
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
356static int apv_decode(AVCodecContext *avctx, AVFrame *output,
357 APVRawFrame *input)
358{
359 APVDecodeContext *apv = avctx->priv_data;
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
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
385
386 if (avctx->hwaccel) {
388 if (err < 0)
389 return err;
390 }
391
393
394 if (avctx->hwaccel) {
395 const FFHWAccel *hwaccel = ffhwaccel(avctx->hwaccel);
396
397 err = hwaccel->start_frame(avctx, apv->pkt->buf,
398 apv->pkt->data, apv->pkt->size);
399 if (err < 0)
400 return err;
401
402 for (int j = 0; j < desc->nb_components; j++) {
403 for (int i = 0; i < tile_info->num_tiles; i++) {
404 APVRawTile *tile = &input->tile[i];
405 err = hwaccel->decode_slice(avctx, tile->tile_data[j],
406 tile->tile_header.tile_data_size[j]);
407 if (err < 0)
408 return err;
409 }
410 }
411
412 err = hwaccel->end_frame(avctx);
413 if (err < 0)
414 return err;
415
417 } else {
418 // Each component within a tile is independent of every other,
419 // so we can decode all in parallel.
420 job_count = tile_info->num_tiles * desc->nb_components;
421
423 input, NULL, job_count);
424
425 err = atomic_load_explicit(&apv->tile_errors, memory_order_relaxed);
426 if (err > 0) {
427 av_log(avctx, AV_LOG_ERROR,
428 "Decode errors in %d tile components.\n", err);
429 if (avctx->flags & AV_CODEC_FLAG_OUTPUT_CORRUPT) {
430 // Output the frame anyway.
431 output->flags |= AV_FRAME_FLAG_CORRUPT;
432 } else {
433 return AVERROR_INVALIDDATA;
434 }
435 }
436 }
437
438 return 0;
439}
440
442 const APVRawMetadata *md)
443{
444 int err;
445
446 for (int i = 0; i < md->metadata_count; i++) {
447 const APVRawMetadataPayload *pl = &md->payloads[i];
448
449 switch (pl->payload_type) {
451 {
452 const APVRawMetadataMDCV *mdcv = &pl->mdcv;
454
455 err = ff_decode_mastering_display_new(avctx, frame, &mdm);
456 if (err < 0)
457 return err;
458
459 if (mdm) {
460 for (int j = 0; j < 3; j++) {
461 mdm->display_primaries[j][0] =
462 av_make_q(mdcv->primary_chromaticity_x[j], 1 << 16);
463 mdm->display_primaries[j][1] =
464 av_make_q(mdcv->primary_chromaticity_y[j], 1 << 16);
465 }
466
467 mdm->white_point[0] =
469 mdm->white_point[1] =
471
472 mdm->max_luminance =
473 av_make_q(mdcv->max_mastering_luminance, 1 << 8);
474 mdm->min_luminance =
475 av_make_q(mdcv->min_mastering_luminance, 1 << 14);
476
477 mdm->has_primaries = 1;
478 mdm->has_luminance = 1;
479 }
480 }
481 break;
482 case APV_METADATA_CLL:
483 {
484 const APVRawMetadataCLL *cll = &pl->cll;
486
487 err = ff_decode_content_light_new(avctx, frame, &clm);
488 if (err < 0)
489 return err;
490
491 if (clm) {
492 clm->MaxCLL = cll->max_cll;
493 clm->MaxFALL = cll->max_fall;
494 }
495 }
496 break;
497 default:
498 // Ignore other types of metadata.
499 break;
500 }
501 }
502
503 return 0;
504}
505
507{
508 APVDecodeContext *apv = avctx->priv_data;
509 CodedBitstreamFragment *au = &apv->au;
510 int i, err;
511
512 for (i = apv->nb_unit; i < au->nb_units; i++) {
513 CodedBitstreamUnit *pbu = &au->units[i];
514
515 switch (pbu->type) {
517 err = apv_decode(avctx, frame, pbu->content);
518 i++;
519 goto end;
520 case APV_PBU_METADATA:
521 apv_decode_metadata(avctx, frame, pbu->content);
522 break;
527 if (!avctx->internal->is_copy &&
529 av_log(avctx, AV_LOG_WARNING,
530 "Stream contains additional non-primary frames "
531 "which will be ignored by the decoder.\n");
533 }
534 break;
536 case APV_PBU_FILLER:
537 // Not relevant to the decoder.
538 break;
539 default:
540 if (!avctx->internal->is_copy &&
542 av_log(avctx, AV_LOG_WARNING,
543 "Stream contains PBUs with unknown types "
544 "which will be ignored by the decoder.\n");
546 }
547 break;
548 }
549 }
550
551 err = AVERROR(EAGAIN);
552end:
554 apv->nb_unit = i;
555
556 if ((err < 0 && err != AVERROR(EAGAIN)) || apv->au.nb_units == i) {
557 av_packet_unref(apv->pkt);
558 ff_cbs_fragment_reset(&apv->au);
559 apv->nb_unit = 0;
560 }
561 if (!err && !frame->buf[0])
562 err = AVERROR(EAGAIN);
563
564 return err;
565}
566
568{
569 APVDecodeContext *apv = avctx->priv_data;
570 int err;
571
572 do {
573 if (!apv->au.nb_units) {
574 err = ff_decode_get_packet(avctx, apv->pkt);
575 if (err < 0)
576 return err;
577
578 err = ff_cbs_read_packet(apv->cbc, &apv->au, apv->pkt);
579 if (err < 0) {
580 ff_cbs_fragment_reset(&apv->au);
581 av_packet_unref(apv->pkt);
582 av_log(avctx, AV_LOG_ERROR, "Failed to read packet.\n");
583 return err;
584 }
585
586 apv->nb_unit = 0;
587 av_log(avctx, AV_LOG_DEBUG, "Total PBUs on this packet: %d.\n",
588 apv->au.nb_units);
589 }
590
591 err = apv_receive_frame_internal(avctx, frame);
592 } while (err == AVERROR(EAGAIN));
593
594 return err;
595}
596
597#if HAVE_THREADS
598static int update_thread_context(AVCodecContext *dst, const AVCodecContext *src)
599{
600 APVDecodeContext *asrc = src->priv_data;
601 APVDecodeContext *adst = dst->priv_data;
602
603 adst->pix_fmt = asrc->pix_fmt;
604
605 return 0;
606}
607#endif
608
610 .p.name = "apv",
611 CODEC_LONG_NAME("Advanced Professional Video"),
612 .p.type = AVMEDIA_TYPE_VIDEO,
613 .p.id = AV_CODEC_ID_APV,
614 .priv_data_size = sizeof(APVDecodeContext),
619 UPDATE_THREAD_CONTEXT(update_thread_context),
620 .p.capabilities = AV_CODEC_CAP_DR1 |
623 .caps_internal = FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM,
624 .hw_configs = (const AVCodecHWConfigInternal *const []) {
625#if CONFIG_APV_VULKAN_HWACCEL
626 HWACCEL_VULKAN(apv),
627#endif
628 NULL
629 },
630};
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
Definition dsp.h:87
static void bit_depth(AudioStatsContext *s, const uint64_t *const mask, uint8_t *depth)
Definition af_astats.c:246
const FFCodec ff_apv_decoder
Definition apv_decode.c:609
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
static AVOnce apv_entropy_once
Definition apv_decode.c:131
static av_cold void apv_decode_flush(AVCodecContext *avctx)
Definition apv_decode.c:166
static av_cold int apv_decode_init(AVCodecContext *avctx)
Definition apv_decode.c:138
static enum AVPixelFormat get_pixel_format(AVCodecContext *avctx, enum AVPixelFormat pix_fmt)
Definition apv_decode.c:50
static int apv_receive_frame_internal(AVCodecContext *avctx, AVFrame *frame)
Definition apv_decode.c:506
static av_cold void apv_entropy_build_decode_lut(void)
Definition apv_decode.c:133
static enum AVPixelFormat apv_format_table[5][4]
Definition apv_decode.c:40
static int apv_decode_tile_component(AVCodecContext *avctx, void *data, int job, int thread)
Definition apv_decode.c:212
static int apv_decode_metadata(AVCodecContext *avctx, AVFrame *frame, const APVRawMetadata *md)
Definition apv_decode.c:441
APVVLCLUT ff_apv_decode_lut
Definition apv_decode.c:48
static void apv_derive_tile_info(APVDerivedTileInfo *ti, const APVRawFrameHeader *fh)
Definition apv_decode.c:330
static int apv_decode(AVCodecContext *avctx, AVFrame *output, APVRawFrame *input)
Definition apv_decode.c:356
static av_cold int apv_decode_close(AVCodecContext *avctx)
Definition apv_decode.c:176
static int apv_receive_frame(AVCodecContext *avctx, AVFrame *frame)
Definition apv_decode.c:567
static const CodedBitstreamUnitType apv_decompose_unit_types[]
Definition apv_decode.c:126
static int apv_decode_check_format(AVCodecContext *avctx, const APVRawFrameHeader *header)
Definition apv_decode.c:64
int ff_apv_entropy_decode_block(int16_t *restrict coeff, GetBitContext *restrict gbc, APVEntropyState *restrict state)
Entropy decode a single 8x8 block to coefficients.
void ff_apv_entropy_build_decode_lut(APVVLCLUT *decode_lut)
Build the decoder VLC look-up tables.
Definition apv_entropy.c:62
static const uint8_t apv_level_scale[6]
static av_cold void close(AVCodecParserContext *s)
Definition apv_parser.c:197
simple assert() macros that are a bit more flexible than ISO C assert().
#define av_assert1(cond)
assert() equivalent, that does not lie in speed critical code.
Definition avassert.h:58
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Definition avassert.h:42
Libavcodec external API header.
static int FUNC tile_info(CodedBitstreamContext *ctx, RWContext *rw, APVRawTileInfo *current, const APVRawFrameHeader *fh)
static int FUNC tile(CodedBitstreamContext *ctx, RWContext *rw, APVRawTile *current, int tile_idx, uint32_t tile_size)
#define i(width, name, range_min, range_max)
Definition cbs_h264.c:63
#define UPDATE_THREAD_CONTEXT(func)
#define FF_CODEC_RECEIVE_FRAME_CB(func)
#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...
#define CODEC_LONG_NAME(str)
#define NULL
Definition coverity.c:32
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:2308
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:2263
int ff_decode_get_packet(AVCodecContext *avctx, AVPacket *pkt)
Called by decoders to get the next packet for decoding.
Definition decode.c:254
int ff_get_format(AVCodecContext *avctx, const enum AVPixelFormat *fmt)
Select the (possibly hardware accelerated) pixel format.
Definition decode.c:1229
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:2336
int ff_set_dimensions(AVCodecContext *s, int width, int height)
Definition utils.c:91
static enum AVPixelFormat pix_fmt
static AVFrame * frame
void(* flush)(AVBSFContext *ctx)
Definition dts2pts.c:610
int(* init)(AVBSFContext *ctx)
Definition dts2pts.c:608
#define atomic_fetch_add_explicit(object, operand, order)
Definition stdatomic.h:149
#define atomic_load_explicit(object, order)
Definition stdatomic.h:96
#define atomic_store_explicit(object, desired, order)
Definition stdatomic.h:90
#define atomic_init(obj, value)
Definition stdatomic.h:33
static const char * hwaccel
Definition ffplay.c:357
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
Definition get_bits.h:544
#define fail
Definition test.h:479
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() or get_encode_buffer() for allocating buffers and supports custom allocators.
Definition codec.h:49
#define AV_CODEC_CAP_SLICE_THREADS
Codec supports slice-based (or partition-based) multithreading.
Definition codec.h:102
#define AV_CODEC_FLAG_OUTPUT_CORRUPT
Output even those frames that might be corrupted.
Definition avcodec.h:221
#define AV_CODEC_CAP_FRAME_THREADS
Codec supports frame-level multithreading.
Definition codec.h:98
@ AV_CODEC_ID_APV
Definition codec_id.h:323
@ AVDISCARD_ALL
discard all
Definition defs.h:232
void av_packet_unref(AVPacket *pkt)
Wipe the packet.
Definition packet.c:434
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
Definition error.h:64
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition error.h:61
#define AVERROR(e)
Definition error.h:45
#define AV_FRAME_FLAG_CORRUPT
The frame data may be corrupted, e.g.
Definition frame.h:683
#define AV_LOG_TRACE
Extremely verbose debugging, useful for libav* development.
Definition log.h:236
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Definition log.h:231
#define AV_LOG_WARNING
Something somehow does not look correct.
Definition log.h:216
#define AV_LOG_VERBOSE
Detailed information.
Definition log.h:226
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition log.h:210
static AVRational av_make_q(int num, int den)
Create an AVRational.
Definition rational.h:71
@ AVMEDIA_TYPE_VIDEO
Definition avutil.h:200
static const FFHWAccel * ffhwaccel(const AVHWAccel *codec)
#define HWACCEL_VULKAN(codec)
Definition hwconfig.h:78
static const int level_scale[2][6]
Definition intra.c:336
@ APV_PBU_ALPHA_FRAME
Definition apv.h:31
@ APV_PBU_PRIMARY_FRAME
Definition apv.h:27
@ APV_PBU_PREVIEW_FRAME
Definition apv.h:29
@ APV_PBU_NON_PRIMARY_FRAME
Definition apv.h:28
@ APV_PBU_FILLER
Definition apv.h:34
@ APV_PBU_ACCESS_UNIT_INFORMATION
Definition apv.h:32
@ APV_PBU_DEPTH_FRAME
Definition apv.h:30
@ APV_PBU_METADATA
Definition apv.h:33
@ APV_TR_SIZE
Definition apv.h:42
@ APV_MB_HEIGHT
Definition apv.h:41
@ APV_MB_WIDTH
Definition apv.h:40
@ APV_METADATA_CLL
Definition apv.h:84
@ APV_METADATA_MDCV
Definition apv.h:83
av_cold void ff_apv_dsp_init(APVDSPContext *dsp)
Definition apv_dsp.c:120
uint32_t CodedBitstreamUnitType
The codec-specific type of a bitstream unit.
Definition cbs.h:66
common internal api header.
Multithreading API for decoders.
Macro definitions for various function/variable attributes.
#define av_cold
Definition attributes.h:117
#define AVOnce
Definition thread.h:202
static int ff_thread_once(char *control, void(*routine)(void))
Definition thread.h:205
#define AV_ONCE_INIT
Definition thread.h:203
static enum AVPixelFormat pix_fmts[]
Definition libkvazaar.c:296
const char * desc
Definition libsvtav1.c:83
#define FFALIGN(x, a)
Definition macros.h:78
#define LOCAL_ALIGNED_32(t, v,...)
const char data[16]
Definition mxf.c:149
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
Definition pixdesc.c:3460
#define AV_PIX_FMT_YUV444P12
Definition pixfmt.h:552
@ AVCHROMA_LOC_TOPLEFT
ITU-R 601, SMPTE 274M 296M S314M(DV 4:1:1), mpeg2 4:2:2.
Definition pixfmt.h:806
@ AVCOL_RANGE_MPEG
Narrow or limited range content.
Definition pixfmt.h:766
@ AVCOL_RANGE_JPEG
Full range content.
Definition pixfmt.h:783
#define AV_PIX_FMT_YUVA444P10
Definition pixfmt.h:598
#define AV_PIX_FMT_YUV422P12
Definition pixfmt.h:550
#define AV_PIX_FMT_YUV422P10
Definition pixfmt.h:546
#define AV_PIX_FMT_GRAY12
Definition pixfmt.h:526
AVPixelFormat
Pixel format.
Definition pixfmt.h:71
@ AV_PIX_FMT_NONE
Definition pixfmt.h:72
@ AV_PIX_FMT_VULKAN
Vulkan hardware images.
Definition pixfmt.h:379
#define AV_PIX_FMT_YUV422P14
Definition pixfmt.h:554
#define AV_PIX_FMT_GRAY10
Definition pixfmt.h:525
#define AV_PIX_FMT_GRAY14
Definition pixfmt.h:527
#define AV_PIX_FMT_YUV422P16
Definition pixfmt.h:557
#define AV_PIX_FMT_GRAY16
Definition pixfmt.h:528
#define AV_PIX_FMT_YUVA444P16
Definition pixfmt.h:603
#define AV_PIX_FMT_YUV444P14
Definition pixfmt.h:555
#define AV_PIX_FMT_YUVA444P12
Definition pixfmt.h:600
#define AV_PIX_FMT_YUV444P16
Definition pixfmt.h:558
#define AV_PIX_FMT_YUV444P10
Definition pixfmt.h:548
int ff_thread_get_buffer(AVCodecContext *avctx, AVFrame *f, int flags)
Wrapper around get_buffer() for frame-multithreaded codecs.
void ff_thread_finish_setup(AVCodecContext *avctx)
If the codec defines update_thread_context(), call this when they are ready for the next thread to st...
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
static const uint8_t header[24]
Definition sdr2.c:68
#define FF_ARRAY_ELEMS(a)
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
atomic_int tile_errors
Definition apv_decode.h:109
APVRawFrame * cur_raw_frame
Definition apv_decode.h:104
uint8_t warned_unknown_pbu_types
Definition apv_decode.h:115
CodedBitstreamFragment au
Definition apv_decode.h:102
uint8_t warned_additional_frames
Definition apv_decode.h:114
APVDSPContext dsp
Definition apv_decode.h:100
enum AVPixelFormat pix_fmt
Definition apv_decode.h:111
CodedBitstreamContext * cbc
Definition apv_decode.h:99
AVPacket * pkt
Definition apv_decode.h:106
APVDerivedTileInfo tile_info
Definition apv_decode.h:103
void * hwaccel_picture_private
Definition apv_decode.h:108
AVFrame * output_frame
Definition apv_decode.h:107
uint16_t col_starts[APV_MAX_TILE_COLS+1]
Definition apv_decode.h:94
uint16_t row_starts[APV_MAX_TILE_ROWS+1]
Definition apv_decode.h:95
APVRawTileInfo tile_info
Definition cbs_apv.h:80
APVRawFrameInfo frame_info
Definition cbs_apv.h:68
APVRawQuantizationMatrix quantization_matrix
Definition cbs_apv.h:78
uint32_t frame_width
Definition cbs_apv.h:48
uint8_t bit_depth_minus8
Definition cbs_apv.h:51
uint32_t frame_height
Definition cbs_apv.h:49
APVRawFrameHeader frame_header
Definition cbs_apv.h:103
APVRawTile tile[APV_MAX_TILE_COUNT]
Definition cbs_apv.h:105
uint16_t max_cll
Definition cbs_apv.h:143
uint16_t max_fall
Definition cbs_apv.h:144
uint16_t primary_chromaticity_x[3]
Definition cbs_apv.h:134
uint16_t white_point_chromaticity_y
Definition cbs_apv.h:137
uint16_t primary_chromaticity_y[3]
Definition cbs_apv.h:135
uint32_t min_mastering_luminance
Definition cbs_apv.h:139
uint16_t white_point_chromaticity_x
Definition cbs_apv.h:136
uint32_t max_mastering_luminance
Definition cbs_apv.h:138
APVRawMetadataMDCV mdcv
Definition cbs_apv.h:170
uint32_t payload_type
Definition cbs_apv.h:166
APVRawMetadataCLL cll
Definition cbs_apv.h:171
uint8_t q_matrix[APV_MAX_NUM_COMP][APV_TR_SIZE][APV_TR_SIZE]
Definition cbs_apv.h:57
uint32_t tile_width_in_mbs
Definition cbs_apv.h:61
uint32_t tile_height_in_mbs
Definition cbs_apv.h:62
main external API structure.
Definition avcodec.h:443
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
Definition avcodec.h:643
int width
picture width / height.
Definition avcodec.h:604
enum AVColorRange color_range
MPEG vs JPEG YUV range.
Definition avcodec.h:681
enum AVColorPrimaries color_primaries
Chromaticity coordinates of the source primaries.
Definition avcodec.h:657
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
const struct AVHWAccel * hwaccel
Hardware accelerator in use.
Definition avcodec.h:1423
int has_b_frames
Size of the frame reordering buffer in the decoder.
Definition avcodec.h:709
int level
Encoding level descriptor.
Definition avcodec.h:1646
int profile
profile
Definition avcodec.h:1636
enum AVColorSpace colorspace
YUV colorspace type.
Definition avcodec.h:671
int refs
number of reference frames
Definition avcodec.h:701
enum AVColorTransferCharacteristic color_trc
Color Transfer Characteristic.
Definition avcodec.h:664
int flags
AV_CODEC_FLAG_*.
Definition avcodec.h:500
enum AVChromaLocation chroma_sample_location
This defines the location of chroma samples.
Definition avcodec.h:688
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
int coded_width
Bitstream width / height, may be different from width/height e.g.
Definition avcodec.h:619
struct AVCodecInternal * internal
Private context used for internal data.
Definition avcodec.h:478
void * priv_data
Definition avcodec.h:470
enum AVDiscard skip_frame
Skip decoding for selected frames.
Definition avcodec.h:1667
int is_copy
When using frame-threaded decoding, this field is set for the first worker thread (e....
Definition internal.h:54
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
Content light level needed by to transmit HDR over HDMI (CTA-861.3).
unsigned MaxFALL
Max average light level per frame (cd/m^2).
unsigned MaxCLL
Max content light level (cd/m^2).
This structure describes decoded (raw) audio or video data.
Definition frame.h:472
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
Definition frame.h:493
int flags
Frame flags, a combination of AV_FRAME_FLAGS.
Definition frame.h:716
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:517
Mastering display metadata capable of representing the color volume of the display used to master the...
int has_primaries
Flag indicating whether the display primaries (and white point) are set.
AVRational max_luminance
Max luminance of mastering display (cd/m^2).
AVRational min_luminance
Min luminance of mastering display (cd/m^2).
AVRational display_primaries[3][2]
CIE 1931 xy chromaticity coords of color primaries (r, g, b order).
AVRational white_point[2]
CIE 1931 xy chromaticity coords of white point.
int has_luminance
Flag indicating whether the luminance (min_ and max_) have been set.
AVBufferRef * buf
A reference to the reference-counted buffer where the packet data is stored.
Definition packet.h:586
int size
Definition packet.h:604
uint8_t * data
Definition packet.h:603
Descriptor that unambiguously describes how the bits of a pixel are stored in the up to 4 data planes...
Definition pixdesc.h:69
uint8_t log2_chroma_w
Amount to shift the luma width right to find the chroma width.
Definition pixdesc.h:80
uint8_t log2_chroma_h
Amount to shift the luma height right to find the chroma height.
Definition pixdesc.h:89
uint8_t nb_components
The number of components each pixel has, (1-4)
Definition pixdesc.h:71
Rational number (pair of numerator and denominator).
Definition rational.h:58
const CodedBitstreamUnitType * decompose_unit_types
Array of unit types which should be decomposed when reading.
Definition cbs.h:255
int nb_decompose_unit_types
Length of the decompose_unit_types array.
Definition cbs.h:259
Coded bitstream fragment structure, combining one or more units.
Definition cbs.h:129
CodedBitstreamUnit * units
Pointer to an array of units of length nb_units_allocated.
Definition cbs.h:175
int nb_units
Number of units in this fragment.
Definition cbs.h:160
Coded bitstream unit structure.
Definition cbs.h:77
void * content
Pointer to the decomposed form of this unit.
Definition cbs.h:114
CodedBitstreamUnitType type
Codec-specific type of this unit.
Definition cbs.h:81
#define avpriv_request_sample(...)
#define av_log(a,...)
#define src
Definition vp8dsp.c:248
#define md
static const double coeff[2][5]