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  uint8_t primary_frame, prev_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  prev_frame = s->raw_frame_header->ref_frame_idx[primary_frame];
108  abs_bits = AV1_GM_ABS_ALPHA_BITS;
109  prec_bits = AV1_GM_ALPHA_PREC_BITS;
110 
111  /* setup_past_independence() sets PrevGmParams to default values. We can
112  * simply point to the current's frame gm_params as they will be initialized
113  * with defaults at this point.
114  */
115  if (s->raw_frame_header->primary_ref_frame == AV1_PRIMARY_REF_NONE)
116  prev_gm_param = s->cur_frame.gm_params[ref][idx];
117  else
118  prev_gm_param = s->ref[prev_frame].gm_params[ref][idx];
119 
120  if (idx < 2) {
122  abs_bits = AV1_GM_ABS_TRANS_ONLY_BITS -
123  !s->raw_frame_header->allow_high_precision_mv;
124  prec_bits = AV1_GM_TRANS_ONLY_PREC_BITS -
125  !s->raw_frame_header->allow_high_precision_mv;
126  } else {
127  abs_bits = AV1_GM_ABS_TRANS_BITS;
128  prec_bits = AV1_GM_TRANS_PREC_BITS;
129  }
130  }
131  round = (idx % 3) == 2 ? (1 << AV1_WARPEDMODEL_PREC_BITS) : 0;
132  prec_diff = AV1_WARPEDMODEL_PREC_BITS - prec_bits;
133  sub = (idx % 3) == 2 ? (1 << prec_bits) : 0;
134  mx = 1 << abs_bits;
135  r = (prev_gm_param >> prec_diff) - sub;
136 
137  s->cur_frame.gm_params[ref][idx] =
138  (decode_signed_subexp_with_ref(s->raw_frame_header->gm_params[ref][idx],
139  -mx, mx + 1, r) << prec_diff) + round;
140 }
141 
142 static uint64_t round_two(uint64_t x, uint16_t n)
143 {
144  if (n == 0)
145  return x;
146  return ((x + ((uint64_t)1 << (n - 1))) >> n);
147 }
148 
149 static int64_t round_two_signed(int64_t x, uint16_t n)
150 {
151  return ((x<0) ? -((int64_t)round_two(-x, n)) : (int64_t)round_two(x, n));
152 }
153 
154 /**
155  * Resolve divisor process.
156  * see spec 7.11.3.7
157  */
158 static int16_t resolve_divisor(uint32_t d, uint16_t *shift)
159 {
160  int32_t e, f;
161 
162  *shift = av_log2(d);
163  e = d - (1 << (*shift));
164  if (*shift > AV1_DIV_LUT_BITS)
166  else
167  f = e << (AV1_DIV_LUT_BITS - (*shift));
168 
170 
171  return div_lut[f];
172 }
173 
174 /**
175  * check if global motion params is valid.
176  * see spec 7.11.3.6
177  */
178 static uint8_t get_shear_params_valid(AV1DecContext *s, int idx)
179 {
180  int16_t alpha, beta, gamma, delta, divf, divs;
181  int64_t v, w;
182  int32_t *param = &s->cur_frame.gm_params[idx][0];
183  if (param[2] <= 0)
184  return 0;
185 
186  alpha = av_clip_int16(param[2] - (1 << AV1_WARPEDMODEL_PREC_BITS));
187  beta = av_clip_int16(param[3]);
188  divf = resolve_divisor(abs(param[2]), &divs);
189  v = (int64_t)param[4] * (1 << AV1_WARPEDMODEL_PREC_BITS);
190  w = (int64_t)param[3] * param[4];
191  gamma = av_clip_int16((int)round_two_signed((v * divf), divs));
192  delta = av_clip_int16(param[5] - (int)round_two_signed((w * divf), divs) - (1 << AV1_WARPEDMODEL_PREC_BITS));
193 
198 
199  if ((4 * abs(alpha) + 7 * abs(beta)) >= (1 << AV1_WARPEDMODEL_PREC_BITS) ||
200  (4 * abs(gamma) + 4 * abs(delta)) >= (1 << AV1_WARPEDMODEL_PREC_BITS))
201  return 0;
202 
203  return 1;
204 }
205 
206 /**
207 * update gm type/params, since cbs already implemented part of this function,
208 * so we don't need to full implement spec.
209 */
211 {
212  const AV1RawFrameHeader *header = s->raw_frame_header;
213  int type, ref;
214 
216  s->cur_frame.gm_type[ref] = AV1_WARP_MODEL_IDENTITY;
217  for (int i = 0; i < 6; i++)
218  s->cur_frame.gm_params[ref][i] = (i % 3 == 2) ?
219  1 << AV1_WARPEDMODEL_PREC_BITS : 0;
220  }
221  if (header->frame_type == AV1_FRAME_KEY ||
222  header->frame_type == AV1_FRAME_INTRA_ONLY)
223  return;
224 
226  if (header->is_global[ref]) {
227  if (header->is_rot_zoom[ref]) {
229  } else {
230  type = header->is_translation[ref] ? AV1_WARP_MODEL_TRANSLATION
232  }
233  } else {
235  }
236  s->cur_frame.gm_type[ref] = type;
237 
238  if (type >= AV1_WARP_MODEL_ROTZOOM) {
239  read_global_param(s, type, ref, 2);
240  read_global_param(s, type, ref, 3);
241  if (type == AV1_WARP_MODEL_AFFINE) {
242  read_global_param(s, type, ref, 4);
243  read_global_param(s, type, ref, 5);
244  } else {
245  s->cur_frame.gm_params[ref][4] = -s->cur_frame.gm_params[ref][3];
246  s->cur_frame.gm_params[ref][5] = s->cur_frame.gm_params[ref][2];
247  }
248  }
250  read_global_param(s, type, ref, 0);
251  read_global_param(s, type, ref, 1);
252  }
253  if (type <= AV1_WARP_MODEL_AFFINE) {
254  s->cur_frame.gm_invalid[ref] = !get_shear_params_valid(s, ref);
255  }
256  }
257 }
258 
260  unsigned int a, unsigned int b)
261 {
262  unsigned int diff = a - b;
263  unsigned int m = 1 << seq->order_hint_bits_minus_1;
264  return (diff & (m - 1)) - (diff & m);
265 }
266 
268 {
269  const AV1RawFrameHeader *header = s->raw_frame_header;
270  const AV1RawSequenceHeader *seq = s->raw_seq;
271 
272  int forward_idx, backward_idx;
273  int forward_hint, backward_hint;
274  int second_forward_idx, second_forward_hint;
275  int ref_hint, dist, i;
276 
277  if (header->frame_type == AV1_FRAME_KEY ||
278  header->frame_type == AV1_FRAME_INTRA_ONLY ||
279  !header->reference_select || !seq->enable_order_hint)
280  return;
281 
282  forward_idx = -1;
283  backward_idx = -1;
284  for (i = 0; i < AV1_REFS_PER_FRAME; i++) {
285  if (!s->ref[header->ref_frame_idx[i]].raw_frame_header)
286  return;
287  ref_hint = s->ref[header->ref_frame_idx[i]].raw_frame_header->order_hint;
288  dist = get_relative_dist(seq, ref_hint, header->order_hint);
289  if (dist < 0) {
290  if (forward_idx < 0 ||
291  get_relative_dist(seq, ref_hint, forward_hint) > 0) {
292  forward_idx = i;
293  forward_hint = ref_hint;
294  }
295  } else if (dist > 0) {
296  if (backward_idx < 0 ||
297  get_relative_dist(seq, ref_hint, backward_hint) < 0) {
298  backward_idx = i;
299  backward_hint = ref_hint;
300  }
301  }
302  }
303 
304  if (forward_idx < 0) {
305  return;
306  } else if (backward_idx >= 0) {
307  s->cur_frame.skip_mode_frame_idx[0] =
308  AV1_REF_FRAME_LAST + FFMIN(forward_idx, backward_idx);
309  s->cur_frame.skip_mode_frame_idx[1] =
310  AV1_REF_FRAME_LAST + FFMAX(forward_idx, backward_idx);
311  return;
312  }
313 
314  second_forward_idx = -1;
315  for (i = 0; i < AV1_REFS_PER_FRAME; i++) {
316  ref_hint = s->ref[header->ref_frame_idx[i]].raw_frame_header->order_hint;
317  if (get_relative_dist(seq, ref_hint, forward_hint) < 0) {
318  if (second_forward_idx < 0 ||
319  get_relative_dist(seq, ref_hint, second_forward_hint) > 0) {
320  second_forward_idx = i;
321  second_forward_hint = ref_hint;
322  }
323  }
324  }
325 
326  if (second_forward_idx < 0)
327  return;
328 
329  s->cur_frame.skip_mode_frame_idx[0] =
330  AV1_REF_FRAME_LAST + FFMIN(forward_idx, second_forward_idx);
331  s->cur_frame.skip_mode_frame_idx[1] =
332  AV1_REF_FRAME_LAST + FFMAX(forward_idx, second_forward_idx);
333 }
334 
336 {
337  const AV1RawFrameHeader *header = s->raw_frame_header;
338  int i;
339 
340  if (header->delta_q_y_dc || header->delta_q_u_ac ||
341  header->delta_q_u_dc || header->delta_q_v_ac ||
342  header->delta_q_v_dc) {
343  s->cur_frame.coded_lossless = 0;
344  return;
345  }
346 
347  s->cur_frame.coded_lossless = 1;
348  for (i = 0; i < AV1_MAX_SEGMENTS; i++) {
349  int qindex;
350  if (header->feature_enabled[i][AV1_SEG_LVL_ALT_Q]) {
351  qindex = (header->base_q_idx +
352  header->feature_value[i][AV1_SEG_LVL_ALT_Q]);
353  } else {
354  qindex = header->base_q_idx;
355  }
356  qindex = av_clip_uintp2(qindex, 8);
357 
358  if (qindex) {
359  s->cur_frame.coded_lossless = 0;
360  return;
361  }
362  }
363 }
364 
366 {
367  const AV1RawFrameHeader *header = s->raw_frame_header;
368  const AV1RawSequenceHeader *seq = s->raw_seq;
369  AV1Frame *frame = &s->cur_frame;
370 
371  frame->order_hint = header->order_hint;
372 
373  for (int i = 0; i < AV1_REFS_PER_FRAME; i++) {
374  int ref_name = i + AV1_REF_FRAME_LAST;
375  int ref_slot = header->ref_frame_idx[i];
376  int ref_order_hint = s->ref[ref_slot].order_hint;
377 
378  frame->order_hints[ref_name] = ref_order_hint;
379  if (!seq->enable_order_hint) {
380  frame->ref_frame_sign_bias[ref_name] = 0;
381  } else {
382  frame->ref_frame_sign_bias[ref_name] =
383  get_relative_dist(seq, ref_order_hint,
384  frame->order_hint) > 0;
385  }
386  }
387 }
388 
390 {
391  const AV1RawFrameHeader *header = s->raw_frame_header;
392  const AV1RawFilmGrainParams *film_grain = &header->film_grain, *src;
393  AV1RawFilmGrainParams *dst = &s->cur_frame.film_grain;
394 
395  if (!film_grain->apply_grain)
396  return;
397 
398  if (film_grain->update_grain) {
399  memcpy(dst, film_grain, sizeof(*dst));
400  return;
401  }
402 
403  src = &s->ref[film_grain->film_grain_params_ref_idx].film_grain;
404 
405  memcpy(dst, src, sizeof(*dst));
406  dst->grain_seed = film_grain->grain_seed;
407 }
408 
410 
411 {
412  int cur_tile_num =
413  s->raw_frame_header->tile_cols * s->raw_frame_header->tile_rows;
414  if (s->tile_num < cur_tile_num) {
415  int ret = av_reallocp_array(&s->tile_group_info, cur_tile_num,
416  sizeof(TileGroupInfo));
417  if (ret < 0) {
418  s->tile_num = 0;
419  return ret;
420  }
421  }
422  s->tile_num = cur_tile_num;
423 
424  return 0;
425 }
426 
427 static int get_tiles_info(AVCodecContext *avctx, const AV1RawTileGroup *tile_group)
428 {
429  AV1DecContext *s = avctx->priv_data;
430  GetByteContext gb;
431  uint16_t tile_num, tile_row, tile_col;
432  uint32_t size = 0, size_bytes = 0;
433 
434  bytestream2_init(&gb, tile_group->tile_data.data,
435  tile_group->tile_data.data_size);
436  s->tg_start = tile_group->tg_start;
437  s->tg_end = tile_group->tg_end;
438 
439  for (tile_num = tile_group->tg_start; tile_num <= tile_group->tg_end; tile_num++) {
440  tile_row = tile_num / s->raw_frame_header->tile_cols;
441  tile_col = tile_num % s->raw_frame_header->tile_cols;
442 
443  if (tile_num == tile_group->tg_end) {
444  s->tile_group_info[tile_num].tile_size = bytestream2_get_bytes_left(&gb);
445  s->tile_group_info[tile_num].tile_offset = bytestream2_tell(&gb);
446  s->tile_group_info[tile_num].tile_row = tile_row;
447  s->tile_group_info[tile_num].tile_column = tile_col;
448  return 0;
449  }
450  size_bytes = s->raw_frame_header->tile_size_bytes_minus1 + 1;
451  if (bytestream2_get_bytes_left(&gb) < size_bytes)
452  return AVERROR_INVALIDDATA;
453  size = 0;
454  for (int i = 0; i < size_bytes; i++)
455  size |= bytestream2_get_byteu(&gb) << 8 * i;
456  if (bytestream2_get_bytes_left(&gb) <= size)
457  return AVERROR_INVALIDDATA;
458  size++;
459 
460  s->tile_group_info[tile_num].tile_size = size;
461  s->tile_group_info[tile_num].tile_offset = bytestream2_tell(&gb);
462  s->tile_group_info[tile_num].tile_row = tile_row;
463  s->tile_group_info[tile_num].tile_column = tile_col;
464 
465  bytestream2_skipu(&gb, size);
466  }
467 
468  return 0;
469 
470 }
471 
472 static enum AVPixelFormat get_sw_pixel_format(void *logctx,
473  const AV1RawSequenceHeader *seq)
474 {
475  int bit_depth;
477 
478  if (seq->seq_profile == 2 && seq->color_config.high_bitdepth)
479  bit_depth = seq->color_config.twelve_bit ? 12 : 10;
480  else if (seq->seq_profile <= 2)
481  bit_depth = seq->color_config.high_bitdepth ? 10 : 8;
482  else {
483  av_log(logctx, AV_LOG_ERROR,
484  "Unknown AV1 profile %d.\n", seq->seq_profile);
485  return AV_PIX_FMT_NONE;
486  }
487 
488  if (!seq->color_config.mono_chrome) {
489  // 4:4:4 x:0 y:0, 4:2:2 x:1 y:0, 4:2:0 x:1 y:1
490  if (seq->color_config.subsampling_x == 0 &&
491  seq->color_config.subsampling_y == 0) {
492  if (bit_depth == 8)
494  else if (bit_depth == 10)
496  else if (bit_depth == 12)
498  else
499  av_assert0(0);
500  } else if (seq->color_config.subsampling_x == 1 &&
501  seq->color_config.subsampling_y == 0) {
502  if (bit_depth == 8)
504  else if (bit_depth == 10)
506  else if (bit_depth == 12)
508  else
509  av_assert0(0);
510  } else if (seq->color_config.subsampling_x == 1 &&
511  seq->color_config.subsampling_y == 1) {
512  if (bit_depth == 8)
514  else if (bit_depth == 10)
516  else if (bit_depth == 12)
518  else
519  av_assert0(0);
520  }
521  } else {
522  if (bit_depth == 8)
524  else if (bit_depth == 10)
526  else if (bit_depth == 12)
528  else
529  av_assert0(0);
530  }
531 
532  return pix_fmt;
533 }
534 
536 {
537  AV1DecContext *s = avctx->priv_data;
538  const AV1RawSequenceHeader *seq = s->raw_seq;
539  int ret;
540  enum AVPixelFormat pix_fmt = get_sw_pixel_format(avctx, seq);
541 #define HWACCEL_MAX (CONFIG_AV1_DXVA2_HWACCEL + \
542  CONFIG_AV1_D3D11VA_HWACCEL * 2 + \
543  CONFIG_AV1_D3D12VA_HWACCEL + \
544  CONFIG_AV1_NVDEC_HWACCEL + \
545  CONFIG_AV1_VAAPI_HWACCEL + \
546  CONFIG_AV1_VDPAU_HWACCEL + \
547  CONFIG_AV1_VIDEOTOOLBOX_HWACCEL + \
548  CONFIG_AV1_VULKAN_HWACCEL)
549  enum AVPixelFormat pix_fmts[HWACCEL_MAX + 2], *fmtp = pix_fmts;
550 
551  if (pix_fmt == AV_PIX_FMT_NONE)
552  return -1;
553 
554  switch (pix_fmt) {
555  case AV_PIX_FMT_YUV420P:
556 #if CONFIG_AV1_DXVA2_HWACCEL
557  *fmtp++ = AV_PIX_FMT_DXVA2_VLD;
558 #endif
559 #if CONFIG_AV1_D3D11VA_HWACCEL
560  *fmtp++ = AV_PIX_FMT_D3D11VA_VLD;
561  *fmtp++ = AV_PIX_FMT_D3D11;
562 #endif
563 #if CONFIG_AV1_D3D12VA_HWACCEL
564  *fmtp++ = AV_PIX_FMT_D3D12;
565 #endif
566 #if CONFIG_AV1_NVDEC_HWACCEL
567  *fmtp++ = AV_PIX_FMT_CUDA;
568 #endif
569 #if CONFIG_AV1_VAAPI_HWACCEL
570  *fmtp++ = AV_PIX_FMT_VAAPI;
571 #endif
572 #if CONFIG_AV1_VDPAU_HWACCEL
573  *fmtp++ = AV_PIX_FMT_VDPAU;
574 #endif
575 #if CONFIG_AV1_VIDEOTOOLBOX_HWACCEL
576  *fmtp++ = AV_PIX_FMT_VIDEOTOOLBOX;
577 #endif
578 #if CONFIG_AV1_VULKAN_HWACCEL
579  *fmtp++ = AV_PIX_FMT_VULKAN;
580 #endif
581  break;
583 #if CONFIG_AV1_DXVA2_HWACCEL
584  *fmtp++ = AV_PIX_FMT_DXVA2_VLD;
585 #endif
586 #if CONFIG_AV1_D3D11VA_HWACCEL
587  *fmtp++ = AV_PIX_FMT_D3D11VA_VLD;
588  *fmtp++ = AV_PIX_FMT_D3D11;
589 #endif
590 #if CONFIG_AV1_D3D12VA_HWACCEL
591  *fmtp++ = AV_PIX_FMT_D3D12;
592 #endif
593 #if CONFIG_AV1_NVDEC_HWACCEL
594  *fmtp++ = AV_PIX_FMT_CUDA;
595 #endif
596 #if CONFIG_AV1_VAAPI_HWACCEL
597  *fmtp++ = AV_PIX_FMT_VAAPI;
598 #endif
599 #if CONFIG_AV1_VDPAU_HWACCEL
600  *fmtp++ = AV_PIX_FMT_VDPAU;
601 #endif
602 #if CONFIG_AV1_VIDEOTOOLBOX_HWACCEL
603  *fmtp++ = AV_PIX_FMT_VIDEOTOOLBOX;
604 #endif
605 #if CONFIG_AV1_VULKAN_HWACCEL
606  *fmtp++ = AV_PIX_FMT_VULKAN;
607 #endif
608  break;
610 #if CONFIG_AV1_VULKAN_HWACCEL
611  *fmtp++ = AV_PIX_FMT_VULKAN;
612 #endif
613  break;
614  case AV_PIX_FMT_YUV422P:
615 #if CONFIG_AV1_VULKAN_HWACCEL
616  *fmtp++ = AV_PIX_FMT_VULKAN;
617 #endif
618  break;
620 #if CONFIG_AV1_VULKAN_HWACCEL
621  *fmtp++ = AV_PIX_FMT_VULKAN;
622 #endif
623  break;
625 #if CONFIG_AV1_VULKAN_HWACCEL
626  *fmtp++ = AV_PIX_FMT_VULKAN;
627 #endif
628  break;
629  case AV_PIX_FMT_YUV444P:
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_GRAY8:
645 #if CONFIG_AV1_NVDEC_HWACCEL
646  *fmtp++ = AV_PIX_FMT_CUDA;
647 #endif
648  break;
649  case AV_PIX_FMT_GRAY10:
650 #if CONFIG_AV1_NVDEC_HWACCEL
651  *fmtp++ = AV_PIX_FMT_CUDA;
652 #endif
653  break;
654  }
655 
656  *fmtp++ = pix_fmt;
657  *fmtp = AV_PIX_FMT_NONE;
658 
659  for (int i = 0; pix_fmts[i] != pix_fmt; i++)
660  if (pix_fmts[i] == avctx->pix_fmt) {
661  s->pix_fmt = pix_fmt;
662  return 1;
663  }
664 
665  ret = ff_get_format(avctx, pix_fmts);
666 
667  /**
668  * check if the HW accel is inited correctly. If not, return un-implemented.
669  * Since now the av1 decoder doesn't support native decode, if it will be
670  * implemented in the future, need remove this check.
671  */
672  if (!avctx->hwaccel) {
673  av_log(avctx, AV_LOG_ERROR, "Your platform doesn't support"
674  " hardware accelerated AV1 decoding.\n");
675  avctx->pix_fmt = AV_PIX_FMT_NONE;
676  return AVERROR(ENOSYS);
677  }
678 
679  s->pix_fmt = pix_fmt;
680  avctx->pix_fmt = ret;
681 
682  av_log(avctx, AV_LOG_DEBUG, "AV1 decode get format: %s.\n",
683  av_get_pix_fmt_name(avctx->pix_fmt));
684 
685  return 0;
686 }
687 
689 {
691  av_refstruct_unref(&f->hwaccel_picture_private);
692  av_refstruct_unref(&f->header_ref);
693  f->raw_frame_header = NULL;
694  f->spatial_id = f->temporal_id = 0;
695  memset(f->skip_mode_frame_idx, 0,
696  2 * sizeof(uint8_t));
697  memset(&f->film_grain, 0, sizeof(f->film_grain));
698  f->coded_lossless = 0;
699 }
700 
702 {
703  av_assert1(dst != src);
704 
705  av_refstruct_replace(&dst->header_ref, src->header_ref);
706 
707  dst->raw_frame_header = src->raw_frame_header;
708 
709  ff_progress_frame_replace(&dst->pf, &src->pf);
710 
711  av_refstruct_replace(&dst->hwaccel_picture_private,
712  src->hwaccel_picture_private);
713 
714  dst->spatial_id = src->spatial_id;
715  dst->temporal_id = src->temporal_id;
716  memcpy(dst->gm_invalid,
717  src->gm_invalid,
718  AV1_NUM_REF_FRAMES * sizeof(uint8_t));
719  memcpy(dst->gm_type,
720  src->gm_type,
721  AV1_NUM_REF_FRAMES * sizeof(uint8_t));
722  memcpy(dst->gm_params,
723  src->gm_params,
724  AV1_NUM_REF_FRAMES * 6 * sizeof(int32_t));
725  memcpy(dst->skip_mode_frame_idx,
726  src->skip_mode_frame_idx,
727  2 * sizeof(uint8_t));
728  memcpy(&dst->film_grain,
729  &src->film_grain,
730  sizeof(dst->film_grain));
731  dst->coded_lossless = src->coded_lossless;
732 
733  dst->order_hint = src->order_hint;
734  memcpy(dst->ref_frame_sign_bias, src->ref_frame_sign_bias,
735  sizeof(dst->ref_frame_sign_bias));
736  memcpy(dst->order_hints, src->order_hints,
737  sizeof(dst->order_hints));
738 
739  dst->force_integer_mv = src->force_integer_mv;
740 }
741 
743 {
744  AV1DecContext *s = avctx->priv_data;
745  AV1RawMetadataITUTT35 itut_t35;
746 
747  for (int i = 0; i < FF_ARRAY_ELEMS(s->ref); i++)
748  av1_frame_unref(&s->ref[i]);
749  av1_frame_unref(&s->cur_frame);
750  av_buffer_unref(&s->seq_data_ref);
751  av_refstruct_unref(&s->seq_ref);
752  av_refstruct_unref(&s->header_ref);
753  av_refstruct_unref(&s->cll_ref);
754  av_refstruct_unref(&s->mdcv_ref);
755  av_freep(&s->tile_group_info);
756 
757  while (s->itut_t35_fifo && av_fifo_read(s->itut_t35_fifo, &itut_t35, 1) >= 0)
758  av_buffer_unref(&itut_t35.payload_ref);
759  av_fifo_freep2(&s->itut_t35_fifo);
760 
761  ff_cbs_fragment_free(&s->current_obu);
762  ff_cbs_close(&s->cbc);
763  ff_dovi_ctx_unref(&s->dovi);
764 
765  return 0;
766 }
767 
769  const AV1RawSequenceHeader *seq)
770 {
771  int width = seq->max_frame_width_minus_1 + 1;
772  int height = seq->max_frame_height_minus_1 + 1;
773 
774  avctx->profile = seq->seq_profile;
775  avctx->level = seq->seq_level_idx[0];
776 
778  avctx->color_range =
783  }
784 
785  switch (seq->color_config.chroma_sample_position) {
786  case AV1_CSP_VERTICAL:
788  break;
789  case AV1_CSP_COLOCATED:
791  break;
792  }
793 
794 #if FF_API_CODEC_PROPS
796  if (seq->film_grain_params_present)
798  else
801 #endif
802 
803  if (avctx->width != width || avctx->height != height) {
804  int ret = ff_set_dimensions(avctx, width, height);
805  if (ret < 0)
806  return ret;
807  }
808 
809  if (seq->timing_info_present_flag)
812  seq->timing_info.time_scale);
813 
814  if (avctx->pix_fmt == AV_PIX_FMT_NONE)
815  avctx->pix_fmt = get_sw_pixel_format(avctx, seq);
816 
817  return 0;
818 }
819 
821  const AV1RawFrameHeader *header)
822 {
823  AVRational aspect_ratio;
824  int width = header->frame_width_minus_1 + 1;
825  int height = header->frame_height_minus_1 + 1;
826  int r_width = header->render_width_minus_1 + 1;
827  int r_height = header->render_height_minus_1 + 1;
828  int ret;
829 
830  if (avctx->width != width || avctx->height != height) {
831  ret = ff_set_dimensions(avctx, width, height);
832  if (ret < 0)
833  return ret;
834  }
835 
836  av_reduce(&aspect_ratio.num, &aspect_ratio.den,
837  (int64_t)height * r_width,
838  (int64_t)width * r_height,
839  INT_MAX);
840 
841  if (av_cmp_q(avctx->sample_aspect_ratio, aspect_ratio)) {
842  ret = ff_set_sar(avctx, aspect_ratio);
843  if (ret < 0)
844  return ret;
845  }
846 
847  return 0;
848 }
849 
858 };
859 
861 {
862  AV1DecContext *s = avctx->priv_data;
864  const AVPacketSideData *sd;
865  int ret;
866 
867  s->avctx = avctx;
868  s->pkt = avctx->internal->in_pkt;
869  s->pix_fmt = AV_PIX_FMT_NONE;
870 
871  ret = ff_cbs_init(&s->cbc, AV_CODEC_ID_AV1, avctx);
872  if (ret < 0)
873  return ret;
874 
875  s->cbc->decompose_unit_types = decompose_unit_types;
876  s->cbc->nb_decompose_unit_types = FF_ARRAY_ELEMS(decompose_unit_types);
877 
878  s->itut_t35_fifo = av_fifo_alloc2(1, sizeof(AV1RawMetadataITUTT35),
880  if (!s->itut_t35_fifo)
881  return AVERROR(ENOMEM);
882 
883  av_opt_set_int(s->cbc->priv_data, "operating_point", s->operating_point, 0);
884 
885  if (avctx->extradata && avctx->extradata_size) {
886  ret = ff_cbs_read_extradata_from_codec(s->cbc,
887  &s->current_obu,
888  avctx);
889  if (ret < 0) {
890  av_log(avctx, AV_LOG_WARNING, "Failed to read extradata.\n");
891  goto end;
892  }
893 
894  seq = ((CodedBitstreamAV1Context *)(s->cbc->priv_data))->sequence_header;
895  if (!seq) {
896  if (!(avctx->extradata[0] & 0x80))
897  av_log(avctx, AV_LOG_WARNING, "No sequence header available in extradata.\n");
898  goto end;
899  }
900 
901  ret = set_context_with_sequence(avctx, seq);
902  if (ret < 0) {
903  av_log(avctx, AV_LOG_WARNING, "Failed to set decoder context.\n");
904  goto end;
905  }
906 
907  end:
908  ff_cbs_fragment_reset(&s->current_obu);
909  }
910 
911  s->dovi.logctx = avctx;
912  s->dovi.cfg.dv_profile = 10; // default for AV1
914  if (sd && sd->size >= sizeof(s->dovi.cfg))
915  s->dovi.cfg = *(AVDOVIDecoderConfigurationRecord *) sd->data;
916 
917  return ret;
918 }
919 
921 {
922  AV1DecContext *s = avctx->priv_data;
923  AV1RawFrameHeader *header= s->raw_frame_header;
924  AVFrame *frame;
925  int ret;
926 
928  if (ret < 0) {
929  av_log(avctx, AV_LOG_ERROR, "Failed to update context with frame header\n");
930  return ret;
931  }
932 
934  if (ret < 0)
935  goto fail;
936 
937  frame = f->f;
938  if (header->frame_type == AV1_FRAME_KEY)
939  frame->flags |= AV_FRAME_FLAG_KEY;
940  else
941  frame->flags &= ~AV_FRAME_FLAG_KEY;
942 
943  switch (header->frame_type) {
944  case AV1_FRAME_KEY:
946  frame->pict_type = AV_PICTURE_TYPE_I;
947  break;
948  case AV1_FRAME_INTER:
949  frame->pict_type = AV_PICTURE_TYPE_P;
950  break;
951  case AV1_FRAME_SWITCH:
952  frame->pict_type = AV_PICTURE_TYPE_SP;
953  break;
954  }
955 
956  ret = ff_hwaccel_frame_priv_alloc(avctx, &f->hwaccel_picture_private);
957  if (ret < 0)
958  goto fail;
959 
960  return 0;
961 
962 fail:
964  return ret;
965 }
966 
968  const AV1RawMetadataITUTT35 *itut_t35)
969 {
970  GetByteContext gb;
971  AV1DecContext *s = avctx->priv_data;
972  int ret, provider_code, country_code;
973 
974  bytestream2_init(&gb, itut_t35->payload, itut_t35->payload_size);
975 
976  country_code = itut_t35->itu_t_t35_country_code ;
977  switch (country_code) {
979  provider_code = bytestream2_get_be16(&gb);
980 
981  switch (provider_code) {
983  uint32_t user_identifier = bytestream2_get_be32(&gb);
984  switch (user_identifier) {
985  case MKBETAG('G', 'A', '9', '4'): { // closed captions
986  AVBufferRef *buf = NULL;
987 
989  if (ret < 0)
990  return ret;
991  if (!ret)
992  break;
993 
995  if (ret < 0)
996  return ret;
997 
998 #if FF_API_CODEC_PROPS
1002 #endif
1003  break;
1004  }
1005  default: // ignore unsupported identifiers
1006  break;
1007  }
1008  break;
1009  }
1011  AVDynamicHDRPlus *hdrplus;
1012  int provider_oriented_code = bytestream2_get_be16(&gb);
1013  int application_identifier = bytestream2_get_byte(&gb);
1014 
1015  if (provider_oriented_code != 1 || application_identifier != 4)
1016  return 0; // ignore
1017 
1019  if (!hdrplus)
1020  return AVERROR(ENOMEM);
1021 
1022  ret = av_dynamic_hdr_plus_from_t35(hdrplus, gb.buffer,
1024  if (ret < 0)
1025  return ret;
1026  break;
1027  }
1029  int provider_oriented_code = bytestream2_get_be32(&gb);
1030  if (provider_oriented_code != 0x800)
1031  return 0; // ignore
1032 
1034  avctx->err_recognition);
1035  if (ret < 0) {
1036  av_log(avctx, AV_LOG_WARNING, "Error parsing DOVI OBU.\n");
1037  return 0; // ignore
1038  }
1039 
1040  ret = ff_dovi_attach_side_data(&s->dovi, frame);
1041  if (ret < 0)
1042  return ret;
1043  break;
1044  }
1045  default:
1046  break;
1047  }
1048  break;
1050  bytestream2_skip(&gb, 1); // t35_uk_country_code_second_octet
1051 
1052  provider_code = bytestream2_get_be16(&gb);
1053  switch (provider_code) {
1055  AVFrameSideData *sd;
1056  if (bytestream2_get_bytes_left(&gb) < 2)
1057  return AVERROR_INVALIDDATA;
1058 
1060  bytestream2_get_bytes_left(&gb), &sd);
1061  if (ret < 0)
1062  return ret;
1063  if (!sd)
1064  break;
1065 
1066  bytestream2_get_bufferu(&gb, sd->data, sd->size);
1067  break;
1068  }
1069  default:
1070  break;
1071  }
1072  break;
1073  default:
1074  // ignore unsupported provider codes
1075  break;
1076  }
1077 
1078  return 0;
1079 }
1080 
1082 {
1083  AV1DecContext *s = avctx->priv_data;
1084  AV1RawMetadataITUTT35 itut_t35;
1085  int ret = 0;
1086 
1087  if (s->mdcv) {
1088  AVMasteringDisplayMetadata *mastering;
1089 
1090  ret = ff_decode_mastering_display_new(avctx, frame, &mastering);
1091  if (ret < 0)
1092  return ret;
1093 
1094  if (mastering) {
1095  for (int i = 0; i < 3; i++) {
1096  mastering->display_primaries[i][0] = av_make_q(s->mdcv->primary_chromaticity_x[i], 1 << 16);
1097  mastering->display_primaries[i][1] = av_make_q(s->mdcv->primary_chromaticity_y[i], 1 << 16);
1098  }
1099  mastering->white_point[0] = av_make_q(s->mdcv->white_point_chromaticity_x, 1 << 16);
1100  mastering->white_point[1] = av_make_q(s->mdcv->white_point_chromaticity_y, 1 << 16);
1101 
1102  mastering->max_luminance = av_make_q(s->mdcv->luminance_max, 1 << 8);
1103  mastering->min_luminance = av_make_q(s->mdcv->luminance_min, 1 << 14);
1104 
1105  mastering->has_primaries = 1;
1106  mastering->has_luminance = 1;
1107  }
1108  }
1109 
1110  if (s->cll) {
1111  AVContentLightMetadata *light;
1112 
1113  ret = ff_decode_content_light_new(avctx, frame, &light);
1114  if (ret < 0)
1115  return ret;
1116 
1117  if (light) {
1118  light->MaxCLL = s->cll->max_cll;
1119  light->MaxFALL = s->cll->max_fall;
1120  }
1121  }
1122 
1123  while (av_fifo_read(s->itut_t35_fifo, &itut_t35, 1) >= 0) {
1124  if (ret >= 0)
1125  ret = export_itut_t35(avctx, frame, &itut_t35);
1126  av_buffer_unref(&itut_t35.payload_ref);
1127  }
1128 
1129  return ret;
1130 }
1131 
1133 {
1134  AV1DecContext *s = avctx->priv_data;
1135  const AV1RawFilmGrainParams *film_grain = &s->cur_frame.film_grain;
1136  const AVPixFmtDescriptor *pixdesc = av_pix_fmt_desc_get(frame->format);
1137  AVFilmGrainParams *fgp;
1138  AVFilmGrainAOMParams *aom;
1139 
1140  av_assert0(pixdesc);
1141  if (!film_grain->apply_grain)
1142  return 0;
1143 
1145  if (!fgp)
1146  return AVERROR(ENOMEM);
1147 
1149  fgp->seed = film_grain->grain_seed;
1150  fgp->width = frame->width;
1151  fgp->height = frame->height;
1152  fgp->color_range = frame->color_range;
1153  fgp->color_primaries = frame->color_primaries;
1154  fgp->color_trc = frame->color_trc;
1155  fgp->color_space = frame->colorspace;
1156  fgp->subsampling_x = pixdesc->log2_chroma_w;
1157  fgp->subsampling_y = pixdesc->log2_chroma_h;
1158 
1159  aom = &fgp->codec.aom;
1161  aom->scaling_shift = film_grain->grain_scaling_minus_8 + 8;
1162  aom->ar_coeff_lag = film_grain->ar_coeff_lag;
1163  aom->ar_coeff_shift = film_grain->ar_coeff_shift_minus_6 + 6;
1164  aom->grain_scale_shift = film_grain->grain_scale_shift;
1165  aom->overlap_flag = film_grain->overlap_flag;
1166  aom->limit_output_range = film_grain->clip_to_restricted_range;
1167 
1168  aom->num_y_points = film_grain->num_y_points;
1169  for (int i = 0; i < film_grain->num_y_points; i++) {
1170  aom->y_points[i][0] = film_grain->point_y_value[i];
1171  aom->y_points[i][1] = film_grain->point_y_scaling[i];
1172  }
1173  aom->num_uv_points[0] = film_grain->num_cb_points;
1174  for (int i = 0; i < film_grain->num_cb_points; i++) {
1175  aom->uv_points[0][i][0] = film_grain->point_cb_value[i];
1176  aom->uv_points[0][i][1] = film_grain->point_cb_scaling[i];
1177  }
1178  aom->num_uv_points[1] = film_grain->num_cr_points;
1179  for (int i = 0; i < film_grain->num_cr_points; i++) {
1180  aom->uv_points[1][i][0] = film_grain->point_cr_value[i];
1181  aom->uv_points[1][i][1] = film_grain->point_cr_scaling[i];
1182  }
1183 
1184  for (int i = 0; i < 24; i++) {
1185  aom->ar_coeffs_y[i] = film_grain->ar_coeffs_y_plus_128[i] - 128;
1186  }
1187  for (int i = 0; i < 25; i++) {
1188  aom->ar_coeffs_uv[0][i] = film_grain->ar_coeffs_cb_plus_128[i] - 128;
1189  aom->ar_coeffs_uv[1][i] = film_grain->ar_coeffs_cr_plus_128[i] - 128;
1190  }
1191 
1192  aom->uv_mult[0] = film_grain->cb_mult;
1193  aom->uv_mult[1] = film_grain->cr_mult;
1194  aom->uv_mult_luma[0] = film_grain->cb_luma_mult;
1195  aom->uv_mult_luma[1] = film_grain->cr_luma_mult;
1196  aom->uv_offset[0] = film_grain->cb_offset;
1197  aom->uv_offset[1] = film_grain->cr_offset;
1198 
1199  return 0;
1200 }
1201 
1203 {
1204  AV1DecContext *s = avctx->priv_data;
1205  const AVFrame *srcframe = s->cur_frame.f;
1206  AVPacket *pkt = s->pkt;
1207  int ret;
1208 
1209  // TODO: all layers
1210  if (s->operating_point_idc &&
1211  av_log2(s->operating_point_idc >> 8) > s->cur_frame.spatial_id)
1212  return 0;
1213 
1214  ret = av_frame_ref(frame, srcframe);
1215  if (ret < 0)
1216  return ret;
1217 
1218  ret = export_metadata(avctx, frame);
1219  if (ret < 0) {
1221  return ret;
1222  }
1223 
1225  ret = export_film_grain(avctx, frame);
1226  if (ret < 0) {
1228  return ret;
1229  }
1230  }
1231 
1232  frame->pts = pkt->pts;
1233  frame->pkt_dts = pkt->dts;
1234 
1236 
1237  return 0;
1238 }
1239 
1241 {
1242  AV1DecContext *s = avctx->priv_data;
1243  const AV1RawFrameHeader *header = s->raw_frame_header;
1244 
1245  for (int i = 0; i < AV1_NUM_REF_FRAMES; i++) {
1246  if (header->refresh_frame_flags & (1 << i))
1247  av1_frame_replace(&s->ref[i], &s->cur_frame);
1248  }
1249 }
1250 
1252 {
1253  AV1DecContext *s = avctx->priv_data;
1254  int ret;
1255 
1256  av1_frame_unref(&s->cur_frame);
1257 
1258  s->cur_frame.header_ref = av_refstruct_ref(s->header_ref);
1259 
1260  s->cur_frame.raw_frame_header = s->raw_frame_header;
1261 
1262  ret = init_tile_data(s);
1263  if (ret < 0) {
1264  av_log(avctx, AV_LOG_ERROR, "Failed to init tile data.\n");
1265  return ret;
1266  }
1267 
1268  if ((avctx->skip_frame >= AVDISCARD_NONINTRA &&
1269  (s->raw_frame_header->frame_type != AV1_FRAME_KEY &&
1270  s->raw_frame_header->frame_type != AV1_FRAME_INTRA_ONLY)) ||
1271  (avctx->skip_frame >= AVDISCARD_NONKEY &&
1272  s->raw_frame_header->frame_type != AV1_FRAME_KEY) ||
1273  avctx->skip_frame >= AVDISCARD_ALL)
1274  return 0;
1275 
1276  if (s->pix_fmt == AV_PIX_FMT_NONE) {
1277  ret = get_pixel_format(avctx);
1278  if (ret < 0) {
1279  av_log(avctx, AV_LOG_ERROR, "Failed to get pixel format.\n");
1280  return ret;
1281  }
1282 
1283  if (!ret && FF_HW_HAS_CB(avctx, decode_params)) {
1284  ret = FF_HW_CALL(avctx, decode_params, AV1_OBU_SEQUENCE_HEADER,
1285  s->seq_data_ref->data, s->seq_data_ref->size);
1286  if (ret < 0) {
1287  av_log(avctx, AV_LOG_ERROR, "HW accel decode params fail.\n");
1288  return ret;
1289  }
1290  }
1291  }
1292 
1293  ret = av1_frame_alloc(avctx, &s->cur_frame);
1294  if (ret < 0) {
1295  av_log(avctx, AV_LOG_ERROR,
1296  "Failed to allocate space for current frame.\n");
1297  return ret;
1298  }
1299 
1303  order_hint_info(s);
1305 
1306  s->cur_frame.force_integer_mv =
1307  s->raw_frame_header->force_integer_mv ||
1308  s->raw_frame_header->frame_type == AV1_FRAME_KEY ||
1309  s->raw_frame_header->frame_type == AV1_FRAME_INTRA_ONLY;
1310 
1311  return ret;
1312 }
1313 
1315 {
1316  AV1DecContext *s = avctx->priv_data;
1317  AV1RawTileGroup *raw_tile_group = NULL;
1318  int i = 0, ret;
1319 
1320  for (i = s->nb_unit; i < s->current_obu.nb_units; i++) {
1321  CodedBitstreamUnit *unit = &s->current_obu.units[i];
1322  AV1RawOBU *obu = unit->content;
1323  const AV1RawOBUHeader *header;
1324 
1325  av_log(avctx, AV_LOG_DEBUG, "OBU idx:%d, type:%d, content available:%d.\n", i, unit->type, !!obu);
1326 
1327  if (unit->type == AV1_OBU_TILE_LIST) {
1328  av_log(avctx, AV_LOG_ERROR, "Large scale tile decoding is unsupported.\n");
1330  goto end;
1331  }
1332 
1333  if (!obu)
1334  continue;
1335 
1336  header = &obu->header;
1337 
1338  switch (unit->type) {
1340  ret = av_buffer_replace(&s->seq_data_ref, unit->data_ref);
1341  if (ret < 0)
1342  goto end;
1343 
1344  s->seq_data_ref->data = unit->data;
1345  s->seq_data_ref->size = unit->data_size;
1346  av_refstruct_replace(&s->seq_ref, unit->content_ref);
1347 
1348  s->raw_seq = &obu->obu.sequence_header;
1349  s->raw_frame_header = NULL;
1350  raw_tile_group = NULL;
1351 
1352  ret = set_context_with_sequence(avctx, s->raw_seq);
1353  if (ret < 0) {
1354  av_log(avctx, AV_LOG_ERROR, "Failed to set context.\n");
1355  s->raw_seq = NULL;
1356  goto end;
1357  }
1358 
1359  s->operating_point_idc = s->raw_seq->operating_point_idc[s->operating_point];
1360 
1361  s->pix_fmt = AV_PIX_FMT_NONE;
1362 
1363  if (FF_HW_HAS_CB(avctx, decode_params)) {
1364  ret = FF_HW_CALL(avctx, decode_params, AV1_OBU_SEQUENCE_HEADER,
1365  s->seq_data_ref->data, s->seq_data_ref->size);
1366  if (ret < 0) {
1367  av_log(avctx, AV_LOG_ERROR, "HW accel decode params fail.\n");
1368  return ret;
1369  }
1370  }
1371 
1372  break;
1374  if (s->raw_frame_header)
1375  break;
1376  // fall-through
1377  case AV1_OBU_FRAME:
1378  case AV1_OBU_FRAME_HEADER:
1379  if (!s->raw_seq) {
1380  av_log(avctx, AV_LOG_ERROR, "Missing Sequence Header.\n");
1382  goto end;
1383  }
1384 
1385  av_refstruct_replace(&s->header_ref, unit->content_ref);
1386 
1387  raw_tile_group = NULL;
1388 
1389  if (unit->type == AV1_OBU_FRAME)
1390  s->raw_frame_header = &obu->obu.frame.header;
1391  else
1392  s->raw_frame_header = &obu->obu.frame_header;
1393 
1394  if (s->raw_frame_header->show_existing_frame) {
1395  av1_frame_replace(&s->cur_frame,
1396  &s->ref[s->raw_frame_header->frame_to_show_map_idx]);
1397 
1398  update_reference_list(avctx);
1399 
1400  if (s->cur_frame.f) {
1401  ret = set_output_frame(avctx, frame);
1402  if (ret < 0) {
1403  av_log(avctx, AV_LOG_ERROR, "Set output frame error.\n");
1404  goto end;
1405  }
1406  }
1407 
1408  s->raw_frame_header = NULL;
1409  i++;
1410  ret = 0;
1411 
1412  goto end;
1413  }
1414 
1415  ret = get_current_frame(avctx);
1416  if (ret < 0) {
1417  av_log(avctx, AV_LOG_ERROR, "Get current frame error\n");
1418  goto end;
1419  }
1420 
1421  s->cur_frame.spatial_id = header->spatial_id;
1422  s->cur_frame.temporal_id = header->temporal_id;
1423 
1424  if (avctx->hwaccel && s->cur_frame.f) {
1425  ret = FF_HW_CALL(avctx, start_frame, s->pkt->buf,
1426  unit->data, unit->data_size);
1427  if (ret < 0) {
1428  av_log(avctx, AV_LOG_ERROR, "HW accel start frame fail.\n");
1429  goto end;
1430  }
1431  }
1432  if (unit->type != AV1_OBU_FRAME)
1433  break;
1434  // fall-through
1435  case AV1_OBU_TILE_GROUP:
1436  if (!s->raw_frame_header) {
1437  av_log(avctx, AV_LOG_ERROR, "Missing Frame Header.\n");
1439  goto end;
1440  }
1441 
1442  if (unit->type == AV1_OBU_FRAME)
1443  raw_tile_group = &obu->obu.frame.tile_group;
1444  else
1445  raw_tile_group = &obu->obu.tile_group;
1446 
1447  ret = get_tiles_info(avctx, raw_tile_group);
1448  if (ret < 0)
1449  goto end;
1450 
1451  if (avctx->hwaccel && s->cur_frame.f) {
1452  ret = FF_HW_CALL(avctx, decode_slice, raw_tile_group->tile_data.data,
1453  raw_tile_group->tile_data.data_size);
1454  if (ret < 0) {
1455  av_log(avctx, AV_LOG_ERROR,
1456  "HW accel decode slice fail.\n");
1457  goto end;
1458  }
1459  }
1460  break;
1462  s->raw_frame_header = NULL;
1463  raw_tile_group = NULL;
1464  // fall-through
1465  case AV1_OBU_TILE_LIST:
1466  case AV1_OBU_PADDING:
1467  break;
1468  case AV1_OBU_METADATA:
1469  switch (obu->obu.metadata.metadata_type) {
1471  av_refstruct_replace(&s->cll_ref, unit->content_ref);
1472  s->cll = &obu->obu.metadata.metadata.hdr_cll;
1473  break;
1475  av_refstruct_replace(&s->mdcv_ref, unit->content_ref);
1476  s->mdcv = &obu->obu.metadata.metadata.hdr_mdcv;
1477  break;
1479  AV1RawMetadataITUTT35 itut_t35;
1480  memcpy(&itut_t35, &obu->obu.metadata.metadata.itut_t35, sizeof(itut_t35));
1482  if (!itut_t35.payload_ref) {
1483  ret = AVERROR(ENOMEM);
1484  goto end;
1485  }
1486  ret = av_fifo_write(s->itut_t35_fifo, &itut_t35, 1);
1487  if (ret < 0) {
1488  av_buffer_unref(&itut_t35.payload_ref);
1489  goto end;
1490  }
1491  break;
1492  }
1493  default:
1494  break;
1495  }
1496  break;
1497  default:
1498  av_log(avctx, AV_LOG_DEBUG,
1499  "Unknown obu type: %d (%zu bits).\n",
1500  unit->type, unit->data_size);
1501  }
1502 
1503  if (raw_tile_group && (s->tile_num == raw_tile_group->tg_end + 1)) {
1504  int show_frame = s->raw_frame_header->show_frame;
1505  // Set nb_unit to point at the next OBU, to indicate which
1506  // OBUs have been processed for this current frame. (If this
1507  // frame gets output, we set nb_unit to this value later too.)
1508  s->nb_unit = i + 1;
1509  if (avctx->hwaccel && s->cur_frame.f) {
1510  ret = FF_HW_SIMPLE_CALL(avctx, end_frame);
1511  if (ret < 0) {
1512  av_log(avctx, AV_LOG_ERROR, "HW accel end frame fail.\n");
1513  goto end;
1514  }
1515  }
1516 
1517  update_reference_list(avctx);
1518 
1519  // Set start_unit to indicate the first OBU of the next frame.
1520  s->start_unit = s->nb_unit;
1521  raw_tile_group = NULL;
1522  s->raw_frame_header = NULL;
1523 
1524  if (show_frame) {
1525  // cur_frame.f needn't exist due to skip_frame.
1526  if (s->cur_frame.f) {
1527  ret = set_output_frame(avctx, frame);
1528  if (ret < 0) {
1529  av_log(avctx, AV_LOG_ERROR, "Set output frame error\n");
1530  goto end;
1531  }
1532  }
1533  i++;
1534  ret = 0;
1535  goto end;
1536  }
1537  }
1538  }
1539 
1540  ret = AVERROR(EAGAIN);
1541 end:
1542  av_assert0(i <= s->current_obu.nb_units);
1543  s->nb_unit = i;
1544 
1545  if ((ret < 0 && ret != AVERROR(EAGAIN)) || s->current_obu.nb_units == i) {
1546  if (ret < 0)
1547  s->raw_frame_header = NULL;
1548  av_packet_unref(s->pkt);
1549  ff_cbs_fragment_reset(&s->current_obu);
1550  s->nb_unit = s->start_unit = 0;
1551  }
1552  if (!ret && !frame->buf[0])
1553  ret = AVERROR(EAGAIN);
1554 
1555  return ret;
1556 }
1557 
1559 {
1560  AV1DecContext *s = avctx->priv_data;
1561  int ret;
1562 
1563  do {
1564  if (!s->current_obu.nb_units) {
1565  ret = ff_decode_get_packet(avctx, s->pkt);
1566  if (ret < 0)
1567  return ret;
1568 
1569  ret = ff_cbs_read_packet(s->cbc, &s->current_obu, s->pkt);
1570  if (ret < 0) {
1571  ff_cbs_fragment_reset(&s->current_obu);
1572  av_packet_unref(s->pkt);
1573  av_log(avctx, AV_LOG_ERROR, "Failed to read packet.\n");
1574  return ret;
1575  }
1576 
1577  s->nb_unit = s->start_unit = 0;
1578  av_log(avctx, AV_LOG_DEBUG, "Total OBUs on this packet: %d.\n",
1579  s->current_obu.nb_units);
1580  }
1581 
1583  } while (ret == AVERROR(EAGAIN));
1584 
1585  return ret;
1586 }
1587 
1589 {
1590  AV1DecContext *s = avctx->priv_data;
1591  AV1RawMetadataITUTT35 itut_t35;
1592 
1593  for (int i = 0; i < FF_ARRAY_ELEMS(s->ref); i++)
1594  av1_frame_unref(&s->ref[i]);
1595 
1596  av1_frame_unref(&s->cur_frame);
1597  s->operating_point_idc = 0;
1598  s->nb_unit = s->start_unit = 0;
1599  s->raw_frame_header = NULL;
1600  s->raw_seq = NULL;
1601  s->cll = NULL;
1602  s->mdcv = NULL;
1603  while (av_fifo_read(s->itut_t35_fifo, &itut_t35, 1) >= 0)
1604  av_buffer_unref(&itut_t35.payload_ref);
1605 
1606  ff_cbs_fragment_reset(&s->current_obu);
1607  ff_cbs_flush(s->cbc);
1608 
1609  if (FF_HW_HAS_CB(avctx, flush))
1610  FF_HW_SIMPLE_CALL(avctx, flush);
1611 }
1612 
1613 #define OFFSET(x) offsetof(AV1DecContext, x)
1614 #define VD AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_DECODING_PARAM
1615 static const AVOption av1_options[] = {
1616  { "operating_point", "Select an operating point of the scalable bitstream",
1617  OFFSET(operating_point), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, AV1_MAX_OPERATING_POINTS - 1, VD },
1618  { NULL }
1619 };
1620 
1621 static const AVClass av1_class = {
1622  .class_name = "AV1 decoder",
1623  .item_name = av_default_item_name,
1624  .option = av1_options,
1625  .version = LIBAVUTIL_VERSION_INT,
1626 };
1627 
1629  .p.name = "av1",
1630  CODEC_LONG_NAME("Alliance for Open Media AV1"),
1631  .p.type = AVMEDIA_TYPE_VIDEO,
1632  .p.id = AV_CODEC_ID_AV1,
1633  .priv_data_size = sizeof(AV1DecContext),
1634  .init = av1_decode_init,
1637  .p.capabilities = AV_CODEC_CAP_DR1,
1638  .caps_internal = FF_CODEC_CAP_INIT_CLEANUP |
1641  .flush = av1_decode_flush,
1642  .p.profiles = NULL_IF_CONFIG_SMALL(ff_av1_profiles),
1643  .p.priv_class = &av1_class,
1644  .hw_configs = (const AVCodecHWConfigInternal *const []) {
1645 #if CONFIG_AV1_DXVA2_HWACCEL
1646  HWACCEL_DXVA2(av1),
1647 #endif
1648 #if CONFIG_AV1_D3D11VA_HWACCEL
1649  HWACCEL_D3D11VA(av1),
1650 #endif
1651 #if CONFIG_AV1_D3D11VA2_HWACCEL
1652  HWACCEL_D3D11VA2(av1),
1653 #endif
1654 #if CONFIG_AV1_D3D12VA_HWACCEL
1655  HWACCEL_D3D12VA(av1),
1656 #endif
1657 #if CONFIG_AV1_NVDEC_HWACCEL
1658  HWACCEL_NVDEC(av1),
1659 #endif
1660 #if CONFIG_AV1_VAAPI_HWACCEL
1661  HWACCEL_VAAPI(av1),
1662 #endif
1663 #if CONFIG_AV1_VDPAU_HWACCEL
1664  HWACCEL_VDPAU(av1),
1665 #endif
1666 #if CONFIG_AV1_VIDEOTOOLBOX_HWACCEL
1667  HWACCEL_VIDEOTOOLBOX(av1),
1668 #endif
1669 #if CONFIG_AV1_VULKAN_HWACCEL
1670  HWACCEL_VULKAN(av1),
1671 #endif
1672 
1673  NULL
1674  },
1675 };
update_reference_list
static void update_reference_list(AVCodecContext *avctx)
Definition: av1dec.c:1240
HWACCEL_D3D12VA
#define HWACCEL_D3D12VA(codec)
Definition: hwconfig.h:80
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:1367
AV1_SEG_LVL_ALT_Q
@ AV1_SEG_LVL_ALT_Q
Definition: av1.h:92
AV1_REF_FRAME_LAST
@ AV1_REF_FRAME_LAST
Definition: av1.h:63
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:432
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:1417
FF_ENABLE_DEPRECATION_WARNINGS
#define FF_ENABLE_DEPRECATION_WARNINGS
Definition: internal.h:73
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:251
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:860
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:42
AV1_GM_ABS_TRANS_ONLY_BITS
@ AV1_GM_ABS_TRANS_ONLY_BITS
Definition: av1.h:108
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:377
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:667
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:1218
order_hint_info
static void order_hint_info(AV1DecContext *s)
Definition: av1dec.c:365
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:335
GetByteContext
Definition: bytestream.h:33
bytestream2_tell
static av_always_inline int bytestream2_tell(const GetByteContext *g)
Definition: bytestream.h:192
AVFilmGrainParams::codec
union AVFilmGrainParams::@519 codec
Additional fields may be added both here and in any structure included.
av_pix_fmt_desc_get
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
Definition: pixdesc.c:3456
av1_frame_alloc
static int av1_frame_alloc(AVCodecContext *avctx, AV1Frame *f)
Definition: av1dec.c:920
AV_FRAME_DATA_A53_CC
@ AV_FRAME_DATA_A53_CC
ATSC A53 Part 4 Closed Captions.
Definition: frame.h:59
av_clip_uintp2
#define av_clip_uintp2
Definition: common.h:124
AVMasteringDisplayMetadata::display_primaries
AVRational display_primaries[3][2]
CIE 1931 xy chromaticity coords of color primaries (r, g, b order).
Definition: mastering_display_metadata.h:42
AVMasteringDisplayMetadata::has_luminance
int has_luminance
Flag indicating whether the luminance (min_ and max_) have been set.
Definition: mastering_display_metadata.h:67
AVCodecContext::err_recognition
int err_recognition
Error recognition; may misdetect some more or less valid parts as errors.
Definition: avcodec.h:1410
AV1_GM_ABS_ALPHA_BITS
@ AV1_GM_ABS_ALPHA_BITS
Definition: av1.h:106
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
ff_dovi_rpu_parse
int ff_dovi_rpu_parse(DOVIContext *s, const uint8_t *rpu, size_t rpu_size, int err_recognition)
Parse the contents of a Dolby Vision RPU and update the parsed values in the DOVIContext struct.
Definition: dovi_rpudec.c:343
bytestream2_skipu
static av_always_inline void bytestream2_skipu(GetByteContext *g, unsigned int size)
Definition: bytestream.h:174
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:1251
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:427
pixdesc.h
AVCodecContext::color_trc
enum AVColorTransferCharacteristic color_trc
Color Transfer Characteristic.
Definition: avcodec.h:660
AVPacketSideData
This structure stores auxiliary information for decoding, presenting, or otherwise processing the cod...
Definition: packet.h:409
set_context_with_sequence
static int set_context_with_sequence(AVCodecContext *avctx, const AV1RawSequenceHeader *seq)
Definition: av1dec.c:768
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:777
internal.h
AVOption
AVOption.
Definition: opt.h:429
HWACCEL_D3D11VA2
#define HWACCEL_D3D11VA2(codec)
Definition: hwconfig.h:66
b
#define b
Definition: input.c:42
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:1912
AV1RawSequenceHeader::timing_info
AV1RawTimingInfo timing_info
Definition: cbs_av1.h:92
AV_PIX_FMT_YUV420P10
#define AV_PIX_FMT_YUV420P10
Definition: pixfmt.h:539
high
int high
Definition: dovi_rpuenc.c:39
AVFilmGrainParams::color_space
enum AVColorSpace color_space
Definition: film_grain_params.h:233
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
AV1_FRAME_SWITCH
@ AV1_FRAME_SWITCH
Definition: av1.h:56
CodedBitstreamUnit::type
CodedBitstreamUnitType type
Codec-specific type of this unit.
Definition: cbs.h:81
AV1_GM_ABS_TRANS_BITS
@ AV1_GM_ABS_TRANS_BITS
Definition: av1.h:110
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:850
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:259
ff_set_dimensions
int ff_set_dimensions(AVCodecContext *s, int width, int height)
Check that the provided frame dimensions are valid and set them on the codec context.
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:701
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:142
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
AVCodecContext::framerate
AVRational framerate
Definition: avcodec.h:559
close
static av_cold void close(AVCodecParserContext *s)
Definition: apv_parser.c:197
bytestream2_skip
static av_always_inline void bytestream2_skip(GetByteContext *g, unsigned int size)
Definition: bytestream.h:168
AVPacketSideData::size
size_t size
Definition: packet.h:411
AV1RawFilmGrainParams::ar_coeffs_cr_plus_128
uint8_t ar_coeffs_cr_plus_128[25]
Definition: cbs_av1.h:161
AV1RawSequenceHeader::film_grain_params_present
uint8_t film_grain_params_present
Definition: cbs_av1.h:139
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
ITU_T_T35_PROVIDER_CODE_VNOVA
#define ITU_T_T35_PROVIDER_CODE_VNOVA
Definition: itut35.h:34
av1_options
static const AVOption av1_options[]
Definition: av1dec.c:1615
AVCodecContext::skip_frame
enum AVDiscard skip_frame
Skip decoding for selected frames.
Definition: avcodec.h:1674
fail
#define fail()
Definition: checkasm.h:223
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
AV1_GM_TRANS_ONLY_PREC_BITS
@ AV1_GM_TRANS_ONLY_PREC_BITS
Definition: av1.h:109
AV1RawMetadataITUTT35::payload_size
size_t payload_size
Definition: cbs_av1.h:369
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:72
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
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
AV1_REFS_PER_FRAME
@ AV1_REFS_PER_FRAME
Definition: av1.h:85
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:149
AVRational::num
int num
Numerator.
Definition: rational.h:59
progressframe.h
refstruct.h
ITU_T_T35_PROVIDER_CODE_ATSC
#define ITU_T_T35_PROVIDER_CODE_ATSC
Definition: itut35.h:36
ff_frame_new_side_data_from_buf
int ff_frame_new_side_data_from_buf(const AVCodecContext *avctx, AVFrame *frame, enum AVFrameSideDataType type, AVBufferRef **buf)
Similar to ff_frame_new_side_data, but using an existing buffer ref.
Definition: decode.c:2195
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
AV1_CSP_VERTICAL
@ AV1_CSP_VERTICAL
Definition: av1.h:134
AV_PIX_FMT_YUV444P10
#define AV_PIX_FMT_YUV444P10
Definition: pixfmt.h:542
AV1RawFilmGrainParams::cb_luma_mult
uint8_t cb_luma_mult
Definition: cbs_av1.h:165
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:68
AVCodecContext::color_primaries
enum AVColorPrimaries color_primaries
Chromaticity coordinates of the source primaries.
Definition: avcodec.h:653
show_frame
static void show_frame(AVTextFormatContext *tfc, AVFrame *frame, AVStream *stream, AVFormatContext *fmt_ctx)
Definition: ffprobe.c:1414
AV_LOG_ERROR
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:210
film_grain_params.h
AVFrameSideData::size
size_t size
Definition: frame.h:285
FF_ARRAY_ELEMS
#define FF_ARRAY_ELEMS(a)
Definition: sinewin_tablegen.c:29
av_cold
#define av_cold
Definition: attributes.h:111
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:642
AV1_PRIMARY_REF_NONE
@ AV1_PRIMARY_REF_NONE
Definition: av1.h:87
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:210
AVCodecContext::extradata_size
int extradata_size
Definition: avcodec.h:523
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:2309
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
s
#define s(width, name)
Definition: cbs_vp9.c:198
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:411
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
GetByteContext::buffer
const uint8_t * buffer
Definition: bytestream.h:34
av1_decode_free
static av_cold int av1_decode_free(AVCodecContext *avctx)
Definition: av1dec.c:742
AV1_FRAME_INTRA_ONLY
@ AV1_FRAME_INTRA_ONLY
Definition: av1.h:55
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
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:409
AV_LOG_DEBUG
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Definition: log.h:231
AV1_GM_TRANS_PREC_BITS
@ AV1_GM_TRANS_PREC_BITS
Definition: av1.h:111
AVPacketSideData::data
uint8_t * data
Definition: packet.h:410
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:1935
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:472
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:427
export_itut_t35
static int export_itut_t35(AVCodecContext *avctx, AVFrame *frame, const AV1RawMetadataITUTT35 *itut_t35)
Definition: av1dec.c:967
CODEC_LONG_NAME
#define CODEC_LONG_NAME(str)
Definition: codec_internal.h:332
ff_decode_mastering_display_new
int ff_decode_mastering_display_new(const AVCodecContext *avctx, AVFrame *frame, AVMasteringDisplayMetadata **mdm)
Wrapper around av_mastering_display_metadata_create_side_data(), which rejects side data overridden b...
Definition: decode.c:2236
FF_CODEC_PROPERTY_FILM_GRAIN
#define FF_CODEC_PROPERTY_FILM_GRAIN
Definition: avcodec.h:1652
load_grain_params
static void load_grain_params(AV1DecContext *s)
Definition: av1dec.c:389
AV1_METADATA_TYPE_HDR_MDCV
@ AV1_METADATA_TYPE_HDR_MDCV
Definition: av1.h:45
AV_PIX_FMT_GRAY10
#define AV_PIX_FMT_GRAY10
Definition: pixfmt.h:519
ff_av1_decoder
const FFCodec ff_av1_decoder
Definition: av1dec.c:1628
AVDISCARD_ALL
@ AVDISCARD_ALL
discard all
Definition: defs.h:232
AVFilmGrainAOMParams::uv_mult_luma
int uv_mult_luma[2]
Definition: film_grain_params.h:106
ff_parse_a53_cc
int ff_parse_a53_cc(AVBufferRef **pbuf, const uint8_t *data, int size)
Parse a data array for ATSC A53 Part 4 Closed Captions and store them in an AVBufferRef.
Definition: atsc_a53.c:69
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:677
av_buffer_unref
void av_buffer_unref(AVBufferRef **buf)
Free a given reference and automatically free the buffer if there are no more references to it.
Definition: buffer.c:139
AV_CODEC_ID_AV1
@ AV_CODEC_ID_AV1
Definition: codec_id.h:284
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:798
AVRational
Rational number (pair of numerator and denominator).
Definition: rational.h:58
AVCHROMA_LOC_TOPLEFT
@ AVCHROMA_LOC_TOPLEFT
ITU-R 601, SMPTE 274M 296M S314M(DV 4:1:1), mpeg2 4:2:2.
Definition: pixfmt.h:800
AVCodecContext::internal
struct AVCodecInternal * internal
Private context used for internal data.
Definition: avcodec.h:474
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:688
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:552
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:820
abs
#define abs(x)
Definition: cuda_runtime.h:35
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:540
skip_mode_params
static void skip_mode_params(AV1DecContext *s)
Definition: av1dec.c:267
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:1640
AV_PICTURE_TYPE_SP
@ AV_PICTURE_TYPE_SP
Switching Predicted.
Definition: avutil.h:283
av_opt_set_int
int av_opt_set_int(void *obj, const char *name, int64_t val, int search_flags)
Definition: opt.c:870
AV1RawSequenceHeader::max_frame_height_minus_1
uint16_t max_frame_height_minus_1
Definition: cbs_av1.h:108
AV1_DIV_LUT_BITS
@ AV1_DIV_LUT_BITS
Definition: av1.h:120
resolve_divisor
static int16_t resolve_divisor(uint32_t d, uint16_t *shift)
Resolve divisor process.
Definition: av1dec.c:158
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
ITU_T_T35_PROVIDER_CODE_DOLBY
#define ITU_T_T35_PROVIDER_CODE_DOLBY
Definition: itut35.h:37
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
AV1_WARP_MODEL_IDENTITY
@ AV1_WARP_MODEL_IDENTITY
Definition: av1.h:114
f
f
Definition: af_crystalizer.c:122
init
int(* init)(AVBSFContext *ctx)
Definition: dts2pts.c:550
AV_CODEC_CAP_DR1
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() or get_encode_buffer() for allocating buffers and supports custom allocators.
Definition: codec.h:52
pix_fmts
static enum AVPixelFormat pix_fmts[4][4]
Definition: lcevc_parser.c:75
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:94
ff_dovi_attach_side_data
int ff_dovi_attach_side_data(DOVIContext *s, AVFrame *frame)
Attach the decoded AVDOVIMetadata as side data to an AVFrame.
Definition: dovi_rpudec.c:64
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:544
AV_FRAME_DATA_LCEVC
@ AV_FRAME_DATA_LCEVC
Raw LCEVC payload data, as a uint8_t array, with NAL emulation bytes intact.
Definition: frame.h:236
av1_decode_flush
static av_cold void av1_decode_flush(AVCodecContext *avctx)
Definition: av1dec.c:1588
size
int size
Definition: twinvq_data.h:10344
AV1_NUM_REF_FRAMES
@ AV1_NUM_REF_FRAMES
Definition: av1.h:84
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
MKBETAG
#define MKBETAG(a, b, c, d)
Definition: macros.h:56
ff_frame_new_side_data
int ff_frame_new_side_data(const AVCodecContext *avctx, AVFrame *frame, enum AVFrameSideDataType type, size_t size, AVFrameSideData **psd)
Wrapper around av_frame_new_side_data, which rejects side data overridden by the demuxer.
Definition: decode.c:2157
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:54
AV_PIX_FMT_YUV444P12
#define AV_PIX_FMT_YUV444P12
Definition: pixfmt.h:546
AVFrameSideData::data
uint8_t * data
Definition: frame.h:284
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:587
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:1614
HWACCEL_D3D11VA
#define HWACCEL_D3D11VA(codec)
Definition: hwconfig.h:78
attributes.h
AV_PIX_FMT_D3D11
@ AV_PIX_FMT_D3D11
Hardware surfaces for Direct3D11.
Definition: pixfmt.h:336
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:1558
AV1_WARP_MODEL_ROTZOOM
@ AV1_WARP_MODEL_ROTZOOM
Definition: av1.h:116
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
AV1_CSP_COLOCATED
@ AV1_CSP_COLOCATED
Definition: av1.h:135
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:1132
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:581
AV1_FRAME_KEY
@ AV1_FRAME_KEY
Definition: av1.h:53
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:522
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
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
AV1_METADATA_TYPE_HDR_CLL
@ AV1_METADATA_TYPE_HDR_CLL
Definition: av1.h:44
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:179
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:684
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:600
AVCodecContext::pix_fmt
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
Definition: avcodec.h:639
AVCOL_RANGE_MPEG
@ AVCOL_RANGE_MPEG
Narrow or limited range content.
Definition: pixfmt.h:760
AV1RawMetadataITUTT35::payload_ref
AVBufferRef * payload_ref
Definition: cbs_av1.h:368
HWACCEL_VIDEOTOOLBOX
#define HWACCEL_VIDEOTOOLBOX(codec)
Definition: hwconfig.h:74
AV1RawOBU::tile_group
AV1RawTileGroup tile_group
Definition: cbs_av1.h:422
AVDynamicHDRPlus
This struct represents dynamic metadata for color volume transform - application 4 of SMPTE 2094-40:2...
Definition: hdr_dynamic_metadata.h:243
AV1RawFilmGrainParams::update_grain
uint8_t update_grain
Definition: cbs_av1.h:145
AV1RawOBU::obu
union AV1RawOBU::@81 obu
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:1621
av_dynamic_hdr_plus_create_side_data
AVDynamicHDRPlus * av_dynamic_hdr_plus_create_side_data(AVFrame *frame)
Allocate a complete AVDynamicHDRPlus and add it to the frame.
Definition: hdr_dynamic_metadata.c:48
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_MAX_OPERATING_POINTS
@ AV1_MAX_OPERATING_POINTS
Definition: av1.h:74
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
AV1_DIV_LUT_PREC_BITS
@ AV1_DIV_LUT_PREC_BITS
Definition: av1.h:121
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:2281
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:543
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:1942
HWACCEL_VULKAN
#define HWACCEL_VULKAN(codec)
Definition: hwconfig.h:76
AV1RawMetadataITUTT35
Definition: cbs_av1.h:363
AVCodecContext
main external API structure.
Definition: avcodec.h:439
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:178
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:355
AV1_METADATA_TYPE_ITUT_T35
@ AV1_METADATA_TYPE_ITUT_T35
Definition: av1.h:47
AVFilmGrainAOMParams::y_points
uint8_t y_points[14][2]
Definition: film_grain_params.h:50
AV1_WARPEDMODEL_PREC_BITS
@ AV1_WARPEDMODEL_PREC_BITS
Definition: av1.h:112
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:259
AV1RawFilmGrainParams::ar_coeff_lag
uint8_t ar_coeff_lag
Definition: cbs_av1.h:158
AVCodecContext::profile
int profile
profile
Definition: avcodec.h:1630
AV1RawColorConfig::mono_chrome
uint8_t mono_chrome
Definition: cbs_av1.h:53
AV1_GM_ALPHA_PREC_BITS
@ AV1_GM_ALPHA_PREC_BITS
Definition: av1.h:107
export_metadata
static int export_metadata(AVCodecContext *avctx, AVFrame *frame)
Definition: av1dec.c:1081
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:1786
AV1RawFilmGrainParams::ar_coeffs_cb_plus_128
uint8_t ar_coeffs_cb_plus_128[25]
Definition: cbs_av1.h:160
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
FF_CODEC_PROPERTY_CLOSED_CAPTIONS
#define FF_CODEC_PROPERTY_CLOSED_CAPTIONS
Definition: avcodec.h:1651
ITU_T_T35_COUNTRY_CODE_UK
#define ITU_T_T35_COUNTRY_CODE_UK
Definition: itut35.h:23
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
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
AV1_FRAME_INTER
@ AV1_FRAME_INTER
Definition: av1.h:54
AV1RawFilmGrainParams::point_y_scaling
uint8_t point_y_scaling[14]
Definition: cbs_av1.h:149
FF_DISABLE_DEPRECATION_WARNINGS
#define FF_DISABLE_DEPRECATION_WARNINGS
Definition: internal.h:72
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
mem.h
AVBufferRef
A reference to a data buffer.
Definition: buffer.h:82
bytestream2_get_bufferu
static av_always_inline unsigned int bytestream2_get_bufferu(GetByteContext *g, uint8_t *dst, unsigned int size)
Definition: bytestream.h:277
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
AV1_WARP_MODEL_AFFINE
@ AV1_WARP_MODEL_AFFINE
Definition: av1.h:117
ITU_T_T35_COUNTRY_CODE_US
#define ITU_T_T35_COUNTRY_CODE_US
Definition: itut35.h:24
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
AVFrameSideData
Structure to hold side data for an AVFrame.
Definition: frame.h:282
AVPixFmtDescriptor
Descriptor that unambiguously describes how the bits of a pixel are stored in the up to 4 data planes...
Definition: pixdesc.h:69
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:535
alpha
static const int16_t alpha[]
Definition: ilbcdata.h:55
AV1_DIV_LUT_NUM
@ AV1_DIV_LUT_NUM
Definition: av1.h:122
AVPacket
This structure stores compressed data.
Definition: packet.h:565
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:466
AV1_WARP_MODEL_TRANSLATION
@ AV1_WARP_MODEL_TRANSLATION
Definition: av1.h:115
AV1_REF_FRAME_ALTREF
@ AV1_REF_FRAME_ALTREF
Definition: av1.h:69
av_freep
#define av_freep(p)
Definition: tableprint_vlc.h:35
OFFSET
#define OFFSET(x)
Definition: av1dec.c:1613
av_dynamic_hdr_plus_from_t35
int av_dynamic_hdr_plus_from_t35(AVDynamicHDRPlus *s, const uint8_t *data, size_t size)
Parse the user data registered ITU-T T.35 to AVbuffer (AVDynamicHDRPlus).
Definition: hdr_dynamic_metadata.c:61
HWACCEL_VAAPI
#define HWACCEL_VAAPI(codec)
Definition: hwconfig.h:70
AVCodecContext::width
int width
picture width / height.
Definition: avcodec.h:600
TileGroupInfo
Definition: av1dec.h:78
int32_t
int32_t
Definition: audioconvert.c:56
bytestream.h
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
AVCodecContext::properties
attribute_deprecated unsigned properties
Properties of the stream that gets decoded.
Definition: avcodec.h:1649
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
ITU_T_T35_PROVIDER_CODE_SAMSUNG
#define ITU_T_T35_PROVIDER_CODE_SAMSUNG
Definition: itut35.h:39
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_MAX_SEGMENTS
@ AV1_MAX_SEGMENTS
Definition: av1.h:89
av1_receive_frame_internal
static int av1_receive_frame_internal(AVCodecContext *avctx, AVFrame *frame)
Definition: av1dec.c:1314
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:520
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:1202
av_log2
int av_log2(unsigned v)
Definition: intmath.c:26
AV1RawMetadata::metadata
union AV1RawMetadata::@80 metadata
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:624
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:400
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:3376
AV1_WARP_PARAM_REDUCE_BITS
@ AV1_WARP_PARAM_REDUCE_BITS
Definition: av1.h:118
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