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 {
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 
352  AV1RawFrameHeader *current)
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 
463  AV1RawFrameHeader *current)
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 
489  AV1RawFrameHeader *current)
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 
506  CHECK(FUNC(superres_params)(ctx, rw, current));
507 
508  return 0;
509 }
510 
512  AV1RawFrameHeader *current)
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 
534  AV1RawFrameHeader *current)
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 {
571  CHECK(FUNC(superres_params)(ctx, rw, current));
572  }
573 
574  return 0;
575 }
576 
578  AV1RawFrameHeader *current)
579 {
580  int err;
581 
582  flag(is_filter_switchable);
583  if (current->is_filter_switchable)
586  else
588 
589  return 0;
590 }
591 
593  AV1RawFrameHeader *current)
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 i, 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, i = 0; off < sb_cols; off += tile_width_sb)
634  current->tile_start_col_sb[i++] = 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, i = 0; off < sb_rows; off += tile_height_sb)
646  current->tile_start_row_sb[i++] = off;
647 
648  current->tile_rows = (sb_rows + tile_height_sb - 1) / tile_height_sb;
649 
650  for (i = 0; i < current->tile_cols - 1; i++)
651  infer(width_in_sbs_minus_1[i], tile_width_sb - 1);
652  infer(width_in_sbs_minus_1[i],
653  sb_cols - (current->tile_cols - 1) * tile_width_sb - 1);
654  for (i = 0; i < current->tile_rows - 1; i++)
655  infer(height_in_sbs_minus_1[i], tile_height_sb - 1);
656  infer(height_in_sbs_minus_1[i],
657  sb_rows - (current->tile_rows - 1) * tile_height_sb - 1);
658 
659  } else {
660  int widest_tile_sb, start_sb, size_sb, max_width, max_height;
661 
662  widest_tile_sb = 0;
663 
664  start_sb = 0;
665  for (i = 0; start_sb < sb_cols && i < AV1_MAX_TILE_COLS; i++) {
666  current->tile_start_col_sb[i] = start_sb;
667  max_width = FFMIN(sb_cols - start_sb, max_tile_width_sb);
668  ns(max_width, width_in_sbs_minus_1[i], 1, i);
669  size_sb = current->width_in_sbs_minus_1[i] + 1;
670  widest_tile_sb = FFMAX(size_sb, widest_tile_sb);
671  start_sb += size_sb;
672  }
673  current->tile_cols_log2 = cbs_av1_tile_log2(1, i);
674  current->tile_cols = i;
675 
676  if (min_log2_tiles > 0)
677  max_tile_area_sb = (sb_rows * sb_cols) >> (min_log2_tiles + 1);
678  else
679  max_tile_area_sb = sb_rows * sb_cols;
680  max_tile_height_sb = FFMAX(max_tile_area_sb / widest_tile_sb, 1);
681 
682  start_sb = 0;
683  for (i = 0; start_sb < sb_rows && i < AV1_MAX_TILE_ROWS; i++) {
684  current->tile_start_row_sb[i] = start_sb;
685  max_height = FFMIN(sb_rows - start_sb, max_tile_height_sb);
686  ns(max_height, height_in_sbs_minus_1[i], 1, i);
687  size_sb = current->height_in_sbs_minus_1[i] + 1;
688  start_sb += size_sb;
689  }
690  current->tile_rows_log2 = cbs_av1_tile_log2(1, i);
691  current->tile_rows = i;
692  }
693 
694  if (current->tile_cols_log2 > 0 ||
695  current->tile_rows_log2 > 0) {
696  fb(current->tile_cols_log2 + current->tile_rows_log2,
697  context_update_tile_id);
698  fb(2, tile_size_bytes_minus1);
699  } else {
700  infer(context_update_tile_id, 0);
701  }
702 
703  priv->tile_cols = current->tile_cols;
704  priv->tile_rows = current->tile_rows;
705 
706  return 0;
707 }
708 
710  AV1RawFrameHeader *current)
711 {
713  const AV1RawSequenceHeader *seq = priv->sequence_header;
714  int err;
715 
716  fb(8, base_q_idx);
717 
718  delta_q(delta_q_y_dc);
719 
720  if (priv->num_planes > 1) {
722  flag(diff_uv_delta);
723  else
724  infer(diff_uv_delta, 0);
725 
726  delta_q(delta_q_u_dc);
727  delta_q(delta_q_u_ac);
728 
729  if (current->diff_uv_delta) {
730  delta_q(delta_q_v_dc);
731  delta_q(delta_q_v_ac);
732  } else {
733  infer(delta_q_v_dc, current->delta_q_u_dc);
734  infer(delta_q_v_ac, current->delta_q_u_ac);
735  }
736  } else {
737  infer(delta_q_u_dc, 0);
738  infer(delta_q_u_ac, 0);
739  infer(delta_q_v_dc, 0);
740  infer(delta_q_v_ac, 0);
741  }
742 
743  flag(using_qmatrix);
744  if (current->using_qmatrix) {
745  fb(4, qm_y);
746  fb(4, qm_u);
748  fb(4, qm_v);
749  else
750  infer(qm_v, current->qm_u);
751  }
752 
753  return 0;
754 }
755 
757  AV1RawFrameHeader *current)
758 {
760  static const uint8_t bits[AV1_SEG_LVL_MAX] = { 8, 6, 6, 6, 6, 3, 0, 0 };
761  static const uint8_t sign[AV1_SEG_LVL_MAX] = { 1, 1, 1, 1, 1, 0, 0, 0 };
762  static const uint8_t default_feature_enabled[AV1_SEG_LVL_MAX] = { 0 };
763  static const int16_t default_feature_value[AV1_SEG_LVL_MAX] = { 0 };
764  int i, j, err;
765 
766  flag(segmentation_enabled);
767 
768  if (current->segmentation_enabled) {
769  if (current->primary_ref_frame == AV1_PRIMARY_REF_NONE) {
770  infer(segmentation_update_map, 1);
771  infer(segmentation_temporal_update, 0);
772  infer(segmentation_update_data, 1);
773  } else {
774  flag(segmentation_update_map);
775  if (current->segmentation_update_map)
776  flag(segmentation_temporal_update);
777  else
778  infer(segmentation_temporal_update, 0);
779  flag(segmentation_update_data);
780  }
781 
782  for (i = 0; i < AV1_MAX_SEGMENTS; i++) {
783  const uint8_t *ref_feature_enabled;
784  const int16_t *ref_feature_value;
785 
786  if (current->primary_ref_frame == AV1_PRIMARY_REF_NONE) {
787  ref_feature_enabled = default_feature_enabled;
788  ref_feature_value = default_feature_value;
789  } else {
790  ref_feature_enabled =
791  priv->ref[current->ref_frame_idx[current->primary_ref_frame]].feature_enabled[i];
792  ref_feature_value =
793  priv->ref[current->ref_frame_idx[current->primary_ref_frame]].feature_value[i];
794  }
795 
796  for (j = 0; j < AV1_SEG_LVL_MAX; j++) {
797  if (current->segmentation_update_data) {
798  flags(feature_enabled[i][j], 2, i, j);
799 
800  if (current->feature_enabled[i][j] && bits[j] > 0) {
801  if (sign[j])
802  sus(1 + bits[j], feature_value[i][j], 2, i, j);
803  else
804  fbs(bits[j], feature_value[i][j], 2, i, j);
805  } else {
806  infer(feature_value[i][j], 0);
807  }
808  } else {
809  infer(feature_enabled[i][j], ref_feature_enabled[j]);
810  infer(feature_value[i][j], ref_feature_value[j]);
811  }
812  }
813  }
814  } else {
815  for (i = 0; i < AV1_MAX_SEGMENTS; i++) {
816  for (j = 0; j < AV1_SEG_LVL_MAX; j++) {
817  infer(feature_enabled[i][j], 0);
818  infer(feature_value[i][j], 0);
819  }
820  }
821  }
822 
823  return 0;
824 }
825 
827  AV1RawFrameHeader *current)
828 {
829  int err;
830 
831  if (current->base_q_idx > 0)
832  flag(delta_q_present);
833  else
834  infer(delta_q_present, 0);
835 
836  if (current->delta_q_present)
837  fb(2, delta_q_res);
838 
839  return 0;
840 }
841 
843  AV1RawFrameHeader *current)
844 {
845  int err;
846 
847  if (current->delta_q_present) {
848  if (!current->allow_intrabc)
849  flag(delta_lf_present);
850  else
851  infer(delta_lf_present, 0);
852  if (current->delta_lf_present) {
853  fb(2, delta_lf_res);
854  flag(delta_lf_multi);
855  } else {
856  infer(delta_lf_res, 0);
857  infer(delta_lf_multi, 0);
858  }
859  } else {
860  infer(delta_lf_present, 0);
861  infer(delta_lf_res, 0);
862  infer(delta_lf_multi, 0);
863  }
864 
865  return 0;
866 }
867 
869  AV1RawFrameHeader *current)
870 {
872  static const int8_t default_loop_filter_ref_deltas[AV1_TOTAL_REFS_PER_FRAME] =
873  { 1, 0, 0, 0, -1, 0, -1, -1 };
874  static const int8_t default_loop_filter_mode_deltas[2] = { 0, 0 };
875  int i, err;
876 
877  if (priv->coded_lossless || current->allow_intrabc) {
878  infer(loop_filter_level[0], 0);
879  infer(loop_filter_level[1], 0);
880  infer(loop_filter_ref_deltas[AV1_REF_FRAME_INTRA], 1);
881  infer(loop_filter_ref_deltas[AV1_REF_FRAME_LAST], 0);
882  infer(loop_filter_ref_deltas[AV1_REF_FRAME_LAST2], 0);
883  infer(loop_filter_ref_deltas[AV1_REF_FRAME_LAST3], 0);
884  infer(loop_filter_ref_deltas[AV1_REF_FRAME_BWDREF], 0);
885  infer(loop_filter_ref_deltas[AV1_REF_FRAME_GOLDEN], -1);
886  infer(loop_filter_ref_deltas[AV1_REF_FRAME_ALTREF], -1);
887  infer(loop_filter_ref_deltas[AV1_REF_FRAME_ALTREF2], -1);
888  for (i = 0; i < 2; i++)
889  infer(loop_filter_mode_deltas[i], 0);
890  return 0;
891  }
892 
893  fb(6, loop_filter_level[0]);
894  fb(6, loop_filter_level[1]);
895 
896  if (priv->num_planes > 1) {
897  if (current->loop_filter_level[0] ||
898  current->loop_filter_level[1]) {
899  fb(6, loop_filter_level[2]);
900  fb(6, loop_filter_level[3]);
901  }
902  }
903 
904  fb(3, loop_filter_sharpness);
905 
906  flag(loop_filter_delta_enabled);
907  if (current->loop_filter_delta_enabled) {
908  const int8_t *ref_loop_filter_ref_deltas, *ref_loop_filter_mode_deltas;
909 
910  if (current->primary_ref_frame == AV1_PRIMARY_REF_NONE) {
911  ref_loop_filter_ref_deltas = default_loop_filter_ref_deltas;
912  ref_loop_filter_mode_deltas = default_loop_filter_mode_deltas;
913  } else {
914  ref_loop_filter_ref_deltas =
915  priv->ref[current->ref_frame_idx[current->primary_ref_frame]].loop_filter_ref_deltas;
916  ref_loop_filter_mode_deltas =
917  priv->ref[current->ref_frame_idx[current->primary_ref_frame]].loop_filter_mode_deltas;
918  }
919 
920  flag(loop_filter_delta_update);
921  for (i = 0; i < AV1_TOTAL_REFS_PER_FRAME; i++) {
922  if (current->loop_filter_delta_update)
923  flags(update_ref_delta[i], 1, i);
924  else
925  infer(update_ref_delta[i], 0);
926  if (current->update_ref_delta[i])
927  sus(1 + 6, loop_filter_ref_deltas[i], 1, i);
928  else
929  infer(loop_filter_ref_deltas[i], ref_loop_filter_ref_deltas[i]);
930  }
931  for (i = 0; i < 2; i++) {
932  if (current->loop_filter_delta_update)
933  flags(update_mode_delta[i], 1, i);
934  else
935  infer(update_mode_delta[i], 0);
936  if (current->update_mode_delta[i])
937  sus(1 + 6, loop_filter_mode_deltas[i], 1, i);
938  else
939  infer(loop_filter_mode_deltas[i], ref_loop_filter_mode_deltas[i]);
940  }
941  } else {
942  for (i = 0; i < AV1_TOTAL_REFS_PER_FRAME; i++)
943  infer(loop_filter_ref_deltas[i], default_loop_filter_ref_deltas[i]);
944  for (i = 0; i < 2; i++)
945  infer(loop_filter_mode_deltas[i], default_loop_filter_mode_deltas[i]);
946  }
947 
948  return 0;
949 }
950 
952  AV1RawFrameHeader *current)
953 {
955  const AV1RawSequenceHeader *seq = priv->sequence_header;
956  int i, err;
957 
958  if (priv->coded_lossless || current->allow_intrabc ||
959  !seq->enable_cdef) {
960  infer(cdef_damping_minus_3, 0);
961  infer(cdef_bits, 0);
962  infer(cdef_y_pri_strength[0], 0);
963  infer(cdef_y_sec_strength[0], 0);
964  infer(cdef_uv_pri_strength[0], 0);
965  infer(cdef_uv_sec_strength[0], 0);
966 
967  return 0;
968  }
969 
970  fb(2, cdef_damping_minus_3);
971  fb(2, cdef_bits);
972 
973  for (i = 0; i < (1 << current->cdef_bits); i++) {
974  fbs(4, cdef_y_pri_strength[i], 1, i);
975  fbs(2, cdef_y_sec_strength[i], 1, i);
976 
977  if (priv->num_planes > 1) {
978  fbs(4, cdef_uv_pri_strength[i], 1, i);
979  fbs(2, cdef_uv_sec_strength[i], 1, i);
980  }
981  }
982 
983  return 0;
984 }
985 
987  AV1RawFrameHeader *current)
988 {
990  const AV1RawSequenceHeader *seq = priv->sequence_header;
991  int uses_lr, uses_chroma_lr;
992  int i, err;
993 
994  if (priv->all_lossless || current->allow_intrabc ||
995  !seq->enable_restoration) {
996  return 0;
997  }
998 
999  uses_lr = uses_chroma_lr = 0;
1000  for (i = 0; i < priv->num_planes; i++) {
1001  fbs(2, lr_type[i], 1, i);
1002 
1003  if (current->lr_type[i] != AV1_RESTORE_NONE) {
1004  uses_lr = 1;
1005  if (i > 0)
1006  uses_chroma_lr = 1;
1007  }
1008  }
1009 
1010  if (uses_lr) {
1011  if (seq->use_128x128_superblock)
1012  increment(lr_unit_shift, 1, 2);
1013  else
1014  increment(lr_unit_shift, 0, 2);
1015 
1016  if(seq->color_config.subsampling_x &&
1017  seq->color_config.subsampling_y && uses_chroma_lr) {
1018  fb(1, lr_uv_shift);
1019  } else {
1020  infer(lr_uv_shift, 0);
1021  }
1022  }
1023 
1024  return 0;
1025 }
1026 
1028  AV1RawFrameHeader *current)
1029 {
1031  int err;
1032 
1033  if (priv->coded_lossless)
1034  infer(tx_mode, AV1_ONLY_4X4);
1035  else
1037 
1038  return 0;
1039 }
1040 
1042  AV1RawFrameHeader *current)
1043 {
1044  int err;
1045 
1046  if (current->frame_type == AV1_FRAME_INTRA_ONLY ||
1047  current->frame_type == AV1_FRAME_KEY)
1048  infer(reference_select, 0);
1049  else
1050  flag(reference_select);
1051 
1052  return 0;
1053 }
1054 
1056  AV1RawFrameHeader *current)
1057 {
1059  const AV1RawSequenceHeader *seq = priv->sequence_header;
1060  int skip_mode_allowed;
1061  int err;
1062 
1063  if (current->frame_type == AV1_FRAME_KEY ||
1064  current->frame_type == AV1_FRAME_INTRA_ONLY ||
1065  !current->reference_select || !seq->enable_order_hint) {
1066  skip_mode_allowed = 0;
1067  } else {
1068  int forward_idx, backward_idx;
1069  int forward_hint, backward_hint;
1070  int ref_hint, dist, i;
1071 
1072  forward_idx = -1;
1073  backward_idx = -1;
1074  for (i = 0; i < AV1_REFS_PER_FRAME; i++) {
1075  ref_hint = priv->ref[current->ref_frame_idx[i]].order_hint;
1076  dist = cbs_av1_get_relative_dist(seq, ref_hint,
1077  priv->order_hint);
1078  if (dist < 0) {
1079  if (forward_idx < 0 ||
1080  cbs_av1_get_relative_dist(seq, ref_hint,
1081  forward_hint) > 0) {
1082  forward_idx = i;
1083  forward_hint = ref_hint;
1084  }
1085  } else if (dist > 0) {
1086  if (backward_idx < 0 ||
1087  cbs_av1_get_relative_dist(seq, ref_hint,
1088  backward_hint) < 0) {
1089  backward_idx = i;
1090  backward_hint = ref_hint;
1091  }
1092  }
1093  }
1094 
1095  if (forward_idx < 0) {
1096  skip_mode_allowed = 0;
1097  } else if (backward_idx >= 0) {
1098  skip_mode_allowed = 1;
1099  // Frames for skip mode are forward_idx and backward_idx.
1100  } else {
1101  int second_forward_idx;
1102  int second_forward_hint;
1103 
1104  second_forward_idx = -1;
1105  for (i = 0; i < AV1_REFS_PER_FRAME; i++) {
1106  ref_hint = priv->ref[current->ref_frame_idx[i]].order_hint;
1107  if (cbs_av1_get_relative_dist(seq, ref_hint,
1108  forward_hint) < 0) {
1109  if (second_forward_idx < 0 ||
1110  cbs_av1_get_relative_dist(seq, ref_hint,
1111  second_forward_hint) > 0) {
1112  second_forward_idx = i;
1113  second_forward_hint = ref_hint;
1114  }
1115  }
1116  }
1117 
1118  if (second_forward_idx < 0) {
1119  skip_mode_allowed = 0;
1120  } else {
1121  skip_mode_allowed = 1;
1122  // Frames for skip mode are forward_idx and second_forward_idx.
1123  }
1124  }
1125  }
1126 
1127  if (skip_mode_allowed)
1128  flag(skip_mode_present);
1129  else
1130  infer(skip_mode_present, 0);
1131 
1132  return 0;
1133 }
1134 
1136  AV1RawFrameHeader *current,
1137  int type, int ref, int idx)
1138 {
1139  uint32_t abs_bits, prec_bits, num_syms;
1140  int err;
1141 
1142  if (idx < 2) {
1144  abs_bits = AV1_GM_ABS_TRANS_ONLY_BITS - !current->allow_high_precision_mv;
1145  prec_bits = AV1_GM_TRANS_ONLY_PREC_BITS - !current->allow_high_precision_mv;
1146  } else {
1147  abs_bits = AV1_GM_ABS_TRANS_BITS;
1148  prec_bits = AV1_GM_TRANS_PREC_BITS;
1149  }
1150  } else {
1151  abs_bits = AV1_GM_ABS_ALPHA_BITS;
1152  prec_bits = AV1_GM_ALPHA_PREC_BITS;
1153  }
1154 
1155  num_syms = 2 * (1 << abs_bits) + 1;
1156  subexp(gm_params[ref][idx], num_syms, 2, ref, idx);
1157 
1158  // Actual gm_params value is not reconstructed here.
1159  (void)prec_bits;
1160 
1161  return 0;
1162 }
1163 
1165  AV1RawFrameHeader *current)
1166 {
1167  int ref, type;
1168  int err;
1169 
1170  if (current->frame_type == AV1_FRAME_KEY ||
1171  current->frame_type == AV1_FRAME_INTRA_ONLY)
1172  return 0;
1173 
1175  flags(is_global[ref], 1, ref);
1176  if (current->is_global[ref]) {
1177  flags(is_rot_zoom[ref], 1, ref);
1178  if (current->is_rot_zoom[ref]) {
1180  } else {
1181  flags(is_translation[ref], 1, ref);
1182  type = current->is_translation[ref] ? AV1_WARP_MODEL_TRANSLATION
1184  }
1185  } else {
1187  }
1188 
1189  if (type >= AV1_WARP_MODEL_ROTZOOM) {
1190  CHECK(FUNC(global_motion_param)(ctx, rw, current, type, ref, 2));
1191  CHECK(FUNC(global_motion_param)(ctx, rw, current, type, ref, 3));
1192  if (type == AV1_WARP_MODEL_AFFINE) {
1193  CHECK(FUNC(global_motion_param)(ctx, rw, current, type, ref, 4));
1194  CHECK(FUNC(global_motion_param)(ctx, rw, current, type, ref, 5));
1195  } else {
1196  // gm_params[ref][4] = -gm_params[ref][3]
1197  // gm_params[ref][5] = gm_params[ref][2]
1198  }
1199  }
1201  CHECK(FUNC(global_motion_param)(ctx, rw, current, type, ref, 0));
1202  CHECK(FUNC(global_motion_param)(ctx, rw, current, type, ref, 1));
1203  }
1204  }
1205 
1206  return 0;
1207 }
1208 
1210  AV1RawFilmGrainParams *current,
1212 {
1214  const AV1RawSequenceHeader *seq = priv->sequence_header;
1215  int num_pos_luma, num_pos_chroma;
1216  int i, err;
1217 
1218  if (!seq->film_grain_params_present ||
1219  (!frame_header->show_frame && !frame_header->showable_frame))
1220  return 0;
1221 
1222  flag(apply_grain);
1223 
1224  if (!current->apply_grain)
1225  return 0;
1226 
1227  fb(16, grain_seed);
1228 
1229  if (frame_header->frame_type == AV1_FRAME_INTER)
1230  flag(update_grain);
1231  else
1232  infer(update_grain, 1);
1233 
1234  if (!current->update_grain) {
1235  fb(3, film_grain_params_ref_idx);
1236  return 0;
1237  }
1238 
1239  fc(4, num_y_points, 0, 14);
1240  for (i = 0; i < current->num_y_points; i++) {
1241  fcs(8, point_y_value[i],
1242  i ? current->point_y_value[i - 1] + 1 : 0,
1243  MAX_UINT_BITS(8) - (current->num_y_points - i - 1),
1244  1, i);
1245  fbs(8, point_y_scaling[i], 1, i);
1246  }
1247 
1248  if (seq->color_config.mono_chrome)
1249  infer(chroma_scaling_from_luma, 0);
1250  else
1251  flag(chroma_scaling_from_luma);
1252 
1253  if (seq->color_config.mono_chrome ||
1254  current->chroma_scaling_from_luma ||
1255  (seq->color_config.subsampling_x == 1 &&
1256  seq->color_config.subsampling_y == 1 &&
1257  current->num_y_points == 0)) {
1258  infer(num_cb_points, 0);
1259  infer(num_cr_points, 0);
1260  } else {
1261  fc(4, num_cb_points, 0, 10);
1262  for (i = 0; i < current->num_cb_points; i++) {
1263  fcs(8, point_cb_value[i],
1264  i ? current->point_cb_value[i - 1] + 1 : 0,
1265  MAX_UINT_BITS(8) - (current->num_cb_points - i - 1),
1266  1, i);
1267  fbs(8, point_cb_scaling[i], 1, i);
1268  }
1269  fc(4, num_cr_points, 0, 10);
1270  for (i = 0; i < current->num_cr_points; i++) {
1271  fcs(8, point_cr_value[i],
1272  i ? current->point_cr_value[i - 1] + 1 : 0,
1273  MAX_UINT_BITS(8) - (current->num_cr_points - i - 1),
1274  1, i);
1275  fbs(8, point_cr_scaling[i], 1, i);
1276  }
1277  }
1278 
1279  fb(2, grain_scaling_minus_8);
1280  fb(2, ar_coeff_lag);
1281  num_pos_luma = 2 * current->ar_coeff_lag * (current->ar_coeff_lag + 1);
1282  if (current->num_y_points) {
1283  num_pos_chroma = num_pos_luma + 1;
1284  for (i = 0; i < num_pos_luma; i++)
1285  fbs(8, ar_coeffs_y_plus_128[i], 1, i);
1286  } else {
1287  num_pos_chroma = num_pos_luma;
1288  }
1289  if (current->chroma_scaling_from_luma || current->num_cb_points) {
1290  for (i = 0; i < num_pos_chroma; i++)
1291  fbs(8, ar_coeffs_cb_plus_128[i], 1, i);
1292  }
1293  if (current->chroma_scaling_from_luma || current->num_cr_points) {
1294  for (i = 0; i < num_pos_chroma; i++)
1295  fbs(8, ar_coeffs_cr_plus_128[i], 1, i);
1296  }
1297  fb(2, ar_coeff_shift_minus_6);
1298  fb(2, grain_scale_shift);
1299  if (current->num_cb_points) {
1300  fb(8, cb_mult);
1301  fb(8, cb_luma_mult);
1302  fb(9, cb_offset);
1303  }
1304  if (current->num_cr_points) {
1305  fb(8, cr_mult);
1306  fb(8, cr_luma_mult);
1307  fb(9, cr_offset);
1308  }
1309 
1310  flag(overlap_flag);
1311  flag(clip_to_restricted_range);
1312 
1313  return 0;
1314 }
1315 
1317  AV1RawFrameHeader *current)
1318 {
1320  const AV1RawSequenceHeader *seq;
1321  int id_len, diff_len, all_frames, frame_is_intra, order_hint_bits;
1322  int i, err;
1323 
1324  if (!priv->sequence_header) {
1325  av_log(ctx->log_ctx, AV_LOG_ERROR, "No sequence header available: "
1326  "unable to decode frame header.\n");
1327  return AVERROR_INVALIDDATA;
1328  }
1329  seq = priv->sequence_header;
1330 
1331  id_len = seq->additional_frame_id_length_minus_1 +
1333  all_frames = (1 << AV1_NUM_REF_FRAMES) - 1;
1334 
1335  if (seq->reduced_still_picture_header) {
1336  infer(show_existing_frame, 0);
1338  infer(show_frame, 1);
1339  infer(showable_frame, 0);
1340  frame_is_intra = 1;
1341 
1342  } else {
1343  flag(show_existing_frame);
1344 
1345  if (current->show_existing_frame) {
1347 
1348  fb(3, frame_to_show_map_idx);
1349  ref = &priv->ref[current->frame_to_show_map_idx];
1350 
1351  if (!ref->valid) {
1352  av_log(ctx->log_ctx, AV_LOG_ERROR, "Missing reference frame needed for "
1353  "show_existing_frame (frame_to_show_map_idx = %d).\n",
1354  current->frame_to_show_map_idx);
1355  return AVERROR_INVALIDDATA;
1356  }
1357 
1361  frame_presentation_time);
1362  }
1363 
1365  fb(id_len, display_frame_id);
1366 
1367  infer(frame_type, ref->frame_type);
1368  if (current->frame_type == AV1_FRAME_KEY) {
1369  infer(refresh_frame_flags, all_frames);
1370 
1371  // Section 7.21
1372  infer(current_frame_id, ref->frame_id);
1373  priv->upscaled_width = ref->upscaled_width;
1374  priv->frame_width = ref->frame_width;
1375  priv->frame_height = ref->frame_height;
1376  priv->render_width = ref->render_width;
1377  priv->render_height = ref->render_height;
1378  priv->bit_depth = ref->bit_depth;
1379  priv->order_hint = ref->order_hint;
1380 
1381  memcpy(priv->loop_filter_ref_deltas, ref->loop_filter_ref_deltas,
1382  sizeof(ref->loop_filter_ref_deltas));
1383  memcpy(priv->loop_filter_mode_deltas, ref->loop_filter_mode_deltas,
1384  sizeof(ref->loop_filter_mode_deltas));
1385  memcpy(priv->feature_enabled, ref->feature_enabled,
1386  sizeof(ref->feature_enabled));
1387  memcpy(priv->feature_value, ref->feature_value,
1388  sizeof(ref->feature_value));
1389  } else
1390  infer(refresh_frame_flags, 0);
1391 
1392  infer(frame_width_minus_1, ref->upscaled_width - 1);
1393  infer(frame_height_minus_1, ref->frame_height - 1);
1394  infer(render_width_minus_1, ref->render_width - 1);
1395  infer(render_height_minus_1, ref->render_height - 1);
1396 
1397  // Section 7.20
1398  goto update_refs;
1399  }
1400 
1401  fb(2, frame_type);
1402  frame_is_intra = (current->frame_type == AV1_FRAME_INTRA_ONLY ||
1403  current->frame_type == AV1_FRAME_KEY);
1404 
1405  flag(show_frame);
1406  if (current->show_frame &&
1410  frame_presentation_time);
1411  }
1412  if (current->show_frame)
1413  infer(showable_frame, current->frame_type != AV1_FRAME_KEY);
1414  else
1415  flag(showable_frame);
1416 
1417  if (current->frame_type == AV1_FRAME_SWITCH ||
1418  (current->frame_type == AV1_FRAME_KEY && current->show_frame))
1419  infer(error_resilient_mode, 1);
1420  else
1421  flag(error_resilient_mode);
1422  }
1423 
1424  if (current->frame_type == AV1_FRAME_KEY && current->show_frame) {
1425  for (i = 0; i < AV1_NUM_REF_FRAMES; i++) {
1426  priv->ref[i].valid = 0;
1427  priv->ref[i].order_hint = 0;
1428  }
1429  for (i = 0; i < AV1_REFS_PER_FRAME; i++)
1430  priv->order_hints[i + AV1_REF_FRAME_LAST] = 0;
1431  }
1432 
1433  flag(disable_cdf_update);
1434 
1435  if (seq->seq_force_screen_content_tools ==
1437  flag(allow_screen_content_tools);
1438  } else {
1439  infer(allow_screen_content_tools,
1441  }
1442  if (current->allow_screen_content_tools) {
1444  flag(force_integer_mv);
1445  else
1446  infer(force_integer_mv, seq->seq_force_integer_mv);
1447  } else {
1448  infer(force_integer_mv, 0);
1449  }
1450 
1451  if (seq->frame_id_numbers_present_flag) {
1452  fb(id_len, current_frame_id);
1453 
1454  diff_len = seq->delta_frame_id_length_minus_2 + 2;
1455  for (i = 0; i < AV1_NUM_REF_FRAMES; i++) {
1456  if (current->current_frame_id > (1 << diff_len)) {
1457  if (priv->ref[i].frame_id > current->current_frame_id ||
1458  priv->ref[i].frame_id < (current->current_frame_id -
1459  (1 << diff_len)))
1460  priv->ref[i].valid = 0;
1461  } else {
1462  if (priv->ref[i].frame_id > current->current_frame_id &&
1463  priv->ref[i].frame_id < ((1 << id_len) +
1464  current->current_frame_id -
1465  (1 << diff_len)))
1466  priv->ref[i].valid = 0;
1467  }
1468  }
1469  } else {
1470  infer(current_frame_id, 0);
1471  }
1472 
1473  if (current->frame_type == AV1_FRAME_SWITCH)
1474  infer(frame_size_override_flag, 1);
1475  else if(seq->reduced_still_picture_header)
1476  infer(frame_size_override_flag, 0);
1477  else
1478  flag(frame_size_override_flag);
1479 
1480  order_hint_bits =
1481  seq->enable_order_hint ? seq->order_hint_bits_minus_1 + 1 : 0;
1482  if (order_hint_bits > 0)
1483  fb(order_hint_bits, order_hint);
1484  else
1485  infer(order_hint, 0);
1486  priv->order_hint = current->order_hint;
1487 
1488  if (frame_is_intra || current->error_resilient_mode)
1489  infer(primary_ref_frame, AV1_PRIMARY_REF_NONE);
1490  else
1491  fb(3, primary_ref_frame);
1492 
1494  flag(buffer_removal_time_present_flag);
1495  if (current->buffer_removal_time_present_flag) {
1496  for (i = 0; i <= seq->operating_points_cnt_minus_1; i++) {
1498  int op_pt_idc = seq->operating_point_idc[i];
1499  int in_temporal_layer = (op_pt_idc >> priv->temporal_id ) & 1;
1500  int in_spatial_layer = (op_pt_idc >> (priv->spatial_id + 8)) & 1;
1501  if (seq->operating_point_idc[i] == 0 ||
1502  (in_temporal_layer && in_spatial_layer)) {
1504  buffer_removal_time[i], 1, i);
1505  }
1506  }
1507  }
1508  }
1509  }
1510 
1511  if (current->frame_type == AV1_FRAME_SWITCH ||
1512  (current->frame_type == AV1_FRAME_KEY && current->show_frame))
1513  infer(refresh_frame_flags, all_frames);
1514  else
1515  fb(8, refresh_frame_flags);
1516 
1517  if (!frame_is_intra || current->refresh_frame_flags != all_frames) {
1518  if (seq->enable_order_hint) {
1519  for (i = 0; i < AV1_NUM_REF_FRAMES; i++) {
1520  if (current->error_resilient_mode)
1521  fbs(order_hint_bits, ref_order_hint[i], 1, i);
1522  else
1523  infer(ref_order_hint[i], priv->ref[i].order_hint);
1524  if (current->ref_order_hint[i] != priv->ref[i].order_hint)
1525  priv->ref[i].valid = 0;
1526  }
1527  }
1528  }
1529 
1530  if (current->frame_type == AV1_FRAME_KEY ||
1531  current->frame_type == AV1_FRAME_INTRA_ONLY) {
1532  CHECK(FUNC(frame_size)(ctx, rw, current));
1533  CHECK(FUNC(render_size)(ctx, rw, current));
1534 
1535  if (current->allow_screen_content_tools &&
1536  priv->upscaled_width == priv->frame_width)
1537  flag(allow_intrabc);
1538  else
1539  infer(allow_intrabc, 0);
1540 
1541  } else {
1542  if (!seq->enable_order_hint) {
1543  infer(frame_refs_short_signaling, 0);
1544  } else {
1545  flag(frame_refs_short_signaling);
1546  if (current->frame_refs_short_signaling) {
1547  fb(3, last_frame_idx);
1548  fb(3, golden_frame_idx);
1549  CHECK(FUNC(set_frame_refs)(ctx, rw, current));
1550  }
1551  }
1552 
1553  for (i = 0; i < AV1_REFS_PER_FRAME; i++) {
1554  if (!current->frame_refs_short_signaling)
1555  fbs(3, ref_frame_idx[i], 1, i);
1556  if (seq->frame_id_numbers_present_flag) {
1558  delta_frame_id_minus1[i], 1, i);
1559  }
1560  }
1561 
1562  if (current->frame_size_override_flag &&
1563  !current->error_resilient_mode) {
1564  CHECK(FUNC(frame_size_with_refs)(ctx, rw, current));
1565  } else {
1566  CHECK(FUNC(frame_size)(ctx, rw, current));
1567  CHECK(FUNC(render_size)(ctx, rw, current));
1568  }
1569 
1570  if (current->force_integer_mv)
1571  infer(allow_high_precision_mv, 0);
1572  else
1573  flag(allow_high_precision_mv);
1574 
1575  CHECK(FUNC(interpolation_filter)(ctx, rw, current));
1576 
1577  flag(is_motion_mode_switchable);
1578 
1579  if (current->error_resilient_mode ||
1580  !seq->enable_ref_frame_mvs)
1581  infer(use_ref_frame_mvs, 0);
1582  else
1583  flag(use_ref_frame_mvs);
1584 
1585  for (i = 0; i < AV1_REFS_PER_FRAME; i++) {
1586  int ref_frame = AV1_REF_FRAME_LAST + i;
1587  int hint = priv->ref[current->ref_frame_idx[i]].order_hint;
1588  priv->order_hints[ref_frame] = hint;
1589  if (!seq->enable_order_hint) {
1590  priv->ref_frame_sign_bias[ref_frame] = 0;
1591  } else {
1593  cbs_av1_get_relative_dist(seq, hint,
1594  current->order_hint) > 0;
1595  }
1596  }
1597 
1598  infer(allow_intrabc, 0);
1599  }
1600 
1601  if (seq->reduced_still_picture_header || current->disable_cdf_update)
1602  infer(disable_frame_end_update_cdf, 1);
1603  else
1604  flag(disable_frame_end_update_cdf);
1605 
1606  if (current->primary_ref_frame == AV1_PRIMARY_REF_NONE) {
1607  // Init non-coeff CDFs.
1608  // Setup past independence.
1609  } else {
1610  // Load CDF tables from previous frame.
1611  // Load params from previous frame.
1612  }
1613 
1614  if (current->use_ref_frame_mvs) {
1615  // Perform motion field estimation process.
1616  }
1617 
1618  CHECK(FUNC(tile_info)(ctx, rw, current));
1619 
1620  CHECK(FUNC(quantization_params)(ctx, rw, current));
1621 
1622  CHECK(FUNC(segmentation_params)(ctx, rw, current));
1623 
1624  CHECK(FUNC(delta_q_params)(ctx, rw, current));
1625 
1626  CHECK(FUNC(delta_lf_params)(ctx, rw, current));
1627 
1628  // Init coeff CDFs / load previous segments.
1629 
1630  priv->coded_lossless = 1;
1631  for (i = 0; i < AV1_MAX_SEGMENTS; i++) {
1632  int qindex;
1633  if (current->feature_enabled[i][AV1_SEG_LVL_ALT_Q]) {
1634  qindex = (current->base_q_idx +
1635  current->feature_value[i][AV1_SEG_LVL_ALT_Q]);
1636  } else {
1637  qindex = current->base_q_idx;
1638  }
1639  qindex = av_clip_uintp2(qindex, 8);
1640 
1641  if (qindex || current->delta_q_y_dc ||
1642  current->delta_q_u_ac || current->delta_q_u_dc ||
1643  current->delta_q_v_ac || current->delta_q_v_dc) {
1644  priv->coded_lossless = 0;
1645  }
1646  }
1647  priv->all_lossless = priv->coded_lossless &&
1648  priv->frame_width == priv->upscaled_width;
1649 
1650  CHECK(FUNC(loop_filter_params)(ctx, rw, current));
1651 
1652  CHECK(FUNC(cdef_params)(ctx, rw, current));
1653 
1654  CHECK(FUNC(lr_params)(ctx, rw, current));
1655 
1656  CHECK(FUNC(read_tx_mode)(ctx, rw, current));
1657 
1658  CHECK(FUNC(frame_reference_mode)(ctx, rw, current));
1659 
1660  CHECK(FUNC(skip_mode_params)(ctx, rw, current));
1661 
1662  if (frame_is_intra || current->error_resilient_mode ||
1663  !seq->enable_warped_motion)
1664  infer(allow_warped_motion, 0);
1665  else
1666  flag(allow_warped_motion);
1667 
1668  flag(reduced_tx_set);
1669 
1670  CHECK(FUNC(global_motion_params)(ctx, rw, current));
1671 
1672  CHECK(FUNC(film_grain_params)(ctx, rw, &current->film_grain, current));
1673 
1674  av_log(ctx->log_ctx, AV_LOG_DEBUG, "Frame %d: size %dx%d "
1675  "upscaled %d render %dx%d subsample %dx%d "
1676  "bitdepth %d tiles %dx%d.\n", priv->order_hint,
1677  priv->frame_width, priv->frame_height, priv->upscaled_width,
1678  priv->render_width, priv->render_height,
1679  seq->color_config.subsampling_x + 1,
1680  seq->color_config.subsampling_y + 1, priv->bit_depth,
1681  priv->tile_rows, priv->tile_cols);
1682 
1683 update_refs:
1684  for (i = 0; i < AV1_NUM_REF_FRAMES; i++) {
1685  if (current->refresh_frame_flags & (1 << i)) {
1686  priv->ref[i] = (AV1ReferenceFrameState) {
1687  .valid = 1,
1688  .frame_id = current->current_frame_id,
1689  .upscaled_width = priv->upscaled_width,
1690  .frame_width = priv->frame_width,
1691  .frame_height = priv->frame_height,
1692  .render_width = priv->render_width,
1693  .render_height = priv->render_height,
1694  .frame_type = current->frame_type,
1695  .subsampling_x = seq->color_config.subsampling_x,
1696  .subsampling_y = seq->color_config.subsampling_y,
1697  .bit_depth = priv->bit_depth,
1698  .order_hint = priv->order_hint,
1699  };
1700 
1701  for (int j = 0; j < AV1_REFS_PER_FRAME; j++) {
1703  priv->order_hints[j + AV1_REF_FRAME_LAST];
1704  }
1705 
1706  if (current->show_existing_frame) {
1707  memcpy(priv->ref[i].loop_filter_ref_deltas, priv->loop_filter_ref_deltas,
1708  sizeof(priv->loop_filter_ref_deltas));
1710  sizeof(priv->loop_filter_mode_deltas));
1711  memcpy(priv->ref[i].feature_enabled, priv->feature_enabled,
1712  sizeof(priv->feature_enabled));
1713  memcpy(priv->ref[i].feature_value, priv->feature_value,
1714  sizeof(priv->feature_value));
1715  } else {
1716  memcpy(priv->ref[i].loop_filter_ref_deltas, current->loop_filter_ref_deltas,
1717  sizeof(current->loop_filter_ref_deltas));
1718  memcpy(priv->ref[i].loop_filter_mode_deltas, current->loop_filter_mode_deltas,
1719  sizeof(current->loop_filter_mode_deltas));
1720  memcpy(priv->ref[i].feature_enabled, current->feature_enabled,
1721  sizeof(current->feature_enabled));
1722  memcpy(priv->ref[i].feature_value, current->feature_value,
1723  sizeof(current->feature_value));
1724  }
1725  }
1726  }
1727 
1728  return 0;
1729 }
1730 
1732  AV1RawFrameHeader *current, int redundant,
1733  AVBufferRef *rw_buffer_ref)
1734 {
1736  int start_pos, fh_bits, fh_bytes, err;
1737  uint8_t *fh_start;
1738 
1739  if (priv->seen_frame_header) {
1740  if (!redundant) {
1741  av_log(ctx->log_ctx, AV_LOG_ERROR, "Invalid repeated "
1742  "frame header OBU.\n");
1743  return AVERROR_INVALIDDATA;
1744  } else {
1745  GetBitContext fh;
1746  size_t i, b;
1747  uint32_t val;
1748 
1749  HEADER("Redundant Frame Header");
1750 
1751  av_assert0(priv->frame_header_ref && priv->frame_header);
1752 
1753  init_get_bits(&fh, priv->frame_header,
1754  priv->frame_header_size);
1755  for (i = 0; i < priv->frame_header_size; i += 8) {
1756  b = FFMIN(priv->frame_header_size - i, 8);
1757  val = get_bits(&fh, b);
1758  xf(b, frame_header_copy[i],
1759  val, val, val, 1, i / 8);
1760  }
1761  }
1762  } else {
1763  if (redundant)
1764 #ifdef READ
1765  HEADER("Redundant Frame Header (used as Frame Header)");
1766 #else
1767  {
1768  av_log(ctx->log_ctx, AV_LOG_ERROR, "Invalid redundant "
1769  "frame header OBU.\n");
1770  return AVERROR_INVALIDDATA;
1771  }
1772 #endif
1773  else
1774  HEADER("Frame Header");
1775 
1776 #ifdef READ
1777  start_pos = get_bits_count(rw);
1778 #else
1779  start_pos = put_bits_count(rw);
1780 #endif
1781 
1782  CHECK(FUNC(uncompressed_header)(ctx, rw, current));
1783 
1784  priv->tile_num = 0;
1785 
1786  if (current->show_existing_frame) {
1787  priv->seen_frame_header = 0;
1788  } else {
1789  priv->seen_frame_header = 1;
1790 
1792 
1793 #ifdef READ
1794  fh_bits = get_bits_count(rw) - start_pos;
1795  fh_start = (uint8_t*)rw->buffer + start_pos / 8;
1796 #else
1797  // Need to flush the bitwriter so that we can copy its output,
1798  // but use a copy so we don't affect the caller's structure.
1799  {
1800  PutBitContext tmp = *rw;
1801  flush_put_bits(&tmp);
1802  }
1803 
1804  fh_bits = put_bits_count(rw) - start_pos;
1805  fh_start = rw->buf + start_pos / 8;
1806 #endif
1807  fh_bytes = (fh_bits + 7) / 8;
1808 
1809  priv->frame_header_size = fh_bits;
1810 
1811  if (rw_buffer_ref) {
1812  priv->frame_header_ref = av_buffer_ref(rw_buffer_ref);
1813  if (!priv->frame_header_ref)
1814  return AVERROR(ENOMEM);
1815  priv->frame_header = fh_start;
1816  } else {
1817  priv->frame_header_ref =
1819  if (!priv->frame_header_ref)
1820  return AVERROR(ENOMEM);
1821  priv->frame_header = priv->frame_header_ref->data;
1822  memcpy(priv->frame_header, fh_start, fh_bytes);
1823  }
1824  }
1825  }
1826 
1827  return 0;
1828 }
1829 
1831  AV1RawTileGroup *current)
1832 {
1834  int num_tiles, tile_bits;
1835  int err;
1836 
1837  HEADER("Tile Group");
1838 
1839  num_tiles = priv->tile_cols * priv->tile_rows;
1840  if (num_tiles > 1)
1841  flag(tile_start_and_end_present_flag);
1842  else
1843  infer(tile_start_and_end_present_flag, 0);
1844 
1845  if (num_tiles == 1 || !current->tile_start_and_end_present_flag) {
1846  infer(tg_start, 0);
1847  infer(tg_end, num_tiles - 1);
1848  } else {
1849  tile_bits = cbs_av1_tile_log2(1, priv->tile_cols) +
1850  cbs_av1_tile_log2(1, priv->tile_rows);
1851  fc(tile_bits, tg_start, priv->tile_num, num_tiles - 1);
1852  fc(tile_bits, tg_end, current->tg_start, num_tiles - 1);
1853  }
1854 
1855  priv->tile_num = current->tg_end + 1;
1856 
1857  CHECK(FUNC(byte_alignment)(ctx, rw));
1858 
1859  // Reset header for next frame.
1860  if (current->tg_end == num_tiles - 1)
1861  priv->seen_frame_header = 0;
1862 
1863  // Tile data follows.
1864 
1865  return 0;
1866 }
1867 
1869  AV1RawFrame *current,
1870  AVBufferRef *rw_buffer_ref)
1871 {
1872  int err;
1873 
1874  CHECK(FUNC(frame_header_obu)(ctx, rw, &current->header,
1875  0, rw_buffer_ref));
1876 
1877  CHECK(FUNC(byte_alignment)(ctx, rw));
1878 
1879  return 0;
1880 }
1881 
1882 #if CBS_AV1_OBU_TILE_LIST
1883 static int FUNC(tile_list_obu)(CodedBitstreamContext *ctx, RWContext *rw,
1884  AV1RawTileList *current)
1885 {
1886  int err;
1887 
1888  fb(8, output_frame_width_in_tiles_minus_1);
1889  fb(8, output_frame_height_in_tiles_minus_1);
1890 
1891  fb(16, tile_count_minus_1);
1892 
1893  // Tile data follows.
1894 
1895  return 0;
1896 }
1897 #endif
1898 
1899 #if CBS_AV1_OBU_METADATA
1900 static int FUNC(metadata_hdr_cll)(CodedBitstreamContext *ctx, RWContext *rw,
1901  AV1RawMetadataHDRCLL *current)
1902 {
1903  int err;
1904 
1905  HEADER("HDR CLL Metadata");
1906 
1907  fb(16, max_cll);
1908  fb(16, max_fall);
1909 
1910  return 0;
1911 }
1912 
1913 static int FUNC(metadata_hdr_mdcv)(CodedBitstreamContext *ctx, RWContext *rw,
1914  AV1RawMetadataHDRMDCV *current)
1915 {
1916  int err, i;
1917 
1918  HEADER("HDR MDCV Metadata");
1919 
1920  for (i = 0; i < 3; i++) {
1921  fbs(16, primary_chromaticity_x[i], 1, i);
1922  fbs(16, primary_chromaticity_y[i], 1, i);
1923  }
1924 
1925  fb(16, white_point_chromaticity_x);
1926  fb(16, white_point_chromaticity_y);
1927 
1928  fb(32, luminance_max);
1929  fb(32, luminance_min);
1930 
1931  return 0;
1932 }
1933 
1934 static int FUNC(scalability_structure)(CodedBitstreamContext *ctx, RWContext *rw,
1935  AV1RawMetadataScalability *current)
1936 {
1938  const AV1RawSequenceHeader *seq;
1939  int err, i, j;
1940 
1941  if (!priv->sequence_header) {
1942  av_log(ctx->log_ctx, AV_LOG_ERROR, "No sequence header available: "
1943  "unable to parse scalability metadata.\n");
1944  return AVERROR_INVALIDDATA;
1945  }
1946  seq = priv->sequence_header;
1947 
1948  fb(2, spatial_layers_cnt_minus_1);
1949  flag(spatial_layer_dimensions_present_flag);
1950  flag(spatial_layer_description_present_flag);
1951  flag(temporal_group_description_present_flag);
1952  fc(3, scalability_structure_reserved_3bits, 0, 0);
1953  if (current->spatial_layer_dimensions_present_flag) {
1954  for (i = 0; i <= current->spatial_layers_cnt_minus_1; i++) {
1955  fcs(16, spatial_layer_max_width[i],
1956  0, seq->max_frame_width_minus_1 + 1, 1, i);
1957  fcs(16, spatial_layer_max_height[i],
1958  0, seq->max_frame_height_minus_1 + 1, 1, i);
1959  }
1960  }
1961  if (current->spatial_layer_description_present_flag) {
1962  for (i = 0; i <= current->spatial_layers_cnt_minus_1; i++)
1963  fbs(8, spatial_layer_ref_id[i], 1, i);
1964  }
1965  if (current->temporal_group_description_present_flag) {
1966  fb(8, temporal_group_size);
1967  for (i = 0; i < current->temporal_group_size; i++) {
1968  fbs(3, temporal_group_temporal_id[i], 1, i);
1969  flags(temporal_group_temporal_switching_up_point_flag[i], 1, i);
1970  flags(temporal_group_spatial_switching_up_point_flag[i], 1, i);
1971  fbs(3, temporal_group_ref_cnt[i], 1, i);
1972  for (j = 0; j < current->temporal_group_ref_cnt[i]; j++) {
1973  fbs(8, temporal_group_ref_pic_diff[i][j], 2, i, j);
1974  }
1975  }
1976  }
1977 
1978  return 0;
1979 }
1980 
1981 static int FUNC(metadata_scalability)(CodedBitstreamContext *ctx, RWContext *rw,
1982  AV1RawMetadataScalability *current)
1983 {
1984  int err;
1985 
1986  HEADER("Scalability Metadata");
1987 
1988  fb(8, scalability_mode_idc);
1989 
1990  if (current->scalability_mode_idc == AV1_SCALABILITY_SS)
1991  CHECK(FUNC(scalability_structure)(ctx, rw, current));
1992 
1993  return 0;
1994 }
1995 
1996 static int FUNC(metadata_itut_t35)(CodedBitstreamContext *ctx, RWContext *rw,
1997  AV1RawMetadataITUTT35 *current)
1998 {
1999  int err;
2000  size_t i;
2001 
2002  HEADER("ITU-T T.35 Metadata");
2003 
2004  fb(8, itu_t_t35_country_code);
2005  if (current->itu_t_t35_country_code == 0xff)
2006  fb(8, itu_t_t35_country_code_extension_byte);
2007 
2008 #ifdef READ
2009  // The payload runs up to the start of the trailing bits, but there might
2010  // be arbitrarily many trailing zeroes so we need to read through twice.
2011  current->payload_size = cbs_av1_get_payload_bytes_left(rw);
2012 
2013  current->payload_ref = av_buffer_alloc(current->payload_size);
2014  if (!current->payload_ref)
2015  return AVERROR(ENOMEM);
2016  current->payload = current->payload_ref->data;
2017 #endif
2018 
2019  for (i = 0; i < current->payload_size; i++)
2020  xf(8, itu_t_t35_payload_bytes[i], current->payload[i],
2021  0x00, 0xff, 1, i);
2022 
2023  return 0;
2024 }
2025 
2026 static int FUNC(metadata_timecode)(CodedBitstreamContext *ctx, RWContext *rw,
2027  AV1RawMetadataTimecode *current)
2028 {
2029  int err;
2030 
2031  HEADER("Timecode Metadata");
2032 
2033  fb(5, counting_type);
2034  flag(full_timestamp_flag);
2035  flag(discontinuity_flag);
2036  flag(cnt_dropped_flag);
2037  fb(9, n_frames);
2038 
2039  if (current->full_timestamp_flag) {
2040  fc(6, seconds_value, 0, 59);
2041  fc(6, minutes_value, 0, 59);
2042  fc(5, hours_value, 0, 23);
2043  } else {
2044  flag(seconds_flag);
2045  if (current->seconds_flag) {
2046  fc(6, seconds_value, 0, 59);
2047  flag(minutes_flag);
2048  if (current->minutes_flag) {
2049  fc(6, minutes_value, 0, 59);
2050  flag(hours_flag);
2051  if (current->hours_flag)
2052  fc(5, hours_value, 0, 23);
2053  }
2054  }
2055  }
2056 
2057  fb(5, time_offset_length);
2058  if (current->time_offset_length > 0)
2059  fb(current->time_offset_length, time_offset_value);
2060  else
2061  infer(time_offset_length, 0);
2062 
2063  return 0;
2064 }
2065 
2066 static int FUNC(metadata_unknown)(CodedBitstreamContext *ctx, RWContext *rw,
2067  AV1RawMetadataUnknown *current)
2068 {
2069  int err;
2070  size_t i;
2071 
2072  HEADER("Unknown Metadata");
2073 
2074 #ifdef READ
2075  current->payload_size = cbs_av1_get_payload_bytes_left(rw);
2076 
2077  current->payload_ref = av_buffer_alloc(current->payload_size);
2078  if (!current->payload_ref)
2079  return AVERROR(ENOMEM);
2080  current->payload = current->payload_ref->data;
2081 #endif
2082 
2083  for (i = 0; i < current->payload_size; i++)
2084  fbs(8, payload[i], 1, i);
2085 
2086  return 0;
2087 }
2088 
2089 static int FUNC(metadata_obu)(CodedBitstreamContext *ctx, RWContext *rw,
2090  AV1RawMetadata *current)
2091 {
2092  int err;
2093 
2094  leb128(metadata_type);
2095 
2096  switch (current->metadata_type) {
2098  CHECK(FUNC(metadata_hdr_cll)(ctx, rw, &current->metadata.hdr_cll));
2099  break;
2101  CHECK(FUNC(metadata_hdr_mdcv)(ctx, rw, &current->metadata.hdr_mdcv));
2102  break;
2104  CHECK(FUNC(metadata_scalability)(ctx, rw, &current->metadata.scalability));
2105  break;
2107  CHECK(FUNC(metadata_itut_t35)(ctx, rw, &current->metadata.itut_t35));
2108  break;
2110  CHECK(FUNC(metadata_timecode)(ctx, rw, &current->metadata.timecode));
2111  break;
2112  default:
2113  CHECK(FUNC(metadata_unknown)(ctx, rw, &current->metadata.unknown));
2114  }
2115 
2116  return 0;
2117 }
2118 #endif
2119 
2120 #if CBS_AV1_OBU_PADDING
2121 static int FUNC(padding_obu)(CodedBitstreamContext *ctx, RWContext *rw,
2122  AV1RawPadding *current)
2123 {
2124  int i, err;
2125 
2126  HEADER("Padding");
2127 
2128 #ifdef READ
2129  // The payload runs up to the start of the trailing bits, but there might
2130  // be arbitrarily many trailing zeroes so we need to read through twice.
2131  current->payload_size = cbs_av1_get_payload_bytes_left(rw);
2132 
2133  current->payload_ref = av_buffer_alloc(current->payload_size);
2134  if (!current->payload_ref)
2135  return AVERROR(ENOMEM);
2136  current->payload = current->payload_ref->data;
2137 #endif
2138 
2139  for (i = 0; i < current->payload_size; i++)
2140  xf(8, obu_padding_byte[i], current->payload[i], 0x00, 0xff, 1, i);
2141 
2142  return 0;
2143 }
2144 #endif
fb
#define fb(width, name)
Definition: cbs_av1.c:617
flags
const SwsFlags flags[]
Definition: swscale.c:61
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:1316
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:756
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:462
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:1209
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:709
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:592
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:1027
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:1164
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:1055
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: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
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:488
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:986
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:842
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:868
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
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:1731
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:1041
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:1868
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:1830
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: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
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:951
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:1135
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
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:826
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