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
22
27
28
30 const char *
name, uint32_t *write_to,
31 uint32_t range_min, uint32_t range_max)
32 {
33 uint32_t zeroes, bits_value,
value;
34 int position;
35
36 if (
ctx->trace_enable)
38
39 zeroes = 0;
40 while (1) {
43 "%s: bitstream ended.\n",
name);
45 }
46
48 break;
49 ++zeroes;
50 }
51
52 if (zeroes >= 32) {
54 } else {
57 "%s: bitstream ended.\n",
name);
59 }
60
62 value = bits_value + (UINT32_C(1) << zeroes) - 1;
63 }
64
65 if (
ctx->trace_enable) {
68
69 if (zeroes >= 32) {
70 while (zeroes > 32) {
71 k =
FFMIN(zeroes - 32, 32);
72 for (
i = 0;
i < k;
i++)
77 zeroes -= k;
78 position += k;
79 }
80 }
81
82 for (
i = 0;
i < zeroes;
i++)
85
86 if (zeroes < 32) {
87 for (j = 0; j < zeroes; j++)
88 bits[
i++] = (bits_value >> (zeroes - j - 1) & 1) ?
'1' :
'0';
89 }
90
94 }
95
96 if (value < range_min || value > range_max) {
98 "%"PRIu32", but must be in [%"PRIu32",%"PRIu32"].\n",
101 }
102
104 return 0;
105 }
106
109 uint32_t range_min, uint32_t range_max)
110 {
111 uint32_t v;
112 int position, zeroes;
113
114 if (value < range_min || value > range_max) {
116 "%"PRIu32", but must be in [%"PRIu32",%"PRIu32"].\n",
119 }
120
121 if (
ctx->trace_enable)
123
125 v =
value - (1
U << zeroes) + 1;
129
130 if (
ctx->trace_enable) {
134 for (j = 0; j < zeroes; j++)
137 for (j = 0; j < zeroes; j++)
138 bits[
i++] = (v >> (zeroes - j - 1) & 1) ?
'1' :
'0';
142 }
143
144 return 0;
145 }
146
148 const char *
name, uint64_t *write_to)
149 {
151 int position, err,
i;
152
153 if (
ctx->trace_enable)
155
157 for (
i = 0;
i < 8;
i++) {
158 int subscript[2] = { 1,
i };
161 &byte, 0x00, 0xff);
162 if (err < 0)
163 return err;
164
165 value |= (uint64_t)(
byte & 0x7f) << (
i * 7);
166 if (!(byte & 0x80))
167 break;
168 }
169
170 if (
value > UINT32_MAX)
172
173 if (
ctx->trace_enable)
175
177 return 0;
178 }
179
182 {
183 int position, err,
len,
i;
185
187
188 if (
ctx->trace_enable)
190
191 for (
i = 0;
i <
len;
i++) {
192 int subscript[2] = { 1,
i };
193
194 byte =
value >> (7 *
i) & 0x7f;
196 byte |= 0x80;
197
199 byte, 0x00, 0xff);
200 if (err < 0)
201 return err;
202 }
203
204 if (
ctx->trace_enable)
206
207 return 0;
208 }
209
211 uint32_t n,
const char *
name,
212 const int *subscripts, uint32_t *write_to)
213 {
214 uint32_t m, v, extra_bit,
value;
216
218
219 if (
ctx->trace_enable)
221
224
227 "%s: bitstream ended.\n",
name);
229 }
230
233 else
234 v = 0;
235
236 if (v < m) {
238 } else {
240 value = (v << 1) - m + extra_bit;
241 }
242
243 if (
ctx->trace_enable) {
246 for (
i = 0;
i <
w - 1;
i++)
247 bits[
i] = (v >>
i & 1) ?
'1' :
'0';
248 if (v >= m)
249 bits[
i++] = extra_bit ?
'1' :
'0';
251
254 }
255
257 return 0;
258 }
259
261 uint32_t n,
const char *
name,
262 const int *subscripts, uint32_t
value)
263 {
264 uint32_t
w, m, v, extra_bit;
265 int position;
266
269 "%"PRIu32", but must be in [0,%"PRIu32"].\n",
272 }
273
274 if (
ctx->trace_enable)
276
279
282
286 } else {
287 v = m + ((
value - m) >> 1);
288 extra_bit = (
value - m) & 1;
291 }
292
293 if (
ctx->trace_enable) {
296 for (
i = 0;
i <
w - 1;
i++)
297 bits[
i] = (v >>
i & 1) ?
'1' :
'0';
299 bits[
i++] = extra_bit ?
'1' :
'0';
301
304 }
305
306 return 0;
307 }
308
310 uint32_t range_min, uint32_t range_max,
311 const char *
name, uint32_t *write_to)
312 {
316
317 av_assert0(range_min <= range_max && range_max - range_min <
sizeof(
bits) - 1);
318 if (
ctx->trace_enable)
320
321 for (
i = 0,
value = range_min;
value < range_max;) {
324 "%s: bitstream ended.\n",
name);
326 }
330 } else {
332 break;
333 }
334 }
335
336 if (
ctx->trace_enable) {
340 }
341
343 return 0;
344 }
345
347 uint32_t range_min, uint32_t range_max,
349 {
351
352 av_assert0(range_min <= range_max && range_max - range_min < 32);
353 if (value < range_min || value > range_max) {
355 "%"PRIu32", but must be in [%"PRIu32",%"PRIu32"].\n",
358 }
359
360 if (
value == range_max)
361 len = range_max - range_min;
362 else
366
367 if (
ctx->trace_enable) {
370 for (
i = 0;
i <
len;
i++) {
371 if (range_min +
i ==
value)
373 else
375 }
379 }
380
383
384 return 0;
385 }
386
388 uint32_t range_max,
const char *
name,
389 const int *subscripts, uint32_t *write_to)
390 {
392 int position, err;
393 uint32_t max_len,
len, range_offset, range_bits;
394
395 if (
ctx->trace_enable)
397
399 max_len =
av_log2(range_max - 1) - 3;
400
402 "subexp_more_bits", &
len);
403 if (err < 0)
404 return err;
405
407 range_bits = 2 +
len;
408 range_offset = 1 << range_bits;
409 } else {
410 range_bits = 3;
411 range_offset = 0;
412 }
413
418 if (err < 0)
419 return err;
420
421 } else {
424 if (err < 0)
425 return err;
426 }
427 value += range_offset;
428
429 if (
ctx->trace_enable)
432
434 return err;
435 }
436
438 uint32_t range_max,
const char *
name,
439 const int *subscripts, uint32_t
value)
440 {
441 int position, err;
442 uint32_t max_len,
len, range_offset, range_bits;
443
444 if (
value > range_max) {
446 "%"PRIu32", but must be in [0,%"PRIu32"].\n",
449 }
450
451 if (
ctx->trace_enable)
453
455 max_len =
av_log2(range_max - 1) - 3;
456
458 range_bits = 3;
459 range_offset = 0;
461 } else {
463 len = range_bits - 2;
465 // The top bin is combined with the one below it.
467 --range_bits;
469 }
470 range_offset = 1 << range_bits;
471 }
472
474 "subexp_more_bits",
len);
475 if (err < 0)
476 return err;
477
481 value - range_offset,
483 if (err < 0)
484 return err;
485
486 } else {
488 "subexp_final_bits",
NULL,
489 value - range_offset);
490 if (err < 0)
491 return err;
492 }
493
494 if (
ctx->trace_enable)
497
498 return err;
499 }
500
501
503 {
504 int k;
505 for (k = 0; (blksize << k) < target; k++);
506 return k;
507 }
508
510 unsigned int a,
unsigned int b)
511 {
512 unsigned int diff, m;
514 return 0;
519 }
520
522 {
528 }
530 }
531
532
533 #define HEADER(name) do { \
534 ff_cbs_trace_header(ctx, name); \
535 } while (0)
536
537 #define CHECK(call) do { \
538 err = (call); \
539 if (err < 0) \
540 return err; \
541 } while (0)
542
543 #define FUNC_NAME(rw, codec, name) cbs_ ## codec ## _ ## rw ## _ ## name
544 #define FUNC_AV1(rw, name) FUNC_NAME(rw, av1, name)
545 #define FUNC(name) FUNC_AV1(READWRITE, name)
546
547 #define SUBSCRIPTS(subs, ...) (subs > 0 ? ((int[subs + 1]){ subs, __VA_ARGS__ }) : NULL)
548
549 #define fb(width, name) \
550 xf(width, name, current->name, 0, MAX_UINT_BITS(width), 0, )
551 #define fc(width, name, range_min, range_max) \
552 xf(width, name, current->name, range_min, range_max, 0, )
553 #define flag(name) fb(1, name)
554 #define su(width, name) \
555 xsu(width, name, current->name, 0, )
556
557 #define fbs(width, name, subs, ...) \
558 xf(width, name, current->name, 0, MAX_UINT_BITS(width), subs, __VA_ARGS__)
559 #define fcs(width, name, range_min, range_max, subs, ...) \
560 xf(width, name, current->name, range_min, range_max, subs, __VA_ARGS__)
561 #define flags(name, subs, ...) \
562 xf(1, name, current->name, 0, 1, subs, __VA_ARGS__)
563 #define sus(width, name, subs, ...) \
564 xsu(width, name, current->name, subs, __VA_ARGS__)
565
566 #define fixed(width, name, value) do { \
567 av_unused uint32_t fixed_value = value; \
568 xf(width, name, fixed_value, value, value, 0, ); \
569 } while (0)
570
571
573 #define READWRITE read
574 #define RWContext GetBitContext
575
576 #define xf(width, name, var, range_min, range_max, subs, ...) do { \
577 uint32_t value; \
578 CHECK(ff_cbs_read_unsigned(ctx, rw, width, #name, \
579 SUBSCRIPTS(subs, __VA_ARGS__), \
580 &value, range_min, range_max)); \
581 var = value; \
582 } while (0)
583
584 #define xsu(width, name, var, subs, ...) do { \
585 int32_t value; \
586 CHECK(ff_cbs_read_signed(ctx, rw, width, #name, \
587 SUBSCRIPTS(subs, __VA_ARGS__), &value, \
588 MIN_INT_BITS(width), \
589 MAX_INT_BITS(width))); \
590 var = value; \
591 } while (0)
592
593 #define uvlc(name, range_min, range_max) do { \
594 uint32_t value; \
595 CHECK(cbs_av1_read_uvlc(ctx, rw, #name, \
596 &value, range_min, range_max)); \
597 current->name = value; \
598 } while (0)
599
600 #define ns(max_value, name, subs, ...) do { \
601 uint32_t value; \
602 CHECK(cbs_av1_read_ns(ctx, rw, max_value, #name, \
603 SUBSCRIPTS(subs, __VA_ARGS__), &value)); \
604 current->name = value; \
605 } while (0)
606
607 #define increment(name, min, max) do { \
608 uint32_t value; \
609 CHECK(cbs_av1_read_increment(ctx, rw, min, max, #name, &value)); \
610 current->name = value; \
611 } while (0)
612
613 #define subexp(name, max, subs, ...) do { \
614 uint32_t value; \
615 CHECK(cbs_av1_read_subexp(ctx, rw, max, #name, \
616 SUBSCRIPTS(subs, __VA_ARGS__), &value)); \
617 current->name = value; \
618 } while (0)
619
620 #define delta_q(name) do { \
621 uint8_t delta_coded; \
622 int8_t delta_q; \
623 xf(1, name.delta_coded, delta_coded, 0, 1, 0, ); \
624 if (delta_coded) \
625 xsu(1 + 6, name.delta_q, delta_q, 0, ); \
626 else \
627 delta_q = 0; \
628 current->name = delta_q; \
629 } while (0)
630
631 #define leb128(name) do { \
632 uint64_t value; \
633 CHECK(cbs_av1_read_leb128(ctx, rw, #name, &value)); \
634 current->name = value; \
635 } while (0)
636
637 #define infer(name, value) do { \
638 current->name = value; \
639 } while (0)
640
641 #define byte_alignment(rw) (get_bits_count(rw) % 8)
642
644
645 #undef READ
646 #undef READWRITE
647 #undef RWContext
648 #undef xf
649 #undef xsu
650 #undef uvlc
651 #undef ns
652 #undef increment
653 #undef subexp
654 #undef delta_q
655 #undef leb128
656 #undef infer
657 #undef byte_alignment
658
659
661 #define READWRITE write
662 #define RWContext PutBitContext
663
664 #define xf(width, name, var, range_min, range_max, subs, ...) do { \
665 CHECK(ff_cbs_write_unsigned(ctx, rw, width, #name, \
666 SUBSCRIPTS(subs, __VA_ARGS__), \
667 var, range_min, range_max)); \
668 } while (0)
669
670 #define xsu(width, name, var, subs, ...) do { \
671 CHECK(ff_cbs_write_signed(ctx, rw, width, #name, \
672 SUBSCRIPTS(subs, __VA_ARGS__), var, \
673 MIN_INT_BITS(width), \
674 MAX_INT_BITS(width))); \
675 } while (0)
676
677 #define uvlc(name, range_min, range_max) do { \
678 CHECK(cbs_av1_write_uvlc(ctx, rw, #name, current->name, \
679 range_min, range_max)); \
680 } while (0)
681
682 #define ns(max_value, name, subs, ...) do { \
683 CHECK(cbs_av1_write_ns(ctx, rw, max_value, #name, \
684 SUBSCRIPTS(subs, __VA_ARGS__), \
685 current->name)); \
686 } while (0)
687
688 #define increment(name, min, max) do { \
689 CHECK(cbs_av1_write_increment(ctx, rw, min, max, #name, \
690 current->name)); \
691 } while (0)
692
693 #define subexp(name, max, subs, ...) do { \
694 CHECK(cbs_av1_write_subexp(ctx, rw, max, #name, \
695 SUBSCRIPTS(subs, __VA_ARGS__), \
696 current->name)); \
697 } while (0)
698
699 #define delta_q(name) do { \
700 xf(1, name.delta_coded, current->name != 0, 0, 1, 0, ); \
701 if (current->name) \
702 xsu(1 + 6, name.delta_q, current->name, 0, ); \
703 } while (0)
704
705 #define leb128(name) do { \
706 CHECK(cbs_av1_write_leb128(ctx, rw, #name, current->name)); \
707 } while (0)
708
709 #define infer(name, value) do { \
710 if (current->name != (value)) { \
711 av_log(ctx->log_ctx, AV_LOG_ERROR, \
712 "%s does not match inferred value: " \
713 "%"PRId64", but should be %"PRId64".\n", \
714 #name, (int64_t)current->name, (int64_t)(value)); \
715 return AVERROR_INVALIDDATA; \
716 } \
717 } while (0)
718
719 #define byte_alignment(rw) (put_bits_count(rw) % 8)
720
722
723 #undef WRITE
724 #undef READWRITE
725 #undef RWContext
726 #undef xf
727 #undef xsu
728 #undef uvlc
729 #undef ns
730 #undef increment
731 #undef subexp
732 #undef delta_q
733 #undef leb128
734 #undef infer
735 #undef byte_alignment
736
737
741 {
745 uint64_t obu_length;
747
748 // Don't include this parsing in trace output.
749 trace =
ctx->trace_enable;
750 ctx->trace_enable = 0;
751
754
755 if (INT_MAX / 8 <
size) {
760 }
761
763 // first bit is nonzero, the extradata does not consist purely of
764 // OBUs. Expect MP4/Matroska AV1CodecConfigurationRecord
765 int config_record_version =
data[0] & 0x7f;
766
767 if (config_record_version != 1) {
769 "Unknown version %d of AV1CodecConfigurationRecord "
770 "found!\n",
771 config_record_version);
774 }
775
779 "Undersized AV1CodecConfigurationRecord v%d found!\n",
780 config_record_version);
783 }
784
785 goto success;
786 }
787
788 // In AV1CodecConfigurationRecord v1, actual OBUs start after
789 // four bytes. Thus set the offset as required for properly
790 // parsing them.
793 }
794
797 uint64_t obu_size;
798
800
801 err = cbs_av1_read_obu_header(
ctx, &gbc, &
header);
802 if (err < 0)
804
805 if (
header.obu_has_size_field) {
811 }
813 if (err < 0)
815 } else
816 obu_size =
size - 1 -
header.obu_extension_flag;
817
820
821 obu_length =
pos / 8 + obu_size;
822
823 if (
size < obu_length) {
825 "%"PRIu64
", but only %"SIZE_SPECIFIER " bytes remaining in fragment.\n",
829 }
830
833 if (err < 0)
835
838 }
839
840 success:
841 err = 0;
843 ctx->trace_enable = trace;
844 return err;
845 }
846
851 {
853
857 "any data in tile group (%d bits read).\n",
pos);
859 }
860 // Must be byte-aligned at this point.
862
866
869
870 return 0;
871 }
872
875 {
879 int err, start_pos, end_pos;
880
882 if (err < 0)
883 return err;
885
887 if (err < 0)
888 return err;
889
890 err = cbs_av1_read_obu_header(
ctx, &gbc, &obu->
header);
891 if (err < 0)
892 return err;
894
896 uint64_t obu_size;
898 if (err < 0)
899 return err;
901 } else {
906 }
908 }
909
911
916 int in_temporal_layer =
918 int in_spatial_layer =
920 if (!in_temporal_layer || !in_spatial_layer) {
921 return AVERROR(EAGAIN);
// drop_obu()
922 }
923 }
924 }
925
928 {
929 err = cbs_av1_read_sequence_header_obu(
ctx, &gbc,
931 if (err < 0)
932 return err;
933
936
939 "Must not be higher than %u.\n",
942 }
944 }
945
948
953 }
954 break;
956 {
957 err = cbs_av1_read_temporal_delimiter_obu(
ctx, &gbc);
958 if (err < 0)
959 return err;
960 }
961 break;
964 {
965 err = cbs_av1_read_frame_header_obu(
ctx, &gbc,
970 if (err < 0)
971 return err;
972 }
973 break;
975 {
976 err = cbs_av1_read_tile_group_obu(
ctx, &gbc,
978 if (err < 0)
979 return err;
980
983 if (err < 0)
984 return err;
985 }
986 break;
988 {
989 err = cbs_av1_read_frame_obu(
ctx, &gbc, &obu->
obu.
frame,
991 if (err < 0)
992 return err;
993
996 if (err < 0)
997 return err;
998 }
999 break;
1001 {
1002 err = cbs_av1_read_tile_list_obu(
ctx, &gbc,
1004 if (err < 0)
1005 return err;
1006
1009 if (err < 0)
1010 return err;
1011 }
1012 break;
1014 {
1016 if (err < 0)
1017 return err;
1018 }
1019 break;
1021 {
1022 err = cbs_av1_read_padding_obu(
ctx, &gbc, &obu->
obu.
padding);
1023 if (err < 0)
1024 return err;
1025 }
1026 break;
1027 default:
1029 }
1030
1033
1038 int nb_bits = obu->
obu_size * 8 + start_pos - end_pos;
1039
1040 if (nb_bits <= 0)
1042
1043 err = cbs_av1_read_trailing_bits(
ctx, &gbc, nb_bits);
1044 if (err < 0)
1045 return err;
1046 }
1047
1048 return 0;
1049 }
1050
1054 {
1059 size_t header_size;
1060 int err, start_pos, end_pos, data_pos;
1062
1063 // OBUs in the normal bitstream format must contain a size field
1064 // in every OBU (in annex B it is optional, but we don't support
1065 // writing that).
1067 av1ctx = *priv;
1068
1073 }
1074
1080 }
1081 }
1082
1083 err = cbs_av1_write_obu_header(
ctx, pbc, &obu->
header);
1084 if (err < 0)
1086
1088 pbc_tmp = *pbc;
1089 // Add space for the size field to fill later.
1092 }
1093
1096
1099 {
1100 err = cbs_av1_write_sequence_header_obu(
ctx, pbc,
1102 if (err < 0)
1104
1107
1109 if (err < 0)
1111
1116 }
1117
1119 }
1120 break;
1122 {
1123 err = cbs_av1_write_temporal_delimiter_obu(
ctx, pbc);
1124 if (err < 0)
1126 }
1127 break;
1130 {
1131 err = cbs_av1_write_frame_header_obu(
ctx, pbc,
1136 if (err < 0)
1138 }
1139 break;
1141 {
1142 err = cbs_av1_write_tile_group_obu(
ctx, pbc,
1144 if (err < 0)
1146
1148 }
1149 break;
1151 {
1153 if (err < 0)
1155
1157 }
1158 break;
1160 {
1162 if (err < 0)
1164
1166 }
1167 break;
1169 {
1171 if (err < 0)
1173 }
1174 break;
1176 {
1177 err = cbs_av1_write_padding_obu(
ctx, pbc, &obu->
obu.
padding);
1178 if (err < 0)
1180 }
1181 break;
1182 default:
1185 }
1186
1188 header_size = (end_pos - start_pos + 7) / 8;
1191 } else if (header_size > 0) {
1192 // Add trailing bits and recalculate.
1193 err = cbs_av1_write_trailing_bits(
ctx, pbc, 8 - end_pos % 8);
1194 if (err < 0)
1197 obu->
obu_size = header_size = (end_pos - start_pos + 7) / 8;
1198 } else {
1199 // Empty OBU.
1201 }
1202
1204 // Must now be byte-aligned.
1207 start_pos /= 8;
1208 end_pos /= 8;
1209
1210 *pbc = pbc_tmp;
1212 if (err < 0)
1214
1218
1222 *priv = av1ctx;
1223
1225 }
1226
1228 memmove(pbc->
buf + data_pos,
1229 pbc->
buf + start_pos, header_size);
1231
1233 memcpy(pbc->
buf + data_pos + header_size,
1234 td->data,
td->data_size);
1236 }
1237 }
1238
1239 // OBU data must be byte-aligned.
1241 err = 0;
1242
1246
1247 return err;
1248 }
1249
1252 {
1255
1259
1265
1271 }
1274
1275 return 0;
1276 }
1277
1279 {
1281
1285
1286 memset(priv->
ref, 0,
sizeof(priv->
ref));
1290 }
1291
1293 {
1295
1298 }
1299
1301 {
1304
1307
1308 switch (
md->metadata_type) {
1311 break;
1312 }
1314 }
1315
1321
1330
1333
1335 };
1336
1337 #define OFFSET(x) offsetof(CodedBitstreamAV1Context, x)
1339 { "operating_point", "Set operating point to select layers to parse from a scalable bitstream",
1342 };
1343
1349 };
1350
1353
1356
1358
1363
1366 };