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