FFmpeg
cbs_av1_syntax_template.c
Go to the documentation of this file.
1 /*
2  * This file is part of FFmpeg.
3  *
4  * FFmpeg is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * FFmpeg is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with FFmpeg; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17  */
18 
21 {
23  int err;
24 
25  HEADER("OBU header");
26 
27  fc(1, obu_forbidden_bit, 0, 0);
28 
29  fc(4, obu_type, 0, AV1_OBU_PADDING);
30  flag(obu_extension_flag);
31  flag(obu_has_size_field);
32 
33  fc(1, obu_reserved_1bit, 0, 0);
34 
35  if (current->obu_extension_flag) {
36  fb(3, temporal_id);
37  fb(2, spatial_id);
38  fc(3, extension_header_reserved_3bits, 0, 0);
39  } else {
40  infer(temporal_id, 0);
41  infer(spatial_id, 0);
42  }
43 
44  priv->temporal_id = current->temporal_id;
45  priv->spatial_id = current->spatial_id;
46 
47  return 0;
48 }
49 
50 static int FUNC(trailing_bits)(CodedBitstreamContext *ctx, RWContext *rw, int nb_bits)
51 {
52  int err;
53 
54  av_assert0(nb_bits > 0);
55 
56  fixed(1, trailing_one_bit, 1);
57  --nb_bits;
58 
59  while (nb_bits > 0) {
60  fixed(1, trailing_zero_bit, 0);
61  --nb_bits;
62  }
63 
64  return 0;
65 }
66 
68 {
69  int err;
70 
71  while (byte_alignment(rw) != 0)
72  fixed(1, zero_bit, 0);
73 
74  return 0;
75 }
76 
78  AV1RawColorConfig *current, int seq_profile)
79 {
81  int err;
82 
83  flag(high_bitdepth);
84 
85  if (seq_profile == AV_PROFILE_AV1_PROFESSIONAL &&
86  current->high_bitdepth) {
87  flag(twelve_bit);
88  priv->bit_depth = current->twelve_bit ? 12 : 10;
89  } else {
90  priv->bit_depth = current->high_bitdepth ? 10 : 8;
91  }
92 
93  if (seq_profile == AV_PROFILE_AV1_HIGH)
94  infer(mono_chrome, 0);
95  else
96  flag(mono_chrome);
97  priv->num_planes = current->mono_chrome ? 1 : 3;
98 
99  flag(color_description_present_flag);
100  if (current->color_description_present_flag) {
101  fb(8, color_primaries);
103  fb(8, matrix_coefficients);
104  } else {
107  infer(matrix_coefficients, AVCOL_SPC_UNSPECIFIED);
108  }
109 
110  if (current->mono_chrome) {
111  flag(color_range);
112 
113  infer(subsampling_x, 1);
114  infer(subsampling_y, 1);
115  infer(chroma_sample_position, AV1_CSP_UNKNOWN);
116  infer(separate_uv_delta_q, 0);
117 
118  } else if (current->color_primaries == AVCOL_PRI_BT709 &&
119  current->transfer_characteristics == AVCOL_TRC_IEC61966_2_1 &&
120  current->matrix_coefficients == AVCOL_SPC_RGB) {
121  infer(color_range, 1);
122  infer(subsampling_x, 0);
123  infer(subsampling_y, 0);
124  flag(separate_uv_delta_q);
125 
126  } else {
127  flag(color_range);
128 
129  if (seq_profile == AV_PROFILE_AV1_MAIN) {
130  infer(subsampling_x, 1);
131  infer(subsampling_y, 1);
132  } else if (seq_profile == AV_PROFILE_AV1_HIGH) {
133  infer(subsampling_x, 0);
134  infer(subsampling_y, 0);
135  } else {
136  if (priv->bit_depth == 12) {
137  fb(1, subsampling_x);
138  if (current->subsampling_x)
139  fb(1, subsampling_y);
140  else
141  infer(subsampling_y, 0);
142  } else {
143  infer(subsampling_x, 1);
144  infer(subsampling_y, 0);
145  }
146  }
147  if (current->subsampling_x && current->subsampling_y) {
148  fc(2, chroma_sample_position, AV1_CSP_UNKNOWN,
150  }
151 
152  flag(separate_uv_delta_q);
153  }
154 
155  return 0;
156 }
157 
160 {
161  int err;
162 
163  fc(32, num_units_in_display_tick, 1, MAX_UINT_BITS(32));
164  fc(32, time_scale, 1, MAX_UINT_BITS(32));
165 
166  flag(equal_picture_interval);
167  if (current->equal_picture_interval)
168  uvlc(num_ticks_per_picture_minus_1, 0, MAX_UINT_BITS(32) - 1);
169 
170  return 0;
171 }
172 
175 {
176  int err;
177 
178  fb(5, buffer_delay_length_minus_1);
179  fc(32, num_units_in_decoding_tick, 1, MAX_UINT_BITS(32));
180  fb(5, buffer_removal_time_length_minus_1);
181  fb(5, frame_presentation_time_length_minus_1);
182 
183  return 0;
184 }
185 
188 {
190  int i, err;
191 
192  HEADER("Sequence Header");
193 
194  priv->seen_frame_header = 0;
195 
196  fc(3, seq_profile, AV_PROFILE_AV1_MAIN,
198  flag(still_picture);
199  flag(reduced_still_picture_header);
200 
201  if (current->reduced_still_picture_header) {
202  infer(timing_info_present_flag, 0);
203  infer(decoder_model_info_present_flag, 0);
204  infer(initial_display_delay_present_flag, 0);
205  infer(operating_points_cnt_minus_1, 0);
206  infer(operating_point_idc[0], 0);
207 
208  fb(5, seq_level_idx[0]);
209 
210  infer(seq_tier[0], 0);
211  infer(decoder_model_present_for_this_op[0], 0);
212  infer(initial_display_delay_present_for_this_op[0], 0);
213 
214  } else {
215  flag(timing_info_present_flag);
216  if (current->timing_info_present_flag) {
217  CHECK(FUNC(timing_info)(ctx, rw, &current->timing_info));
218 
219  flag(decoder_model_info_present_flag);
220  if (current->decoder_model_info_present_flag) {
222  (ctx, rw, &current->decoder_model_info));
223  }
224  } else {
225  infer(decoder_model_info_present_flag, 0);
226  }
227 
228  flag(initial_display_delay_present_flag);
229 
230  fb(5, operating_points_cnt_minus_1);
231  for (i = 0; i <= current->operating_points_cnt_minus_1; i++) {
232  fbs(12, operating_point_idc[i], 1, i);
233  fbs(5, seq_level_idx[i], 1, i);
234 
235  if (current->seq_level_idx[i] > 7)
236  flags(seq_tier[i], 1, i);
237  else
238  infer(seq_tier[i], 0);
239 
240  if (current->decoder_model_info_present_flag) {
241  flags(decoder_model_present_for_this_op[i], 1, i);
242  if (current->decoder_model_present_for_this_op[i]) {
243  int n = current->decoder_model_info.buffer_delay_length_minus_1 + 1;
244  fbs(n, decoder_buffer_delay[i], 1, i);
245  fbs(n, encoder_buffer_delay[i], 1, i);
246  flags(low_delay_mode_flag[i], 1, i);
247  }
248  } else {
249  infer(decoder_model_present_for_this_op[i], 0);
250  }
251 
252  if (current->initial_display_delay_present_flag) {
253  flags(initial_display_delay_present_for_this_op[i], 1, i);
254  if (current->initial_display_delay_present_for_this_op[i])
255  fbs(4, initial_display_delay_minus_1[i], 1, i);
256  }
257  }
258  }
259 
260  fb(4, frame_width_bits_minus_1);
261  fb(4, frame_height_bits_minus_1);
262 
263  fb(current->frame_width_bits_minus_1 + 1, max_frame_width_minus_1);
264  fb(current->frame_height_bits_minus_1 + 1, max_frame_height_minus_1);
265 
266  if (current->reduced_still_picture_header)
267  infer(frame_id_numbers_present_flag, 0);
268  else
269  flag(frame_id_numbers_present_flag);
270  if (current->frame_id_numbers_present_flag) {
271  fb(4, delta_frame_id_length_minus_2);
272  fb(3, additional_frame_id_length_minus_1);
273  }
274 
275  flag(use_128x128_superblock);
276  flag(enable_filter_intra);
277  flag(enable_intra_edge_filter);
278 
279  if (current->reduced_still_picture_header) {
280  infer(enable_interintra_compound, 0);
281  infer(enable_masked_compound, 0);
282  infer(enable_warped_motion, 0);
283  infer(enable_dual_filter, 0);
284  infer(enable_order_hint, 0);
285  infer(enable_jnt_comp, 0);
286  infer(enable_ref_frame_mvs, 0);
287 
288  infer(seq_force_screen_content_tools,
290  infer(seq_force_integer_mv,
292  } else {
293  flag(enable_interintra_compound);
294  flag(enable_masked_compound);
295  flag(enable_warped_motion);
296  flag(enable_dual_filter);
297 
298  flag(enable_order_hint);
299  if (current->enable_order_hint) {
300  flag(enable_jnt_comp);
301  flag(enable_ref_frame_mvs);
302  } else {
303  infer(enable_jnt_comp, 0);
304  infer(enable_ref_frame_mvs, 0);
305  }
306 
307  flag(seq_choose_screen_content_tools);
308  if (current->seq_choose_screen_content_tools)
309  infer(seq_force_screen_content_tools,
311  else
312  fb(1, seq_force_screen_content_tools);
313  if (current->seq_force_screen_content_tools > 0) {
314  flag(seq_choose_integer_mv);
315  if (current->seq_choose_integer_mv)
316  infer(seq_force_integer_mv,
318  else
319  fb(1, seq_force_integer_mv);
320  } else {
321  infer(seq_force_integer_mv, AV1_SELECT_INTEGER_MV);
322  }
323 
324  if (current->enable_order_hint)
325  fb(3, order_hint_bits_minus_1);
326  }
327 
328  flag(enable_superres);
329  flag(enable_cdef);
330  flag(enable_restoration);
331 
332  CHECK(FUNC(color_config)(ctx, rw, &current->color_config,
333  current->seq_profile));
334 
335  flag(film_grain_params_present);
336 
337  return 0;
338 }
339 
341 {
343 
344  HEADER("Temporal Delimiter");
345 
346  priv->seen_frame_header = 0;
347 
348  return 0;
349 }
350 
353 {
355  const AV1RawSequenceHeader *seq = priv->sequence_header;
356  static const uint8_t ref_frame_list[AV1_NUM_REF_FRAMES - 2] = {
359  };
360  int8_t ref_frame_idx[AV1_REFS_PER_FRAME], used_frame[AV1_NUM_REF_FRAMES];
361  int16_t shifted_order_hints[AV1_NUM_REF_FRAMES];
362  int cur_frame_hint, latest_order_hint, earliest_order_hint, ref;
363  int i, j;
364 
365  for (i = 0; i < AV1_REFS_PER_FRAME; i++)
366  ref_frame_idx[i] = AV1_REF_FRAME_NONE;
367  ref_frame_idx[AV1_REF_FRAME_LAST - AV1_REF_FRAME_LAST] = current->last_frame_idx;
368  ref_frame_idx[AV1_REF_FRAME_GOLDEN - AV1_REF_FRAME_LAST] = current->golden_frame_idx;
369 
370  for (i = 0; i < AV1_NUM_REF_FRAMES; i++)
371  used_frame[i] = 0;
372  used_frame[current->last_frame_idx] = 1;
373  used_frame[current->golden_frame_idx] = 1;
374 
375  cur_frame_hint = 1 << (seq->order_hint_bits_minus_1);
376  for (i = 0; i < AV1_NUM_REF_FRAMES; i++)
377  shifted_order_hints[i] = cur_frame_hint +
379  priv->order_hint);
380 
381  latest_order_hint = shifted_order_hints[current->last_frame_idx];
382  earliest_order_hint = shifted_order_hints[current->golden_frame_idx];
383 
385  for (i = 0; i < AV1_NUM_REF_FRAMES; i++) {
386  int hint = shifted_order_hints[i];
387  if (!used_frame[i] && hint >= cur_frame_hint &&
388  (ref < 0 || hint >= latest_order_hint)) {
389  ref = i;
390  latest_order_hint = hint;
391  }
392  }
393  if (ref >= 0) {
394  ref_frame_idx[AV1_REF_FRAME_ALTREF - AV1_REF_FRAME_LAST] = ref;
395  used_frame[ref] = 1;
396  }
397 
399  for (i = 0; i < AV1_NUM_REF_FRAMES; i++) {
400  int hint = shifted_order_hints[i];
401  if (!used_frame[i] && hint >= cur_frame_hint &&
402  (ref < 0 || hint < earliest_order_hint)) {
403  ref = i;
404  earliest_order_hint = hint;
405  }
406  }
407  if (ref >= 0) {
408  ref_frame_idx[AV1_REF_FRAME_BWDREF - AV1_REF_FRAME_LAST] = ref;
409  used_frame[ref] = 1;
410  }
411 
413  for (i = 0; i < AV1_NUM_REF_FRAMES; i++) {
414  int hint = shifted_order_hints[i];
415  if (!used_frame[i] && hint >= cur_frame_hint &&
416  (ref < 0 || hint < earliest_order_hint)) {
417  ref = i;
418  earliest_order_hint = hint;
419  }
420  }
421  if (ref >= 0) {
422  ref_frame_idx[AV1_REF_FRAME_ALTREF2 - AV1_REF_FRAME_LAST] = ref;
423  used_frame[ref] = 1;
424  }
425 
426  for (i = 0; i < AV1_REFS_PER_FRAME - 2; i++) {
427  int ref_frame = ref_frame_list[i];
428  if (ref_frame_idx[ref_frame - AV1_REF_FRAME_LAST] < 0 ) {
430  for (j = 0; j < AV1_NUM_REF_FRAMES; j++) {
431  int hint = shifted_order_hints[j];
432  if (!used_frame[j] && hint < cur_frame_hint &&
433  (ref < 0 || hint >= latest_order_hint)) {
434  ref = j;
435  latest_order_hint = hint;
436  }
437  }
438  if (ref >= 0) {
439  ref_frame_idx[ref_frame - AV1_REF_FRAME_LAST] = ref;
440  used_frame[ref] = 1;
441  }
442  }
443  }
444 
446  for (i = 0; i < AV1_NUM_REF_FRAMES; i++) {
447  int hint = shifted_order_hints[i];
448  if (ref < 0 || hint < earliest_order_hint) {
449  ref = i;
450  earliest_order_hint = hint;
451  }
452  }
453  for (i = 0; i < AV1_REFS_PER_FRAME; i++) {
454  if (ref_frame_idx[i] < 0)
455  ref_frame_idx[i] = ref;
456  infer(ref_frame_idx[i], ref_frame_idx[i]);
457  }
458 
459  return 0;
460 }
461 
464 {
466  const AV1RawSequenceHeader *seq = priv->sequence_header;
467  int denom, err;
468 
469  if (seq->enable_superres)
470  flag(use_superres);
471  else
472  infer(use_superres, 0);
473 
474  if (current->use_superres) {
475  fb(3, coded_denom);
476  denom = current->coded_denom + AV1_SUPERRES_DENOM_MIN;
477  } else {
478  denom = AV1_SUPERRES_NUM;
479  }
480 
481  priv->upscaled_width = priv->frame_width;
482  priv->frame_width = (priv->upscaled_width * AV1_SUPERRES_NUM +
483  denom / 2) / denom;
484 
485  return 0;
486 }
487 
490 {
492  const AV1RawSequenceHeader *seq = priv->sequence_header;
493  int err;
494 
495  if (current->frame_size_override_flag) {
496  fb(seq->frame_width_bits_minus_1 + 1, frame_width_minus_1);
497  fb(seq->frame_height_bits_minus_1 + 1, frame_height_minus_1);
498  } else {
499  infer(frame_width_minus_1, seq->max_frame_width_minus_1);
500  infer(frame_height_minus_1, seq->max_frame_height_minus_1);
501  }
502 
503  priv->frame_width = current->frame_width_minus_1 + 1;
504  priv->frame_height = current->frame_height_minus_1 + 1;
505 
507 
508  return 0;
509 }
510 
513 {
515  int err;
516 
517  flag(render_and_frame_size_different);
518 
519  if (current->render_and_frame_size_different) {
520  fb(16, render_width_minus_1);
521  fb(16, render_height_minus_1);
522  } else {
523  infer(render_width_minus_1, current->frame_width_minus_1);
524  infer(render_height_minus_1, current->frame_height_minus_1);
525  }
526 
527  priv->render_width = current->render_width_minus_1 + 1;
528  priv->render_height = current->render_height_minus_1 + 1;
529 
530  return 0;
531 }
532 
535 {
537  int i, err;
538 
539  for (i = 0; i < AV1_REFS_PER_FRAME; i++) {
540  flags(found_ref[i], 1, i);
541  if (current->found_ref[i]) {
543  &priv->ref[current->ref_frame_idx[i]];
544 
545  if (!ref->valid) {
546  av_log(ctx->log_ctx, AV_LOG_ERROR,
547  "Missing reference frame needed for frame size "
548  "(ref = %d, ref_frame_idx = %d).\n",
549  i, current->ref_frame_idx[i]);
550  return AVERROR_INVALIDDATA;
551  }
552 
553  infer(frame_width_minus_1, ref->upscaled_width - 1);
554  infer(frame_height_minus_1, ref->frame_height - 1);
555  infer(render_width_minus_1, ref->render_width - 1);
556  infer(render_height_minus_1, ref->render_height - 1);
557 
558  priv->upscaled_width = ref->upscaled_width;
559  priv->frame_width = priv->upscaled_width;
560  priv->frame_height = ref->frame_height;
561  priv->render_width = ref->render_width;
562  priv->render_height = ref->render_height;
563  break;
564  }
565  }
566 
567  if (i >= AV1_REFS_PER_FRAME) {
568  CHECK(FUNC(frame_size)(ctx, rw, current));
569  CHECK(FUNC(render_size)(ctx, rw, current));
570  } else {
572  }
573 
574  return 0;
575 }
576 
579 {
580  int err;
581 
582  flag(is_filter_switchable);
583  if (current->is_filter_switchable)
586  else
588 
589  return 0;
590 }
591 
594 {
596  const AV1RawSequenceHeader *seq = priv->sequence_header;
597  int mi_cols, mi_rows, sb_cols, sb_rows, sb_shift, sb_size;
598  int max_tile_width_sb, max_tile_height_sb, max_tile_area_sb;
599  int min_log2_tile_cols, max_log2_tile_cols, max_log2_tile_rows;
600  int min_log2_tiles, min_log2_tile_rows;
601  int err;
602 
603  mi_cols = 2 * ((priv->frame_width + 7) >> 3);
604  mi_rows = 2 * ((priv->frame_height + 7) >> 3);
605 
606  sb_cols = seq->use_128x128_superblock ? ((mi_cols + 31) >> 5)
607  : ((mi_cols + 15) >> 4);
608  sb_rows = seq->use_128x128_superblock ? ((mi_rows + 31) >> 5)
609  : ((mi_rows + 15) >> 4);
610 
611  sb_shift = seq->use_128x128_superblock ? 5 : 4;
612  sb_size = sb_shift + 2;
613 
614  max_tile_width_sb = AV1_MAX_TILE_WIDTH >> sb_size;
615  max_tile_area_sb = AV1_MAX_TILE_AREA >> (2 * sb_size);
616 
617  min_log2_tile_cols = cbs_av1_tile_log2(max_tile_width_sb, sb_cols);
618  max_log2_tile_cols = cbs_av1_tile_log2(1, FFMIN(sb_cols, AV1_MAX_TILE_COLS));
619  max_log2_tile_rows = cbs_av1_tile_log2(1, FFMIN(sb_rows, AV1_MAX_TILE_ROWS));
620  min_log2_tiles = FFMAX(min_log2_tile_cols,
621  cbs_av1_tile_log2(max_tile_area_sb, sb_rows * sb_cols));
622 
623  flag(uniform_tile_spacing_flag);
624 
625  if (current->uniform_tile_spacing_flag) {
626  int tile_width_sb, tile_height_sb;
627 
628  increment(tile_cols_log2, min_log2_tile_cols, max_log2_tile_cols);
629 
630  tile_width_sb = (sb_cols + (1 << current->tile_cols_log2) - 1) >>
631  current->tile_cols_log2;
632 
633  for (int off = 0, j = 0; off < sb_cols; off += tile_width_sb)
634  current->tile_start_col_sb[j++] = off;
635 
636  current->tile_cols = (sb_cols + tile_width_sb - 1) / tile_width_sb;
637 
638  min_log2_tile_rows = FFMAX(min_log2_tiles - current->tile_cols_log2, 0);
639 
640  increment(tile_rows_log2, min_log2_tile_rows, max_log2_tile_rows);
641 
642  tile_height_sb = (sb_rows + (1 << current->tile_rows_log2) - 1) >>
643  current->tile_rows_log2;
644 
645  for (int off = 0, j = 0; off < sb_rows; off += tile_height_sb)
646  current->tile_start_row_sb[j++] = off;
647 
648  current->tile_rows = (sb_rows + tile_height_sb - 1) / tile_height_sb;
649 
650  int i;
651  for (i = 0; i < current->tile_cols - 1; i++)
652  infer(width_in_sbs_minus_1[i], tile_width_sb - 1);
653  infer(width_in_sbs_minus_1[i],
654  sb_cols - (current->tile_cols - 1) * tile_width_sb - 1);
655  for (i = 0; i < current->tile_rows - 1; i++)
656  infer(height_in_sbs_minus_1[i], tile_height_sb - 1);
657  infer(height_in_sbs_minus_1[i],
658  sb_rows - (current->tile_rows - 1) * tile_height_sb - 1);
659 
660  } else {
661  int widest_tile_sb, start_sb, size_sb, max_width, max_height, i;
662 
663  widest_tile_sb = 0;
664 
665  start_sb = 0;
666  for (i = 0; start_sb < sb_cols && i < AV1_MAX_TILE_COLS; i++) {
667  current->tile_start_col_sb[i] = start_sb;
668  max_width = FFMIN(sb_cols - start_sb, max_tile_width_sb);
669  ns(max_width, width_in_sbs_minus_1[i], 1, i);
670  size_sb = current->width_in_sbs_minus_1[i] + 1;
671  widest_tile_sb = FFMAX(size_sb, widest_tile_sb);
672  start_sb += size_sb;
673  }
674  current->tile_cols_log2 = cbs_av1_tile_log2(1, i);
675  current->tile_cols = i;
676 
677  if (min_log2_tiles > 0)
678  max_tile_area_sb = (sb_rows * sb_cols) >> (min_log2_tiles + 1);
679  else
680  max_tile_area_sb = sb_rows * sb_cols;
681  max_tile_height_sb = FFMAX(max_tile_area_sb / widest_tile_sb, 1);
682 
683  start_sb = 0;
684  for (i = 0; start_sb < sb_rows && i < AV1_MAX_TILE_ROWS; i++) {
685  current->tile_start_row_sb[i] = start_sb;
686  max_height = FFMIN(sb_rows - start_sb, max_tile_height_sb);
687  ns(max_height, height_in_sbs_minus_1[i], 1, i);
688  size_sb = current->height_in_sbs_minus_1[i] + 1;
689  start_sb += size_sb;
690  }
691  current->tile_rows_log2 = cbs_av1_tile_log2(1, i);
692  current->tile_rows = i;
693  }
694 
695  if (current->tile_cols_log2 > 0 ||
696  current->tile_rows_log2 > 0) {
697  fb(current->tile_cols_log2 + current->tile_rows_log2,
698  context_update_tile_id);
699  fb(2, tile_size_bytes_minus1);
700  } else {
701  infer(context_update_tile_id, 0);
702  }
703 
704  priv->tile_cols = current->tile_cols;
705  priv->tile_rows = current->tile_rows;
706 
707  return 0;
708 }
709 
712 {
714  const AV1RawSequenceHeader *seq = priv->sequence_header;
715  int err;
716 
717  fb(8, base_q_idx);
718 
719  delta_q(delta_q_y_dc);
720 
721  if (priv->num_planes > 1) {
723  flag(diff_uv_delta);
724  else
725  infer(diff_uv_delta, 0);
726 
727  delta_q(delta_q_u_dc);
728  delta_q(delta_q_u_ac);
729 
730  if (current->diff_uv_delta) {
731  delta_q(delta_q_v_dc);
732  delta_q(delta_q_v_ac);
733  } else {
734  infer(delta_q_v_dc, current->delta_q_u_dc);
735  infer(delta_q_v_ac, current->delta_q_u_ac);
736  }
737  } else {
738  infer(delta_q_u_dc, 0);
739  infer(delta_q_u_ac, 0);
740  infer(delta_q_v_dc, 0);
741  infer(delta_q_v_ac, 0);
742  }
743 
744  flag(using_qmatrix);
745  if (current->using_qmatrix) {
746  fb(4, qm_y);
747  fb(4, qm_u);
749  fb(4, qm_v);
750  else
751  infer(qm_v, current->qm_u);
752  }
753 
754  return 0;
755 }
756 
759 {
761  static const uint8_t bits[AV1_SEG_LVL_MAX] = { 8, 6, 6, 6, 6, 3, 0, 0 };
762  static const uint8_t sign[AV1_SEG_LVL_MAX] = { 1, 1, 1, 1, 1, 0, 0, 0 };
763  static const uint8_t default_feature_enabled[AV1_SEG_LVL_MAX] = { 0 };
764  static const int16_t default_feature_value[AV1_SEG_LVL_MAX] = { 0 };
765  int i, j, err;
766 
767  flag(segmentation_enabled);
768 
769  if (current->segmentation_enabled) {
770  if (current->primary_ref_frame == AV1_PRIMARY_REF_NONE) {
771  infer(segmentation_update_map, 1);
772  infer(segmentation_temporal_update, 0);
773  infer(segmentation_update_data, 1);
774  } else {
775  flag(segmentation_update_map);
776  if (current->segmentation_update_map)
777  flag(segmentation_temporal_update);
778  else
779  infer(segmentation_temporal_update, 0);
780  flag(segmentation_update_data);
781  }
782 
783  for (i = 0; i < AV1_MAX_SEGMENTS; i++) {
784  const uint8_t *ref_feature_enabled;
785  const int16_t *ref_feature_value;
786 
787  if (current->primary_ref_frame == AV1_PRIMARY_REF_NONE) {
788  ref_feature_enabled = default_feature_enabled;
789  ref_feature_value = default_feature_value;
790  } else {
791  ref_feature_enabled =
792  priv->ref[current->ref_frame_idx[current->primary_ref_frame]].feature_enabled[i];
793  ref_feature_value =
794  priv->ref[current->ref_frame_idx[current->primary_ref_frame]].feature_value[i];
795  }
796 
797  for (j = 0; j < AV1_SEG_LVL_MAX; j++) {
798  if (current->segmentation_update_data) {
799  flags(feature_enabled[i][j], 2, i, j);
800 
801  if (current->feature_enabled[i][j] && bits[j] > 0) {
802  if (sign[j])
803  sus(1 + bits[j], feature_value[i][j], 2, i, j);
804  else
805  fbs(bits[j], feature_value[i][j], 2, i, j);
806  } else {
807  infer(feature_value[i][j], 0);
808  }
809  } else {
810  infer(feature_enabled[i][j], ref_feature_enabled[j]);
811  infer(feature_value[i][j], ref_feature_value[j]);
812  }
813  }
814  }
815  } else {
816  for (i = 0; i < AV1_MAX_SEGMENTS; i++) {
817  for (j = 0; j < AV1_SEG_LVL_MAX; j++) {
818  infer(feature_enabled[i][j], 0);
819  infer(feature_value[i][j], 0);
820  }
821  }
822  }
823 
824  return 0;
825 }
826 
829 {
830  int err;
831 
832  if (current->base_q_idx > 0)
833  flag(delta_q_present);
834  else
835  infer(delta_q_present, 0);
836 
837  if (current->delta_q_present)
838  fb(2, delta_q_res);
839 
840  return 0;
841 }
842 
845 {
846  int err;
847 
848  if (current->delta_q_present) {
849  if (!current->allow_intrabc)
850  flag(delta_lf_present);
851  else
852  infer(delta_lf_present, 0);
853  if (current->delta_lf_present) {
854  fb(2, delta_lf_res);
855  flag(delta_lf_multi);
856  } else {
857  infer(delta_lf_res, 0);
858  infer(delta_lf_multi, 0);
859  }
860  } else {
861  infer(delta_lf_present, 0);
862  infer(delta_lf_res, 0);
863  infer(delta_lf_multi, 0);
864  }
865 
866  return 0;
867 }
868 
871 {
873  static const int8_t default_loop_filter_ref_deltas[AV1_TOTAL_REFS_PER_FRAME] =
874  { 1, 0, 0, 0, -1, 0, -1, -1 };
875  static const int8_t default_loop_filter_mode_deltas[2] = { 0, 0 };
876  int i, err;
877 
878  if (priv->coded_lossless || current->allow_intrabc) {
879  infer(loop_filter_level[0], 0);
880  infer(loop_filter_level[1], 0);
881  infer(loop_filter_ref_deltas[AV1_REF_FRAME_INTRA], 1);
882  infer(loop_filter_ref_deltas[AV1_REF_FRAME_LAST], 0);
883  infer(loop_filter_ref_deltas[AV1_REF_FRAME_LAST2], 0);
884  infer(loop_filter_ref_deltas[AV1_REF_FRAME_LAST3], 0);
885  infer(loop_filter_ref_deltas[AV1_REF_FRAME_BWDREF], 0);
886  infer(loop_filter_ref_deltas[AV1_REF_FRAME_GOLDEN], -1);
887  infer(loop_filter_ref_deltas[AV1_REF_FRAME_ALTREF], -1);
888  infer(loop_filter_ref_deltas[AV1_REF_FRAME_ALTREF2], -1);
889  for (i = 0; i < 2; i++)
890  infer(loop_filter_mode_deltas[i], 0);
891  return 0;
892  }
893 
894  fb(6, loop_filter_level[0]);
895  fb(6, loop_filter_level[1]);
896 
897  if (priv->num_planes > 1) {
898  if (current->loop_filter_level[0] ||
899  current->loop_filter_level[1]) {
900  fb(6, loop_filter_level[2]);
901  fb(6, loop_filter_level[3]);
902  }
903  }
904 
905  fb(3, loop_filter_sharpness);
906 
907  flag(loop_filter_delta_enabled);
908  if (current->loop_filter_delta_enabled) {
909  const int8_t *ref_loop_filter_ref_deltas, *ref_loop_filter_mode_deltas;
910 
911  if (current->primary_ref_frame == AV1_PRIMARY_REF_NONE) {
912  ref_loop_filter_ref_deltas = default_loop_filter_ref_deltas;
913  ref_loop_filter_mode_deltas = default_loop_filter_mode_deltas;
914  } else {
915  ref_loop_filter_ref_deltas =
916  priv->ref[current->ref_frame_idx[current->primary_ref_frame]].loop_filter_ref_deltas;
917  ref_loop_filter_mode_deltas =
918  priv->ref[current->ref_frame_idx[current->primary_ref_frame]].loop_filter_mode_deltas;
919  }
920 
921  flag(loop_filter_delta_update);
922  for (i = 0; i < AV1_TOTAL_REFS_PER_FRAME; i++) {
923  if (current->loop_filter_delta_update)
924  flags(update_ref_delta[i], 1, i);
925  else
926  infer(update_ref_delta[i], 0);
927  if (current->update_ref_delta[i])
928  sus(1 + 6, loop_filter_ref_deltas[i], 1, i);
929  else
930  infer(loop_filter_ref_deltas[i], ref_loop_filter_ref_deltas[i]);
931  }
932  for (i = 0; i < 2; i++) {
933  if (current->loop_filter_delta_update)
934  flags(update_mode_delta[i], 1, i);
935  else
936  infer(update_mode_delta[i], 0);
937  if (current->update_mode_delta[i])
938  sus(1 + 6, loop_filter_mode_deltas[i], 1, i);
939  else
940  infer(loop_filter_mode_deltas[i], ref_loop_filter_mode_deltas[i]);
941  }
942  } else {
943  for (i = 0; i < AV1_TOTAL_REFS_PER_FRAME; i++)
944  infer(loop_filter_ref_deltas[i], default_loop_filter_ref_deltas[i]);
945  for (i = 0; i < 2; i++)
946  infer(loop_filter_mode_deltas[i], default_loop_filter_mode_deltas[i]);
947  }
948 
949  return 0;
950 }
951 
954 {
956  const AV1RawSequenceHeader *seq = priv->sequence_header;
957  int i, err;
958 
959  if (priv->coded_lossless || current->allow_intrabc ||
960  !seq->enable_cdef) {
961  infer(cdef_damping_minus_3, 0);
962  infer(cdef_bits, 0);
963  infer(cdef_y_pri_strength[0], 0);
964  infer(cdef_y_sec_strength[0], 0);
965  infer(cdef_uv_pri_strength[0], 0);
966  infer(cdef_uv_sec_strength[0], 0);
967 
968  return 0;
969  }
970 
971  fb(2, cdef_damping_minus_3);
972  fb(2, cdef_bits);
973 
974  for (i = 0; i < (1 << current->cdef_bits); i++) {
975  fbs(4, cdef_y_pri_strength[i], 1, i);
976  fbs(2, cdef_y_sec_strength[i], 1, i);
977 
978  if (priv->num_planes > 1) {
979  fbs(4, cdef_uv_pri_strength[i], 1, i);
980  fbs(2, cdef_uv_sec_strength[i], 1, i);
981  }
982  }
983 
984  return 0;
985 }
986 
989 {
991  const AV1RawSequenceHeader *seq = priv->sequence_header;
992  int uses_lr, uses_chroma_lr;
993  int i, err;
994 
995  if (priv->all_lossless || current->allow_intrabc ||
996  !seq->enable_restoration) {
997  return 0;
998  }
999 
1000  uses_lr = uses_chroma_lr = 0;
1001  for (i = 0; i < priv->num_planes; i++) {
1002  fbs(2, lr_type[i], 1, i);
1003 
1004  if (current->lr_type[i] != AV1_RESTORE_NONE) {
1005  uses_lr = 1;
1006  if (i > 0)
1007  uses_chroma_lr = 1;
1008  }
1009  }
1010 
1011  if (uses_lr) {
1012  if (seq->use_128x128_superblock)
1013  increment(lr_unit_shift, 1, 2);
1014  else
1015  increment(lr_unit_shift, 0, 2);
1016 
1017  if(seq->color_config.subsampling_x &&
1018  seq->color_config.subsampling_y && uses_chroma_lr) {
1019  fb(1, lr_uv_shift);
1020  } else {
1021  infer(lr_uv_shift, 0);
1022  }
1023  }
1024 
1025  return 0;
1026 }
1027 
1030 {
1032  int err;
1033 
1034  if (priv->coded_lossless)
1035  infer(tx_mode, AV1_ONLY_4X4);
1036  else
1038 
1039  return 0;
1040 }
1041 
1044 {
1045  int err;
1046 
1047  if (current->frame_type == AV1_FRAME_INTRA_ONLY ||
1048  current->frame_type == AV1_FRAME_KEY)
1049  infer(reference_select, 0);
1050  else
1051  flag(reference_select);
1052 
1053  return 0;
1054 }
1055 
1058 {
1060  const AV1RawSequenceHeader *seq = priv->sequence_header;
1061  int skip_mode_allowed;
1062  int err;
1063 
1064  if (current->frame_type == AV1_FRAME_KEY ||
1065  current->frame_type == AV1_FRAME_INTRA_ONLY ||
1066  !current->reference_select || !seq->enable_order_hint) {
1067  skip_mode_allowed = 0;
1068  } else {
1069  int forward_idx, backward_idx;
1070  int forward_hint, backward_hint;
1071  int ref_hint, dist, i;
1072 
1073  forward_idx = -1;
1074  backward_idx = -1;
1075  for (i = 0; i < AV1_REFS_PER_FRAME; i++) {
1076  ref_hint = priv->ref[current->ref_frame_idx[i]].order_hint;
1077  dist = cbs_av1_get_relative_dist(seq, ref_hint,
1078  priv->order_hint);
1079  if (dist < 0) {
1080  if (forward_idx < 0 ||
1081  cbs_av1_get_relative_dist(seq, ref_hint,
1082  forward_hint) > 0) {
1083  forward_idx = i;
1084  forward_hint = ref_hint;
1085  }
1086  } else if (dist > 0) {
1087  if (backward_idx < 0 ||
1088  cbs_av1_get_relative_dist(seq, ref_hint,
1089  backward_hint) < 0) {
1090  backward_idx = i;
1091  backward_hint = ref_hint;
1092  }
1093  }
1094  }
1095 
1096  if (forward_idx < 0) {
1097  skip_mode_allowed = 0;
1098  } else if (backward_idx >= 0) {
1099  skip_mode_allowed = 1;
1100  // Frames for skip mode are forward_idx and backward_idx.
1101  } else {
1102  int second_forward_idx;
1103  int second_forward_hint;
1104 
1105  second_forward_idx = -1;
1106  for (i = 0; i < AV1_REFS_PER_FRAME; i++) {
1107  ref_hint = priv->ref[current->ref_frame_idx[i]].order_hint;
1108  if (cbs_av1_get_relative_dist(seq, ref_hint,
1109  forward_hint) < 0) {
1110  if (second_forward_idx < 0 ||
1111  cbs_av1_get_relative_dist(seq, ref_hint,
1112  second_forward_hint) > 0) {
1113  second_forward_idx = i;
1114  second_forward_hint = ref_hint;
1115  }
1116  }
1117  }
1118 
1119  if (second_forward_idx < 0) {
1120  skip_mode_allowed = 0;
1121  } else {
1122  skip_mode_allowed = 1;
1123  // Frames for skip mode are forward_idx and second_forward_idx.
1124  }
1125  }
1126  }
1127 
1128  if (skip_mode_allowed)
1129  flag(skip_mode_present);
1130  else
1131  infer(skip_mode_present, 0);
1132 
1133  return 0;
1134 }
1135 
1138  int type, int ref, int idx)
1139 {
1140  uint32_t abs_bits, prec_bits, num_syms;
1141  int err;
1142 
1143  if (idx < 2) {
1145  abs_bits = AV1_GM_ABS_TRANS_ONLY_BITS - !current->allow_high_precision_mv;
1146  prec_bits = AV1_GM_TRANS_ONLY_PREC_BITS - !current->allow_high_precision_mv;
1147  } else {
1148  abs_bits = AV1_GM_ABS_TRANS_BITS;
1149  prec_bits = AV1_GM_TRANS_PREC_BITS;
1150  }
1151  } else {
1152  abs_bits = AV1_GM_ABS_ALPHA_BITS;
1153  prec_bits = AV1_GM_ALPHA_PREC_BITS;
1154  }
1155 
1156  num_syms = 2 * (1 << abs_bits) + 1;
1157  subexp(gm_params[ref][idx], num_syms, 2, ref, idx);
1158 
1159  // Actual gm_params value is not reconstructed here.
1160  (void)prec_bits;
1161 
1162  return 0;
1163 }
1164 
1167 {
1168  int ref, type;
1169  int err;
1170 
1171  if (current->frame_type == AV1_FRAME_KEY ||
1172  current->frame_type == AV1_FRAME_INTRA_ONLY)
1173  return 0;
1174 
1176  flags(is_global[ref], 1, ref);
1177  if (current->is_global[ref]) {
1178  flags(is_rot_zoom[ref], 1, ref);
1179  if (current->is_rot_zoom[ref]) {
1181  } else {
1182  flags(is_translation[ref], 1, ref);
1183  type = current->is_translation[ref] ? AV1_WARP_MODEL_TRANSLATION
1185  }
1186  } else {
1188  }
1189 
1190  if (type >= AV1_WARP_MODEL_ROTZOOM) {
1193  if (type == AV1_WARP_MODEL_AFFINE) {
1196  } else {
1197  // gm_params[ref][4] = -gm_params[ref][3]
1198  // gm_params[ref][5] = gm_params[ref][2]
1199  }
1200  }
1204  }
1205  }
1206 
1207  return 0;
1208 }
1209 
1213 {
1215  const AV1RawSequenceHeader *seq = priv->sequence_header;
1216  int num_pos_luma, num_pos_chroma;
1217  int i, err;
1218 
1219  if (!seq->film_grain_params_present ||
1220  (!frame_header->show_frame && !frame_header->showable_frame))
1221  return 0;
1222 
1223  flag(apply_grain);
1224 
1225  if (!current->apply_grain)
1226  return 0;
1227 
1228  fb(16, grain_seed);
1229 
1230  if (frame_header->frame_type == AV1_FRAME_INTER)
1231  flag(update_grain);
1232  else
1233  infer(update_grain, 1);
1234 
1235  if (!current->update_grain) {
1236  fb(3, film_grain_params_ref_idx);
1237  return 0;
1238  }
1239 
1240  fc(4, num_y_points, 0, 14);
1241  for (i = 0; i < current->num_y_points; i++) {
1242  fcs(8, point_y_value[i],
1243  i ? current->point_y_value[i - 1] + 1 : 0,
1244  MAX_UINT_BITS(8) - (current->num_y_points - i - 1),
1245  1, i);
1246  fbs(8, point_y_scaling[i], 1, i);
1247  }
1248 
1249  if (seq->color_config.mono_chrome)
1250  infer(chroma_scaling_from_luma, 0);
1251  else
1252  flag(chroma_scaling_from_luma);
1253 
1254  if (seq->color_config.mono_chrome ||
1255  current->chroma_scaling_from_luma ||
1256  (seq->color_config.subsampling_x == 1 &&
1257  seq->color_config.subsampling_y == 1 &&
1258  current->num_y_points == 0)) {
1259  infer(num_cb_points, 0);
1260  infer(num_cr_points, 0);
1261  } else {
1262  fc(4, num_cb_points, 0, 10);
1263  for (i = 0; i < current->num_cb_points; i++) {
1264  fcs(8, point_cb_value[i],
1265  i ? current->point_cb_value[i - 1] + 1 : 0,
1266  MAX_UINT_BITS(8) - (current->num_cb_points - i - 1),
1267  1, i);
1268  fbs(8, point_cb_scaling[i], 1, i);
1269  }
1270  fc(4, num_cr_points, 0, 10);
1271  for (i = 0; i < current->num_cr_points; i++) {
1272  fcs(8, point_cr_value[i],
1273  i ? current->point_cr_value[i - 1] + 1 : 0,
1274  MAX_UINT_BITS(8) - (current->num_cr_points - i - 1),
1275  1, i);
1276  fbs(8, point_cr_scaling[i], 1, i);
1277  }
1278  }
1279 
1280  fb(2, grain_scaling_minus_8);
1281  fb(2, ar_coeff_lag);
1282  num_pos_luma = 2 * current->ar_coeff_lag * (current->ar_coeff_lag + 1);
1283  if (current->num_y_points) {
1284  num_pos_chroma = num_pos_luma + 1;
1285  for (i = 0; i < num_pos_luma; i++)
1286  fbs(8, ar_coeffs_y_plus_128[i], 1, i);
1287  } else {
1288  num_pos_chroma = num_pos_luma;
1289  }
1290  if (current->chroma_scaling_from_luma || current->num_cb_points) {
1291  for (i = 0; i < num_pos_chroma; i++)
1292  fbs(8, ar_coeffs_cb_plus_128[i], 1, i);
1293  }
1294  if (current->chroma_scaling_from_luma || current->num_cr_points) {
1295  for (i = 0; i < num_pos_chroma; i++)
1296  fbs(8, ar_coeffs_cr_plus_128[i], 1, i);
1297  }
1298  fb(2, ar_coeff_shift_minus_6);
1299  fb(2, grain_scale_shift);
1300  if (current->num_cb_points) {
1301  fb(8, cb_mult);
1302  fb(8, cb_luma_mult);
1303  fb(9, cb_offset);
1304  }
1305  if (current->num_cr_points) {
1306  fb(8, cr_mult);
1307  fb(8, cr_luma_mult);
1308  fb(9, cr_offset);
1309  }
1310 
1311  flag(overlap_flag);
1312  flag(clip_to_restricted_range);
1313 
1314  return 0;
1315 }
1316 
1319 {
1321  const AV1RawSequenceHeader *seq;
1322  int id_len, diff_len, all_frames, frame_is_intra, order_hint_bits;
1323  int i, err;
1324 
1325  if (!priv->sequence_header) {
1326  av_log(ctx->log_ctx, AV_LOG_ERROR, "No sequence header available: "
1327  "unable to decode frame header.\n");
1328  return AVERROR_INVALIDDATA;
1329  }
1330  seq = priv->sequence_header;
1331 
1332  id_len = seq->additional_frame_id_length_minus_1 +
1334  all_frames = (1 << AV1_NUM_REF_FRAMES) - 1;
1335 
1336  if (seq->reduced_still_picture_header) {
1337  infer(show_existing_frame, 0);
1339  infer(show_frame, 1);
1340  infer(showable_frame, 0);
1341  frame_is_intra = 1;
1342 
1343  } else {
1344  flag(show_existing_frame);
1345 
1346  if (current->show_existing_frame) {
1348 
1349  fb(3, frame_to_show_map_idx);
1350  ref = &priv->ref[current->frame_to_show_map_idx];
1351 
1352  if (!ref->valid) {
1353  av_log(ctx->log_ctx, AV_LOG_ERROR, "Missing reference frame needed for "
1354  "show_existing_frame (frame_to_show_map_idx = %d).\n",
1355  current->frame_to_show_map_idx);
1356  return AVERROR_INVALIDDATA;
1357  }
1358 
1362  frame_presentation_time);
1363  }
1364 
1366  fb(id_len, display_frame_id);
1367 
1368  infer(frame_type, ref->frame_type);
1369  if (current->frame_type == AV1_FRAME_KEY) {
1370  infer(refresh_frame_flags, all_frames);
1371 
1372  // Section 7.21
1373  infer(current_frame_id, ref->frame_id);
1374  priv->upscaled_width = ref->upscaled_width;
1375  priv->frame_width = ref->frame_width;
1376  priv->frame_height = ref->frame_height;
1377  priv->render_width = ref->render_width;
1378  priv->render_height = ref->render_height;
1379  priv->bit_depth = ref->bit_depth;
1380  priv->order_hint = ref->order_hint;
1381 
1382  memcpy(priv->loop_filter_ref_deltas, ref->loop_filter_ref_deltas,
1383  sizeof(ref->loop_filter_ref_deltas));
1384  memcpy(priv->loop_filter_mode_deltas, ref->loop_filter_mode_deltas,
1385  sizeof(ref->loop_filter_mode_deltas));
1386  memcpy(priv->feature_enabled, ref->feature_enabled,
1387  sizeof(ref->feature_enabled));
1388  memcpy(priv->feature_value, ref->feature_value,
1389  sizeof(ref->feature_value));
1390  } else
1391  infer(refresh_frame_flags, 0);
1392 
1393  infer(frame_width_minus_1, ref->upscaled_width - 1);
1394  infer(frame_height_minus_1, ref->frame_height - 1);
1395  infer(render_width_minus_1, ref->render_width - 1);
1396  infer(render_height_minus_1, ref->render_height - 1);
1397 
1398  // Section 7.20
1399  goto update_refs;
1400  }
1401 
1402  fb(2, frame_type);
1403  frame_is_intra = (current->frame_type == AV1_FRAME_INTRA_ONLY ||
1404  current->frame_type == AV1_FRAME_KEY);
1405 
1406  flag(show_frame);
1407  if (current->show_frame &&
1411  frame_presentation_time);
1412  }
1413  if (current->show_frame)
1414  infer(showable_frame, current->frame_type != AV1_FRAME_KEY);
1415  else
1416  flag(showable_frame);
1417 
1418  if (current->frame_type == AV1_FRAME_SWITCH ||
1419  (current->frame_type == AV1_FRAME_KEY && current->show_frame))
1420  infer(error_resilient_mode, 1);
1421  else
1422  flag(error_resilient_mode);
1423  }
1424 
1425  if (current->frame_type == AV1_FRAME_KEY && current->show_frame) {
1426  for (i = 0; i < AV1_NUM_REF_FRAMES; i++) {
1427  priv->ref[i].valid = 0;
1428  priv->ref[i].order_hint = 0;
1429  }
1430  for (i = 0; i < AV1_REFS_PER_FRAME; i++)
1431  priv->order_hints[i + AV1_REF_FRAME_LAST] = 0;
1432  }
1433 
1434  flag(disable_cdf_update);
1435 
1436  if (seq->seq_force_screen_content_tools ==
1438  flag(allow_screen_content_tools);
1439  } else {
1440  infer(allow_screen_content_tools,
1442  }
1443  if (current->allow_screen_content_tools) {
1445  flag(force_integer_mv);
1446  else
1447  infer(force_integer_mv, seq->seq_force_integer_mv);
1448  } else {
1449  infer(force_integer_mv, 0);
1450  }
1451 
1452  if (seq->frame_id_numbers_present_flag) {
1453  fb(id_len, current_frame_id);
1454 
1455  diff_len = seq->delta_frame_id_length_minus_2 + 2;
1456  for (i = 0; i < AV1_NUM_REF_FRAMES; i++) {
1457  if (current->current_frame_id > (1 << diff_len)) {
1458  if (priv->ref[i].frame_id > current->current_frame_id ||
1459  priv->ref[i].frame_id < (current->current_frame_id -
1460  (1 << diff_len)))
1461  priv->ref[i].valid = 0;
1462  } else {
1463  if (priv->ref[i].frame_id > current->current_frame_id &&
1464  priv->ref[i].frame_id < ((1 << id_len) +
1465  current->current_frame_id -
1466  (1 << diff_len)))
1467  priv->ref[i].valid = 0;
1468  }
1469  }
1470  } else {
1471  infer(current_frame_id, 0);
1472  }
1473 
1474  if (current->frame_type == AV1_FRAME_SWITCH)
1475  infer(frame_size_override_flag, 1);
1476  else if(seq->reduced_still_picture_header)
1477  infer(frame_size_override_flag, 0);
1478  else
1479  flag(frame_size_override_flag);
1480 
1481  order_hint_bits =
1482  seq->enable_order_hint ? seq->order_hint_bits_minus_1 + 1 : 0;
1483  if (order_hint_bits > 0)
1484  fb(order_hint_bits, order_hint);
1485  else
1486  infer(order_hint, 0);
1487  priv->order_hint = current->order_hint;
1488 
1489  if (frame_is_intra || current->error_resilient_mode)
1490  infer(primary_ref_frame, AV1_PRIMARY_REF_NONE);
1491  else
1492  fb(3, primary_ref_frame);
1493 
1495  flag(buffer_removal_time_present_flag);
1496  if (current->buffer_removal_time_present_flag) {
1497  for (i = 0; i <= seq->operating_points_cnt_minus_1; i++) {
1499  int op_pt_idc = seq->operating_point_idc[i];
1500  int in_temporal_layer = (op_pt_idc >> priv->temporal_id ) & 1;
1501  int in_spatial_layer = (op_pt_idc >> (priv->spatial_id + 8)) & 1;
1502  if (seq->operating_point_idc[i] == 0 ||
1503  (in_temporal_layer && in_spatial_layer)) {
1505  buffer_removal_time[i], 1, i);
1506  }
1507  }
1508  }
1509  }
1510  }
1511 
1512  if (current->frame_type == AV1_FRAME_SWITCH ||
1513  (current->frame_type == AV1_FRAME_KEY && current->show_frame))
1514  infer(refresh_frame_flags, all_frames);
1515  else
1516  fb(8, refresh_frame_flags);
1517 
1518  if (!frame_is_intra || current->refresh_frame_flags != all_frames) {
1519  if (seq->enable_order_hint) {
1520  for (i = 0; i < AV1_NUM_REF_FRAMES; i++) {
1521  if (current->error_resilient_mode)
1522  fbs(order_hint_bits, ref_order_hint[i], 1, i);
1523  else
1524  infer(ref_order_hint[i], priv->ref[i].order_hint);
1525  if (current->ref_order_hint[i] != priv->ref[i].order_hint)
1526  priv->ref[i].valid = 0;
1527  }
1528  }
1529  }
1530 
1531  if (current->frame_type == AV1_FRAME_KEY ||
1532  current->frame_type == AV1_FRAME_INTRA_ONLY) {
1533  CHECK(FUNC(frame_size)(ctx, rw, current));
1534  CHECK(FUNC(render_size)(ctx, rw, current));
1535 
1536  if (current->allow_screen_content_tools &&
1537  priv->upscaled_width == priv->frame_width)
1538  flag(allow_intrabc);
1539  else
1540  infer(allow_intrabc, 0);
1541 
1542  } else {
1543  if (!seq->enable_order_hint) {
1544  infer(frame_refs_short_signaling, 0);
1545  } else {
1546  flag(frame_refs_short_signaling);
1547  if (current->frame_refs_short_signaling) {
1548  fb(3, last_frame_idx);
1549  fb(3, golden_frame_idx);
1551  }
1552  }
1553 
1554  for (i = 0; i < AV1_REFS_PER_FRAME; i++) {
1555  if (!current->frame_refs_short_signaling)
1556  fbs(3, ref_frame_idx[i], 1, i);
1557  if (seq->frame_id_numbers_present_flag) {
1559  delta_frame_id_minus1[i], 1, i);
1560  }
1561  }
1562 
1563  if (current->frame_size_override_flag &&
1564  !current->error_resilient_mode) {
1566  } else {
1567  CHECK(FUNC(frame_size)(ctx, rw, current));
1568  CHECK(FUNC(render_size)(ctx, rw, current));
1569  }
1570 
1571  if (current->force_integer_mv)
1572  infer(allow_high_precision_mv, 0);
1573  else
1574  flag(allow_high_precision_mv);
1575 
1577 
1578  flag(is_motion_mode_switchable);
1579 
1580  if (current->error_resilient_mode ||
1581  !seq->enable_ref_frame_mvs)
1582  infer(use_ref_frame_mvs, 0);
1583  else
1584  flag(use_ref_frame_mvs);
1585 
1586  for (i = 0; i < AV1_REFS_PER_FRAME; i++) {
1587  int ref_frame = AV1_REF_FRAME_LAST + i;
1588  int hint = priv->ref[current->ref_frame_idx[i]].order_hint;
1589  priv->order_hints[ref_frame] = hint;
1590  if (!seq->enable_order_hint) {
1591  priv->ref_frame_sign_bias[ref_frame] = 0;
1592  } else {
1594  cbs_av1_get_relative_dist(seq, hint,
1595  current->order_hint) > 0;
1596  }
1597  }
1598 
1599  infer(allow_intrabc, 0);
1600  }
1601 
1602  if (seq->reduced_still_picture_header || current->disable_cdf_update)
1603  infer(disable_frame_end_update_cdf, 1);
1604  else
1605  flag(disable_frame_end_update_cdf);
1606 
1607  if (current->primary_ref_frame == AV1_PRIMARY_REF_NONE) {
1608  // Init non-coeff CDFs.
1609  // Setup past independence.
1610  } else {
1611  // Load CDF tables from previous frame.
1612  // Load params from previous frame.
1613  }
1614 
1615  if (current->use_ref_frame_mvs) {
1616  // Perform motion field estimation process.
1617  }
1618 
1619  CHECK(FUNC(tile_info)(ctx, rw, current));
1620 
1622 
1624 
1626 
1628 
1629  // Init coeff CDFs / load previous segments.
1630 
1631  priv->coded_lossless = 1;
1632  for (i = 0; i < AV1_MAX_SEGMENTS; i++) {
1633  int qindex;
1634  if (current->feature_enabled[i][AV1_SEG_LVL_ALT_Q]) {
1635  qindex = (current->base_q_idx +
1636  current->feature_value[i][AV1_SEG_LVL_ALT_Q]);
1637  } else {
1638  qindex = current->base_q_idx;
1639  }
1640  qindex = av_clip_uintp2(qindex, 8);
1641 
1642  if (qindex || current->delta_q_y_dc ||
1643  current->delta_q_u_ac || current->delta_q_u_dc ||
1644  current->delta_q_v_ac || current->delta_q_v_dc) {
1645  priv->coded_lossless = 0;
1646  }
1647  }
1648  priv->all_lossless = priv->coded_lossless &&
1649  priv->frame_width == priv->upscaled_width;
1650 
1652 
1653  CHECK(FUNC(cdef_params)(ctx, rw, current));
1654 
1655  CHECK(FUNC(lr_params)(ctx, rw, current));
1656 
1657  CHECK(FUNC(read_tx_mode)(ctx, rw, current));
1658 
1660 
1662 
1663  if (frame_is_intra || current->error_resilient_mode ||
1664  !seq->enable_warped_motion)
1665  infer(allow_warped_motion, 0);
1666  else
1667  flag(allow_warped_motion);
1668 
1669  flag(reduced_tx_set);
1670 
1672 
1673  CHECK(FUNC(film_grain_params)(ctx, rw, &current->film_grain, current));
1674 
1675  av_log(ctx->log_ctx, AV_LOG_DEBUG, "Frame %d: size %dx%d "
1676  "upscaled %d render %dx%d subsample %dx%d "
1677  "bitdepth %d tiles %dx%d.\n", priv->order_hint,
1678  priv->frame_width, priv->frame_height, priv->upscaled_width,
1679  priv->render_width, priv->render_height,
1680  seq->color_config.subsampling_x + 1,
1681  seq->color_config.subsampling_y + 1, priv->bit_depth,
1682  priv->tile_rows, priv->tile_cols);
1683 
1684 update_refs:
1685  for (i = 0; i < AV1_NUM_REF_FRAMES; i++) {
1686  if (current->refresh_frame_flags & (1 << i)) {
1687  priv->ref[i] = (AV1ReferenceFrameState) {
1688  .valid = 1,
1689  .frame_id = current->current_frame_id,
1690  .upscaled_width = priv->upscaled_width,
1691  .frame_width = priv->frame_width,
1692  .frame_height = priv->frame_height,
1693  .render_width = priv->render_width,
1694  .render_height = priv->render_height,
1695  .frame_type = current->frame_type,
1696  .subsampling_x = seq->color_config.subsampling_x,
1697  .subsampling_y = seq->color_config.subsampling_y,
1698  .bit_depth = priv->bit_depth,
1699  .order_hint = priv->order_hint,
1700  };
1701 
1702  for (int j = 0; j < AV1_REFS_PER_FRAME; j++) {
1704  priv->order_hints[j + AV1_REF_FRAME_LAST];
1705  }
1706 
1707  if (current->show_existing_frame) {
1708  memcpy(priv->ref[i].loop_filter_ref_deltas, priv->loop_filter_ref_deltas,
1709  sizeof(priv->loop_filter_ref_deltas));
1711  sizeof(priv->loop_filter_mode_deltas));
1712  memcpy(priv->ref[i].feature_enabled, priv->feature_enabled,
1713  sizeof(priv->feature_enabled));
1714  memcpy(priv->ref[i].feature_value, priv->feature_value,
1715  sizeof(priv->feature_value));
1716  } else {
1717  memcpy(priv->ref[i].loop_filter_ref_deltas, current->loop_filter_ref_deltas,
1718  sizeof(current->loop_filter_ref_deltas));
1719  memcpy(priv->ref[i].loop_filter_mode_deltas, current->loop_filter_mode_deltas,
1720  sizeof(current->loop_filter_mode_deltas));
1721  memcpy(priv->ref[i].feature_enabled, current->feature_enabled,
1722  sizeof(current->feature_enabled));
1723  memcpy(priv->ref[i].feature_value, current->feature_value,
1724  sizeof(current->feature_value));
1725  }
1726  }
1727  }
1728 
1729  return 0;
1730 }
1731 
1733  AV1RawFrameHeader *current, int redundant,
1734  AVBufferRef *rw_buffer_ref)
1735 {
1737  int start_pos, fh_bits, fh_bytes, err;
1738  uint8_t *fh_start;
1739 
1740  if (priv->seen_frame_header) {
1741  if (!redundant) {
1742  av_log(ctx->log_ctx, AV_LOG_ERROR, "Invalid repeated "
1743  "frame header OBU.\n");
1744  return AVERROR_INVALIDDATA;
1745  } else {
1746  GetBitContext fh;
1747  size_t i, b;
1748  uint32_t val;
1749 
1750  HEADER("Redundant Frame Header");
1751 
1752  av_assert0(priv->frame_header_ref && priv->frame_header);
1753 
1754  init_get_bits(&fh, priv->frame_header,
1755  priv->frame_header_size);
1756  for (i = 0; i < priv->frame_header_size; i += 8) {
1757  b = FFMIN(priv->frame_header_size - i, 8);
1758  val = get_bits(&fh, b);
1759  xf(b, frame_header_copy[i],
1760  val, val, val, 1, i / 8);
1761  }
1762  }
1763  } else {
1764  if (redundant)
1765 #ifdef READ
1766  HEADER("Redundant Frame Header (used as Frame Header)");
1767 #else
1768  {
1769  av_log(ctx->log_ctx, AV_LOG_ERROR, "Invalid redundant "
1770  "frame header OBU.\n");
1771  return AVERROR_INVALIDDATA;
1772  }
1773 #endif
1774  else
1775  HEADER("Frame Header");
1776 
1777 #ifdef READ
1778  start_pos = get_bits_count(rw);
1779 #else
1780  start_pos = put_bits_count(rw);
1781 #endif
1782 
1784 
1785  priv->tile_num = 0;
1786 
1787  if (current->show_existing_frame) {
1788  priv->seen_frame_header = 0;
1789  } else {
1790  priv->seen_frame_header = 1;
1791 
1793 
1794 #ifdef READ
1795  fh_bits = get_bits_count(rw) - start_pos;
1796  fh_start = (uint8_t*)rw->buffer + start_pos / 8;
1797 #else
1798  // Need to flush the bitwriter so that we can copy its output,
1799  // but use a copy so we don't affect the caller's structure.
1800  {
1801  PutBitContext tmp = *rw;
1802  flush_put_bits(&tmp);
1803  }
1804 
1805  fh_bits = put_bits_count(rw) - start_pos;
1806  fh_start = rw->buf + start_pos / 8;
1807 #endif
1808  fh_bytes = (fh_bits + 7) / 8;
1809 
1810  priv->frame_header_size = fh_bits;
1811 
1812  if (rw_buffer_ref) {
1813  priv->frame_header_ref = av_buffer_ref(rw_buffer_ref);
1814  if (!priv->frame_header_ref)
1815  return AVERROR(ENOMEM);
1816  priv->frame_header = fh_start;
1817  } else {
1818  priv->frame_header_ref =
1820  if (!priv->frame_header_ref)
1821  return AVERROR(ENOMEM);
1822  priv->frame_header = priv->frame_header_ref->data;
1823  memcpy(priv->frame_header, fh_start, fh_bytes);
1824  }
1825  }
1826  }
1827 
1828  return 0;
1829 }
1830 
1833 {
1835  int num_tiles, tile_bits;
1836  int err;
1837 
1838  HEADER("Tile Group");
1839 
1840  num_tiles = priv->tile_cols * priv->tile_rows;
1841  if (num_tiles > 1)
1842  flag(tile_start_and_end_present_flag);
1843  else
1844  infer(tile_start_and_end_present_flag, 0);
1845 
1846  if (num_tiles == 1 || !current->tile_start_and_end_present_flag) {
1847  infer(tg_start, 0);
1848  infer(tg_end, num_tiles - 1);
1849  } else {
1850  tile_bits = cbs_av1_tile_log2(1, priv->tile_cols) +
1851  cbs_av1_tile_log2(1, priv->tile_rows);
1852  fc(tile_bits, tg_start, priv->tile_num, num_tiles - 1);
1853  fc(tile_bits, tg_end, current->tg_start, num_tiles - 1);
1854  }
1855 
1856  priv->tile_num = current->tg_end + 1;
1857 
1858  CHECK(FUNC(byte_alignment)(ctx, rw));
1859 
1860  // Reset header for next frame.
1861  if (current->tg_end == num_tiles - 1)
1862  priv->seen_frame_header = 0;
1863 
1864  // Tile data follows.
1865 
1866  return 0;
1867 }
1868 
1871  AVBufferRef *rw_buffer_ref)
1872 {
1873  int err;
1874 
1875  CHECK(FUNC(frame_header_obu)(ctx, rw, &current->header,
1876  0, rw_buffer_ref));
1877 
1878  CHECK(FUNC(byte_alignment)(ctx, rw));
1879 
1880  return 0;
1881 }
1882 
1883 #if CBS_AV1_OBU_TILE_LIST
1884 static int FUNC(tile_list_obu)(CodedBitstreamContext *ctx, RWContext *rw,
1886 {
1887  int err;
1888 
1889  fb(8, output_frame_width_in_tiles_minus_1);
1890  fb(8, output_frame_height_in_tiles_minus_1);
1891 
1892  fb(16, tile_count_minus_1);
1893 
1894  // Tile data follows.
1895 
1896  return 0;
1897 }
1898 #endif
1899 
1900 #if CBS_AV1_OBU_METADATA
1901 static int FUNC(metadata_hdr_cll)(CodedBitstreamContext *ctx, RWContext *rw,
1903 {
1904  int err;
1905 
1906  HEADER("HDR CLL Metadata");
1907 
1908  fb(16, max_cll);
1909  fb(16, max_fall);
1910 
1911  return 0;
1912 }
1913 
1914 static int FUNC(metadata_hdr_mdcv)(CodedBitstreamContext *ctx, RWContext *rw,
1916 {
1917  int err, i;
1918 
1919  HEADER("HDR MDCV Metadata");
1920 
1921  for (i = 0; i < 3; i++) {
1922  fbs(16, primary_chromaticity_x[i], 1, i);
1923  fbs(16, primary_chromaticity_y[i], 1, i);
1924  }
1925 
1926  fb(16, white_point_chromaticity_x);
1927  fb(16, white_point_chromaticity_y);
1928 
1929  fb(32, luminance_max);
1930  fb(32, luminance_min);
1931 
1932  return 0;
1933 }
1934 
1935 static int FUNC(scalability_structure)(CodedBitstreamContext *ctx, RWContext *rw,
1937 {
1939  const AV1RawSequenceHeader *seq;
1940  int err, i, j;
1941 
1942  if (!priv->sequence_header) {
1943  av_log(ctx->log_ctx, AV_LOG_ERROR, "No sequence header available: "
1944  "unable to parse scalability metadata.\n");
1945  return AVERROR_INVALIDDATA;
1946  }
1947  seq = priv->sequence_header;
1948 
1949  fb(2, spatial_layers_cnt_minus_1);
1950  flag(spatial_layer_dimensions_present_flag);
1951  flag(spatial_layer_description_present_flag);
1952  flag(temporal_group_description_present_flag);
1953  fc(3, scalability_structure_reserved_3bits, 0, 0);
1954  if (current->spatial_layer_dimensions_present_flag) {
1955  for (i = 0; i <= current->spatial_layers_cnt_minus_1; i++) {
1956  fcs(16, spatial_layer_max_width[i],
1957  0, seq->max_frame_width_minus_1 + 1, 1, i);
1958  fcs(16, spatial_layer_max_height[i],
1959  0, seq->max_frame_height_minus_1 + 1, 1, i);
1960  }
1961  }
1962  if (current->spatial_layer_description_present_flag) {
1963  for (i = 0; i <= current->spatial_layers_cnt_minus_1; i++)
1964  fbs(8, spatial_layer_ref_id[i], 1, i);
1965  }
1966  if (current->temporal_group_description_present_flag) {
1967  fb(8, temporal_group_size);
1968  for (i = 0; i < current->temporal_group_size; i++) {
1969  fbs(3, temporal_group_temporal_id[i], 1, i);
1970  flags(temporal_group_temporal_switching_up_point_flag[i], 1, i);
1971  flags(temporal_group_spatial_switching_up_point_flag[i], 1, i);
1972  fbs(3, temporal_group_ref_cnt[i], 1, i);
1973  for (j = 0; j < current->temporal_group_ref_cnt[i]; j++) {
1974  fbs(8, temporal_group_ref_pic_diff[i][j], 2, i, j);
1975  }
1976  }
1977  }
1978 
1979  return 0;
1980 }
1981 
1982 static int FUNC(metadata_scalability)(CodedBitstreamContext *ctx, RWContext *rw,
1984 {
1985  int err;
1986 
1987  HEADER("Scalability Metadata");
1988 
1989  fb(8, scalability_mode_idc);
1990 
1991  if (current->scalability_mode_idc == AV1_SCALABILITY_SS)
1992  CHECK(FUNC(scalability_structure)(ctx, rw, current));
1993 
1994  return 0;
1995 }
1996 
1997 static int FUNC(metadata_itut_t35)(CodedBitstreamContext *ctx, RWContext *rw,
1999 {
2000  int err;
2001  size_t i;
2002 
2003  HEADER("ITU-T T.35 Metadata");
2004 
2005  fb(8, itu_t_t35_country_code);
2006  if (current->itu_t_t35_country_code == 0xff)
2007  fb(8, itu_t_t35_country_code_extension_byte);
2008 
2009 #ifdef READ
2010  // The payload runs up to the start of the trailing bits, but there might
2011  // be arbitrarily many trailing zeroes so we need to read through twice.
2012  current->payload_size = cbs_av1_get_payload_bytes_left(rw);
2013 
2014  current->payload_ref = av_buffer_alloc(current->payload_size);
2015  if (!current->payload_ref)
2016  return AVERROR(ENOMEM);
2017  current->payload = current->payload_ref->data;
2018 #endif
2019 
2020  for (i = 0; i < current->payload_size; i++)
2021  xf(8, itu_t_t35_payload_bytes[i], current->payload[i],
2022  0x00, 0xff, 1, i);
2023 
2024  return 0;
2025 }
2026 
2027 static int FUNC(metadata_timecode)(CodedBitstreamContext *ctx, RWContext *rw,
2029 {
2030  int err;
2031 
2032  HEADER("Timecode Metadata");
2033 
2034  fb(5, counting_type);
2035  flag(full_timestamp_flag);
2036  flag(discontinuity_flag);
2037  flag(cnt_dropped_flag);
2038  fb(9, n_frames);
2039 
2040  if (current->full_timestamp_flag) {
2041  fc(6, seconds_value, 0, 59);
2042  fc(6, minutes_value, 0, 59);
2043  fc(5, hours_value, 0, 23);
2044  } else {
2045  flag(seconds_flag);
2046  if (current->seconds_flag) {
2047  fc(6, seconds_value, 0, 59);
2048  flag(minutes_flag);
2049  if (current->minutes_flag) {
2050  fc(6, minutes_value, 0, 59);
2051  flag(hours_flag);
2052  if (current->hours_flag)
2053  fc(5, hours_value, 0, 23);
2054  }
2055  }
2056  }
2057 
2058  fb(5, time_offset_length);
2059  if (current->time_offset_length > 0)
2060  fb(current->time_offset_length, time_offset_value);
2061  else
2062  infer(time_offset_length, 0);
2063 
2064  return 0;
2065 }
2066 
2067 static int FUNC(metadata_unknown)(CodedBitstreamContext *ctx, RWContext *rw,
2069 {
2070  int err;
2071  size_t i;
2072 
2073  HEADER("Unknown Metadata");
2074 
2075 #ifdef READ
2076  current->payload_size = cbs_av1_get_payload_bytes_left(rw);
2077 
2078  current->payload_ref = av_buffer_alloc(current->payload_size);
2079  if (!current->payload_ref)
2080  return AVERROR(ENOMEM);
2081  current->payload = current->payload_ref->data;
2082 #endif
2083 
2084  for (i = 0; i < current->payload_size; i++)
2085  fbs(8, payload[i], 1, i);
2086 
2087  return 0;
2088 }
2089 
2090 static int FUNC(metadata_obu)(CodedBitstreamContext *ctx, RWContext *rw,
2092 {
2093  int err;
2094 
2095  leb128(metadata_type);
2096 
2097  switch (current->metadata_type) {
2099  CHECK(FUNC(metadata_hdr_cll)(ctx, rw, &current->metadata.hdr_cll));
2100  break;
2102  CHECK(FUNC(metadata_hdr_mdcv)(ctx, rw, &current->metadata.hdr_mdcv));
2103  break;
2105  CHECK(FUNC(metadata_scalability)(ctx, rw, &current->metadata.scalability));
2106  break;
2108  CHECK(FUNC(metadata_itut_t35)(ctx, rw, &current->metadata.itut_t35));
2109  break;
2111  CHECK(FUNC(metadata_timecode)(ctx, rw, &current->metadata.timecode));
2112  break;
2113  default:
2114  CHECK(FUNC(metadata_unknown)(ctx, rw, &current->metadata.unknown));
2115  }
2116 
2117  return 0;
2118 }
2119 #endif
2120 
2121 #if CBS_AV1_OBU_PADDING
2122 static int FUNC(padding_obu)(CodedBitstreamContext *ctx, RWContext *rw,
2124 {
2125  int i, err;
2126 
2127  HEADER("Padding");
2128 
2129 #ifdef READ
2130  // The payload runs up to the start of the trailing bits, but there might
2131  // be arbitrarily many trailing zeroes so we need to read through twice.
2132  current->payload_size = cbs_av1_get_payload_bytes_left(rw);
2133 
2134  current->payload_ref = av_buffer_alloc(current->payload_size);
2135  if (!current->payload_ref)
2136  return AVERROR(ENOMEM);
2137  current->payload = current->payload_ref->data;
2138 #endif
2139 
2140  for (i = 0; i < current->payload_size; i++)
2141  xf(8, obu_padding_byte[i], current->payload[i], 0x00, 0xff, 1, i);
2142 
2143  return 0;
2144 }
2145 #endif
fb
#define fb(width, name)
Definition: cbs_av1.c:617
flags
const SwsFlags flags[]
Definition: swscale.c:85
AV1RawSequenceHeader::seq_force_integer_mv
uint8_t seq_force_integer_mv
Definition: cbs_av1.h:129
cbs_av1_get_payload_bytes_left
static av_unused size_t cbs_av1_get_payload_bytes_left(GetBitContext *gbc)
Definition: cbs_av1.c:465
AV1ReferenceFrameState::loop_filter_ref_deltas
int8_t loop_filter_ref_deltas[AV1_TOTAL_REFS_PER_FRAME]
Definition: cbs_av1.h:451
AV1_SEG_LVL_MAX
@ AV1_SEG_LVL_MAX
Definition: av1.h:90
AV1_METADATA_TYPE_ITUT_T35
@ AV1_METADATA_TYPE_ITUT_T35
Definition: av1.h:47
uncompressed_header
static int FUNC() uncompressed_header(CodedBitstreamContext *ctx, RWContext *rw, AV1RawFrameHeader *current)
Definition: cbs_av1_syntax_template.c:1317
AV1_SELECT_SCREEN_CONTENT_TOOLS
@ AV1_SELECT_SCREEN_CONTENT_TOOLS
Definition: av1.h:98
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
flag
int flag
Definition: cpu.c:40
AV1_GM_ABS_TRANS_ONLY_BITS
@ AV1_GM_ABS_TRANS_ONLY_BITS
Definition: av1.h:108
CodedBitstreamAV1Context::seen_frame_header
int seen_frame_header
Definition: cbs_av1.h:464
CodedBitstreamAV1Context::tile_cols
int tile_cols
Definition: cbs_av1.h:484
AV1RawSequenceHeader
Definition: cbs_av1.h:82
segmentation_params
static int FUNC() segmentation_params(CodedBitstreamContext *ctx, RWContext *rw, AV1RawFrameHeader *current)
Definition: cbs_av1_syntax_template.c:757
AVBufferRef::data
uint8_t * data
The data buffer.
Definition: buffer.h:90
AV1_FRAME_SWITCH
@ AV1_FRAME_SWITCH
Definition: av1.h:56
frame_header
static int FUNC() frame_header(CodedBitstreamContext *ctx, RWContext *rw, APVRawFrameHeader *current)
Definition: cbs_apv_syntax_template.c:142
av_clip_uintp2
#define av_clip_uintp2
Definition: common.h:124
superres_params
static int FUNC() superres_params(CodedBitstreamContext *ctx, RWContext *rw, AV1RawFrameHeader *current)
Definition: cbs_av1_syntax_template.c:462
AV1RawSequenceHeader::operating_point_idc
uint16_t operating_point_idc[AV1_MAX_OPERATING_POINTS]
Definition: cbs_av1.h:95
AV1RawPadding
Definition: cbs_av1.h:406
get_bits_count
static int get_bits_count(const GetBitContext *s)
Definition: get_bits.h:254
AV1_REFS_PER_FRAME
@ AV1_REFS_PER_FRAME
Definition: av1.h:85
CodedBitstreamAV1Context::tile_num
int tile_num
Definition: cbs_av1.h:486
AV1ReferenceFrameState::saved_order_hints
int saved_order_hints[AV1_TOTAL_REFS_PER_FRAME]
Definition: cbs_av1.h:449
AV1_GM_ABS_TRANS_BITS
@ AV1_GM_ABS_TRANS_BITS
Definition: av1.h:110
CodedBitstreamContext
Context structure for coded bitstream operations.
Definition: cbs.h:226
CodedBitstreamAV1Context::frame_header_ref
AVBufferRef * frame_header_ref
Definition: cbs_av1.h:465
b
#define b
Definition: input.c:43
AVCOL_TRC_UNSPECIFIED
@ AVCOL_TRC_UNSPECIFIED
Definition: pixfmt.h:669
film_grain_params
static int FUNC() film_grain_params(CodedBitstreamContext *ctx, RWContext *rw, AV1RawFilmGrainParams *current, AV1RawFrameHeader *frame_header)
Definition: cbs_av1_syntax_template.c:1210
AV1RawSequenceHeader::timing_info
AV1RawTimingInfo timing_info
Definition: cbs_av1.h:92
infer
#define infer(name, value)
Definition: cbs_apv.c:137
AV1RawSequenceHeader::frame_id_numbers_present_flag
uint8_t frame_id_numbers_present_flag
Definition: cbs_av1.h:110
CodedBitstreamAV1Context::frame_header_size
size_t frame_header_size
Definition: cbs_av1.h:467
AVCOL_SPC_RGB
@ AVCOL_SPC_RGB
order of coefficients is actually GBR, also IEC 61966-2-1 (sRGB), YZX and ST 428-1
Definition: pixfmt.h:701
quantization_params
static int FUNC() quantization_params(CodedBitstreamContext *ctx, RWContext *rw, AV1RawFrameHeader *current)
Definition: cbs_av1_syntax_template.c:710
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_REF_FRAME_NONE
@ AV1_REF_FRAME_NONE
Definition: av1.h:61
AV_PROFILE_AV1_PROFESSIONAL
#define AV_PROFILE_AV1_PROFESSIONAL
Definition: defs.h:171
AV1RawSequenceHeader::decoder_model_info
AV1RawDecoderModelInfo decoder_model_info
Definition: cbs_av1.h:93
CodedBitstreamAV1Context::feature_value
int16_t feature_value[AV1_MAX_SEGMENTS][AV1_SEG_LVL_MAX]
Definition: cbs_av1.h:503
init_get_bits
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
Definition: get_bits.h:517
AV1ReferenceFrameState::order_hint
int order_hint
Definition: cbs_av1.h:447
AV1RawColorConfig::subsampling_y
uint8_t subsampling_y
Definition: cbs_av1.h:62
AV1RawColorConfig::separate_uv_delta_q
uint8_t separate_uv_delta_q
Definition: cbs_av1.h:64
tile_info
static int FUNC() tile_info(CodedBitstreamContext *ctx, RWContext *rw, AV1RawFrameHeader *current)
Definition: cbs_av1_syntax_template.c:592
AV1_CSP_UNKNOWN
@ AV1_CSP_UNKNOWN
Definition: av1.h:133
AV1RawColorConfig
Definition: cbs_av1.h:50
AV1RawFrame
Definition: cbs_av1.h:318
get_bits
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
Definition: get_bits.h:337
AV1_MAX_TILE_COLS
@ AV1_MAX_TILE_COLS
Definition: av1.h:82
AV1RawSequenceHeader::film_grain_params_present
uint8_t film_grain_params_present
Definition: cbs_av1.h:139
AV1_TX_MODE_LARGEST
@ AV1_TX_MODE_LARGEST
Definition: av1.h:182
AVCOL_TRC_IEC61966_2_1
@ AVCOL_TRC_IEC61966_2_1
IEC 61966-2-1 (sRGB or sYCC)
Definition: pixfmt.h:680
AV1_FRAME_KEY
@ AV1_FRAME_KEY
Definition: av1.h:53
CHECK
CHECK(-1) CHECK(-2) }} }} CHECK(1) CHECK(2) }} }} } if(diff0+diff1 > 0) temp -
AV1RawSequenceHeader::enable_ref_frame_mvs
uint8_t enable_ref_frame_mvs
Definition: cbs_av1.h:124
read_tx_mode
static int FUNC() read_tx_mode(CodedBitstreamContext *ctx, RWContext *rw, AV1RawFrameHeader *current)
Definition: cbs_av1_syntax_template.c:1028
obu_header
static int FUNC() obu_header(CodedBitstreamContext *ctx, RWContext *rw, AV1RawOBUHeader *current)
Definition: cbs_av1_syntax_template.c:19
GetBitContext
Definition: get_bits.h:109
CodedBitstreamAV1Context::ref
AV1ReferenceFrameState ref[AV1_NUM_REF_FRAMES]
Definition: cbs_av1.h:491
AV1RawSequenceHeader::decoder_model_present_for_this_op
uint8_t decoder_model_present_for_this_op[AV1_MAX_OPERATING_POINTS]
Definition: cbs_av1.h:98
AV1RawTileList
Definition: cbs_av1.h:323
AV1ReferenceFrameState::frame_id
int frame_id
Definition: cbs_av1.h:437
val
static double val(void *priv, double ch)
Definition: aeval.c:77
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
AV1RawSequenceHeader::delta_frame_id_length_minus_2
uint8_t delta_frame_id_length_minus_2
Definition: cbs_av1.h:111
global_motion_params
static int FUNC() global_motion_params(CodedBitstreamContext *ctx, RWContext *rw, AV1RawFrameHeader *current)
Definition: cbs_av1_syntax_template.c:1165
AV1RawMetadataHDRMDCV
Definition: cbs_av1.h:336
AV1_SEG_LVL_ALT_Q
@ AV1_SEG_LVL_ALT_Q
Definition: av1.h:92
fcs
#define fcs(width, name, range_min, range_max, subs,...)
Definition: cbs_av1.c:502
increment
#define increment(name, min, max)
Definition: cbs_av1.c:646
skip_mode_params
static int FUNC() skip_mode_params(CodedBitstreamContext *ctx, RWContext *rw, AV1RawFrameHeader *current)
Definition: cbs_av1_syntax_template.c:1056
uvlc
#define uvlc(name, range_min, range_max)
Definition: cbs_av1.c:635
AV1ReferenceFrameState::valid
int valid
Definition: cbs_av1.h:436
AV1RawDecoderModelInfo::frame_presentation_time_length_minus_1
uint8_t frame_presentation_time_length_minus_1
Definition: cbs_av1.h:79
AV1_REF_FRAME_INTRA
@ AV1_REF_FRAME_INTRA
Definition: av1.h:62
show_frame
static void show_frame(AVTextFormatContext *tfc, AVFrame *frame, AVStream *stream, AVFormatContext *fmt_ctx)
Definition: ffprobe.c:1509
AV_LOG_ERROR
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:210
transfer_characteristics
static const struct TransferCharacteristics transfer_characteristics[]
Definition: vf_colorspace.c:178
CodedBitstreamAV1Context::loop_filter_mode_deltas
int8_t loop_filter_mode_deltas[2]
Definition: cbs_av1.h:501
AV1_ONLY_4X4
@ AV1_ONLY_4X4
Definition: av1.h:181
interpolation_filter
static int FUNC() interpolation_filter(CodedBitstreamContext *ctx, RWContext *rw, AV1RawFrameHeader *current)
Definition: cbs_av1_syntax_template.c:577
frame_size_with_refs
static int FUNC() frame_size_with_refs(CodedBitstreamContext *ctx, RWContext *rw, AV1RawFrameHeader *current)
Definition: cbs_av1_syntax_template.c:533
CodedBitstreamAV1Context::frame_height
int frame_height
Definition: cbs_av1.h:476
AV1_METADATA_TYPE_HDR_MDCV
@ AV1_METADATA_TYPE_HDR_MDCV
Definition: av1.h:45
CodedBitstreamAV1Context::upscaled_width
int upscaled_width
Definition: cbs_av1.h:477
AV1ReferenceFrameState::feature_enabled
uint8_t feature_enabled[AV1_MAX_SEGMENTS][AV1_SEG_LVL_MAX]
Definition: cbs_av1.h:453
HEADER
#define HEADER(name)
Definition: cbs_apv.c:55
color_config
static int FUNC() color_config(CodedBitstreamContext *ctx, RWContext *rw, AV1RawColorConfig *current, int seq_profile)
Definition: cbs_av1_syntax_template.c:77
AV1_REF_FRAME_BWDREF
@ AV1_REF_FRAME_BWDREF
Definition: av1.h:67
CodedBitstreamAV1Context::feature_enabled
uint8_t feature_enabled[AV1_MAX_SEGMENTS][AV1_SEG_LVL_MAX]
Definition: cbs_av1.h:502
AV1_REF_FRAME_LAST2
@ AV1_REF_FRAME_LAST2
Definition: av1.h:64
fc
#define fc(width, name, range_min, range_max)
Definition: cbs_av1.c:494
bits
uint8_t bits
Definition: vp3data.h:128
AV1RawDecoderModelInfo
Definition: cbs_av1.h:75
av_assert0
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Definition: avassert.h:42
AV_LOG_DEBUG
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Definition: log.h:231
ctx
static AVFormatContext * ctx
Definition: movenc.c:49
AV1_PRIMARY_REF_NONE
@ AV1_PRIMARY_REF_NONE
Definition: av1.h:87
AV1_FRAME_INTER
@ AV1_FRAME_INTER
Definition: av1.h:54
AV1_MAX_TILE_ROWS
@ AV1_MAX_TILE_ROWS
Definition: av1.h:81
color_range
color_range
Definition: vf_selectivecolor.c:43
MAX_UINT_BITS
#define MAX_UINT_BITS(length)
Definition: cbs_internal.h:238
AV1RawMetadataHDRCLL
Definition: cbs_av1.h:331
AVCOL_PRI_UNSPECIFIED
@ AVCOL_PRI_UNSPECIFIED
Definition: pixfmt.h:639
PutBitContext
Definition: put_bits.h:50
tmp
static uint8_t tmp[40]
Definition: aes_ctr.c:52
AV1_REF_FRAME_GOLDEN
@ AV1_REF_FRAME_GOLDEN
Definition: av1.h:66
AV1_MAX_TILE_AREA
@ AV1_MAX_TILE_AREA
Definition: av1.h:80
frame_size
static int FUNC() frame_size(CodedBitstreamContext *ctx, RWContext *rw, AV1RawFrameHeader *current)
Definition: cbs_av1_syntax_template.c:488
AV1_WARP_MODEL_TRANSLATION
@ AV1_WARP_MODEL_TRANSLATION
Definition: av1.h:115
AV1RawMetadata
Definition: cbs_av1.h:394
AV1_REF_FRAME_ALTREF
@ AV1_REF_FRAME_ALTREF
Definition: av1.h:69
subexp
#define subexp(name, max, subs,...)
Definition: cbs_av1.c:651
AV1RawTimingInfo
Definition: cbs_av1.h:67
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
AV1RawMetadataScalability
Definition: cbs_av1.h:345
AV1RawFrameHeader
Definition: cbs_av1.h:174
lr_params
static int FUNC() lr_params(CodedBitstreamContext *ctx, RWContext *rw, AV1RawFrameHeader *current)
Definition: cbs_av1_syntax_template.c:987
decoder_model_info
static int FUNC() decoder_model_info(CodedBitstreamContext *ctx, RWContext *rw, AV1RawDecoderModelInfo *current)
Definition: cbs_av1_syntax_template.c:173
delta_lf_params
static int FUNC() delta_lf_params(CodedBitstreamContext *ctx, RWContext *rw, AV1RawFrameHeader *current)
Definition: cbs_av1_syntax_template.c:843
AVCOL_PRI_BT709
@ AVCOL_PRI_BT709
also ITU-R BT1361 / IEC 61966-2-4 / SMPTE RP 177 Annex B
Definition: pixfmt.h:638
CodedBitstreamAV1Context::loop_filter_ref_deltas
int8_t loop_filter_ref_deltas[AV1_TOTAL_REFS_PER_FRAME]
Definition: cbs_av1.h:500
AV1_MAX_SEGMENTS
@ AV1_MAX_SEGMENTS
Definition: av1.h:89
CodedBitstreamAV1Context::render_width
int render_width
Definition: cbs_av1.h:478
sequence_header_obu
static int FUNC() sequence_header_obu(CodedBitstreamContext *ctx, RWContext *rw, AV1RawSequenceHeader *current)
Definition: cbs_av1_syntax_template.c:186
AV1_GM_ABS_ALPHA_BITS
@ AV1_GM_ABS_ALPHA_BITS
Definition: av1.h:106
AV1_TOTAL_REFS_PER_FRAME
@ AV1_TOTAL_REFS_PER_FRAME
Definition: av1.h:86
loop_filter_params
static int FUNC() loop_filter_params(CodedBitstreamContext *ctx, RWContext *rw, AV1RawFrameHeader *current)
Definition: cbs_av1_syntax_template.c:869
AV1_SUPERRES_DENOM_MIN
@ AV1_SUPERRES_DENOM_MIN
Definition: av1.h:102
AV1RawSequenceHeader::seq_force_screen_content_tools
uint8_t seq_force_screen_content_tools
Definition: cbs_av1.h:127
render_size
static int FUNC() render_size(CodedBitstreamContext *ctx, RWContext *rw, AV1RawFrameHeader *current)
Definition: cbs_av1_syntax_template.c:511
AV1_METADATA_TYPE_TIMECODE
@ AV1_METADATA_TYPE_TIMECODE
Definition: av1.h:48
AV1_WARP_MODEL_IDENTITY
@ AV1_WARP_MODEL_IDENTITY
Definition: av1.h:114
AV1RawSequenceHeader::max_frame_height_minus_1
uint16_t max_frame_height_minus_1
Definition: cbs_av1.h:108
frame_header_obu
static int FUNC() frame_header_obu(CodedBitstreamContext *ctx, RWContext *rw, AV1RawFrameHeader *current, int redundant, AVBufferRef *rw_buffer_ref)
Definition: cbs_av1_syntax_template.c:1732
color_primaries
static const AVColorPrimariesDesc color_primaries[AVCOL_PRI_NB]
Definition: csp.c:76
AV1_METADATA_TYPE_HDR_CLL
@ AV1_METADATA_TYPE_HDR_CLL
Definition: av1.h:44
AV1_SCALABILITY_SS
@ AV1_SCALABILITY_SS
Definition: av1.h:154
AV1_CSP_COLOCATED
@ AV1_CSP_COLOCATED
Definition: av1.h:135
CodedBitstreamAV1Context::ref_frame_sign_bias
int ref_frame_sign_bias[AV1_TOTAL_REFS_PER_FRAME]
Definition: cbs_av1.h:489
i
#define i(width, name, range_min, range_max)
Definition: cbs_h264.c:63
frame_reference_mode
static int FUNC() frame_reference_mode(CodedBitstreamContext *ctx, RWContext *rw, AV1RawFrameHeader *current)
Definition: cbs_av1_syntax_template.c:1042
AV1RawSequenceHeader::use_128x128_superblock
uint8_t use_128x128_superblock
Definition: cbs_av1.h:114
CodedBitstreamAV1Context::tile_rows
int tile_rows
Definition: cbs_av1.h:485
AV1RawSequenceHeader::frame_height_bits_minus_1
uint8_t frame_height_bits_minus_1
Definition: cbs_av1.h:106
ref_frame
static int ref_frame(VVCFrame *dst, const VVCFrame *src)
Definition: dec.c:616
CodedBitstreamAV1Context::frame_header
uint8_t * frame_header
Definition: cbs_av1.h:466
frame_obu
static int FUNC() frame_obu(CodedBitstreamContext *ctx, RWContext *rw, AV1RawFrame *current, AVBufferRef *rw_buffer_ref)
Definition: cbs_av1_syntax_template.c:1869
AV1ReferenceFrameState
Definition: cbs_av1.h:435
AV_PROFILE_AV1_HIGH
#define AV_PROFILE_AV1_HIGH
Definition: defs.h:170
xf
#define xf(width, name, var, range_min, range_max, subs,...)
Definition: cbs_av1.c:622
AV1_REF_FRAME_ALTREF2
@ AV1_REF_FRAME_ALTREF2
Definition: av1.h:68
av_buffer_alloc
AVBufferRef * av_buffer_alloc(size_t size)
Allocate an AVBuffer of the given size using av_malloc().
Definition: buffer.c:77
AV1_REF_FRAME_LAST
@ AV1_REF_FRAME_LAST
Definition: av1.h:63
fixed
#define fixed(width, name, value)
Definition: cbs_apv.c:75
CodedBitstreamAV1Context::frame_width
int frame_width
Definition: cbs_av1.h:475
CodedBitstreamAV1Context::order_hint
int order_hint
Definition: cbs_av1.h:474
AV1ReferenceFrameState::loop_filter_mode_deltas
int8_t loop_filter_mode_deltas[2]
Definition: cbs_av1.h:452
CodedBitstreamAV1Context::spatial_id
int spatial_id
Definition: cbs_av1.h:470
AV1_SUPERRES_NUM
@ AV1_SUPERRES_NUM
Definition: av1.h:101
CodedBitstreamAV1Context::coded_lossless
int coded_lossless
Definition: cbs_av1.h:482
AV1_OBU_PADDING
@ AV1_OBU_PADDING
Definition: av1.h:39
put_bits_count
static int put_bits_count(PutBitContext *s)
Definition: put_bits.h:90
frame_type
frame_type
Definition: jpeg2000_parser.c:32
AV1_GM_ALPHA_PREC_BITS
@ AV1_GM_ALPHA_PREC_BITS
Definition: av1.h:107
AV1RawSequenceHeader::enable_superres
uint8_t enable_superres
Definition: cbs_av1.h:133
CodedBitstreamAV1Context::order_hints
int order_hints[AV1_TOTAL_REFS_PER_FRAME]
Definition: cbs_av1.h:488
AV1_TX_MODE_SELECT
@ AV1_TX_MODE_SELECT
Definition: av1.h:183
CodedBitstreamAV1Context::bit_depth
int bit_depth
Definition: cbs_av1.h:473
cbs_av1_tile_log2
static int cbs_av1_tile_log2(int blksize, int target)
Definition: cbs_av1.c:446
AV1RawTimingInfo::equal_picture_interval
uint8_t equal_picture_interval
Definition: cbs_av1.h:71
AV1_RESTORE_NONE
@ AV1_RESTORE_NONE
Definition: av1.h:173
FFMIN
#define FFMIN(a, b)
Definition: macros.h:49
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
AVCOL_SPC_UNSPECIFIED
@ AVCOL_SPC_UNSPECIFIED
Definition: pixfmt.h:703
AV1RawSequenceHeader::enable_order_hint
uint8_t enable_order_hint
Definition: cbs_av1.h:122
delta_q
#define delta_q(name)
Definition: cbs_av1.c:657
byte_alignment
static int FUNC() byte_alignment(CodedBitstreamContext *ctx, RWContext *rw)
Definition: cbs_av1_syntax_template.c:67
tile_group_obu
static int FUNC() tile_group_obu(CodedBitstreamContext *ctx, RWContext *rw, AV1RawTileGroup *current)
Definition: cbs_av1_syntax_template.c:1831
AV1RawColorConfig::subsampling_x
uint8_t subsampling_x
Definition: cbs_av1.h:61
AV1RawMetadataUnknown
Definition: cbs_av1.h:388
AV1RawDecoderModelInfo::buffer_removal_time_length_minus_1
uint8_t buffer_removal_time_length_minus_1
Definition: cbs_av1.h:78
sus
#define sus(width, name, subs,...)
Definition: cbs_av1.c:506
AV_INPUT_BUFFER_PADDING_SIZE
#define AV_INPUT_BUFFER_PADDING_SIZE
Definition: defs.h:40
AV1_REF_FRAME_LAST3
@ AV1_REF_FRAME_LAST3
Definition: av1.h:65
CodedBitstreamAV1Context::all_lossless
int all_lossless
Definition: cbs_av1.h:483
AV1RawMetadataITUTT35
Definition: cbs_av1.h:363
RWContext
#define RWContext
Definition: cbs_apv.c:122
AV1RawSequenceHeader::frame_width_bits_minus_1
uint8_t frame_width_bits_minus_1
Definition: cbs_av1.h:105
AV1RawSequenceHeader::enable_warped_motion
uint8_t enable_warped_motion
Definition: cbs_av1.h:119
CodedBitstreamAV1Context::sequence_header
AV1RawSequenceHeader * sequence_header
Definition: cbs_av1.h:460
frame_header
Definition: truemotion1.c:88
CodedBitstreamAV1Context::render_height
int render_height
Definition: cbs_av1.h:479
FUNC
#define FUNC(a)
Definition: bit_depth_template.c:104
AV1ReferenceFrameState::feature_value
int16_t feature_value[AV1_MAX_SEGMENTS][AV1_SEG_LVL_MAX]
Definition: cbs_av1.h:454
AV1_SELECT_INTEGER_MV
@ AV1_SELECT_INTEGER_MV
Definition: av1.h:99
AV1RawColorConfig::mono_chrome
uint8_t mono_chrome
Definition: cbs_av1.h:53
AV1_METADATA_TYPE_SCALABILITY
@ AV1_METADATA_TYPE_SCALABILITY
Definition: av1.h:46
fbs
#define fbs(width, name, subs,...)
Definition: cbs_av1.c:500
set_frame_refs
static int FUNC() set_frame_refs(CodedBitstreamContext *ctx, RWContext *rw, AV1RawFrameHeader *current)
Definition: cbs_av1_syntax_template.c:351
ref
static int ref[MAX_W *MAX_W]
Definition: jpeg2000dwt.c:117
CodedBitstreamAV1Context::num_planes
int num_planes
Definition: cbs_av1.h:481
AV1RawSequenceHeader::order_hint_bits_minus_1
uint8_t order_hint_bits_minus_1
Definition: cbs_av1.h:131
AV1RawMetadataTimecode
Definition: cbs_av1.h:372
AV1RawTileGroup
Definition: cbs_av1.h:306
cdef_params
static int FUNC() cdef_params(CodedBitstreamContext *ctx, RWContext *rw, AV1RawFrameHeader *current)
Definition: cbs_av1_syntax_template.c:952
global_motion_param
static int FUNC() global_motion_param(CodedBitstreamContext *ctx, RWContext *rw, AV1RawFrameHeader *current, int type, int ref, int idx)
Definition: cbs_av1_syntax_template.c:1136
leb128
#define leb128(name)
Definition: cbs_av1.c:663
temporal_delimiter_obu
static int FUNC() temporal_delimiter_obu(CodedBitstreamContext *ctx, RWContext *rw)
Definition: cbs_av1_syntax_template.c:340
trailing_bits
static int FUNC() trailing_bits(CodedBitstreamContext *ctx, RWContext *rw, int nb_bits)
Definition: cbs_av1_syntax_template.c:50
AV1_MAX_TILE_WIDTH
@ AV1_MAX_TILE_WIDTH
Definition: av1.h:79
AVBufferRef
A reference to a data buffer.
Definition: buffer.h:82
current
static struct @592 current
flush_put_bits
static void flush_put_bits(PutBitContext *s)
Pad the end of the output stream with zeros.
Definition: put_bits.h:153
AV1RawSequenceHeader::enable_restoration
uint8_t enable_restoration
Definition: cbs_av1.h:135
update_refs
static void update_refs(VP8Context *s)
Definition: vp8.c:486
AV1_WARP_MODEL_AFFINE
@ AV1_WARP_MODEL_AFFINE
Definition: av1.h:117
timing_info
static int FUNC() timing_info(CodedBitstreamContext *ctx, RWContext *rw, AV1RawTimingInfo *current)
Definition: cbs_av1_syntax_template.c:158
AV1_INTERPOLATION_FILTER_SWITCHABLE
@ AV1_INTERPOLATION_FILTER_SWITCHABLE
Definition: av1.h:104
AV1RawSequenceHeader::operating_points_cnt_minus_1
uint8_t operating_points_cnt_minus_1
Definition: cbs_av1.h:90
AV1RawSequenceHeader::additional_frame_id_length_minus_1
uint8_t additional_frame_id_length_minus_1
Definition: cbs_av1.h:112
AV1RawSequenceHeader::enable_cdef
uint8_t enable_cdef
Definition: cbs_av1.h:134
AV1_GM_TRANS_ONLY_PREC_BITS
@ AV1_GM_TRANS_ONLY_PREC_BITS
Definition: av1.h:109
AV1RawSequenceHeader::reduced_still_picture_header
uint8_t reduced_still_picture_header
Definition: cbs_av1.h:85
AV1RawFilmGrainParams
Definition: cbs_av1.h:142
av_log
#define av_log(a,...)
Definition: tableprint_vlc.h:27
AV1_GM_TRANS_PREC_BITS
@ AV1_GM_TRANS_PREC_BITS
Definition: av1.h:111
AVERROR_INVALIDDATA
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition: error.h:61
ns
#define ns(max_value, name, subs,...)
Definition: cbs_av1.c:640
cbs_av1_get_relative_dist
static int cbs_av1_get_relative_dist(const AV1RawSequenceHeader *seq, unsigned int a, unsigned int b)
Definition: cbs_av1.c:453
AV_PROFILE_AV1_MAIN
#define AV_PROFILE_AV1_MAIN
Definition: defs.h:169
AV1RawOBUHeader
Definition: cbs_av1.h:38
AV1_FRAME_INTRA_ONLY
@ AV1_FRAME_INTRA_ONLY
Definition: av1.h:55
AVFormatContext::priv_data
void * priv_data
Format private data.
Definition: avformat.h:1342
delta_q_params
static int FUNC() delta_q_params(CodedBitstreamContext *ctx, RWContext *rw, AV1RawFrameHeader *current)
Definition: cbs_av1_syntax_template.c:827
AV1_WARP_MODEL_ROTZOOM
@ AV1_WARP_MODEL_ROTZOOM
Definition: av1.h:116
AV1RawSequenceHeader::decoder_model_info_present_flag
uint8_t decoder_model_info_present_flag
Definition: cbs_av1.h:88
CodedBitstreamAV1Context::temporal_id
int temporal_id
Definition: cbs_av1.h:469
AV1_NUM_REF_FRAMES
@ AV1_NUM_REF_FRAMES
Definition: av1.h:84
CodedBitstreamAV1Context
Definition: cbs_av1.h:457