FFmpeg
av1dec.c
Go to the documentation of this file.
1 /*
2  * AV1 video decoder
3  *
4  * This file is part of FFmpeg.
5  *
6  * FFmpeg is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * FFmpeg is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with FFmpeg; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19  */
20 
21 #include "config_components.h"
22 
23 #include "libavutil/attributes.h"
27 #include "libavutil/mem.h"
28 #include "libavutil/pixdesc.h"
29 #include "libavutil/opt.h"
30 #include "avcodec.h"
31 #include "av1_parse.h"
32 #include "av1dec.h"
33 #include "atsc_a53.h"
34 #include "bytestream.h"
35 #include "codec_internal.h"
36 #include "decode.h"
37 #include "hwaccel_internal.h"
38 #include "internal.h"
39 #include "itut35.h"
40 #include "hwconfig.h"
41 #include "profiles.h"
42 #include "progressframe.h"
43 #include "libavutil/refstruct.h"
44 
45 /** same with Div_Lut defined in spec 7.11.3.7 */
46 static const uint16_t div_lut[AV1_DIV_LUT_NUM] = {
47  16384, 16320, 16257, 16194, 16132, 16070, 16009, 15948, 15888, 15828, 15768,
48  15709, 15650, 15592, 15534, 15477, 15420, 15364, 15308, 15252, 15197, 15142,
49  15087, 15033, 14980, 14926, 14873, 14821, 14769, 14717, 14665, 14614, 14564,
50  14513, 14463, 14413, 14364, 14315, 14266, 14218, 14170, 14122, 14075, 14028,
51  13981, 13935, 13888, 13843, 13797, 13752, 13707, 13662, 13618, 13574, 13530,
52  13487, 13443, 13400, 13358, 13315, 13273, 13231, 13190, 13148, 13107, 13066,
53  13026, 12985, 12945, 12906, 12866, 12827, 12788, 12749, 12710, 12672, 12633,
54  12596, 12558, 12520, 12483, 12446, 12409, 12373, 12336, 12300, 12264, 12228,
55  12193, 12157, 12122, 12087, 12053, 12018, 11984, 11950, 11916, 11882, 11848,
56  11815, 11782, 11749, 11716, 11683, 11651, 11619, 11586, 11555, 11523, 11491,
57  11460, 11429, 11398, 11367, 11336, 11305, 11275, 11245, 11215, 11185, 11155,
58  11125, 11096, 11067, 11038, 11009, 10980, 10951, 10923, 10894, 10866, 10838,
59  10810, 10782, 10755, 10727, 10700, 10673, 10645, 10618, 10592, 10565, 10538,
60  10512, 10486, 10460, 10434, 10408, 10382, 10356, 10331, 10305, 10280, 10255,
61  10230, 10205, 10180, 10156, 10131, 10107, 10082, 10058, 10034, 10010, 9986,
62  9963, 9939, 9916, 9892, 9869, 9846, 9823, 9800, 9777, 9754, 9732,
63  9709, 9687, 9664, 9642, 9620, 9598, 9576, 9554, 9533, 9511, 9489,
64  9468, 9447, 9425, 9404, 9383, 9362, 9341, 9321, 9300, 9279, 9259,
65  9239, 9218, 9198, 9178, 9158, 9138, 9118, 9098, 9079, 9059, 9039,
66  9020, 9001, 8981, 8962, 8943, 8924, 8905, 8886, 8867, 8849, 8830,
67  8812, 8793, 8775, 8756, 8738, 8720, 8702, 8684, 8666, 8648, 8630,
68  8613, 8595, 8577, 8560, 8542, 8525, 8508, 8490, 8473, 8456, 8439,
69  8422, 8405, 8389, 8372, 8355, 8339, 8322, 8306, 8289, 8273, 8257,
70  8240, 8224, 8208, 8192
71 };
72 
73 static uint32_t inverse_recenter(int r, uint32_t v)
74 {
75  if (v > 2 * r)
76  return v;
77  else if (v & 1)
78  return r - ((v + 1) >> 1);
79  else
80  return r + (v >> 1);
81 }
82 
83 static uint32_t decode_unsigned_subexp_with_ref(uint32_t sub_exp,
84  int mx, int r)
85 {
86  if ((r << 1) <= mx) {
87  return inverse_recenter(r, sub_exp);
88  } else {
89  return mx - 1 - inverse_recenter(mx - 1 - r, sub_exp);
90  }
91 }
92 
93 static int32_t decode_signed_subexp_with_ref(uint32_t sub_exp, int low,
94  int high, int r)
95 {
96  int32_t x = decode_unsigned_subexp_with_ref(sub_exp, high - low, r - low);
97  return x + low;
98 }
99 
100 static void read_global_param(AV1DecContext *s, int type, int ref, int idx)
101 {
102  int primary_frame;
103  uint32_t abs_bits, prec_bits, round, prec_diff, sub, mx;
104  int32_t r, prev_gm_param;
105 
106  primary_frame = s->raw_frame_header->primary_ref_frame;
107  abs_bits = AV1_GM_ABS_ALPHA_BITS;
108  prec_bits = AV1_GM_ALPHA_PREC_BITS;
109 
110  /* setup_past_independence() sets PrevGmParams to default values. We can
111  * simply point to the current's frame gm_params as they will be initialized
112  * with defaults at this point.
113  */
114  if (s->raw_frame_header->primary_ref_frame == AV1_PRIMARY_REF_NONE)
115  prev_gm_param = s->cur_frame.gm_params[ref][idx];
116  else {
117  int prev_frame = s->raw_frame_header->ref_frame_idx[primary_frame];
118  prev_gm_param = s->ref[prev_frame].gm_params[ref][idx];
119  }
120 
121  if (idx < 2) {
123  abs_bits = AV1_GM_ABS_TRANS_ONLY_BITS -
124  !s->raw_frame_header->allow_high_precision_mv;
125  prec_bits = AV1_GM_TRANS_ONLY_PREC_BITS -
126  !s->raw_frame_header->allow_high_precision_mv;
127  } else {
128  abs_bits = AV1_GM_ABS_TRANS_BITS;
129  prec_bits = AV1_GM_TRANS_PREC_BITS;
130  }
131  }
132  round = (idx % 3) == 2 ? (1 << AV1_WARPEDMODEL_PREC_BITS) : 0;
133  prec_diff = AV1_WARPEDMODEL_PREC_BITS - prec_bits;
134  sub = (idx % 3) == 2 ? (1 << prec_bits) : 0;
135  mx = 1 << abs_bits;
136  r = (prev_gm_param >> prec_diff) - sub;
137 
138  s->cur_frame.gm_params[ref][idx] =
139  (decode_signed_subexp_with_ref(s->raw_frame_header->gm_params[ref][idx],
140  -mx, mx + 1, r) << prec_diff) + round;
141 }
142 
143 static uint64_t round_two(uint64_t x, uint16_t n)
144 {
145  if (n == 0)
146  return x;
147  return ((x + ((uint64_t)1 << (n - 1))) >> n);
148 }
149 
150 static int64_t round_two_signed(int64_t x, uint16_t n)
151 {
152  return ((x<0) ? -((int64_t)round_two(-x, n)) : (int64_t)round_two(x, n));
153 }
154 
155 /**
156  * Resolve divisor process.
157  * see spec 7.11.3.7
158  */
159 static int16_t resolve_divisor(uint32_t d, uint16_t *shift)
160 {
161  int32_t e, f;
162 
163  *shift = av_log2(d);
164  e = d - (1 << (*shift));
165  if (*shift > AV1_DIV_LUT_BITS)
167  else
168  f = e << (AV1_DIV_LUT_BITS - (*shift));
169 
171 
172  return div_lut[f];
173 }
174 
175 /**
176  * check if global motion params is valid.
177  * see spec 7.11.3.6
178  */
179 static uint8_t get_shear_params_valid(AV1DecContext *s, int idx)
180 {
181  int16_t alpha, beta, gamma, delta, divf, divs;
182  int64_t v, w;
183  int32_t *param = &s->cur_frame.gm_params[idx][0];
184  if (param[2] <= 0)
185  return 0;
186 
187  alpha = av_clip_int16(param[2] - (1 << AV1_WARPEDMODEL_PREC_BITS));
188  beta = av_clip_int16(param[3]);
189  divf = resolve_divisor(abs(param[2]), &divs);
190  v = (int64_t)param[4] * (1 << AV1_WARPEDMODEL_PREC_BITS);
191  w = (int64_t)param[3] * param[4];
192  gamma = av_clip_int16((int)round_two_signed((v * divf), divs));
193  delta = av_clip_int16(param[5] - (int)round_two_signed((w * divf), divs) - (1 << AV1_WARPEDMODEL_PREC_BITS));
194 
199 
200  if ((4 * abs(alpha) + 7 * abs(beta)) >= (1 << AV1_WARPEDMODEL_PREC_BITS) ||
201  (4 * abs(gamma) + 4 * abs(delta)) >= (1 << AV1_WARPEDMODEL_PREC_BITS))
202  return 0;
203 
204  return 1;
205 }
206 
207 /**
208 * update gm type/params, since cbs already implemented part of this function,
209 * so we don't need to full implement spec.
210 */
212 {
213  const AV1RawFrameHeader *header = s->raw_frame_header;
214  int type, ref;
215 
217  s->cur_frame.gm_type[ref] = AV1_WARP_MODEL_IDENTITY;
218  for (int i = 0; i < 6; i++)
219  s->cur_frame.gm_params[ref][i] = (i % 3 == 2) ?
220  1 << AV1_WARPEDMODEL_PREC_BITS : 0;
221  }
222  if (header->frame_type == AV1_FRAME_KEY ||
223  header->frame_type == AV1_FRAME_INTRA_ONLY)
224  return;
225 
227  if (header->is_global[ref]) {
228  if (header->is_rot_zoom[ref]) {
230  } else {
231  type = header->is_translation[ref] ? AV1_WARP_MODEL_TRANSLATION
233  }
234  } else {
236  }
237  s->cur_frame.gm_type[ref] = type;
238 
239  if (type >= AV1_WARP_MODEL_ROTZOOM) {
240  read_global_param(s, type, ref, 2);
241  read_global_param(s, type, ref, 3);
242  if (type == AV1_WARP_MODEL_AFFINE) {
243  read_global_param(s, type, ref, 4);
244  read_global_param(s, type, ref, 5);
245  } else {
246  s->cur_frame.gm_params[ref][4] = -s->cur_frame.gm_params[ref][3];
247  s->cur_frame.gm_params[ref][5] = s->cur_frame.gm_params[ref][2];
248  }
249  }
251  read_global_param(s, type, ref, 0);
252  read_global_param(s, type, ref, 1);
253  }
254  if (type <= AV1_WARP_MODEL_AFFINE) {
255  s->cur_frame.gm_invalid[ref] = !get_shear_params_valid(s, ref);
256  }
257  }
258 }
259 
261  unsigned int a, unsigned int b)
262 {
263  unsigned int diff = a - b;
264  unsigned int m = 1 << seq->order_hint_bits_minus_1;
265  return (diff & (m - 1)) - (diff & m);
266 }
267 
269 {
270  const AV1RawFrameHeader *header = s->raw_frame_header;
271  const AV1RawSequenceHeader *seq = s->raw_seq;
272 
273  int forward_idx, backward_idx;
274  int forward_hint, backward_hint;
275  int second_forward_idx, second_forward_hint;
276  int ref_hint, dist, i;
277 
278  if (header->frame_type == AV1_FRAME_KEY ||
279  header->frame_type == AV1_FRAME_INTRA_ONLY ||
280  !header->reference_select || !seq->enable_order_hint)
281  return;
282 
283  forward_idx = -1;
284  backward_idx = -1;
285  for (i = 0; i < AV1_REFS_PER_FRAME; i++) {
286  if (!s->ref[header->ref_frame_idx[i]].raw_frame_header)
287  return;
288  ref_hint = s->ref[header->ref_frame_idx[i]].raw_frame_header->order_hint;
289  dist = get_relative_dist(seq, ref_hint, header->order_hint);
290  if (dist < 0) {
291  if (forward_idx < 0 ||
292  get_relative_dist(seq, ref_hint, forward_hint) > 0) {
293  forward_idx = i;
294  forward_hint = ref_hint;
295  }
296  } else if (dist > 0) {
297  if (backward_idx < 0 ||
298  get_relative_dist(seq, ref_hint, backward_hint) < 0) {
299  backward_idx = i;
300  backward_hint = ref_hint;
301  }
302  }
303  }
304 
305  if (forward_idx < 0) {
306  return;
307  } else if (backward_idx >= 0) {
308  s->cur_frame.skip_mode_frame_idx[0] =
309  AV1_REF_FRAME_LAST + FFMIN(forward_idx, backward_idx);
310  s->cur_frame.skip_mode_frame_idx[1] =
311  AV1_REF_FRAME_LAST + FFMAX(forward_idx, backward_idx);
312  return;
313  }
314 
315  second_forward_idx = -1;
316  for (i = 0; i < AV1_REFS_PER_FRAME; i++) {
317  ref_hint = s->ref[header->ref_frame_idx[i]].raw_frame_header->order_hint;
318  if (get_relative_dist(seq, ref_hint, forward_hint) < 0) {
319  if (second_forward_idx < 0 ||
320  get_relative_dist(seq, ref_hint, second_forward_hint) > 0) {
321  second_forward_idx = i;
322  second_forward_hint = ref_hint;
323  }
324  }
325  }
326 
327  if (second_forward_idx < 0)
328  return;
329 
330  s->cur_frame.skip_mode_frame_idx[0] =
331  AV1_REF_FRAME_LAST + FFMIN(forward_idx, second_forward_idx);
332  s->cur_frame.skip_mode_frame_idx[1] =
333  AV1_REF_FRAME_LAST + FFMAX(forward_idx, second_forward_idx);
334 }
335 
337 {
338  const AV1RawFrameHeader *header = s->raw_frame_header;
339  int i;
340 
341  if (header->delta_q_y_dc || header->delta_q_u_ac ||
342  header->delta_q_u_dc || header->delta_q_v_ac ||
343  header->delta_q_v_dc) {
344  s->cur_frame.coded_lossless = 0;
345  return;
346  }
347 
348  s->cur_frame.coded_lossless = 1;
349  for (i = 0; i < AV1_MAX_SEGMENTS; i++) {
350  int qindex;
351  if (header->feature_enabled[i][AV1_SEG_LVL_ALT_Q]) {
352  qindex = (header->base_q_idx +
353  header->feature_value[i][AV1_SEG_LVL_ALT_Q]);
354  } else {
355  qindex = header->base_q_idx;
356  }
357  qindex = av_clip_uintp2(qindex, 8);
358 
359  if (qindex) {
360  s->cur_frame.coded_lossless = 0;
361  return;
362  }
363  }
364 }
365 
367 {
368  const AV1RawFrameHeader *header = s->raw_frame_header;
369  const AV1RawSequenceHeader *seq = s->raw_seq;
370  AV1Frame *frame = &s->cur_frame;
371 
372  frame->order_hint = header->order_hint;
373 
374  for (int i = 0; i < AV1_REFS_PER_FRAME; i++) {
375  int ref_name = i + AV1_REF_FRAME_LAST;
376  int ref_slot = header->ref_frame_idx[i];
377  int ref_order_hint = s->ref[ref_slot].order_hint;
378 
379  frame->order_hints[ref_name] = ref_order_hint;
380  if (!seq->enable_order_hint) {
381  frame->ref_frame_sign_bias[ref_name] = 0;
382  } else {
383  frame->ref_frame_sign_bias[ref_name] =
384  get_relative_dist(seq, ref_order_hint,
385  frame->order_hint) > 0;
386  }
387  }
388 }
389 
391 {
392  const AV1RawFrameHeader *header = s->raw_frame_header;
393  const AV1RawFilmGrainParams *film_grain = &header->film_grain, *src;
394  AV1RawFilmGrainParams *dst = &s->cur_frame.film_grain;
395 
396  if (!film_grain->apply_grain)
397  return;
398 
399  if (film_grain->update_grain) {
400  memcpy(dst, film_grain, sizeof(*dst));
401  return;
402  }
403 
404  src = &s->ref[film_grain->film_grain_params_ref_idx].film_grain;
405 
406  memcpy(dst, src, sizeof(*dst));
407  dst->grain_seed = film_grain->grain_seed;
408 }
409 
411 
412 {
413  int cur_tile_num =
414  s->raw_frame_header->tile_cols * s->raw_frame_header->tile_rows;
415  if (s->tile_num < cur_tile_num) {
416  int ret = av_reallocp_array(&s->tile_group_info, cur_tile_num,
417  sizeof(TileGroupInfo));
418  if (ret < 0) {
419  s->tile_num = 0;
420  return ret;
421  }
422  }
423  s->tile_num = cur_tile_num;
424 
425  return 0;
426 }
427 
428 static int get_tiles_info(AVCodecContext *avctx, const AV1RawTileGroup *tile_group)
429 {
430  AV1DecContext *s = avctx->priv_data;
431  GetByteContext gb;
432  uint16_t tile_num, tile_row, tile_col;
433  uint32_t size = 0, size_bytes = 0;
434 
435  bytestream2_init(&gb, tile_group->tile_data.data,
436  tile_group->tile_data.data_size);
437  s->tg_start = tile_group->tg_start;
438  s->tg_end = tile_group->tg_end;
439 
440  for (tile_num = tile_group->tg_start; tile_num <= tile_group->tg_end; tile_num++) {
441  tile_row = tile_num / s->raw_frame_header->tile_cols;
442  tile_col = tile_num % s->raw_frame_header->tile_cols;
443 
444  if (tile_num == tile_group->tg_end) {
445  s->tile_group_info[tile_num].tile_size = bytestream2_get_bytes_left(&gb);
446  s->tile_group_info[tile_num].tile_offset = bytestream2_tell(&gb);
447  s->tile_group_info[tile_num].tile_row = tile_row;
448  s->tile_group_info[tile_num].tile_column = tile_col;
449  return 0;
450  }
451  size_bytes = s->raw_frame_header->tile_size_bytes_minus1 + 1;
452  if (bytestream2_get_bytes_left(&gb) < size_bytes)
453  return AVERROR_INVALIDDATA;
454  size = 0;
455  for (int i = 0; i < size_bytes; i++)
456  size |= bytestream2_get_byteu(&gb) << 8 * i;
457  if (bytestream2_get_bytes_left(&gb) <= size)
458  return AVERROR_INVALIDDATA;
459  size++;
460 
461  s->tile_group_info[tile_num].tile_size = size;
462  s->tile_group_info[tile_num].tile_offset = bytestream2_tell(&gb);
463  s->tile_group_info[tile_num].tile_row = tile_row;
464  s->tile_group_info[tile_num].tile_column = tile_col;
465 
466  bytestream2_skipu(&gb, size);
467  }
468 
469  return 0;
470 
471 }
472 
473 static enum AVPixelFormat get_sw_pixel_format(void *logctx,
474  const AV1RawSequenceHeader *seq)
475 {
476  int bit_depth;
478 
479  if (seq->seq_profile == 2 && seq->color_config.high_bitdepth)
480  bit_depth = seq->color_config.twelve_bit ? 12 : 10;
481  else if (seq->seq_profile <= 2)
482  bit_depth = seq->color_config.high_bitdepth ? 10 : 8;
483  else {
484  av_log(logctx, AV_LOG_ERROR,
485  "Unknown AV1 profile %d.\n", seq->seq_profile);
486  return AV_PIX_FMT_NONE;
487  }
488 
489  if (!seq->color_config.mono_chrome) {
490  // 4:4:4 x:0 y:0, 4:2:2 x:1 y:0, 4:2:0 x:1 y:1
491  if (seq->color_config.subsampling_x == 0 &&
492  seq->color_config.subsampling_y == 0) {
493  if (bit_depth == 8)
495  else if (bit_depth == 10)
497  else if (bit_depth == 12)
499  else
500  av_assert0(0);
501  } else if (seq->color_config.subsampling_x == 1 &&
502  seq->color_config.subsampling_y == 0) {
503  if (bit_depth == 8)
505  else if (bit_depth == 10)
507  else if (bit_depth == 12)
509  else
510  av_assert0(0);
511  } else if (seq->color_config.subsampling_x == 1 &&
512  seq->color_config.subsampling_y == 1) {
513  if (bit_depth == 8)
515  else if (bit_depth == 10)
517  else if (bit_depth == 12)
519  else
520  av_assert0(0);
521  }
522  } else {
523  if (bit_depth == 8)
525  else if (bit_depth == 10)
527  else if (bit_depth == 12)
529  else
530  av_assert0(0);
531  }
532 
533  return pix_fmt;
534 }
535 
537 {
538  AV1DecContext *s = avctx->priv_data;
539  const AV1RawSequenceHeader *seq = s->raw_seq;
540  int ret;
541  enum AVPixelFormat pix_fmt = get_sw_pixel_format(avctx, seq);
542 #define HWACCEL_MAX (CONFIG_AV1_DXVA2_HWACCEL + \
543  CONFIG_AV1_D3D11VA_HWACCEL * 2 + \
544  CONFIG_AV1_D3D12VA_HWACCEL + \
545  CONFIG_AV1_NVDEC_HWACCEL + \
546  CONFIG_AV1_NVDEC_CUARRAY_HWACCEL + \
547  CONFIG_AV1_VAAPI_HWACCEL + \
548  CONFIG_AV1_VDPAU_HWACCEL + \
549  CONFIG_AV1_VIDEOTOOLBOX_HWACCEL + \
550  CONFIG_AV1_VULKAN_HWACCEL)
551  enum AVPixelFormat pix_fmts[HWACCEL_MAX + 2], *fmtp = pix_fmts;
552 
553  if (pix_fmt == AV_PIX_FMT_NONE)
554  return -1;
555 
556  switch (pix_fmt) {
557  case AV_PIX_FMT_YUV420P:
558 #if CONFIG_AV1_DXVA2_HWACCEL
559  *fmtp++ = AV_PIX_FMT_DXVA2_VLD;
560 #endif
561 #if CONFIG_AV1_D3D11VA_HWACCEL
562  *fmtp++ = AV_PIX_FMT_D3D11VA_VLD;
563  *fmtp++ = AV_PIX_FMT_D3D11;
564 #endif
565 #if CONFIG_AV1_D3D12VA_HWACCEL
566  *fmtp++ = AV_PIX_FMT_D3D12;
567 #endif
568 #if CONFIG_AV1_NVDEC_HWACCEL
569  *fmtp++ = AV_PIX_FMT_CUDA;
570 #endif
571 #if CONFIG_AV1_NVDEC_CUARRAY_HWACCEL
572  *fmtp++ = AV_PIX_FMT_CUARRAY;
573 #endif
574 #if CONFIG_AV1_VAAPI_HWACCEL
575  *fmtp++ = AV_PIX_FMT_VAAPI;
576 #endif
577 #if CONFIG_AV1_VDPAU_HWACCEL
578  *fmtp++ = AV_PIX_FMT_VDPAU;
579 #endif
580 #if CONFIG_AV1_VIDEOTOOLBOX_HWACCEL
581  *fmtp++ = AV_PIX_FMT_VIDEOTOOLBOX;
582 #endif
583 #if CONFIG_AV1_VULKAN_HWACCEL
584  *fmtp++ = AV_PIX_FMT_VULKAN;
585 #endif
586  break;
588 #if CONFIG_AV1_DXVA2_HWACCEL
589  *fmtp++ = AV_PIX_FMT_DXVA2_VLD;
590 #endif
591 #if CONFIG_AV1_D3D11VA_HWACCEL
592  *fmtp++ = AV_PIX_FMT_D3D11VA_VLD;
593  *fmtp++ = AV_PIX_FMT_D3D11;
594 #endif
595 #if CONFIG_AV1_D3D12VA_HWACCEL
596  *fmtp++ = AV_PIX_FMT_D3D12;
597 #endif
598 #if CONFIG_AV1_NVDEC_HWACCEL
599  *fmtp++ = AV_PIX_FMT_CUDA;
600 #endif
601 #if CONFIG_AV1_NVDEC_CUARRAY_HWACCEL
602  *fmtp++ = AV_PIX_FMT_CUARRAY;
603 #endif
604 #if CONFIG_AV1_VAAPI_HWACCEL
605  *fmtp++ = AV_PIX_FMT_VAAPI;
606 #endif
607 #if CONFIG_AV1_VDPAU_HWACCEL
608  *fmtp++ = AV_PIX_FMT_VDPAU;
609 #endif
610 #if CONFIG_AV1_VIDEOTOOLBOX_HWACCEL
611  *fmtp++ = AV_PIX_FMT_VIDEOTOOLBOX;
612 #endif
613 #if CONFIG_AV1_VULKAN_HWACCEL
614  *fmtp++ = AV_PIX_FMT_VULKAN;
615 #endif
616  break;
618 #if CONFIG_AV1_D3D11VA_HWACCEL
619  *fmtp++ = AV_PIX_FMT_D3D11VA_VLD;
620  *fmtp++ = AV_PIX_FMT_D3D11;
621 #endif
622 #if CONFIG_AV1_D3D12VA_HWACCEL
623  *fmtp++ = AV_PIX_FMT_D3D12;
624 #endif
625 #if CONFIG_AV1_VULKAN_HWACCEL
626  *fmtp++ = AV_PIX_FMT_VULKAN;
627 #endif
628  break;
629  case AV_PIX_FMT_YUV422P:
630 #if CONFIG_AV1_VULKAN_HWACCEL
631  *fmtp++ = AV_PIX_FMT_VULKAN;
632 #endif
633  break;
635 #if CONFIG_AV1_VULKAN_HWACCEL
636  *fmtp++ = AV_PIX_FMT_VULKAN;
637 #endif
638  break;
640 #if CONFIG_AV1_VULKAN_HWACCEL
641  *fmtp++ = AV_PIX_FMT_VULKAN;
642 #endif
643  break;
644  case AV_PIX_FMT_YUV444P:
645 #if CONFIG_AV1_VULKAN_HWACCEL
646  *fmtp++ = AV_PIX_FMT_VULKAN;
647 #endif
648  break;
650 #if CONFIG_AV1_VULKAN_HWACCEL
651  *fmtp++ = AV_PIX_FMT_VULKAN;
652 #endif
653  break;
655 #if CONFIG_AV1_VULKAN_HWACCEL
656  *fmtp++ = AV_PIX_FMT_VULKAN;
657 #endif
658  break;
659  case AV_PIX_FMT_GRAY8:
660 #if CONFIG_AV1_NVDEC_HWACCEL
661  *fmtp++ = AV_PIX_FMT_CUDA;
662 #endif
663 #if CONFIG_AV1_NVDEC_CUARRAY_HWACCEL
664  *fmtp++ = AV_PIX_FMT_CUARRAY;
665 #endif
666  break;
667  case AV_PIX_FMT_GRAY10:
668 #if CONFIG_AV1_NVDEC_HWACCEL
669  *fmtp++ = AV_PIX_FMT_CUDA;
670 #endif
671 #if CONFIG_AV1_NVDEC_CUARRAY_HWACCEL
672  *fmtp++ = AV_PIX_FMT_CUARRAY;
673 #endif
674  break;
675  }
676 
677  *fmtp++ = pix_fmt;
678  *fmtp = AV_PIX_FMT_NONE;
679 
680  for (int i = 0; pix_fmts[i] != pix_fmt; i++)
681  if (pix_fmts[i] == avctx->pix_fmt) {
682  s->pix_fmt = pix_fmt;
683  return 1;
684  }
685 
686  ret = ff_get_format(avctx, pix_fmts);
687 
688  /**
689  * check if the HW accel is inited correctly. If not, return un-implemented.
690  * Since now the av1 decoder doesn't support native decode, if it will be
691  * implemented in the future, need remove this check.
692  */
693  if (!avctx->hwaccel) {
694  av_log(avctx, AV_LOG_ERROR, "Your platform doesn't support"
695  " hardware accelerated AV1 decoding.\n");
696  avctx->pix_fmt = AV_PIX_FMT_NONE;
697  return AVERROR(ENOSYS);
698  }
699 
700  s->pix_fmt = pix_fmt;
701  avctx->pix_fmt = ret;
702 
703  av_log(avctx, AV_LOG_DEBUG, "AV1 decode get format: %s.\n",
704  av_get_pix_fmt_name(avctx->pix_fmt));
705 
706  return 0;
707 }
708 
710 {
711  av_refstruct_unref(&f->hwaccel_picture_private);
713  av_refstruct_unref(&f->header_ref);
714  f->raw_frame_header = NULL;
715  f->spatial_id = f->temporal_id = 0;
716  memset(f->skip_mode_frame_idx, 0,
717  2 * sizeof(uint8_t));
718  memset(&f->film_grain, 0, sizeof(f->film_grain));
719  f->coded_lossless = 0;
720 }
721 
723 {
724  av_assert1(dst != src);
725 
726  av_refstruct_replace(&dst->header_ref, src->header_ref);
727 
728  dst->raw_frame_header = src->raw_frame_header;
729 
730  ff_progress_frame_replace(&dst->pf, &src->pf);
731 
732  av_refstruct_replace(&dst->hwaccel_picture_private,
733  src->hwaccel_picture_private);
734 
735  dst->spatial_id = src->spatial_id;
736  dst->temporal_id = src->temporal_id;
737  memcpy(dst->gm_invalid,
738  src->gm_invalid,
739  AV1_NUM_REF_FRAMES * sizeof(uint8_t));
740  memcpy(dst->gm_type,
741  src->gm_type,
742  AV1_NUM_REF_FRAMES * sizeof(uint8_t));
743  memcpy(dst->gm_params,
744  src->gm_params,
745  AV1_NUM_REF_FRAMES * 6 * sizeof(int32_t));
746  memcpy(dst->skip_mode_frame_idx,
747  src->skip_mode_frame_idx,
748  2 * sizeof(uint8_t));
749  memcpy(&dst->film_grain,
750  &src->film_grain,
751  sizeof(dst->film_grain));
752  dst->coded_lossless = src->coded_lossless;
753 
754  dst->order_hint = src->order_hint;
755  memcpy(dst->ref_frame_sign_bias, src->ref_frame_sign_bias,
756  sizeof(dst->ref_frame_sign_bias));
757  memcpy(dst->order_hints, src->order_hints,
758  sizeof(dst->order_hints));
759 
760  dst->force_integer_mv = src->force_integer_mv;
761 }
762 
764 {
765  AV1DecContext *s = avctx->priv_data;
766  AV1RawMetadataITUTT35 itut_t35;
767 
768  for (int i = 0; i < FF_ARRAY_ELEMS(s->ref); i++)
769  av1_frame_unref(&s->ref[i]);
770  av1_frame_unref(&s->cur_frame);
771  av_buffer_unref(&s->seq_data_ref);
772  av_refstruct_unref(&s->seq_ref);
773  av_refstruct_unref(&s->header_ref);
774  av_refstruct_unref(&s->cll_ref);
775  av_refstruct_unref(&s->mdcv_ref);
776  av_freep(&s->tile_group_info);
777 
778  while (s->itut_t35_fifo && av_fifo_read(s->itut_t35_fifo, &itut_t35, 1) >= 0)
779  av_buffer_unref(&itut_t35.payload_ref);
780  av_fifo_freep2(&s->itut_t35_fifo);
781 
782  ff_cbs_fragment_free(&s->current_obu);
783  ff_cbs_close(&s->cbc);
784  ff_dovi_ctx_unref(&s->dovi);
785 
786  return 0;
787 }
788 
790  const AV1RawSequenceHeader *seq)
791 {
792  int width = seq->max_frame_width_minus_1 + 1;
793  int height = seq->max_frame_height_minus_1 + 1;
794 
795  avctx->profile = seq->seq_profile;
796  avctx->level = seq->seq_level_idx[0];
797 
799  avctx->color_range =
804  }
805 
806  switch (seq->color_config.chroma_sample_position) {
807  case AV1_CSP_VERTICAL:
809  break;
810  case AV1_CSP_COLOCATED:
812  break;
813  }
814 
815  if (avctx->width != width || avctx->height != height) {
816  int ret = ff_set_dimensions(avctx, width, height);
817  if (ret < 0)
818  return ret;
819  }
820 
821  if (seq->timing_info_present_flag)
824  seq->timing_info.time_scale);
825 
826  if (avctx->pix_fmt == AV_PIX_FMT_NONE)
827  avctx->pix_fmt = get_sw_pixel_format(avctx, seq);
828 
829  return 0;
830 }
831 
833  const AV1RawFrameHeader *header)
834 {
835  AVRational aspect_ratio;
836  int width = header->frame_width_minus_1 + 1;
837  int height = header->frame_height_minus_1 + 1;
838  int r_width = header->render_width_minus_1 + 1;
839  int r_height = header->render_height_minus_1 + 1;
840  int ret;
841 
842  if (avctx->width != width || avctx->height != height) {
843  ret = ff_set_dimensions(avctx, width, height);
844  if (ret < 0)
845  return ret;
846  }
847 
848  av_reduce(&aspect_ratio.num, &aspect_ratio.den,
849  (int64_t)height * r_width,
850  (int64_t)width * r_height,
851  INT_MAX);
852 
853  if (av_cmp_q(avctx->sample_aspect_ratio, aspect_ratio)) {
854  ret = ff_set_sar(avctx, aspect_ratio);
855  if (ret < 0)
856  return ret;
857  }
858 
859  return 0;
860 }
861 
870 };
871 
873 {
874  AV1DecContext *s = avctx->priv_data;
876  const AVPacketSideData *sd;
877  int ret;
878 
879  s->avctx = avctx;
880  s->pkt = avctx->internal->in_pkt;
881  s->pix_fmt = AV_PIX_FMT_NONE;
882 
883  ret = ff_cbs_init(&s->cbc, AV_CODEC_ID_AV1, avctx);
884  if (ret < 0)
885  return ret;
886 
887  s->cbc->decompose_unit_types = decompose_unit_types;
888  s->cbc->nb_decompose_unit_types = FF_ARRAY_ELEMS(decompose_unit_types);
889 
890  s->itut_t35_fifo = av_fifo_alloc2(1, sizeof(AV1RawMetadataITUTT35),
892  if (!s->itut_t35_fifo)
893  return AVERROR(ENOMEM);
894 
895  av_opt_set_int(s->cbc->priv_data, "operating_point", s->operating_point, 0);
896 
897  if (avctx->extradata && avctx->extradata_size) {
898  ret = ff_cbs_read_extradata_from_codec(s->cbc,
899  &s->current_obu,
900  avctx);
901  if (ret < 0) {
902  av_log(avctx, AV_LOG_WARNING, "Failed to read extradata.\n");
903  goto end;
904  }
905 
906  seq = ((CodedBitstreamAV1Context *)(s->cbc->priv_data))->sequence_header;
907  if (!seq) {
908  if (!(avctx->extradata[0] & 0x80))
909  av_log(avctx, AV_LOG_WARNING, "No sequence header available in extradata.\n");
910  goto end;
911  }
912 
913  ret = set_context_with_sequence(avctx, seq);
914  if (ret < 0) {
915  av_log(avctx, AV_LOG_WARNING, "Failed to set decoder context.\n");
916  goto end;
917  }
918 
919  end:
920  ff_cbs_fragment_reset(&s->current_obu);
921  }
922 
923  s->dovi.logctx = avctx;
924  s->dovi.cfg.dv_profile = 10; // default for AV1
926  if (sd && sd->size >= sizeof(s->dovi.cfg))
927  s->dovi.cfg = *(AVDOVIDecoderConfigurationRecord *) sd->data;
928 
929  return ret;
930 }
931 
933 {
934  AV1DecContext *s = avctx->priv_data;
935  AV1RawFrameHeader *header= s->raw_frame_header;
936  AVFrame *frame;
937  int ret;
938 
940  if (ret < 0) {
941  av_log(avctx, AV_LOG_ERROR, "Failed to update context with frame header\n");
942  return ret;
943  }
944 
946  if (ret < 0)
947  goto fail;
948 
949  frame = f->f;
950  if (header->frame_type == AV1_FRAME_KEY)
951  frame->flags |= AV_FRAME_FLAG_KEY;
952  else
953  frame->flags &= ~AV_FRAME_FLAG_KEY;
954 
955  switch (header->frame_type) {
956  case AV1_FRAME_KEY:
958  frame->pict_type = AV_PICTURE_TYPE_I;
959  break;
960  case AV1_FRAME_INTER:
961  frame->pict_type = AV_PICTURE_TYPE_P;
962  break;
963  case AV1_FRAME_SWITCH:
964  frame->pict_type = AV_PICTURE_TYPE_SP;
965  break;
966  }
967 
968  ret = ff_hwaccel_frame_priv_alloc(avctx, &f->hwaccel_picture_private);
969  if (ret < 0)
970  goto fail;
971 
972  return 0;
973 
974 fail:
976  return ret;
977 }
978 
980  const AV1RawMetadataITUTT35 *itut_t35)
981 {
982  AV1DecContext *s = avctx->priv_data;
983  FFITUTT35 itut35 = { .country_code = itut_t35->itu_t_t35_country_code };
984  FFITUTT35Aux aux = { .dovi = &s->dovi };
985  int ret;
986 
987  ret = ff_itut_t35_parse_buffer(&itut35, itut_t35->payload, itut_t35->payload_size,
989  if (ret <= 0)
990  return ret;
991 
992  ret = ff_itut_t35_parse_payload_to_frame(&itut35, &aux, avctx, frame);
993  if (ret < 0)
994  return ret;
995 
996  return 0;
997 }
998 
1000 {
1001  AV1DecContext *s = avctx->priv_data;
1002  AV1RawMetadataITUTT35 itut_t35;
1003  int ret = 0;
1004 
1005  if (s->mdcv) {
1006  AVMasteringDisplayMetadata *mastering;
1007 
1008  ret = ff_decode_mastering_display_new(avctx, frame, &mastering);
1009  if (ret < 0)
1010  return ret;
1011 
1012  if (mastering) {
1013  for (int i = 0; i < 3; i++) {
1014  mastering->display_primaries[i][0] = av_make_q(s->mdcv->primary_chromaticity_x[i], 1 << 16);
1015  mastering->display_primaries[i][1] = av_make_q(s->mdcv->primary_chromaticity_y[i], 1 << 16);
1016  }
1017  mastering->white_point[0] = av_make_q(s->mdcv->white_point_chromaticity_x, 1 << 16);
1018  mastering->white_point[1] = av_make_q(s->mdcv->white_point_chromaticity_y, 1 << 16);
1019 
1020  mastering->max_luminance = av_make_q(s->mdcv->luminance_max, 1 << 8);
1021  mastering->min_luminance = av_make_q(s->mdcv->luminance_min, 1 << 14);
1022 
1023  mastering->has_primaries = 1;
1024  mastering->has_luminance = 1;
1025  }
1026  }
1027 
1028  if (s->cll) {
1029  AVContentLightMetadata *light;
1030 
1031  ret = ff_decode_content_light_new(avctx, frame, &light);
1032  if (ret < 0)
1033  return ret;
1034 
1035  if (light) {
1036  light->MaxCLL = s->cll->max_cll;
1037  light->MaxFALL = s->cll->max_fall;
1038  }
1039  }
1040 
1041  while (av_fifo_read(s->itut_t35_fifo, &itut_t35, 1) >= 0) {
1042  if (ret >= 0)
1043  ret = export_itut_t35(avctx, frame, &itut_t35);
1044  av_buffer_unref(&itut_t35.payload_ref);
1045  }
1046 
1047  return ret;
1048 }
1049 
1051 {
1052  AV1DecContext *s = avctx->priv_data;
1053  const AV1RawFilmGrainParams *film_grain = &s->cur_frame.film_grain;
1054  const AVPixFmtDescriptor *pixdesc = av_pix_fmt_desc_get(frame->format);
1055  AVFilmGrainParams *fgp;
1056  AVFilmGrainAOMParams *aom;
1057 
1058  av_assert0(pixdesc);
1059  if (!film_grain->apply_grain)
1060  return 0;
1061 
1063  if (!fgp)
1064  return AVERROR(ENOMEM);
1065 
1067  fgp->seed = film_grain->grain_seed;
1068  fgp->width = frame->width;
1069  fgp->height = frame->height;
1070  fgp->color_range = frame->color_range;
1071  fgp->color_primaries = frame->color_primaries;
1072  fgp->color_trc = frame->color_trc;
1073  fgp->color_space = frame->colorspace;
1074  fgp->subsampling_x = pixdesc->log2_chroma_w;
1075  fgp->subsampling_y = pixdesc->log2_chroma_h;
1076 
1077  aom = &fgp->codec.aom;
1079  aom->scaling_shift = film_grain->grain_scaling_minus_8 + 8;
1080  aom->ar_coeff_lag = film_grain->ar_coeff_lag;
1081  aom->ar_coeff_shift = film_grain->ar_coeff_shift_minus_6 + 6;
1082  aom->grain_scale_shift = film_grain->grain_scale_shift;
1083  aom->overlap_flag = film_grain->overlap_flag;
1084  aom->limit_output_range = film_grain->clip_to_restricted_range;
1085 
1086  aom->num_y_points = film_grain->num_y_points;
1087  for (int i = 0; i < film_grain->num_y_points; i++) {
1088  aom->y_points[i][0] = film_grain->point_y_value[i];
1089  aom->y_points[i][1] = film_grain->point_y_scaling[i];
1090  }
1091  aom->num_uv_points[0] = film_grain->num_cb_points;
1092  for (int i = 0; i < film_grain->num_cb_points; i++) {
1093  aom->uv_points[0][i][0] = film_grain->point_cb_value[i];
1094  aom->uv_points[0][i][1] = film_grain->point_cb_scaling[i];
1095  }
1096  aom->num_uv_points[1] = film_grain->num_cr_points;
1097  for (int i = 0; i < film_grain->num_cr_points; i++) {
1098  aom->uv_points[1][i][0] = film_grain->point_cr_value[i];
1099  aom->uv_points[1][i][1] = film_grain->point_cr_scaling[i];
1100  }
1101 
1102  for (int i = 0; i < 24; i++) {
1103  aom->ar_coeffs_y[i] = film_grain->ar_coeffs_y_plus_128[i] - 128;
1104  }
1105  for (int i = 0; i < 25; i++) {
1106  aom->ar_coeffs_uv[0][i] = film_grain->ar_coeffs_cb_plus_128[i] - 128;
1107  aom->ar_coeffs_uv[1][i] = film_grain->ar_coeffs_cr_plus_128[i] - 128;
1108  }
1109 
1110  aom->uv_mult[0] = film_grain->cb_mult;
1111  aom->uv_mult[1] = film_grain->cr_mult;
1112  aom->uv_mult_luma[0] = film_grain->cb_luma_mult;
1113  aom->uv_mult_luma[1] = film_grain->cr_luma_mult;
1114  aom->uv_offset[0] = film_grain->cb_offset;
1115  aom->uv_offset[1] = film_grain->cr_offset;
1116 
1117  return 0;
1118 }
1119 
1121 {
1122  AV1DecContext *s = avctx->priv_data;
1123  const AVFrame *srcframe = s->cur_frame.f;
1124  AVPacket *pkt = s->pkt;
1125  int ret;
1126 
1127  // TODO: all layers
1128  if (s->operating_point_idc &&
1129  av_log2(s->operating_point_idc >> 8) > s->cur_frame.spatial_id)
1130  return 0;
1131 
1132  ret = av_frame_ref(frame, srcframe);
1133  if (ret < 0)
1134  return ret;
1135 
1136  ret = export_metadata(avctx, frame);
1137  if (ret < 0) {
1139  return ret;
1140  }
1141 
1143  ret = export_film_grain(avctx, frame);
1144  if (ret < 0) {
1146  return ret;
1147  }
1148  }
1149 
1150  frame->pts = pkt->pts;
1151  frame->pkt_dts = pkt->dts;
1152 
1154 
1155  return 0;
1156 }
1157 
1159 {
1160  AV1DecContext *s = avctx->priv_data;
1161  const AV1RawFrameHeader *header = s->raw_frame_header;
1162 
1163  for (int i = 0; i < AV1_NUM_REF_FRAMES; i++) {
1164  if (header->refresh_frame_flags & (1 << i))
1165  av1_frame_replace(&s->ref[i], &s->cur_frame);
1166  }
1167 }
1168 
1170 {
1171  AV1DecContext *s = avctx->priv_data;
1172  int ret;
1173 
1174  av1_frame_unref(&s->cur_frame);
1175 
1176  s->cur_frame.header_ref = av_refstruct_ref(s->header_ref);
1177 
1178  s->cur_frame.raw_frame_header = s->raw_frame_header;
1179 
1180  ret = init_tile_data(s);
1181  if (ret < 0) {
1182  av_log(avctx, AV_LOG_ERROR, "Failed to init tile data.\n");
1183  return ret;
1184  }
1185 
1186  if ((avctx->skip_frame >= AVDISCARD_NONINTRA &&
1187  (s->raw_frame_header->frame_type != AV1_FRAME_KEY &&
1188  s->raw_frame_header->frame_type != AV1_FRAME_INTRA_ONLY)) ||
1189  (avctx->skip_frame >= AVDISCARD_NONKEY &&
1190  s->raw_frame_header->frame_type != AV1_FRAME_KEY) ||
1191  avctx->skip_frame >= AVDISCARD_ALL)
1192  return 0;
1193 
1194  if (s->pix_fmt == AV_PIX_FMT_NONE) {
1195  ret = get_pixel_format(avctx);
1196  if (ret < 0) {
1197  av_log(avctx, AV_LOG_ERROR, "Failed to get pixel format.\n");
1198  return ret;
1199  }
1200 
1201  if (!ret && FF_HW_HAS_CB(avctx, decode_params)) {
1202  ret = FF_HW_CALL(avctx, decode_params, AV1_OBU_SEQUENCE_HEADER,
1203  s->seq_data_ref->data, s->seq_data_ref->size);
1204  if (ret < 0) {
1205  av_log(avctx, AV_LOG_ERROR, "HW accel decode params fail.\n");
1206  return ret;
1207  }
1208  }
1209  }
1210 
1211  ret = av1_frame_alloc(avctx, &s->cur_frame);
1212  if (ret < 0) {
1213  av_log(avctx, AV_LOG_ERROR,
1214  "Failed to allocate space for current frame.\n");
1215  return ret;
1216  }
1217 
1221  order_hint_info(s);
1223 
1224  s->cur_frame.force_integer_mv =
1225  s->raw_frame_header->force_integer_mv ||
1226  s->raw_frame_header->frame_type == AV1_FRAME_KEY ||
1227  s->raw_frame_header->frame_type == AV1_FRAME_INTRA_ONLY;
1228 
1229  return ret;
1230 }
1231 
1233 {
1234  AV1DecContext *s = avctx->priv_data;
1235  AV1RawTileGroup *raw_tile_group = NULL;
1236  int i = 0, ret;
1237 
1238  for (i = s->nb_unit; i < s->current_obu.nb_units; i++) {
1239  CodedBitstreamUnit *unit = &s->current_obu.units[i];
1240  AV1RawOBU *obu = unit->content;
1241  const AV1RawOBUHeader *header;
1242 
1243  av_log(avctx, AV_LOG_DEBUG, "OBU idx:%d, type:%d, content available:%d.\n", i, unit->type, !!obu);
1244 
1245  if (unit->type == AV1_OBU_TILE_LIST) {
1246  av_log(avctx, AV_LOG_ERROR, "Large scale tile decoding is unsupported.\n");
1248  goto end;
1249  }
1250 
1251  if (!obu)
1252  continue;
1253 
1254  header = &obu->header;
1255 
1256  switch (unit->type) {
1258  ret = av_buffer_replace(&s->seq_data_ref, unit->data_ref);
1259  if (ret < 0)
1260  goto end;
1261 
1262  s->seq_data_ref->data = unit->data;
1263  s->seq_data_ref->size = unit->data_size;
1264  av_refstruct_replace(&s->seq_ref, unit->content_ref);
1265 
1266  s->raw_seq = &obu->obu.sequence_header;
1267  s->raw_frame_header = NULL;
1268  raw_tile_group = NULL;
1269 
1270  ret = set_context_with_sequence(avctx, s->raw_seq);
1271  if (ret < 0) {
1272  av_log(avctx, AV_LOG_ERROR, "Failed to set context.\n");
1273  s->raw_seq = NULL;
1274  goto end;
1275  }
1276 
1277  s->operating_point_idc = s->raw_seq->operating_point_idc[s->operating_point];
1278 
1279  s->pix_fmt = AV_PIX_FMT_NONE;
1280 
1281  if (FF_HW_HAS_CB(avctx, decode_params)) {
1282  ret = FF_HW_CALL(avctx, decode_params, AV1_OBU_SEQUENCE_HEADER,
1283  s->seq_data_ref->data, s->seq_data_ref->size);
1284  if (ret < 0) {
1285  av_log(avctx, AV_LOG_ERROR, "HW accel decode params fail.\n");
1286  return ret;
1287  }
1288  }
1289 
1290  break;
1292  if (s->raw_frame_header)
1293  break;
1295  case AV1_OBU_FRAME:
1296  case AV1_OBU_FRAME_HEADER:
1297  if (!s->raw_seq) {
1298  av_log(avctx, AV_LOG_ERROR, "Missing Sequence Header.\n");
1300  goto end;
1301  }
1302 
1303  av_refstruct_replace(&s->header_ref, unit->content_ref);
1304 
1305  raw_tile_group = NULL;
1306 
1307  if (unit->type == AV1_OBU_FRAME)
1308  s->raw_frame_header = &obu->obu.frame.header;
1309  else
1310  s->raw_frame_header = &obu->obu.frame_header;
1311 
1312  if (s->raw_frame_header->show_existing_frame) {
1313  av1_frame_replace(&s->cur_frame,
1314  &s->ref[s->raw_frame_header->frame_to_show_map_idx]);
1315 
1316  update_reference_list(avctx);
1317 
1318  if (s->cur_frame.f) {
1319  ret = set_output_frame(avctx, frame);
1320  if (ret < 0) {
1321  av_log(avctx, AV_LOG_ERROR, "Set output frame error.\n");
1322  goto end;
1323  }
1324  }
1325 
1326  s->raw_frame_header = NULL;
1327  i++;
1328  ret = 0;
1329 
1330  goto end;
1331  }
1332 
1333  ret = get_current_frame(avctx);
1334  if (ret < 0) {
1335  av_log(avctx, AV_LOG_ERROR, "Get current frame error\n");
1336  goto end;
1337  }
1338 
1339  s->cur_frame.spatial_id = header->spatial_id;
1340  s->cur_frame.temporal_id = header->temporal_id;
1341 
1342  if (avctx->hwaccel && s->cur_frame.f) {
1343  ret = FF_HW_CALL(avctx, start_frame, s->pkt->buf,
1344  unit->data, unit->data_size);
1345  if (ret < 0) {
1346  av_log(avctx, AV_LOG_ERROR, "HW accel start frame fail.\n");
1347  goto end;
1348  }
1349  }
1350  if (unit->type != AV1_OBU_FRAME)
1351  break;
1353  case AV1_OBU_TILE_GROUP:
1354  if (!s->raw_frame_header) {
1355  av_log(avctx, AV_LOG_ERROR, "Missing Frame Header.\n");
1357  goto end;
1358  }
1359 
1360  if (unit->type == AV1_OBU_FRAME)
1361  raw_tile_group = &obu->obu.frame.tile_group;
1362  else
1363  raw_tile_group = &obu->obu.tile_group;
1364 
1365  ret = get_tiles_info(avctx, raw_tile_group);
1366  if (ret < 0)
1367  goto end;
1368 
1369  if (avctx->hwaccel && s->cur_frame.f) {
1370  ret = FF_HW_CALL(avctx, decode_slice, raw_tile_group->tile_data.data,
1371  raw_tile_group->tile_data.data_size);
1372  if (ret < 0) {
1373  av_log(avctx, AV_LOG_ERROR,
1374  "HW accel decode slice fail.\n");
1375  goto end;
1376  }
1377  }
1378  break;
1380  s->raw_frame_header = NULL;
1381  raw_tile_group = NULL;
1382  break;
1383  case AV1_OBU_TILE_LIST:
1384  case AV1_OBU_PADDING:
1385  break;
1386  case AV1_OBU_METADATA:
1387  switch (obu->obu.metadata.metadata_type) {
1389  av_refstruct_replace(&s->cll_ref, unit->content_ref);
1390  s->cll = &obu->obu.metadata.metadata.hdr_cll;
1391  break;
1393  av_refstruct_replace(&s->mdcv_ref, unit->content_ref);
1394  s->mdcv = &obu->obu.metadata.metadata.hdr_mdcv;
1395  break;
1397  AV1RawMetadataITUTT35 itut_t35;
1398  memcpy(&itut_t35, &obu->obu.metadata.metadata.itut_t35, sizeof(itut_t35));
1400  if (!itut_t35.payload_ref) {
1401  ret = AVERROR(ENOMEM);
1402  goto end;
1403  }
1404  ret = av_fifo_write(s->itut_t35_fifo, &itut_t35, 1);
1405  if (ret < 0) {
1406  av_buffer_unref(&itut_t35.payload_ref);
1407  goto end;
1408  }
1409  break;
1410  }
1411  default:
1412  break;
1413  }
1414  break;
1415  default:
1416  av_log(avctx, AV_LOG_DEBUG,
1417  "Unknown obu type: %d (%zu bits).\n",
1418  unit->type, unit->data_size);
1419  }
1420 
1421  if (raw_tile_group && (s->tile_num == raw_tile_group->tg_end + 1)) {
1422  int show_frame = s->raw_frame_header->show_frame;
1423  // Set nb_unit to point at the next OBU, to indicate which
1424  // OBUs have been processed for this current frame. (If this
1425  // frame gets output, we set nb_unit to this value later too.)
1426  s->nb_unit = i + 1;
1427  if (avctx->hwaccel && s->cur_frame.f) {
1428  ret = FF_HW_SIMPLE_CALL(avctx, end_frame);
1429  if (ret < 0) {
1430  av_log(avctx, AV_LOG_ERROR, "HW accel end frame fail.\n");
1431  goto end;
1432  }
1433  }
1434 
1435  update_reference_list(avctx);
1436 
1437  // Set start_unit to indicate the first OBU of the next frame.
1438  s->start_unit = s->nb_unit;
1439  raw_tile_group = NULL;
1440  s->raw_frame_header = NULL;
1441 
1442  if (show_frame) {
1443  // cur_frame.f needn't exist due to skip_frame.
1444  if (s->cur_frame.f) {
1445  ret = set_output_frame(avctx, frame);
1446  if (ret < 0) {
1447  av_log(avctx, AV_LOG_ERROR, "Set output frame error\n");
1448  goto end;
1449  }
1450  }
1451  i++;
1452  ret = 0;
1453  goto end;
1454  }
1455  }
1456  }
1457 
1458  ret = AVERROR(EAGAIN);
1459 end:
1460  av_assert0(i <= s->current_obu.nb_units);
1461  s->nb_unit = i;
1462 
1463  if ((ret < 0 && ret != AVERROR(EAGAIN)) || s->current_obu.nb_units == i) {
1464  if (ret < 0)
1465  s->raw_frame_header = NULL;
1466  av_packet_unref(s->pkt);
1467  ff_cbs_fragment_reset(&s->current_obu);
1468  s->nb_unit = s->start_unit = 0;
1469  }
1470  if (!ret && !frame->buf[0])
1471  ret = AVERROR(EAGAIN);
1472 
1473  return ret;
1474 }
1475 
1477 {
1478  AV1DecContext *s = avctx->priv_data;
1479  int ret;
1480 
1481  do {
1482  if (!s->current_obu.nb_units) {
1483  ret = ff_decode_get_packet(avctx, s->pkt);
1484  if (ret < 0)
1485  return ret;
1486 
1487  ret = ff_cbs_read_packet(s->cbc, &s->current_obu, s->pkt);
1488  if (ret < 0) {
1489  ff_cbs_fragment_reset(&s->current_obu);
1490  av_packet_unref(s->pkt);
1491  av_log(avctx, AV_LOG_ERROR, "Failed to read packet.\n");
1492  return ret;
1493  }
1494 
1495  s->nb_unit = s->start_unit = 0;
1496  av_log(avctx, AV_LOG_DEBUG, "Total OBUs on this packet: %d.\n",
1497  s->current_obu.nb_units);
1498  }
1499 
1501  } while (ret == AVERROR(EAGAIN));
1502 
1503  return ret;
1504 }
1505 
1507 {
1508  AV1DecContext *s = avctx->priv_data;
1509  AV1RawMetadataITUTT35 itut_t35;
1510 
1511  for (int i = 0; i < FF_ARRAY_ELEMS(s->ref); i++)
1512  av1_frame_unref(&s->ref[i]);
1513 
1514  av1_frame_unref(&s->cur_frame);
1515  s->operating_point_idc = 0;
1516  s->nb_unit = s->start_unit = 0;
1517  s->raw_frame_header = NULL;
1518  s->raw_seq = NULL;
1519  s->cll = NULL;
1520  s->mdcv = NULL;
1521  while (av_fifo_read(s->itut_t35_fifo, &itut_t35, 1) >= 0)
1522  av_buffer_unref(&itut_t35.payload_ref);
1523 
1524  ff_cbs_fragment_reset(&s->current_obu);
1525  ff_cbs_flush(s->cbc);
1526 
1527  if (FF_HW_HAS_CB(avctx, flush))
1528  FF_HW_SIMPLE_CALL(avctx, flush);
1529 }
1530 
1531 #define OFFSET(x) offsetof(AV1DecContext, x)
1532 #define VD AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_DECODING_PARAM
1533 static const AVOption av1_options[] = {
1534  { "operating_point", "Select an operating point of the scalable bitstream",
1535  OFFSET(operating_point), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, AV1_MAX_OPERATING_POINTS - 1, VD },
1536  { NULL }
1537 };
1538 
1539 static const AVClass av1_class = {
1540  .class_name = "AV1 decoder",
1541  .item_name = av_default_item_name,
1542  .option = av1_options,
1543  .version = LIBAVUTIL_VERSION_INT,
1544 };
1545 
1547  .p.name = "av1",
1548  CODEC_LONG_NAME("Alliance for Open Media AV1"),
1549  .p.type = AVMEDIA_TYPE_VIDEO,
1550  .p.id = AV_CODEC_ID_AV1,
1551  .priv_data_size = sizeof(AV1DecContext),
1552  .init = av1_decode_init,
1555  .p.capabilities = AV_CODEC_CAP_DR1,
1556  .caps_internal = FF_CODEC_CAP_INIT_CLEANUP |
1559  .flush = av1_decode_flush,
1560  .p.profiles = NULL_IF_CONFIG_SMALL(ff_av1_profiles),
1561  .p.priv_class = &av1_class,
1562  .hw_configs = (const AVCodecHWConfigInternal *const []) {
1563 #if CONFIG_AV1_DXVA2_HWACCEL
1564  HWACCEL_DXVA2(av1),
1565 #endif
1566 #if CONFIG_AV1_D3D11VA_HWACCEL
1567  HWACCEL_D3D11VA(av1),
1568 #endif
1569 #if CONFIG_AV1_D3D11VA2_HWACCEL
1570  HWACCEL_D3D11VA2(av1),
1571 #endif
1572 #if CONFIG_AV1_D3D12VA_HWACCEL
1573  HWACCEL_D3D12VA(av1),
1574 #endif
1575 #if CONFIG_AV1_NVDEC_HWACCEL
1576  HWACCEL_NVDEC(av1),
1577 #endif
1578 #if CONFIG_AV1_NVDEC_CUARRAY_HWACCEL
1579  HWACCEL_NVDEC_CUARRAY(av1),
1580 #endif
1581 #if CONFIG_AV1_VAAPI_HWACCEL
1582  HWACCEL_VAAPI(av1),
1583 #endif
1584 #if CONFIG_AV1_VDPAU_HWACCEL
1585  HWACCEL_VDPAU(av1),
1586 #endif
1587 #if CONFIG_AV1_VIDEOTOOLBOX_HWACCEL
1588  HWACCEL_VIDEOTOOLBOX(av1),
1589 #endif
1590 #if CONFIG_AV1_VULKAN_HWACCEL
1591  HWACCEL_VULKAN(av1),
1592 #endif
1593 
1594  NULL
1595  },
1596 };
update_reference_list
static void update_reference_list(AVCodecContext *avctx)
Definition: av1dec.c:1158
HWACCEL_D3D12VA
#define HWACCEL_D3D12VA(codec)
Definition: hwconfig.h:82
ff_get_coded_side_data
const AVPacketSideData * ff_get_coded_side_data(const AVCodecContext *avctx, enum AVPacketSideDataType type)
Get side data of the given type from a decoding context.
Definition: decode.c:1378
AV1_METADATA_TYPE_HDR_CLL
@ AV1_METADATA_TYPE_HDR_CLL
Definition: av1.h:44
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
AV1RawTimingInfo::num_units_in_display_tick
uint32_t num_units_in_display_tick
Definition: cbs_av1.h:68
av_packet_unref
void av_packet_unref(AVPacket *pkt)
Wipe the packet.
Definition: packet.c:434
AV1RawTimingInfo::time_scale
uint32_t time_scale
Definition: cbs_av1.h:69
AVCodecContext::hwaccel
const struct AVHWAccel * hwaccel
Hardware accelerator in use.
Definition: avcodec.h:1423
FFITUTT35::country_code
int country_code
Definition: itut35.h:51
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:254
AV_LOG_WARNING
#define AV_LOG_WARNING
Something somehow does not look correct.
Definition: log.h:216
AV_PIX_FMT_CUDA
@ AV_PIX_FMT_CUDA
HW acceleration through CUDA.
Definition: pixfmt.h:260
AVMasteringDisplayMetadata::max_luminance
AVRational max_luminance
Max luminance of mastering display (cd/m^2).
Definition: mastering_display_metadata.h:57
CodedBitstreamUnit::content_ref
void * content_ref
If content is reference counted, a RefStruct reference backing content.
Definition: cbs.h:119
AVPixelFormat
AVPixelFormat
Pixel format.
Definition: pixfmt.h:71
AV1RawColorConfig::color_primaries
uint8_t color_primaries
Definition: cbs_av1.h:56
av1_decode_init
static av_cold int av1_decode_init(AVCodecContext *avctx)
Definition: av1dec.c:872
AV1_OBU_REDUNDANT_FRAME_HEADER
@ AV1_OBU_REDUNDANT_FRAME_HEADER
Definition: av1.h:36
FF_CODEC_CAP_INIT_CLEANUP
#define FF_CODEC_CAP_INIT_CLEANUP
The codec allows calling the close function for deallocation even if the init function returned a fai...
Definition: codec_internal.h:43
AV1RawSequenceHeader::seq_level_idx
uint8_t seq_level_idx[AV1_MAX_OPERATING_POINTS]
Definition: cbs_av1.h:96
r
const char * r
Definition: vf_curves.c:127
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
decode_slice
static int decode_slice(AVCodecContext *c, void *arg)
Definition: ffv1dec.c:447
AV1RawFilmGrainParams::clip_to_restricted_range
uint8_t clip_to_restricted_range
Definition: cbs_av1.h:171
opt.h
ff_dovi_ctx_unref
void ff_dovi_ctx_unref(DOVIContext *s)
Completely reset a DOVIContext, preserving only logctx.
Definition: dovi_rpu.c:30
bytestream2_get_bytes_left
static av_always_inline int bytestream2_get_bytes_left(const GetByteContext *g)
Definition: bytestream.h:158
AV1RawFilmGrainParams::grain_seed
uint16_t grain_seed
Definition: cbs_av1.h:144
AVCodecContext::colorspace
enum AVColorSpace colorspace
YUV colorspace type.
Definition: avcodec.h:671
AV1RawSequenceHeader::timing_info_present_flag
uint8_t timing_info_present_flag
Definition: cbs_av1.h:87
AV1RawSequenceHeader
Definition: cbs_av1.h:82
ff_get_format
int ff_get_format(AVCodecContext *avctx, const enum AVPixelFormat *fmt)
Select the (possibly hardware accelerated) pixel format.
Definition: decode.c:1229
order_hint_info
static void order_hint_info(AV1DecContext *s)
Definition: av1dec.c:366
AV1RawColorConfig::color_range
uint8_t color_range
Definition: cbs_av1.h:60
coded_lossless_param
static void coded_lossless_param(AV1DecContext *s)
Definition: av1dec.c:336
AV1_METADATA_TYPE_ITUT_T35
@ AV1_METADATA_TYPE_ITUT_T35
Definition: av1.h:47
GetByteContext
Definition: bytestream.h:33
bytestream2_tell
static av_always_inline int bytestream2_tell(const GetByteContext *g)
Definition: bytestream.h:192
AV1_GM_ALPHA_PREC_BITS
@ AV1_GM_ALPHA_PREC_BITS
Definition: av1.h:107
av_pix_fmt_desc_get
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
Definition: pixdesc.c:3460
av1_frame_alloc
static int av1_frame_alloc(AVCodecContext *avctx, AV1Frame *f)
Definition: av1dec.c:932
av_clip_uintp2
#define av_clip_uintp2
Definition: common.h:124
HWACCEL_NVDEC_CUARRAY
#define HWACCEL_NVDEC_CUARRAY(codec)
Definition: hwconfig.h:70
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
AV1_CSP_VERTICAL
@ AV1_CSP_VERTICAL
Definition: av1.h:134
AVMasteringDisplayMetadata::has_luminance
int has_luminance
Flag indicating whether the luminance (min_ and max_) have been set.
Definition: mastering_display_metadata.h:67
AV1RawFilmGrainParams::point_cb_value
uint8_t point_cb_value[10]
Definition: cbs_av1.h:152
CodedBitstreamUnit::content
void * content
Pointer to the decomposed form of this unit.
Definition: cbs.h:114
AV1RawFilmGrainParams::apply_grain
uint8_t apply_grain
Definition: cbs_av1.h:143
bytestream2_skipu
static av_always_inline void bytestream2_skipu(GetByteContext *g, unsigned int size)
Definition: bytestream.h:174
av_cold
#define av_cold
Definition: attributes.h:119
int64_t
long long int64_t
Definition: coverity.c:34
AVFilmGrainAOMParams::uv_points
uint8_t uv_points[2][10][2]
Definition: film_grain_params.h:63
get_current_frame
static int get_current_frame(AVCodecContext *avctx)
Definition: av1dec.c:1169
FF_ITUT_T35_FLAG_COUNTRY_CODE
#define FF_ITUT_T35_FLAG_COUNTRY_CODE
country_code is assumed to not be the first byte of the buffer and must be set by the caller beforeha...
Definition: itut35.h:83
AVContentLightMetadata::MaxCLL
unsigned MaxCLL
Max content light level (cd/m^2).
Definition: mastering_display_metadata.h:111
AVFilmGrainParams::aom
AVFilmGrainAOMParams aom
Definition: film_grain_params.h:247
AVFrame
This structure describes decoded (raw) audio or video data.
Definition: frame.h:472
pixdesc.h
AVCodecContext::color_trc
enum AVColorTransferCharacteristic color_trc
Color Transfer Characteristic.
Definition: avcodec.h:664
AVPacketSideData
This structure stores auxiliary information for decoding, presenting, or otherwise processing the cod...
Definition: packet.h:424
set_context_with_sequence
static int set_context_with_sequence(AVCodecContext *avctx, const AV1RawSequenceHeader *seq)
Definition: av1dec.c:789
HWACCEL_DXVA2
#define HWACCEL_DXVA2(codec)
Definition: hwconfig.h:64
AV1RawFilmGrainParams::point_y_value
uint8_t point_y_value[14]
Definition: cbs_av1.h:148
AVCOL_RANGE_JPEG
@ AVCOL_RANGE_JPEG
Full range content.
Definition: pixfmt.h:783
internal.h
AVOption
AVOption.
Definition: opt.h:428
HWACCEL_D3D11VA2
#define HWACCEL_D3D11VA2(codec)
Definition: hwconfig.h:66
b
#define b
Definition: input.c:43
AV1_WARP_MODEL_IDENTITY
@ AV1_WARP_MODEL_IDENTITY
Definition: av1.h:114
ff_progress_frame_get_buffer
int ff_progress_frame_get_buffer(AVCodecContext *avctx, ProgressFrame *f, int flags)
Wrapper around ff_progress_frame_alloc() and ff_thread_get_buffer().
Definition: decode.c:1939
AV1RawSequenceHeader::timing_info
AV1RawTimingInfo timing_info
Definition: cbs_av1.h:92
AV_PIX_FMT_YUV420P10
#define AV_PIX_FMT_YUV420P10
Definition: pixfmt.h:545
high
int high
Definition: dovi_rpuenc.c:39
AVFilmGrainParams::color_space
enum AVColorSpace color_space
Definition: film_grain_params.h:233
AV1_SEG_LVL_ALT_Q
@ AV1_SEG_LVL_ALT_Q
Definition: av1.h:92
AV1RawTileGroup::tg_end
uint16_t tg_end
Definition: cbs_av1.h:313
AV_PIX_FMT_D3D11VA_VLD
@ AV_PIX_FMT_D3D11VA_VLD
HW decoding through Direct3D11 via old API, Picture.data[3] contains a ID3D11VideoDecoderOutputView p...
Definition: pixfmt.h:254
FFCodec
Definition: codec_internal.h:127
CodedBitstreamUnit::type
CodedBitstreamUnitType type
Codec-specific type of this unit.
Definition: cbs.h:81
FF_HW_SIMPLE_CALL
#define FF_HW_SIMPLE_CALL(avctx, function)
Definition: hwaccel_internal.h:176
decompose_unit_types
static const CodedBitstreamUnitType decompose_unit_types[]
Definition: av1dec.c:862
FFMAX
#define FFMAX(a, b)
Definition: macros.h:47
av_buffer_ref
AVBufferRef * av_buffer_ref(const AVBufferRef *buf)
Create a new reference to an AVBuffer.
Definition: buffer.c:103
AV1_OBU_TEMPORAL_DELIMITER
@ AV1_OBU_TEMPORAL_DELIMITER
Definition: av1.h:31
AV1RawTileData::data
uint8_t * data
Definition: cbs_av1.h:301
bit_depth
static void bit_depth(AudioStatsContext *s, const uint64_t *const mask, uint8_t *depth)
Definition: af_astats.c:246
get_relative_dist
static int get_relative_dist(const AV1RawSequenceHeader *seq, unsigned int a, unsigned int b)
Definition: av1dec.c:260
ff_set_dimensions
int ff_set_dimensions(AVCodecContext *s, int width, int height)
Definition: utils.c:91
AV1RawOBU::header
AV1RawOBUHeader header
Definition: cbs_av1.h:414
av1_frame_replace
static void av1_frame_replace(AV1Frame *dst, const AV1Frame *src)
Definition: av1dec.c:722
AVFilmGrainParams::color_trc
enum AVColorTransferCharacteristic color_trc
Definition: film_grain_params.h:232
AVFilmGrainParams::seed
uint64_t seed
Seed to use for the synthesis process, if the codec allows for it.
Definition: film_grain_params.h:213
AV_PIX_FMT_VULKAN
@ AV_PIX_FMT_VULKAN
Vulkan hardware images.
Definition: pixfmt.h:379
AV1RawSequenceHeader::seq_profile
uint8_t seq_profile
Definition: cbs_av1.h:83
AV1RawMetadata::itut_t35
AV1RawMetadataITUTT35 itut_t35
Definition: cbs_av1.h:400
CodedBitstreamUnit
Coded bitstream unit structure.
Definition: cbs.h:77
AV1RawColorConfig::subsampling_y
uint8_t subsampling_y
Definition: cbs_av1.h:62
round_two
static uint64_t round_two(uint64_t x, uint16_t n)
Definition: av1dec.c:143
AV1RawFrame::header
AV1RawFrameHeader header
Definition: cbs_av1.h:319
AV1RawFilmGrainParams::cr_mult
uint8_t cr_mult
Definition: cbs_av1.h:167
AVContentLightMetadata
Content light level needed by to transmit HDR over HDMI (CTA-861.3).
Definition: mastering_display_metadata.h:107
AV_PKT_DATA_DOVI_CONF
@ AV_PKT_DATA_DOVI_CONF
DOVI configuration ref: dolby-vision-bitstreams-within-the-iso-base-media-file-format-v2....
Definition: packet.h:280
AV1RawFilmGrainParams::chroma_scaling_from_luma
uint8_t chroma_scaling_from_luma
Definition: cbs_av1.h:150
AV1_GM_ABS_TRANS_ONLY_BITS
@ AV1_GM_ABS_TRANS_ONLY_BITS
Definition: av1.h:108
AV1_REF_FRAME_LAST
@ AV1_REF_FRAME_LAST
Definition: av1.h:63
AVCodecContext::framerate
AVRational framerate
Definition: avcodec.h:563
close
static av_cold void close(AVCodecParserContext *s)
Definition: apv_parser.c:197
AV1_NUM_REF_FRAMES
@ AV1_NUM_REF_FRAMES
Definition: av1.h:84
AVPacketSideData::size
size_t size
Definition: packet.h:426
AV1RawFilmGrainParams::ar_coeffs_cr_plus_128
uint8_t ar_coeffs_cr_plus_128[25]
Definition: cbs_av1.h:161
av1_parse.h
mx
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t mx
Definition: dsp.h:57
FFCodec::p
AVCodec p
The public AVCodec.
Definition: codec_internal.h:131
av1_options
static const AVOption av1_options[]
Definition: av1dec.c:1533
AVCodecContext::skip_frame
enum AVDiscard skip_frame
Skip decoding for selected frames.
Definition: avcodec.h:1667
AV1_REFS_PER_FRAME
@ AV1_REFS_PER_FRAME
Definition: av1.h:85
AV1_OBU_FRAME_HEADER
@ AV1_OBU_FRAME_HEADER
Definition: av1.h:32
av_fifo_write
int av_fifo_write(AVFifo *f, const void *buf, size_t nb_elems)
Write data into a FIFO.
Definition: fifo.c:188
AVFilmGrainAOMParams::grain_scale_shift
int grain_scale_shift
Signals the down shift applied to the generated gaussian numbers during synthesis.
Definition: film_grain_params.h:99
AV1RawFilmGrainParams::point_cr_scaling
uint8_t point_cr_scaling[10]
Definition: cbs_av1.h:156
AV1RawMetadataITUTT35::payload_size
size_t payload_size
Definition: cbs_av1.h:369
AVFilmGrainParams::codec
union AVFilmGrainParams::@539 codec
Additional fields may be added both here and in any structure included.
AV1_WARP_PARAM_REDUCE_BITS
@ AV1_WARP_PARAM_REDUCE_BITS
Definition: av1.h:118
inverse_recenter
static uint32_t inverse_recenter(int r, uint32_t v)
Definition: av1dec.c:73
HWACCEL_VDPAU
#define HWACCEL_VDPAU(codec)
Definition: hwconfig.h:74
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
AV1_WARP_MODEL_TRANSLATION
@ AV1_WARP_MODEL_TRANSLATION
Definition: av1.h:115
AV1RawFilmGrainParams::ar_coeff_shift_minus_6
uint8_t ar_coeff_shift_minus_6
Definition: cbs_av1.h:162
CodedBitstreamUnit::data
uint8_t * data
Pointer to the directly-parsable bitstream form of this unit.
Definition: cbs.h:88
AV1RawFilmGrainParams::num_y_points
uint8_t num_y_points
Definition: cbs_av1.h:147
AVFilmGrainAOMParams::limit_output_range
int limit_output_range
Signals to clip to limited color levels after film grain application.
Definition: film_grain_params.h:122
AVFilmGrainAOMParams::num_y_points
int num_y_points
Number of points, and the scale and value for each point of the piecewise linear scaling function for...
Definition: film_grain_params.h:49
av_reduce
int av_reduce(int *dst_num, int *dst_den, int64_t num, int64_t den, int64_t max)
Reduce a fraction.
Definition: rational.c:35
round_two_signed
static int64_t round_two_signed(int64_t x, uint16_t n)
Definition: av1dec.c:150
AVRational::num
int num
Numerator.
Definition: rational.h:59
progressframe.h
refstruct.h
AVFilmGrainAOMParams
This structure describes how to handle film grain synthesis for AOM codecs.
Definition: film_grain_params.h:44
AV1RawFilmGrainParams::num_cb_points
uint8_t num_cb_points
Definition: cbs_av1.h:151
AV_PIX_FMT_YUV444P10
#define AV_PIX_FMT_YUV444P10
Definition: pixfmt.h:548
AV1RawFilmGrainParams::cb_luma_mult
uint8_t cb_luma_mult
Definition: cbs_av1.h:165
AV1_DIV_LUT_BITS
@ AV1_DIV_LUT_BITS
Definition: av1.h:120
AV1Frame
Definition: av1dec.h:37
AV1RawFilmGrainParams::overlap_flag
uint8_t overlap_flag
Definition: cbs_av1.h:170
FF_CODEC_CAP_USES_PROGRESSFRAMES
#define FF_CODEC_CAP_USES_PROGRESSFRAMES
The decoder might make use of the ProgressFrame API.
Definition: codec_internal.h:69
AVCodecContext::color_primaries
enum AVColorPrimaries color_primaries
Chromaticity coordinates of the source primaries.
Definition: avcodec.h:657
show_frame
static void show_frame(AVTextFormatContext *tfc, AVFrame *frame, AVStream *stream, AVFormatContext *fmt_ctx)
Definition: ffprobe.c:1509
AV_LOG_ERROR
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:210
film_grain_params.h
FF_ARRAY_ELEMS
#define FF_ARRAY_ELEMS(a)
Definition: sinewin_tablegen.c:29
av_fifo_read
int av_fifo_read(AVFifo *f, void *buf, size_t nb_elems)
Read data from a FIFO.
Definition: fifo.c:240
AVFilmGrainParams::width
int width
Intended display resolution.
Definition: film_grain_params.h:220
AV1RawFilmGrainParams::grain_scaling_minus_8
uint8_t grain_scaling_minus_8
Definition: cbs_av1.h:157
AV_FRAME_FLAG_KEY
#define AV_FRAME_FLAG_KEY
A flag to mark frames that are keyframes.
Definition: frame.h:687
global_motion_params
static void global_motion_params(AV1DecContext *s)
update gm type/params, since cbs already implemented part of this function, so we don't need to full ...
Definition: av1dec.c:211
AVCodecContext::extradata_size
int extradata_size
Definition: avcodec.h:527
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:2336
AVMasteringDisplayMetadata::white_point
AVRational white_point[2]
CIE 1931 xy chromaticity coords of white point.
Definition: mastering_display_metadata.h:47
AV_PIX_FMT_DXVA2_VLD
@ AV_PIX_FMT_DXVA2_VLD
HW decoding through DXVA2, Picture.data[3] contains a LPDIRECT3DSURFACE9 pointer.
Definition: pixfmt.h:134
AV_GET_BUFFER_FLAG_REF
#define AV_GET_BUFFER_FLAG_REF
The decoder will keep a reference to the frame and may reuse it later.
Definition: avcodec.h:415
pix_fmt
static enum AVPixelFormat pix_fmt
Definition: demux_decode.c:41
av_film_grain_params_create_side_data
AVFilmGrainParams * av_film_grain_params_create_side_data(AVFrame *frame)
Allocate a complete AVFilmGrainParams and add it to the frame.
Definition: film_grain_params.c:33
av1_decode_free
static av_cold int av1_decode_free(AVCodecContext *avctx)
Definition: av1dec.c:763
AV1RawMetadata::hdr_cll
AV1RawMetadataHDRCLL hdr_cll
Definition: cbs_av1.h:397
av_assert0
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Definition: avassert.h:42
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
init_tile_data
static int init_tile_data(AV1DecContext *s)
Definition: av1dec.c:410
AV_LOG_DEBUG
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Definition: log.h:231
AVPacketSideData::data
uint8_t * data
Definition: packet.h:425
ff_progress_frame_unref
void ff_progress_frame_unref(ProgressFrame *f)
Give up a reference to the underlying frame contained in a ProgressFrame and reset the ProgressFrame,...
Definition: decode.c:1962
decode.h
ff_av1_profiles
const AVProfile ff_av1_profiles[]
Definition: profiles.c:163
get_sw_pixel_format
static enum AVPixelFormat get_sw_pixel_format(void *logctx, const AV1RawSequenceHeader *seq)
Definition: av1dec.c:473
AV1RawColorConfig::transfer_characteristics
uint8_t transfer_characteristics
Definition: cbs_av1.h:57
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
AV_PIX_FMT_YUV420P
@ AV_PIX_FMT_YUV420P
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
Definition: pixfmt.h:73
av1dec.h
get_tiles_info
static int get_tiles_info(AVCodecContext *avctx, const AV1RawTileGroup *tile_group)
Definition: av1dec.c:428
export_itut_t35
static int export_itut_t35(AVCodecContext *avctx, AVFrame *frame, const AV1RawMetadataITUTT35 *itut_t35)
Definition: av1dec.c:979
CODEC_LONG_NAME
#define CODEC_LONG_NAME(str)
Definition: codec_internal.h:349
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:2263
load_grain_params
static void load_grain_params(AV1DecContext *s)
Definition: av1dec.c:390
AV_PIX_FMT_GRAY10
#define AV_PIX_FMT_GRAY10
Definition: pixfmt.h:525
ff_av1_decoder
const FFCodec ff_av1_decoder
Definition: av1dec.c:1546
AVDISCARD_ALL
@ AVDISCARD_ALL
discard all
Definition: defs.h:232
fail
#define fail
Definition: test.h:478
AVFilmGrainAOMParams::uv_mult_luma
int uv_mult_luma[2]
Definition: film_grain_params.h:106
AV1_FRAME_INTRA_ONLY
@ AV1_FRAME_INTRA_ONLY
Definition: av1.h:55
LIBAVUTIL_VERSION_INT
#define LIBAVUTIL_VERSION_INT
Definition: version.h:85
AV1RawOBU
Definition: cbs_av1.h:413
AVClass
Describe the class of an AVClass context structure.
Definition: log.h:76
av_clip_int16
#define av_clip_int16
Definition: common.h:115
HWACCEL_MAX
#define HWACCEL_MAX
NULL
#define NULL
Definition: coverity.c:32
AVERROR_PATCHWELCOME
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
Definition: error.h:64
AV1RawFilmGrainParams::cb_mult
uint8_t cb_mult
Definition: cbs_av1.h:164
AVCodecContext::color_range
enum AVColorRange color_range
MPEG vs JPEG YUV range.
Definition: avcodec.h:681
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
FFITUTT35
Definition: itut35.h:50
AV_CODEC_ID_AV1
@ AV_CODEC_ID_AV1
Definition: codec_id.h:275
hwaccel_internal.h
AV1RawFrameHeader
Definition: cbs_av1.h:174
AVCHROMA_LOC_LEFT
@ AVCHROMA_LOC_LEFT
MPEG-2/4 4:2:0, H.264 default for 4:2:0.
Definition: pixfmt.h:804
AV1_CSP_COLOCATED
@ AV1_CSP_COLOCATED
Definition: av1.h:135
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:806
AVCodecContext::internal
struct AVCodecInternal * internal
Private context used for internal data.
Definition: avcodec.h:478
ff_itut_t35_parse_buffer
int ff_itut_t35_parse_buffer(FFITUTT35 *const itut_t35, const uint8_t *buf, size_t buf_size, int flags)
Parse a raw ITU-T T35 buffer to get the country code, provider code, and set them plus the pointer an...
Definition: itut35.c:34
av_fallthrough
#define av_fallthrough
Definition: attributes.h:67
AV1RawTileData::data_size
size_t data_size
Definition: cbs_av1.h:303
av1_frame_unref
static void av1_frame_unref(AV1Frame *f)
Definition: av1dec.c:709
av_default_item_name
const char * av_default_item_name(void *ptr)
Return the context name.
Definition: log.c:242
AV_PICTURE_TYPE_I
@ AV_PICTURE_TYPE_I
Intra.
Definition: avutil.h:278
AV1RawColorConfig::chroma_sample_position
uint8_t chroma_sample_position
Definition: cbs_av1.h:63
profiles.h
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
ff_set_sar
int ff_set_sar(AVCodecContext *avctx, AVRational sar)
Check that the provided sample aspect ratio is valid and set it on the codec context.
Definition: utils.c:106
flush
void(* flush)(AVBSFContext *ctx)
Definition: dts2pts.c:610
AV1_OBU_TILE_GROUP
@ AV1_OBU_TILE_GROUP
Definition: av1.h:33
update_context_with_frame_header
static int update_context_with_frame_header(AVCodecContext *avctx, const AV1RawFrameHeader *header)
Definition: av1dec.c:832
abs
#define abs(x)
Definition: cuda_runtime.h:35
attributes.h
AV_PIX_FMT_D3D12
@ AV_PIX_FMT_D3D12
Hardware surfaces for Direct3D 12.
Definition: pixfmt.h:440
AV_PIX_FMT_YUV422P10
#define AV_PIX_FMT_YUV422P10
Definition: pixfmt.h:546
skip_mode_params
static void skip_mode_params(AV1DecContext *s)
Definition: av1dec.c:268
AV_PIX_FMT_GRAY8
@ AV_PIX_FMT_GRAY8
Y , 8bpp.
Definition: pixfmt.h:81
AVFilmGrainParams::subsampling_x
int subsampling_x
Intended subsampling ratio, or 0 for luma-only streams.
Definition: film_grain_params.h:225
FF_HW_HAS_CB
#define FF_HW_HAS_CB(avctx, function)
Definition: hwaccel_internal.h:179
AVCodecContext::level
int level
Encoding level descriptor.
Definition: avcodec.h:1646
AV_PICTURE_TYPE_SP
@ AV_PICTURE_TYPE_SP
Switching Predicted.
Definition: avutil.h:283
AV1_FRAME_INTER
@ AV1_FRAME_INTER
Definition: av1.h:54
av_opt_set_int
int av_opt_set_int(void *obj, const char *name, int64_t val, int search_flags)
Definition: opt.c:869
AV1RawSequenceHeader::max_frame_height_minus_1
uint16_t max_frame_height_minus_1
Definition: cbs_av1.h:108
ff_itut_t35_parse_payload_to_frame
int ff_itut_t35_parse_payload_to_frame(FFITUTT35 *const itut_t35, FFITUTT35Aux *const aux, AVCodecContext *const avctx, AVFrame *const frame)
Parse a pre-processed ITU-T T35 payload to fill a frame's side data.
Definition: itut35.c:322
resolve_divisor
static int16_t resolve_divisor(uint32_t d, uint16_t *shift)
Resolve divisor process.
Definition: av1dec.c:159
AV1_OBU_FRAME
@ AV1_OBU_FRAME
Definition: av1.h:35
AVFilmGrainAOMParams::num_uv_points
int num_uv_points[2]
If chroma_scaling_from_luma is set to 0, signals the chroma scaling function parameters.
Definition: film_grain_params.h:62
AV1RawMetadata::metadata
union AV1RawMetadata::@89 metadata
AV1RawFilmGrainParams::point_cr_value
uint8_t point_cr_value[10]
Definition: cbs_av1.h:155
AVDISCARD_NONKEY
@ AVDISCARD_NONKEY
discard all frames except keyframes
Definition: defs.h:231
f
f
Definition: af_crystalizer.c:122
init
int(* init)(AVBSFContext *ctx)
Definition: dts2pts.c:608
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:49
AV1RawFilmGrainParams::cb_offset
uint16_t cb_offset
Definition: cbs_av1.h:166
NULL_IF_CONFIG_SMALL
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
Definition: internal.h:88
height
#define height
Definition: dsp.h:89
av_frame_ref
int av_frame_ref(AVFrame *dst, const AVFrame *src)
Set up a new reference to the data described by the source frame.
Definition: frame.c:278
decode_unsigned_subexp_with_ref
static uint32_t decode_unsigned_subexp_with_ref(uint32_t sub_exp, int mx, int r)
Definition: av1dec.c:83
codec_internal.h
AV1RawTimingInfo::num_ticks_per_picture_minus_1
uint32_t num_ticks_per_picture_minus_1
Definition: cbs_av1.h:72
shift
static int shift(int a, int b)
Definition: bonk.c:261
dst
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
Definition: dsp.h:87
i
#define i(width, name, range_min, range_max)
Definition: cbs_h264.c:63
AV_PIX_FMT_YUV422P12
#define AV_PIX_FMT_YUV422P12
Definition: pixfmt.h:550
av1_decode_flush
static av_cold void av1_decode_flush(AVCodecContext *avctx)
Definition: av1dec.c:1506
size
int size
Definition: twinvq_data.h:10344
AV1DecContext
Definition: av1dec.h:85
AV1RawOBU::sequence_header
AV1RawSequenceHeader sequence_header
Definition: cbs_av1.h:419
av_make_q
static AVRational av_make_q(int num, int den)
Create an AVRational.
Definition: rational.h:71
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:552
AVFilmGrainParams
This structure describes how to handle film grain synthesis in video for specific codecs.
Definition: film_grain_params.h:201
AV1_OBU_SEQUENCE_HEADER
@ AV1_OBU_SEQUENCE_HEADER
Definition: av1.h:30
AVCodecHWConfigInternal
Definition: hwconfig.h:25
ff_av1_framerate
AVRational ff_av1_framerate(int64_t ticks_per_frame, int64_t units_per_tick, int64_t time_scale)
Definition: av1_parse.c:110
header
static const uint8_t header[24]
Definition: sdr2.c:68
diff
static av_always_inline int diff(const struct color_info *a, const struct color_info *b, const int trans_thresh)
Definition: vf_paletteuse.c:166
AV1RawColorConfig::color_description_present_flag
uint8_t color_description_present_flag
Definition: cbs_av1.h:55
AVPacket::dts
int64_t dts
Decompression timestamp in AVStream->time_base units; the time at which the packet is decompressed.
Definition: packet.h:602
av_refstruct_ref
void * av_refstruct_ref(void *obj)
Create a new reference to an object managed via this API, i.e.
Definition: refstruct.c:140
a
The reader does not expect b to be semantically here and if the code is changed by maybe adding a a division or other the signedness will almost certainly be mistaken To avoid this confusion a new type was SUINT is the C unsigned type but it holds a signed int to use the same example SUINT a
Definition: undefined.txt:41
av_reallocp_array
int av_reallocp_array(void *ptr, size_t nmemb, size_t size)
Allocate, reallocate an array through a pointer to a pointer.
Definition: mem.c:225
VD
#define VD
Definition: av1dec.c:1532
HWACCEL_D3D11VA
#define HWACCEL_D3D11VA(codec)
Definition: hwconfig.h:80
AV1_REF_FRAME_ALTREF
@ AV1_REF_FRAME_ALTREF
Definition: av1.h:69
AV_PIX_FMT_D3D11
@ AV_PIX_FMT_D3D11
Hardware surfaces for Direct3D11.
Definition: pixfmt.h:336
AV1_MAX_SEGMENTS
@ AV1_MAX_SEGMENTS
Definition: av1.h:89
AV1RawFilmGrainParams::grain_scale_shift
uint8_t grain_scale_shift
Definition: cbs_av1.h:163
HWACCEL_NVDEC
#define HWACCEL_NVDEC(codec)
Definition: hwconfig.h:68
AVFilmGrainAOMParams::ar_coeffs_y
int8_t ar_coeffs_y[24]
Luma auto-regression coefficients.
Definition: film_grain_params.h:80
AV_PIX_FMT_VAAPI
@ AV_PIX_FMT_VAAPI
Hardware acceleration through VA-API, data[3] contains a VASurfaceID.
Definition: pixfmt.h:126
AV1RawOBU::frame_header
AV1RawFrameHeader frame_header
Definition: cbs_av1.h:420
av1_receive_frame
static int av1_receive_frame(AVCodecContext *avctx, AVFrame *frame)
Definition: av1dec.c:1476
AV1_WARP_MODEL_AFFINE
@ AV1_WARP_MODEL_AFFINE
Definition: av1.h:117
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
AV_PIX_FMT_VDPAU
@ AV_PIX_FMT_VDPAU
HW acceleration through VDPAU, Picture.data[3] contains a VdpVideoSurface.
Definition: pixfmt.h:194
AV1RawOBU::metadata
AV1RawMetadata metadata
Definition: cbs_av1.h:427
AV_PIX_FMT_VIDEOTOOLBOX
@ AV_PIX_FMT_VIDEOTOOLBOX
hardware decoding through Videotoolbox
Definition: pixfmt.h:305
AV1RawMetadata::metadata_type
uint64_t metadata_type
Definition: cbs_av1.h:395
export_film_grain
static int export_film_grain(AVCodecContext *avctx, AVFrame *frame)
Definition: av1dec.c:1050
AV1_OBU_PADDING
@ AV1_OBU_PADDING
Definition: av1.h:39
AVFilmGrainParams::color_primaries
enum AVColorPrimaries color_primaries
Definition: film_grain_params.h:231
AVDISCARD_NONINTRA
@ AVDISCARD_NONINTRA
discard all non intra frames
Definition: defs.h:230
CodedBitstreamUnit::data_ref
AVBufferRef * data_ref
A reference to the buffer containing data.
Definition: cbs.h:105
AVPacket::pts
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...
Definition: packet.h:596
round
static av_always_inline av_const double round(double x)
Definition: libm.h:446
AVCodecContext::extradata
uint8_t * extradata
Out-of-band global headers that may be used by some codecs.
Definition: avcodec.h:526
AV_PIX_FMT_CUARRAY
@ AV_PIX_FMT_CUARRAY
hardware decoding through openharmony
Definition: pixfmt.h:506
div_lut
static const uint16_t div_lut[AV1_DIV_LUT_NUM]
same with Div_Lut defined in spec 7.11.3.7
Definition: av1dec.c:46
AV1RawMetadata::hdr_mdcv
AV1RawMetadataHDRMDCV hdr_mdcv
Definition: cbs_av1.h:398
AVFilmGrainParams::subsampling_y
int subsampling_y
Definition: film_grain_params.h:225
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
s
uint8_t s
Definition: llvidencdsp.c:39
delta
float delta
Definition: vorbis_enc_data.h:430
FFMIN
#define FFMIN(a, b)
Definition: macros.h:49
av_frame_unref
void av_frame_unref(AVFrame *frame)
Unreference all the buffers referenced by frame and reset the frame fields.
Definition: frame.c:496
AV1RawSequenceHeader::max_frame_width_minus_1
uint16_t max_frame_width_minus_1
Definition: cbs_av1.h:107
AV1RawSequenceHeader::color_config
AV1RawColorConfig color_config
Definition: cbs_av1.h:137
AV1RawMetadataITUTT35::payload
uint8_t * payload
Definition: cbs_av1.h:367
AVFilmGrainAOMParams::scaling_shift
int scaling_shift
Specifies the shift applied to the chroma components.
Definition: film_grain_params.h:69
AVCodec::name
const char * name
Name of the codec implementation.
Definition: codec.h:176
AV1_GM_ABS_TRANS_BITS
@ AV1_GM_ABS_TRANS_BITS
Definition: av1.h:110
av_buffer_replace
int av_buffer_replace(AVBufferRef **pdst, const AVBufferRef *src)
Ensure dst refers to the same data as src.
Definition: buffer.c:233
AVCodecContext::chroma_sample_location
enum AVChromaLocation chroma_sample_location
This defines the location of chroma samples.
Definition: avcodec.h:688
AV1RawTileGroup::tg_start
uint16_t tg_start
Definition: cbs_av1.h:312
AVMasteringDisplayMetadata
Mastering display metadata capable of representing the color volume of the display used to master the...
Definition: mastering_display_metadata.h:38
AV1RawSequenceHeader::enable_order_hint
uint8_t enable_order_hint
Definition: cbs_av1.h:122
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:766
AV1RawMetadataITUTT35::payload_ref
AVBufferRef * payload_ref
Definition: cbs_av1.h:368
HWACCEL_VIDEOTOOLBOX
#define HWACCEL_VIDEOTOOLBOX(codec)
Definition: hwconfig.h:76
AV1RawOBU::tile_group
AV1RawTileGroup tile_group
Definition: cbs_av1.h:422
AV1RawFilmGrainParams::update_grain
uint8_t update_grain
Definition: cbs_av1.h:145
avcodec.h
AV1RawTileGroup::tile_data
AV1RawTileData tile_data
Definition: cbs_av1.h:315
av_cmp_q
static int av_cmp_q(AVRational a, AVRational b)
Compare two rationals.
Definition: rational.h:89
av1_class
static const AVClass av1_class
Definition: av1dec.c:1539
AVFilmGrainParams::height
int height
Definition: film_grain_params.h:220
ret
ret
Definition: filter_design.txt:187
AV1RawColorConfig::subsampling_x
uint8_t subsampling_x
Definition: cbs_av1.h:61
AV1_METADATA_TYPE_HDR_MDCV
@ AV1_METADATA_TYPE_HDR_MDCV
Definition: av1.h:45
AVClass::class_name
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
Definition: log.h:81
AV1_OBU_TILE_LIST
@ AV1_OBU_TILE_LIST
Definition: av1.h:37
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
atsc_a53.h
AV1RawColorConfig::high_bitdepth
uint8_t high_bitdepth
Definition: cbs_av1.h:51
AV1RawFilmGrainParams::cr_luma_mult
uint8_t cr_luma_mult
Definition: cbs_av1.h:168
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:2308
AV1RawFilmGrainParams::film_grain_params_ref_idx
uint8_t film_grain_params_ref_idx
Definition: cbs_av1.h:146
read_global_param
static void read_global_param(AV1DecContext *s, int type, int ref, int idx)
Definition: av1dec.c:100
av_fifo_alloc2
AVFifo * av_fifo_alloc2(size_t nb_elems, size_t elem_size, unsigned int flags)
Allocate and initialize an AVFifo with a given element size.
Definition: fifo.c:47
AV_PIX_FMT_YUV420P12
#define AV_PIX_FMT_YUV420P12
Definition: pixfmt.h:549
AV1_DIV_LUT_NUM
@ AV1_DIV_LUT_NUM
Definition: av1.h:122
ff_progress_frame_replace
void ff_progress_frame_replace(ProgressFrame *dst, const ProgressFrame *src)
Do nothing if dst and src already refer to the same AVFrame; otherwise unreference dst and if src is ...
Definition: decode.c:1969
HWACCEL_VULKAN
#define HWACCEL_VULKAN(codec)
Definition: hwconfig.h:78
AV1RawMetadataITUTT35
Definition: cbs_av1.h:363
AVCodecContext
main external API structure.
Definition: avcodec.h:443
get_shear_params_valid
static uint8_t get_shear_params_valid(AV1DecContext *s, int idx)
check if global motion params is valid.
Definition: av1dec.c:179
AV1_FRAME_SWITCH
@ AV1_FRAME_SWITCH
Definition: av1.h:56
AVFilmGrainAOMParams::ar_coeff_lag
int ar_coeff_lag
Specifies the auto-regression lag.
Definition: film_grain_params.h:74
itut35.h
FF_CODEC_RECEIVE_FRAME_CB
#define FF_CODEC_RECEIVE_FRAME_CB(func)
Definition: codec_internal.h:372
AVFilmGrainAOMParams::y_points
uint8_t y_points[14][2]
Definition: film_grain_params.h:50
AVFilmGrainAOMParams::uv_offset
int uv_offset[2]
Offset used for component scaling function.
Definition: film_grain_params.h:112
av_refstruct_replace
void av_refstruct_replace(void *dstp, const void *src)
Ensure *dstp refers to the same object as src.
Definition: refstruct.c:160
AVRational::den
int den
Denominator.
Definition: rational.h:60
AV_PIX_FMT_NONE
@ AV_PIX_FMT_NONE
Definition: pixfmt.h:72
FF_HW_CALL
#define FF_HW_CALL(avctx, function,...)
Definition: hwaccel_internal.h:173
AV_OPT_TYPE_INT
@ AV_OPT_TYPE_INT
Underlying C type is int.
Definition: opt.h:258
FFITUTT35Aux::dovi
DOVIContext * dovi
A DOVIContext.
Definition: itut35.h:76
AV1RawFilmGrainParams::ar_coeff_lag
uint8_t ar_coeff_lag
Definition: cbs_av1.h:158
AVCodecContext::profile
int profile
profile
Definition: avcodec.h:1636
AV1RawColorConfig::mono_chrome
uint8_t mono_chrome
Definition: cbs_av1.h:53
export_metadata
static int export_metadata(AVCodecContext *avctx, AVFrame *frame)
Definition: av1dec.c:999
AVFilmGrainAOMParams::uv_mult
int uv_mult[2]
Specifies the luma/chroma multipliers for the index to the component scaling function.
Definition: film_grain_params.h:105
hdr_dynamic_metadata.h
ref
static int ref[MAX_W *MAX_W]
Definition: jpeg2000dwt.c:117
AVCodecContext::export_side_data
int export_side_data
Bit set of AV_CODEC_EXPORT_DATA_* flags, which affects the kind of metadata exported in frame,...
Definition: avcodec.h:1779
AV1RawFilmGrainParams::ar_coeffs_cb_plus_128
uint8_t ar_coeffs_cb_plus_128[25]
Definition: cbs_av1.h:160
AV1_WARP_MODEL_ROTZOOM
@ AV1_WARP_MODEL_ROTZOOM
Definition: av1.h:116
AV1RawFilmGrainParams::ar_coeffs_y_plus_128
uint8_t ar_coeffs_y_plus_128[24]
Definition: cbs_av1.h:159
AVMasteringDisplayMetadata::min_luminance
AVRational min_luminance
Min luminance of mastering display (cd/m^2).
Definition: mastering_display_metadata.h:52
AV1RawSequenceHeader::order_hint_bits_minus_1
uint8_t order_hint_bits_minus_1
Definition: cbs_av1.h:131
AV1RawColorConfig::matrix_coefficients
uint8_t matrix_coefficients
Definition: cbs_av1.h:58
AV_PIX_FMT_YUV444P
@ AV_PIX_FMT_YUV444P
planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)
Definition: pixfmt.h:78
AV1_FRAME_KEY
@ AV1_FRAME_KEY
Definition: av1.h:53
AV1RawTileGroup
Definition: cbs_av1.h:306
AVFilmGrainParams::color_range
enum AVColorRange color_range
Intended video signal characteristics.
Definition: film_grain_params.h:230
AV1RawFilmGrainParams::cr_offset
uint16_t cr_offset
Definition: cbs_av1.h:169
AV1RawFilmGrainParams::point_y_scaling
uint8_t point_y_scaling[14]
Definition: cbs_av1.h:149
AVFilmGrainAOMParams::overlap_flag
int overlap_flag
Signals whether to overlap film grain blocks.
Definition: film_grain_params.h:117
AV_PICTURE_TYPE_P
@ AV_PICTURE_TYPE_P
Predicted.
Definition: avutil.h:279
AVMEDIA_TYPE_VIDEO
@ AVMEDIA_TYPE_VIDEO
Definition: avutil.h:200
AV1RawOBU::frame
AV1RawFrame frame
Definition: cbs_av1.h:421
AV_PIX_FMT_YUV422P
@ AV_PIX_FMT_YUV422P
planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
Definition: pixfmt.h:77
AV1_GM_ABS_ALPHA_BITS
@ AV1_GM_ABS_ALPHA_BITS
Definition: av1.h:106
mem.h
AV1RawFilmGrainParams::point_cb_scaling
uint8_t point_cb_scaling[10]
Definition: cbs_av1.h:153
AV1RawMetadataITUTT35::itu_t_t35_country_code
uint8_t itu_t_t35_country_code
Definition: cbs_av1.h:364
mastering_display_metadata.h
AV1RawFrame::tile_group
AV1RawTileGroup tile_group
Definition: cbs_av1.h:320
decode_signed_subexp_with_ref
static int32_t decode_signed_subexp_with_ref(uint32_t sub_exp, int low, int high, int r)
Definition: av1dec.c:93
AVPixFmtDescriptor
Descriptor that unambiguously describes how the bits of a pixel are stored in the up to 4 data planes...
Definition: pixdesc.h:69
AV1_WARPEDMODEL_PREC_BITS
@ AV1_WARPEDMODEL_PREC_BITS
Definition: av1.h:112
w
uint8_t w
Definition: llvidencdsp.c:39
AV1RawColorConfig::twelve_bit
uint8_t twelve_bit
Definition: cbs_av1.h:52
get_pixel_format
static int get_pixel_format(AVCodecContext *avctx)
Definition: av1dec.c:536
alpha
static const int16_t alpha[]
Definition: ilbcdata.h:55
AVPacket
This structure stores compressed data.
Definition: packet.h:580
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
av_freep
#define av_freep(p)
Definition: tableprint_vlc.h:35
OFFSET
#define OFFSET(x)
Definition: av1dec.c:1531
HWACCEL_VAAPI
#define HWACCEL_VAAPI(codec)
Definition: hwconfig.h:72
AV1_PRIMARY_REF_NONE
@ AV1_PRIMARY_REF_NONE
Definition: av1.h:87
AVCodecContext::width
int width
picture width / height.
Definition: avcodec.h:604
TileGroupInfo
Definition: av1dec.h:78
int32_t
int32_t
Definition: audioconvert.c:56
bytestream.h
FFITUTT35Aux
Definition: itut35.h:71
AV1_GM_TRANS_PREC_BITS
@ AV1_GM_TRANS_PREC_BITS
Definition: av1.h:111
bytestream2_init
static av_always_inline void bytestream2_init(GetByteContext *g, const uint8_t *buf, int buf_size)
Definition: bytestream.h:137
AV1RawFilmGrainParams
Definition: cbs_av1.h:142
AV1RawOBU::obu
union AV1RawOBU::@90 obu
AV1_DIV_LUT_PREC_BITS
@ AV1_DIV_LUT_PREC_BITS
Definition: av1.h:121
sequence_header
static int FUNC() sequence_header(CodedBitstreamContext *ctx, RWContext *rw, MPEG2RawSequenceHeader *current)
Definition: cbs_mpeg2_syntax_template.c:19
av_log
#define av_log(a,...)
Definition: tableprint_vlc.h:27
av_fifo_freep2
void av_fifo_freep2(AVFifo **f)
Free an AVFifo and reset pointer to NULL.
Definition: fifo.c:286
AVERROR_INVALIDDATA
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition: error.h:61
av1_receive_frame_internal
static int av1_receive_frame_internal(AVCodecContext *avctx, AVFrame *frame)
Definition: av1dec.c:1232
pkt
static AVPacket * pkt
Definition: demux_decode.c:55
width
#define width
Definition: dsp.h:89
AV_PIX_FMT_GRAY12
#define AV_PIX_FMT_GRAY12
Definition: pixfmt.h:526
AVFilmGrainAOMParams::chroma_scaling_from_luma
int chroma_scaling_from_luma
Signals whether to derive the chroma scaling function from the luma.
Definition: film_grain_params.h:56
AV_FILM_GRAIN_PARAMS_AV1
@ AV_FILM_GRAIN_PARAMS_AV1
The union is valid when interpreted as AVFilmGrainAOMParams (codec.aom)
Definition: film_grain_params.h:30
AV1RawOBUHeader
Definition: cbs_av1.h:38
AVFilmGrainParams::type
enum AVFilmGrainParamsType type
Specifies the codec for which this structure is valid.
Definition: film_grain_params.h:205
set_output_frame
static int set_output_frame(AVCodecContext *avctx, AVFrame *frame)
Definition: av1dec.c:1120
av_log2
int av_log2(unsigned v)
Definition: intmath.c:26
AV1_OBU_METADATA
@ AV1_OBU_METADATA
Definition: av1.h:34
AV1RawFilmGrainParams::num_cr_points
uint8_t num_cr_points
Definition: cbs_av1.h:154
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
AV_CODEC_EXPORT_DATA_FILM_GRAIN
#define AV_CODEC_EXPORT_DATA_FILM_GRAIN
Decoding only.
Definition: avcodec.h:404
AV_FIFO_FLAG_AUTO_GROW
#define AV_FIFO_FLAG_AUTO_GROW
Automatically resize the FIFO on writes, so that the data fits.
Definition: fifo.h:63
AVFilmGrainAOMParams::ar_coeff_shift
int ar_coeff_shift
Specifies the range of the auto-regressive coefficients.
Definition: film_grain_params.h:93
av_get_pix_fmt_name
const char * av_get_pix_fmt_name(enum AVPixelFormat pix_fmt)
Return the short name for a pixel format, NULL in case pix_fmt is unknown.
Definition: pixdesc.c:3380
AV1_MAX_OPERATING_POINTS
@ AV1_MAX_OPERATING_POINTS
Definition: av1.h:74
AVDOVIDecoderConfigurationRecord
Definition: dovi_meta.h:55
AVFilmGrainAOMParams::ar_coeffs_uv
int8_t ar_coeffs_uv[2][25]
Chroma auto-regression coefficients.
Definition: film_grain_params.h:86
CodedBitstreamAV1Context
Definition: cbs_av1.h:457
AV1_GM_TRANS_ONLY_PREC_BITS
@ AV1_GM_TRANS_ONLY_PREC_BITS
Definition: av1.h:109