| Line | Branch | Exec | Source |
|---|---|---|---|
| 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 | |||
| 19 | 8454 | static int FUNC(rbsp_trailing_bits)(CodedBitstreamContext *ctx, RWContext *rw) | |
| 20 | { | ||
| 21 | int err; | ||
| 22 | |||
| 23 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 4227 times.
|
8454 | fixed(1, rbsp_stop_one_bit, 1); |
| 24 |
2/2✓ Branch 1 taken 26325 times.
✓ Branch 2 taken 4227 times.
|
61104 | while (byte_alignment(rw) != 0) |
| 25 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 26325 times.
|
52650 | fixed(1, rbsp_alignment_zero_bit, 0); |
| 26 | |||
| 27 | 8454 | return 0; | |
| 28 | } | ||
| 29 | |||
| 30 | 35192 | static int FUNC(nal_unit_header)(CodedBitstreamContext *ctx, RWContext *rw, | |
| 31 | H265RawNALUnitHeader *current, | ||
| 32 | int expected_nal_unit_type) | ||
| 33 | { | ||
| 34 | int err; | ||
| 35 | |||
| 36 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 17596 times.
|
35192 | fixed(1, forbidden_zero_bit, 0); |
| 37 | |||
| 38 |
2/2✓ Branch 0 taken 4227 times.
✓ Branch 1 taken 13369 times.
|
35192 | if (expected_nal_unit_type >= 0) |
| 39 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 4227 times.
|
8454 | u(6, nal_unit_type, expected_nal_unit_type, |
| 40 | expected_nal_unit_type); | ||
| 41 | else | ||
| 42 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 13369 times.
|
26738 | ub(6, nal_unit_type); |
| 43 | |||
| 44 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 17596 times.
|
35192 | u(6, nuh_layer_id, 0, 62); |
| 45 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 17596 times.
|
35192 | u(3, nuh_temporal_id_plus1, 1, 7); |
| 46 | |||
| 47 | 35192 | return 0; | |
| 48 | } | ||
| 49 | |||
| 50 | 26738 | static int FUNC(byte_alignment)(CodedBitstreamContext *ctx, RWContext *rw) | |
| 51 | { | ||
| 52 | int err; | ||
| 53 | |||
| 54 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 13369 times.
|
26738 | fixed(1, alignment_bit_equal_to_one, 1); |
| 55 |
2/2✓ Branch 1 taken 53451 times.
✓ Branch 2 taken 13369 times.
|
133640 | while (byte_alignment(rw) != 0) |
| 56 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 53451 times.
|
106902 | fixed(1, alignment_bit_equal_to_zero, 0); |
| 57 | |||
| 58 | 26738 | return 0; | |
| 59 | } | ||
| 60 | |||
| 61 | ✗ | static int FUNC(extension_data)(CodedBitstreamContext *ctx, RWContext *rw, | |
| 62 | H265RawExtensionData *current) | ||
| 63 | { | ||
| 64 | int err; | ||
| 65 | size_t k; | ||
| 66 | #ifdef READ | ||
| 67 | GetBitContext start; | ||
| 68 | uint8_t bit; | ||
| 69 | ✗ | start = *rw; | |
| 70 | ✗ | for (k = 0; cbs_h2645_read_more_rbsp_data(rw); k++) | |
| 71 | ✗ | skip_bits(rw, 1); | |
| 72 | ✗ | current->bit_length = k; | |
| 73 | ✗ | if (k > 0) { | |
| 74 | ✗ | *rw = start; | |
| 75 | ✗ | allocate(current->data, (current->bit_length + 7) / 8); | |
| 76 | ✗ | for (k = 0; k < current->bit_length; k++) { | |
| 77 | ✗ | xu(1, extension_data, bit, 0, 1, 0); | |
| 78 | ✗ | current->data[k / 8] |= bit << (7 - k % 8); | |
| 79 | } | ||
| 80 | } | ||
| 81 | #else | ||
| 82 | ✗ | for (k = 0; k < current->bit_length; k++) | |
| 83 | ✗ | xu(1, extension_data, current->data[k / 8] >> (7 - k % 8) & 1, 0, 1, 0); | |
| 84 | #endif | ||
| 85 | ✗ | return 0; | |
| 86 | } | ||
| 87 | |||
| 88 | 488 | static int FUNC(profile_tier_level)(CodedBitstreamContext *ctx, RWContext *rw, | |
| 89 | H265RawProfileTierLevel *current, | ||
| 90 | int profile_present_flag, | ||
| 91 | int max_num_sub_layers_minus1) | ||
| 92 | { | ||
| 93 | int err, i, j; | ||
| 94 | |||
| 95 |
1/2✓ Branch 0 taken 244 times.
✗ Branch 1 not taken.
|
488 | if (profile_present_flag) { |
| 96 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 244 times.
|
488 | u(2, general_profile_space, 0, 0); |
| 97 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 244 times.
|
488 | flag(general_tier_flag); |
| 98 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 244 times.
|
488 | ub(5, general_profile_idc); |
| 99 | |||
| 100 |
2/2✓ Branch 0 taken 7808 times.
✓ Branch 1 taken 244 times.
|
16104 | for (j = 0; j < 32; j++) |
| 101 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 7808 times.
|
15616 | flags(general_profile_compatibility_flag[j], 1, j); |
| 102 | |||
| 103 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 244 times.
|
488 | flag(general_progressive_source_flag); |
| 104 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 244 times.
|
488 | flag(general_interlaced_source_flag); |
| 105 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 244 times.
|
488 | flag(general_non_packed_constraint_flag); |
| 106 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 244 times.
|
488 | flag(general_frame_only_constraint_flag); |
| 107 | |||
| 108 | #define profile_compatible(x) (current->general_profile_idc == (x) || \ | ||
| 109 | current->general_profile_compatibility_flag[x]) | ||
| 110 |
4/8✓ Branch 0 taken 244 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 244 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 244 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 244 times.
✗ Branch 7 not taken.
|
488 | if (profile_compatible(4) || profile_compatible(5) || |
| 111 |
4/8✓ Branch 0 taken 244 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 244 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 244 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 244 times.
✗ Branch 7 not taken.
|
488 | profile_compatible(6) || profile_compatible(7) || |
| 112 |
4/8✓ Branch 0 taken 244 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 244 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 244 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 244 times.
✗ Branch 7 not taken.
|
488 | profile_compatible(8) || profile_compatible(9) || |
| 113 |
4/8✓ Branch 0 taken 244 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 244 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 244 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 244 times.
|
488 | profile_compatible(10) || profile_compatible(11)) { |
| 114 | ✗ | flag(general_max_12bit_constraint_flag); | |
| 115 | ✗ | flag(general_max_10bit_constraint_flag); | |
| 116 | ✗ | flag(general_max_8bit_constraint_flag); | |
| 117 | ✗ | flag(general_max_422chroma_constraint_flag); | |
| 118 | ✗ | flag(general_max_420chroma_constraint_flag); | |
| 119 | ✗ | flag(general_max_monochrome_constraint_flag); | |
| 120 | ✗ | flag(general_intra_constraint_flag); | |
| 121 | ✗ | flag(general_one_picture_only_constraint_flag); | |
| 122 | ✗ | flag(general_lower_bit_rate_constraint_flag); | |
| 123 | |||
| 124 | ✗ | if (profile_compatible(5) || profile_compatible(9) || | |
| 125 | ✗ | profile_compatible(10) || profile_compatible(11)) { | |
| 126 | ✗ | flag(general_max_14bit_constraint_flag); | |
| 127 | ✗ | fixed(24, general_reserved_zero_33bits, 0); | |
| 128 | ✗ | fixed( 9, general_reserved_zero_33bits, 0); | |
| 129 | } else { | ||
| 130 | ✗ | fixed(24, general_reserved_zero_34bits, 0); | |
| 131 | ✗ | fixed(10, general_reserved_zero_34bits, 0); | |
| 132 | } | ||
| 133 |
4/4✓ Branch 0 taken 212 times.
✓ Branch 1 taken 32 times.
✓ Branch 2 taken 156 times.
✓ Branch 3 taken 56 times.
|
488 | } else if (profile_compatible(2)) { |
| 134 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 188 times.
|
376 | fixed(7, general_reserved_zero_7bits, 0); |
| 135 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 188 times.
|
376 | flag(general_one_picture_only_constraint_flag); |
| 136 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 188 times.
|
376 | fixed(24, general_reserved_zero_35bits, 0); |
| 137 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 188 times.
|
376 | fixed(11, general_reserved_zero_35bits, 0); |
| 138 | } else { | ||
| 139 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 56 times.
|
112 | fixed(24, general_reserved_zero_43bits, 0); |
| 140 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 56 times.
|
112 | fixed(19, general_reserved_zero_43bits, 0); |
| 141 | } | ||
| 142 | |||
| 143 |
4/8✓ Branch 0 taken 32 times.
✓ Branch 1 taken 212 times.
✓ Branch 2 taken 32 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 32 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
488 | if (profile_compatible(1) || profile_compatible(2) || |
| 144 | ✗ | profile_compatible(3) || profile_compatible(4) || | |
| 145 | ✗ | profile_compatible(5) || profile_compatible(9) || | |
| 146 | ✗ | profile_compatible(11)) { | |
| 147 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 244 times.
|
488 | flag(general_inbld_flag); |
| 148 | } else { | ||
| 149 | ✗ | fixed(1, general_reserved_zero_bit, 0); | |
| 150 | } | ||
| 151 | #undef profile_compatible | ||
| 152 | } | ||
| 153 | |||
| 154 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 244 times.
|
488 | ub(8, general_level_idc); |
| 155 | |||
| 156 |
2/2✓ Branch 0 taken 96 times.
✓ Branch 1 taken 244 times.
|
680 | for (i = 0; i < max_num_sub_layers_minus1; i++) { |
| 157 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 96 times.
|
192 | flags(sub_layer_profile_present_flag[i], 1, i); |
| 158 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 96 times.
|
192 | flags(sub_layer_level_present_flag[i], 1, i); |
| 159 | } | ||
| 160 | |||
| 161 |
2/2✓ Branch 0 taken 48 times.
✓ Branch 1 taken 196 times.
|
488 | if (max_num_sub_layers_minus1 > 0) { |
| 162 |
2/2✓ Branch 0 taken 288 times.
✓ Branch 1 taken 48 times.
|
672 | for (i = max_num_sub_layers_minus1; i < 8; i++) |
| 163 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 288 times.
|
576 | fixed(2, reserved_zero_2bits, 0); |
| 164 | } | ||
| 165 | |||
| 166 |
2/2✓ Branch 0 taken 96 times.
✓ Branch 1 taken 244 times.
|
680 | for (i = 0; i < max_num_sub_layers_minus1; i++) { |
| 167 |
2/2✓ Branch 0 taken 16 times.
✓ Branch 1 taken 80 times.
|
192 | if (current->sub_layer_profile_present_flag[i]) { |
| 168 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 16 times.
|
32 | us(2, sub_layer_profile_space[i], 0, 0, 1, i); |
| 169 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 16 times.
|
32 | flags(sub_layer_tier_flag[i], 1, i); |
| 170 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 16 times.
|
32 | ubs(5, sub_layer_profile_idc[i], 1, i); |
| 171 | |||
| 172 |
2/2✓ Branch 0 taken 512 times.
✓ Branch 1 taken 16 times.
|
1056 | for (j = 0; j < 32; j++) |
| 173 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 512 times.
|
1024 | flags(sub_layer_profile_compatibility_flag[i][j], 2, i, j); |
| 174 | |||
| 175 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 16 times.
|
32 | flags(sub_layer_progressive_source_flag[i], 1, i); |
| 176 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 16 times.
|
32 | flags(sub_layer_interlaced_source_flag[i], 1, i); |
| 177 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 16 times.
|
32 | flags(sub_layer_non_packed_constraint_flag[i], 1, i); |
| 178 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 16 times.
|
32 | flags(sub_layer_frame_only_constraint_flag[i], 1, i); |
| 179 | |||
| 180 | #define profile_compatible(x) (current->sub_layer_profile_idc[i] == (x) || \ | ||
| 181 | current->sub_layer_profile_compatibility_flag[i][x]) | ||
| 182 |
4/8✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 16 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 16 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 16 times.
✗ Branch 7 not taken.
|
32 | if (profile_compatible(4) || profile_compatible(5) || |
| 183 |
4/8✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 16 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 16 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 16 times.
✗ Branch 7 not taken.
|
32 | profile_compatible(6) || profile_compatible(7) || |
| 184 |
4/8✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 16 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 16 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 16 times.
✗ Branch 7 not taken.
|
32 | profile_compatible(8) || profile_compatible(9) || |
| 185 |
4/8✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 16 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 16 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 16 times.
|
32 | profile_compatible(10) || profile_compatible(11)) { |
| 186 | ✗ | flags(sub_layer_max_12bit_constraint_flag[i], 1, i); | |
| 187 | ✗ | flags(sub_layer_max_10bit_constraint_flag[i], 1, i); | |
| 188 | ✗ | flags(sub_layer_max_8bit_constraint_flag[i], 1, i); | |
| 189 | ✗ | flags(sub_layer_max_422chroma_constraint_flag[i], 1, i); | |
| 190 | ✗ | flags(sub_layer_max_420chroma_constraint_flag[i], 1, i); | |
| 191 | ✗ | flags(sub_layer_max_monochrome_constraint_flag[i], 1, i); | |
| 192 | ✗ | flags(sub_layer_intra_constraint_flag[i], 1, i); | |
| 193 | ✗ | flags(sub_layer_one_picture_only_constraint_flag[i], 1, i); | |
| 194 | ✗ | flags(sub_layer_lower_bit_rate_constraint_flag[i], 1, i); | |
| 195 | |||
| 196 | ✗ | if (profile_compatible(5) || profile_compatible(9) || | |
| 197 | ✗ | profile_compatible(10) || profile_compatible(11)) { | |
| 198 | ✗ | flags(sub_layer_max_14bit_constraint_flag[i], 1, i); | |
| 199 | ✗ | fixed(24, sub_layer_reserved_zero_33bits, 0); | |
| 200 | ✗ | fixed( 9, sub_layer_reserved_zero_33bits, 0); | |
| 201 | } else { | ||
| 202 | ✗ | fixed(24, sub_layer_reserved_zero_34bits, 0); | |
| 203 | ✗ | fixed(10, sub_layer_reserved_zero_34bits, 0); | |
| 204 | } | ||
| 205 |
2/4✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 16 times.
|
32 | } else if (profile_compatible(2)) { |
| 206 | ✗ | fixed(7, sub_layer_reserved_zero_7bits, 0); | |
| 207 | ✗ | flags(sub_layer_one_picture_only_constraint_flag[i], 1, i); | |
| 208 | ✗ | fixed(24, sub_layer_reserved_zero_43bits, 0); | |
| 209 | ✗ | fixed(11, sub_layer_reserved_zero_43bits, 0); | |
| 210 | } else { | ||
| 211 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 16 times.
|
32 | fixed(24, sub_layer_reserved_zero_43bits, 0); |
| 212 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 16 times.
|
32 | fixed(19, sub_layer_reserved_zero_43bits, 0); |
| 213 | } | ||
| 214 | |||
| 215 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
32 | if (profile_compatible(1) || profile_compatible(2) || |
| 216 | ✗ | profile_compatible(3) || profile_compatible(4) || | |
| 217 | ✗ | profile_compatible(5) || profile_compatible(9) || | |
| 218 | ✗ | profile_compatible(11)) { | |
| 219 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 16 times.
|
32 | flags(sub_layer_inbld_flag[i], 1, i); |
| 220 | } else { | ||
| 221 | ✗ | fixed(1, sub_layer_reserved_zero_bit, 0); | |
| 222 | } | ||
| 223 | #undef profile_compatible | ||
| 224 | } | ||
| 225 |
2/2✓ Branch 0 taken 16 times.
✓ Branch 1 taken 80 times.
|
192 | if (current->sub_layer_level_present_flag[i]) |
| 226 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 16 times.
|
32 | ubs(8, sub_layer_level_idc[i], 1, i); |
| 227 | } | ||
| 228 | |||
| 229 | 488 | return 0; | |
| 230 | } | ||
| 231 | |||
| 232 | 32 | static int FUNC(sub_layer_hrd_parameters)(CodedBitstreamContext *ctx, RWContext *rw, | |
| 233 | H265RawHRDParameters *hrd, | ||
| 234 | int nal, int sub_layer_id) | ||
| 235 | { | ||
| 236 | H265RawSubLayerHRDParameters *current; | ||
| 237 | int err, i; | ||
| 238 | |||
| 239 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
|
32 | if (nal) |
| 240 | 16 | current = &hrd->nal_sub_layer_hrd_parameters[sub_layer_id]; | |
| 241 | else | ||
| 242 | 16 | current = &hrd->vcl_sub_layer_hrd_parameters[sub_layer_id]; | |
| 243 | |||
| 244 |
2/2✓ Branch 0 taken 16 times.
✓ Branch 1 taken 16 times.
|
64 | for (i = 0; i <= hrd->cpb_cnt_minus1[sub_layer_id]; i++) { |
| 245 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 16 times.
|
32 | ues(bit_rate_value_minus1[i], 0, UINT32_MAX - 1, 1, i); |
| 246 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 16 times.
|
32 | ues(cpb_size_value_minus1[i], 0, UINT32_MAX - 1, 1, i); |
| 247 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
|
32 | if (hrd->sub_pic_hrd_params_present_flag) { |
| 248 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 8 times.
|
16 | ues(cpb_size_du_value_minus1[i], 0, UINT32_MAX - 1, 1, i); |
| 249 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 8 times.
|
16 | ues(bit_rate_du_value_minus1[i], 0, UINT32_MAX - 1, 1, i); |
| 250 | } | ||
| 251 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 16 times.
|
32 | flags(cbr_flag[i], 1, i); |
| 252 | } | ||
| 253 | |||
| 254 | 32 | return 0; | |
| 255 | } | ||
| 256 | |||
| 257 | 16 | static int FUNC(hrd_parameters)(CodedBitstreamContext *ctx, RWContext *rw, | |
| 258 | H265RawHRDParameters *current, int common_inf_present_flag, | ||
| 259 | int max_num_sub_layers_minus1) | ||
| 260 | { | ||
| 261 | int err, i; | ||
| 262 | |||
| 263 |
1/2✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
|
16 | if (common_inf_present_flag) { |
| 264 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 8 times.
|
16 | flag(nal_hrd_parameters_present_flag); |
| 265 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 8 times.
|
16 | flag(vcl_hrd_parameters_present_flag); |
| 266 | |||
| 267 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
|
16 | if (current->nal_hrd_parameters_present_flag || |
| 268 | ✗ | current->vcl_hrd_parameters_present_flag) { | |
| 269 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 8 times.
|
16 | flag(sub_pic_hrd_params_present_flag); |
| 270 |
2/2✓ Branch 0 taken 4 times.
✓ Branch 1 taken 4 times.
|
16 | if (current->sub_pic_hrd_params_present_flag) { |
| 271 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
|
8 | ub(8, tick_divisor_minus2); |
| 272 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
|
8 | ub(5, du_cpb_removal_delay_increment_length_minus1); |
| 273 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
|
8 | flag(sub_pic_cpb_params_in_pic_timing_sei_flag); |
| 274 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
|
8 | ub(5, dpb_output_delay_du_length_minus1); |
| 275 | } | ||
| 276 | |||
| 277 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 8 times.
|
16 | ub(4, bit_rate_scale); |
| 278 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 8 times.
|
16 | ub(4, cpb_size_scale); |
| 279 |
2/2✓ Branch 0 taken 4 times.
✓ Branch 1 taken 4 times.
|
16 | if (current->sub_pic_hrd_params_present_flag) |
| 280 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
|
8 | ub(4, cpb_size_du_scale); |
| 281 | |||
| 282 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 8 times.
|
16 | ub(5, initial_cpb_removal_delay_length_minus1); |
| 283 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 8 times.
|
16 | ub(5, au_cpb_removal_delay_length_minus1); |
| 284 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 8 times.
|
16 | ub(5, dpb_output_delay_length_minus1); |
| 285 | } else { | ||
| 286 | ✗ | infer(sub_pic_hrd_params_present_flag, 0); | |
| 287 | |||
| 288 | ✗ | infer(initial_cpb_removal_delay_length_minus1, 23); | |
| 289 | ✗ | infer(au_cpb_removal_delay_length_minus1, 23); | |
| 290 | ✗ | infer(dpb_output_delay_length_minus1, 23); | |
| 291 | } | ||
| 292 | } | ||
| 293 | |||
| 294 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
|
32 | for (i = 0; i <= max_num_sub_layers_minus1; i++) { |
| 295 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 8 times.
|
16 | flags(fixed_pic_rate_general_flag[i], 1, i); |
| 296 | |||
| 297 |
2/2✓ Branch 0 taken 4 times.
✓ Branch 1 taken 4 times.
|
16 | if (!current->fixed_pic_rate_general_flag[i]) |
| 298 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
|
8 | flags(fixed_pic_rate_within_cvs_flag[i], 1, i); |
| 299 | else | ||
| 300 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
|
8 | infer(fixed_pic_rate_within_cvs_flag[i], 1); |
| 301 | |||
| 302 |
2/2✓ Branch 0 taken 4 times.
✓ Branch 1 taken 4 times.
|
16 | if (current->fixed_pic_rate_within_cvs_flag[i]) { |
| 303 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
|
8 | ues(elemental_duration_in_tc_minus1[i], 0, 2047, 1, i); |
| 304 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
|
8 | infer(low_delay_hrd_flag[i], 0); |
| 305 | } else | ||
| 306 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
|
8 | flags(low_delay_hrd_flag[i], 1, i); |
| 307 | |||
| 308 |
1/2✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
|
16 | if (!current->low_delay_hrd_flag[i]) |
| 309 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 8 times.
|
16 | ues(cpb_cnt_minus1[i], 0, 31, 1, i); |
| 310 | else | ||
| 311 | ✗ | infer(cpb_cnt_minus1[i], 0); | |
| 312 | |||
| 313 |
1/2✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
|
16 | if (current->nal_hrd_parameters_present_flag) |
| 314 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 8 times.
|
16 | CHECK(FUNC(sub_layer_hrd_parameters)(ctx, rw, current, 0, i)); |
| 315 |
1/2✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
|
16 | if (current->vcl_hrd_parameters_present_flag) |
| 316 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 8 times.
|
16 | CHECK(FUNC(sub_layer_hrd_parameters)(ctx, rw, current, 1, i)); |
| 317 | } | ||
| 318 | |||
| 319 | 16 | return 0; | |
| 320 | } | ||
| 321 | |||
| 322 | 112 | static int FUNC(vui_parameters)(CodedBitstreamContext *ctx, RWContext *rw, | |
| 323 | H265RawVUI *current, const H265RawSPS *sps) | ||
| 324 | { | ||
| 325 | int err; | ||
| 326 | |||
| 327 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 56 times.
|
112 | flag(aspect_ratio_info_present_flag); |
| 328 |
2/2✓ Branch 0 taken 28 times.
✓ Branch 1 taken 28 times.
|
112 | if (current->aspect_ratio_info_present_flag) { |
| 329 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 28 times.
|
56 | ub(8, aspect_ratio_idc); |
| 330 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 28 times.
|
56 | if (current->aspect_ratio_idc == 255) { |
| 331 | ✗ | ub(16, sar_width); | |
| 332 | ✗ | ub(16, sar_height); | |
| 333 | } | ||
| 334 | } else { | ||
| 335 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 16 times.
|
56 | infer(aspect_ratio_idc, 0); |
| 336 | } | ||
| 337 | |||
| 338 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 56 times.
|
112 | flag(overscan_info_present_flag); |
| 339 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 56 times.
|
112 | if (current->overscan_info_present_flag) |
| 340 | ✗ | flag(overscan_appropriate_flag); | |
| 341 | |||
| 342 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 56 times.
|
112 | flag(video_signal_type_present_flag); |
| 343 |
2/2✓ Branch 0 taken 4 times.
✓ Branch 1 taken 52 times.
|
112 | if (current->video_signal_type_present_flag) { |
| 344 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
|
8 | ub(3, video_format); |
| 345 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
|
8 | flag(video_full_range_flag); |
| 346 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
|
8 | flag(colour_description_present_flag); |
| 347 |
1/2✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
|
8 | if (current->colour_description_present_flag) { |
| 348 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
|
8 | ub(8, colour_primaries); |
| 349 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
|
8 | ub(8, transfer_characteristics); |
| 350 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
|
8 | ub(8, matrix_coefficients); |
| 351 | } else { | ||
| 352 | ✗ | infer(colour_primaries, 2); | |
| 353 | ✗ | infer(transfer_characteristics, 2); | |
| 354 | ✗ | infer(matrix_coefficients, 2); | |
| 355 | } | ||
| 356 | } else { | ||
| 357 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 26 times.
|
104 | infer(video_format, 5); |
| 358 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 26 times.
|
104 | infer(video_full_range_flag, 0); |
| 359 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 26 times.
|
104 | infer(colour_primaries, 2); |
| 360 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 26 times.
|
104 | infer(transfer_characteristics, 2); |
| 361 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 26 times.
|
104 | infer(matrix_coefficients, 2); |
| 362 | } | ||
| 363 | |||
| 364 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 56 times.
|
112 | flag(chroma_loc_info_present_flag); |
| 365 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 56 times.
|
112 | if (current->chroma_loc_info_present_flag) { |
| 366 | ✗ | ue(chroma_sample_loc_type_top_field, 0, 5); | |
| 367 | ✗ | ue(chroma_sample_loc_type_bottom_field, 0, 5); | |
| 368 | } else { | ||
| 369 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 30 times.
|
112 | infer(chroma_sample_loc_type_top_field, 0); |
| 370 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 30 times.
|
112 | infer(chroma_sample_loc_type_bottom_field, 0); |
| 371 | } | ||
| 372 | |||
| 373 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 56 times.
|
112 | flag(neutral_chroma_indication_flag); |
| 374 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 56 times.
|
112 | flag(field_seq_flag); |
| 375 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 56 times.
|
112 | flag(frame_field_info_present_flag); |
| 376 | |||
| 377 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 56 times.
|
112 | flag(default_display_window_flag); |
| 378 |
2/2✓ Branch 0 taken 28 times.
✓ Branch 1 taken 28 times.
|
112 | if (current->default_display_window_flag) { |
| 379 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 28 times.
|
56 | ue(def_disp_win_left_offset, 0, 16384); |
| 380 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 28 times.
|
56 | ue(def_disp_win_right_offset, 0, 16384); |
| 381 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 28 times.
|
56 | ue(def_disp_win_top_offset, 0, 16384); |
| 382 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 28 times.
|
56 | ue(def_disp_win_bottom_offset, 0, 16384); |
| 383 | } | ||
| 384 | |||
| 385 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 56 times.
|
112 | flag(vui_timing_info_present_flag); |
| 386 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 48 times.
|
112 | if (current->vui_timing_info_present_flag) { |
| 387 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 8 times.
|
16 | u(32, vui_num_units_in_tick, 1, UINT32_MAX); |
| 388 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 8 times.
|
16 | u(32, vui_time_scale, 1, UINT32_MAX); |
| 389 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 8 times.
|
16 | flag(vui_poc_proportional_to_timing_flag); |
| 390 |
2/2✓ Branch 0 taken 4 times.
✓ Branch 1 taken 4 times.
|
16 | if (current->vui_poc_proportional_to_timing_flag) |
| 391 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
|
8 | ue(vui_num_ticks_poc_diff_one_minus1, 0, UINT32_MAX - 1); |
| 392 | |||
| 393 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 8 times.
|
16 | flag(vui_hrd_parameters_present_flag); |
| 394 |
1/2✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
|
16 | if (current->vui_hrd_parameters_present_flag) { |
| 395 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 8 times.
|
16 | CHECK(FUNC(hrd_parameters)(ctx, rw, ¤t->hrd_parameters, |
| 396 | 1, sps->sps_max_sub_layers_minus1)); | ||
| 397 | } | ||
| 398 | } | ||
| 399 | |||
| 400 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 56 times.
|
112 | flag(bitstream_restriction_flag); |
| 401 |
2/2✓ Branch 0 taken 24 times.
✓ Branch 1 taken 32 times.
|
112 | if (current->bitstream_restriction_flag) { |
| 402 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 24 times.
|
48 | flag(tiles_fixed_structure_flag); |
| 403 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 24 times.
|
48 | flag(motion_vectors_over_pic_boundaries_flag); |
| 404 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 24 times.
|
48 | flag(restricted_ref_pic_lists_flag); |
| 405 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 24 times.
|
48 | ue(min_spatial_segmentation_idc, 0, 4095); |
| 406 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 24 times.
|
48 | ue(max_bytes_per_pic_denom, 0, 16); |
| 407 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 24 times.
|
48 | ue(max_bits_per_min_cu_denom, 0, 16); |
| 408 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 24 times.
|
48 | ue(log2_max_mv_length_horizontal, 0, 16); |
| 409 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 24 times.
|
48 | ue(log2_max_mv_length_vertical, 0, 16); |
| 410 | } else { | ||
| 411 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 18 times.
|
64 | infer(tiles_fixed_structure_flag, 0); |
| 412 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 18 times.
|
64 | infer(motion_vectors_over_pic_boundaries_flag, 1); |
| 413 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 18 times.
|
64 | infer(min_spatial_segmentation_idc, 0); |
| 414 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 18 times.
|
64 | infer(max_bytes_per_pic_denom, 2); |
| 415 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 18 times.
|
64 | infer(max_bits_per_min_cu_denom, 1); |
| 416 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 18 times.
|
64 | infer(log2_max_mv_length_horizontal, 15); |
| 417 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 18 times.
|
64 | infer(log2_max_mv_length_vertical, 15); |
| 418 | } | ||
| 419 | |||
| 420 | 112 | return 0; | |
| 421 | } | ||
| 422 | |||
| 423 | 240 | static int FUNC(vps)(CodedBitstreamContext *ctx, RWContext *rw, | |
| 424 | H265RawVPS *current) | ||
| 425 | { | ||
| 426 | int err, i, j; | ||
| 427 | |||
| 428 | 240 | HEADER("Video Parameter Set"); | |
| 429 | |||
| 430 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 120 times.
|
240 | CHECK(FUNC(nal_unit_header)(ctx, rw, ¤t->nal_unit_header, HEVC_NAL_VPS)); |
| 431 | |||
| 432 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 120 times.
|
240 | ub(4, vps_video_parameter_set_id); |
| 433 | |||
| 434 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 120 times.
|
240 | flag(vps_base_layer_internal_flag); |
| 435 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 120 times.
|
240 | flag(vps_base_layer_available_flag); |
| 436 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 120 times.
|
240 | u(6, vps_max_layers_minus1, 0, HEVC_MAX_LAYERS - 1); |
| 437 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 120 times.
|
240 | u(3, vps_max_sub_layers_minus1, 0, HEVC_MAX_SUB_LAYERS - 1); |
| 438 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 120 times.
|
240 | flag(vps_temporal_id_nesting_flag); |
| 439 | |||
| 440 |
2/2✓ Branch 0 taken 96 times.
✓ Branch 1 taken 24 times.
|
240 | if (current->vps_max_sub_layers_minus1 == 0 && |
| 441 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 96 times.
|
192 | current->vps_temporal_id_nesting_flag != 1) { |
| 442 | ✗ | av_log(ctx->log_ctx, AV_LOG_ERROR, "Invalid stream: " | |
| 443 | "vps_temporal_id_nesting_flag must be 1 if " | ||
| 444 | "vps_max_sub_layers_minus1 is 0.\n"); | ||
| 445 | ✗ | return AVERROR_INVALIDDATA; | |
| 446 | } | ||
| 447 | |||
| 448 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 120 times.
|
240 | fixed(16, vps_reserved_0xffff_16bits, 0xffff); |
| 449 | |||
| 450 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 120 times.
|
240 | CHECK(FUNC(profile_tier_level)(ctx, rw, ¤t->profile_tier_level, |
| 451 | 1, current->vps_max_sub_layers_minus1)); | ||
| 452 | |||
| 453 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 120 times.
|
240 | flag(vps_sub_layer_ordering_info_present_flag); |
| 454 | 240 | for (i = (current->vps_sub_layer_ordering_info_present_flag ? | |
| 455 |
2/2✓ Branch 0 taken 24 times.
✓ Branch 1 taken 96 times.
|
240 | 0 : current->vps_max_sub_layers_minus1); |
| 456 |
2/2✓ Branch 0 taken 128 times.
✓ Branch 1 taken 120 times.
|
496 | i <= current->vps_max_sub_layers_minus1; i++) { |
| 457 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 128 times.
|
256 | ues(vps_max_dec_pic_buffering_minus1[i], |
| 458 | 0, HEVC_MAX_DPB_SIZE - 1, 1, i); | ||
| 459 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 128 times.
|
256 | ues(vps_max_num_reorder_pics[i], |
| 460 | 0, current->vps_max_dec_pic_buffering_minus1[i], 1, i); | ||
| 461 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 128 times.
|
256 | ues(vps_max_latency_increase_plus1[i], |
| 462 | 0, UINT32_MAX - 1, 1, i); | ||
| 463 | } | ||
| 464 |
2/2✓ Branch 0 taken 24 times.
✓ Branch 1 taken 96 times.
|
240 | if (!current->vps_sub_layer_ordering_info_present_flag) { |
| 465 |
2/2✓ Branch 0 taken 40 times.
✓ Branch 1 taken 24 times.
|
128 | for (i = 0; i < current->vps_max_sub_layers_minus1; i++) { |
| 466 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 20 times.
|
80 | infer(vps_max_dec_pic_buffering_minus1[i], |
| 467 | current->vps_max_dec_pic_buffering_minus1[current->vps_max_sub_layers_minus1]); | ||
| 468 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 20 times.
|
80 | infer(vps_max_num_reorder_pics[i], |
| 469 | current->vps_max_num_reorder_pics[current->vps_max_sub_layers_minus1]); | ||
| 470 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 20 times.
|
80 | infer(vps_max_latency_increase_plus1[i], |
| 471 | current->vps_max_latency_increase_plus1[current->vps_max_sub_layers_minus1]); | ||
| 472 | } | ||
| 473 | } | ||
| 474 | |||
| 475 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 120 times.
|
240 | u(6, vps_max_layer_id, 0, HEVC_MAX_LAYERS - 1); |
| 476 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 120 times.
|
240 | ue(vps_num_layer_sets_minus1, 0, HEVC_MAX_LAYER_SETS - 1); |
| 477 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 120 times.
|
240 | for (i = 1; i <= current->vps_num_layer_sets_minus1; i++) { |
| 478 | ✗ | for (j = 0; j <= current->vps_max_layer_id; j++) | |
| 479 | ✗ | flags(layer_id_included_flag[i][j], 2, i, j); | |
| 480 | } | ||
| 481 |
2/2✓ Branch 0 taken 120 times.
✓ Branch 1 taken 120 times.
|
480 | for (j = 0; j <= current->vps_max_layer_id; j++) |
| 482 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 60 times.
|
240 | infer(layer_id_included_flag[0][j], j == 0); |
| 483 | |||
| 484 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 120 times.
|
240 | flag(vps_timing_info_present_flag); |
| 485 |
2/2✓ Branch 0 taken 4 times.
✓ Branch 1 taken 116 times.
|
240 | if (current->vps_timing_info_present_flag) { |
| 486 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
|
8 | u(32, vps_num_units_in_tick, 1, UINT32_MAX); |
| 487 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
|
8 | u(32, vps_time_scale, 1, UINT32_MAX); |
| 488 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
|
8 | flag(vps_poc_proportional_to_timing_flag); |
| 489 |
1/2✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
|
8 | if (current->vps_poc_proportional_to_timing_flag) |
| 490 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
|
8 | ue(vps_num_ticks_poc_diff_one_minus1, 0, UINT32_MAX - 1); |
| 491 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
|
8 | ue(vps_num_hrd_parameters, 0, current->vps_num_layer_sets_minus1 + 1); |
| 492 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 4 times.
|
8 | for (i = 0; i < current->vps_num_hrd_parameters; i++) { |
| 493 | ✗ | ues(hrd_layer_set_idx[i], | |
| 494 | current->vps_base_layer_internal_flag ? 0 : 1, | ||
| 495 | current->vps_num_layer_sets_minus1, 1, i); | ||
| 496 | ✗ | if (i > 0) | |
| 497 | ✗ | flags(cprms_present_flag[i], 1, i); | |
| 498 | else | ||
| 499 | ✗ | infer(cprms_present_flag[0], 1); | |
| 500 | |||
| 501 | ✗ | CHECK(FUNC(hrd_parameters)(ctx, rw, ¤t->hrd_parameters[i], | |
| 502 | current->cprms_present_flag[i], | ||
| 503 | current->vps_max_sub_layers_minus1)); | ||
| 504 | } | ||
| 505 | } | ||
| 506 | |||
| 507 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 120 times.
|
240 | flag(vps_extension_flag); |
| 508 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 120 times.
|
240 | if (current->vps_extension_flag) |
| 509 | ✗ | CHECK(FUNC(extension_data)(ctx, rw, ¤t->extension_data)); | |
| 510 | |||
| 511 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 120 times.
|
240 | CHECK(FUNC(rbsp_trailing_bits)(ctx, rw)); |
| 512 | |||
| 513 | 240 | return 0; | |
| 514 | } | ||
| 515 | |||
| 516 | 9722 | static int FUNC(st_ref_pic_set)(CodedBitstreamContext *ctx, RWContext *rw, | |
| 517 | H265RawSTRefPicSet *current, int st_rps_idx, | ||
| 518 | const H265RawSPS *sps) | ||
| 519 | { | ||
| 520 | int err, i, j; | ||
| 521 | |||
| 522 |
2/2✓ Branch 0 taken 4689 times.
✓ Branch 1 taken 172 times.
|
9722 | if (st_rps_idx != 0) |
| 523 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 4689 times.
|
9378 | flag(inter_ref_pic_set_prediction_flag); |
| 524 | else | ||
| 525 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 86 times.
|
344 | infer(inter_ref_pic_set_prediction_flag, 0); |
| 526 | |||
| 527 |
2/2✓ Branch 0 taken 1277 times.
✓ Branch 1 taken 3584 times.
|
9722 | if (current->inter_ref_pic_set_prediction_flag) { |
| 528 | unsigned int ref_rps_idx, num_delta_pocs, num_ref_pics; | ||
| 529 | const H265RawSTRefPicSet *ref; | ||
| 530 | int delta_rps, d_poc; | ||
| 531 | int ref_delta_poc_s0[HEVC_MAX_REFS], ref_delta_poc_s1[HEVC_MAX_REFS]; | ||
| 532 | int delta_poc_s0[HEVC_MAX_REFS], delta_poc_s1[HEVC_MAX_REFS]; | ||
| 533 | uint8_t used_by_curr_pic_s0[HEVC_MAX_REFS], | ||
| 534 | used_by_curr_pic_s1[HEVC_MAX_REFS]; | ||
| 535 | |||
| 536 |
2/2✓ Branch 0 taken 409 times.
✓ Branch 1 taken 868 times.
|
2554 | if (st_rps_idx == sps->num_short_term_ref_pic_sets) |
| 537 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 409 times.
|
818 | ue(delta_idx_minus1, 0, st_rps_idx - 1); |
| 538 | else | ||
| 539 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 434 times.
|
1736 | infer(delta_idx_minus1, 0); |
| 540 | |||
| 541 | 2554 | ref_rps_idx = st_rps_idx - (current->delta_idx_minus1 + 1); | |
| 542 | 2554 | ref = &sps->st_ref_pic_set[ref_rps_idx]; | |
| 543 | 2554 | num_delta_pocs = ref->num_negative_pics + ref->num_positive_pics; | |
| 544 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1277 times.
|
2554 | av_assert0(num_delta_pocs < HEVC_MAX_DPB_SIZE); |
| 545 | |||
| 546 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1277 times.
|
2554 | flag(delta_rps_sign); |
| 547 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1277 times.
|
2554 | ue(abs_delta_rps_minus1, 0, INT16_MAX); |
| 548 | 2554 | delta_rps = (1 - 2 * current->delta_rps_sign) * | |
| 549 | 2554 | (current->abs_delta_rps_minus1 + 1); | |
| 550 | |||
| 551 | 2554 | num_ref_pics = 0; | |
| 552 |
2/2✓ Branch 0 taken 5598 times.
✓ Branch 1 taken 1277 times.
|
13750 | for (j = 0; j <= num_delta_pocs; j++) { |
| 553 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 5598 times.
|
11196 | flags(used_by_curr_pic_flag[j], 1, j); |
| 554 |
2/2✓ Branch 0 taken 1268 times.
✓ Branch 1 taken 4330 times.
|
11196 | if (!current->used_by_curr_pic_flag[j]) |
| 555 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1268 times.
|
2536 | flags(use_delta_flag[j], 1, j); |
| 556 | else | ||
| 557 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 2129 times.
|
8660 | infer(use_delta_flag[j], 1); |
| 558 |
2/2✓ Branch 0 taken 4330 times.
✓ Branch 1 taken 1268 times.
|
11196 | if (current->use_delta_flag[j]) |
| 559 | 8660 | ++num_ref_pics; | |
| 560 | } | ||
| 561 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1277 times.
|
2554 | if (num_ref_pics >= HEVC_MAX_DPB_SIZE) { |
| 562 | ✗ | av_log(ctx->log_ctx, AV_LOG_ERROR, "Invalid stream: " | |
| 563 | "short-term ref pic set %d " | ||
| 564 | "contains too many pictures.\n", st_rps_idx); | ||
| 565 | ✗ | return AVERROR_INVALIDDATA; | |
| 566 | } | ||
| 567 | |||
| 568 | // Since the stored form of an RPS here is actually the delta-step | ||
| 569 | // form used when inter_ref_pic_set_prediction_flag is not set, we | ||
| 570 | // need to reconstruct that here in order to be able to refer to | ||
| 571 | // the RPS later (which is required for parsing, because we don't | ||
| 572 | // even know what syntax elements appear without it). Therefore, | ||
| 573 | // this code takes the delta-step form of the reference set, turns | ||
| 574 | // it into the delta-array form, applies the prediction process of | ||
| 575 | // 7.4.8, converts the result back to the delta-step form, and | ||
| 576 | // stores that as the current set for future use. Note that the | ||
| 577 | // inferences here mean that writers using prediction will need | ||
| 578 | // to fill in the delta-step values correctly as well - since the | ||
| 579 | // whole RPS prediction process is somewhat overly sophisticated, | ||
| 580 | // this hopefully forms a useful check for them to ensure their | ||
| 581 | // predicted form actually matches what was intended rather than | ||
| 582 | // an onerous additional requirement. | ||
| 583 | |||
| 584 | 2554 | d_poc = 0; | |
| 585 |
2/2✓ Branch 0 taken 2852 times.
✓ Branch 1 taken 1277 times.
|
8258 | for (i = 0; i < ref->num_negative_pics; i++) { |
| 586 | 5704 | d_poc -= ref->delta_poc_s0_minus1[i] + 1; | |
| 587 | 5704 | ref_delta_poc_s0[i] = d_poc; | |
| 588 | } | ||
| 589 | 2554 | d_poc = 0; | |
| 590 |
2/2✓ Branch 0 taken 1469 times.
✓ Branch 1 taken 1277 times.
|
5492 | for (i = 0; i < ref->num_positive_pics; i++) { |
| 591 | 2938 | d_poc += ref->delta_poc_s1_minus1[i] + 1; | |
| 592 | 2938 | ref_delta_poc_s1[i] = d_poc; | |
| 593 | } | ||
| 594 | |||
| 595 | 2554 | i = 0; | |
| 596 |
2/2✓ Branch 0 taken 1469 times.
✓ Branch 1 taken 1277 times.
|
5492 | for (j = ref->num_positive_pics - 1; j >= 0; j--) { |
| 597 | 2938 | d_poc = ref_delta_poc_s1[j] + delta_rps; | |
| 598 |
3/4✓ Branch 0 taken 375 times.
✓ Branch 1 taken 1094 times.
✓ Branch 2 taken 375 times.
✗ Branch 3 not taken.
|
2938 | if (d_poc < 0 && current->use_delta_flag[ref->num_negative_pics + j]) { |
| 599 | 750 | delta_poc_s0[i] = d_poc; | |
| 600 | 750 | used_by_curr_pic_s0[i++] = | |
| 601 | 750 | current->used_by_curr_pic_flag[ref->num_negative_pics + j]; | |
| 602 | } | ||
| 603 | } | ||
| 604 |
4/4✓ Branch 0 taken 631 times.
✓ Branch 1 taken 646 times.
✓ Branch 2 taken 236 times.
✓ Branch 3 taken 395 times.
|
2554 | if (delta_rps < 0 && current->use_delta_flag[num_delta_pocs]) { |
| 605 | 472 | delta_poc_s0[i] = delta_rps; | |
| 606 | 472 | used_by_curr_pic_s0[i++] = | |
| 607 | 472 | current->used_by_curr_pic_flag[num_delta_pocs]; | |
| 608 | } | ||
| 609 |
2/2✓ Branch 0 taken 2852 times.
✓ Branch 1 taken 1277 times.
|
8258 | for (j = 0; j < ref->num_negative_pics; j++) { |
| 610 | 5704 | d_poc = ref_delta_poc_s0[j] + delta_rps; | |
| 611 |
3/4✓ Branch 0 taken 2852 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2098 times.
✓ Branch 3 taken 754 times.
|
5704 | if (d_poc < 0 && current->use_delta_flag[j]) { |
| 612 | 4196 | delta_poc_s0[i] = d_poc; | |
| 613 | 4196 | used_by_curr_pic_s0[i++] = current->used_by_curr_pic_flag[j]; | |
| 614 | } | ||
| 615 | } | ||
| 616 | |||
| 617 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 626 times.
|
2554 | infer(num_negative_pics, i); |
| 618 |
2/2✓ Branch 0 taken 2709 times.
✓ Branch 1 taken 1277 times.
|
7972 | for (i = 0; i < current->num_negative_pics; i++) { |
| 619 |
3/6✓ Branch 0 taken 1480 times.
✓ Branch 1 taken 1229 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 1328 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
5418 | infer(delta_poc_s0_minus1[i], |
| 620 | -(delta_poc_s0[i] - (i == 0 ? 0 : delta_poc_s0[i - 1])) - 1); | ||
| 621 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1328 times.
|
5418 | infer(used_by_curr_pic_s0_flag[i], used_by_curr_pic_s0[i]); |
| 622 | } | ||
| 623 | |||
| 624 | 2554 | i = 0; | |
| 625 |
2/2✓ Branch 0 taken 2852 times.
✓ Branch 1 taken 1277 times.
|
8258 | for (j = ref->num_negative_pics - 1; j >= 0; j--) { |
| 626 | 5704 | d_poc = ref_delta_poc_s0[j] + delta_rps; | |
| 627 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2852 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
5704 | if (d_poc > 0 && current->use_delta_flag[j]) { |
| 628 | ✗ | delta_poc_s1[i] = d_poc; | |
| 629 | ✗ | used_by_curr_pic_s1[i++] = current->used_by_curr_pic_flag[j]; | |
| 630 | } | ||
| 631 | } | ||
| 632 |
4/4✓ Branch 0 taken 646 times.
✓ Branch 1 taken 631 times.
✓ Branch 2 taken 625 times.
✓ Branch 3 taken 21 times.
|
2554 | if (delta_rps > 0 && current->use_delta_flag[num_delta_pocs]) { |
| 633 | 1250 | delta_poc_s1[i] = delta_rps; | |
| 634 | 1250 | used_by_curr_pic_s1[i++] = | |
| 635 | 1250 | current->used_by_curr_pic_flag[num_delta_pocs]; | |
| 636 | } | ||
| 637 |
2/2✓ Branch 0 taken 1469 times.
✓ Branch 1 taken 1277 times.
|
5492 | for (j = 0; j < ref->num_positive_pics; j++) { |
| 638 | 2938 | d_poc = ref_delta_poc_s1[j] + delta_rps; | |
| 639 |
4/4✓ Branch 0 taken 1094 times.
✓ Branch 1 taken 375 times.
✓ Branch 2 taken 996 times.
✓ Branch 3 taken 98 times.
|
2938 | if (d_poc > 0 && current->use_delta_flag[ref->num_negative_pics + j]) { |
| 640 | 1992 | delta_poc_s1[i] = d_poc; | |
| 641 | 1992 | used_by_curr_pic_s1[i++] = | |
| 642 | 1992 | current->used_by_curr_pic_flag[ref->num_negative_pics + j]; | |
| 643 | } | ||
| 644 | } | ||
| 645 | |||
| 646 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 626 times.
|
2554 | infer(num_positive_pics, i); |
| 647 |
2/2✓ Branch 0 taken 1621 times.
✓ Branch 1 taken 1277 times.
|
5796 | for (i = 0; i < current->num_positive_pics; i++) { |
| 648 |
3/6✓ Branch 0 taken 646 times.
✓ Branch 1 taken 975 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 801 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
3242 | infer(delta_poc_s1_minus1[i], |
| 649 | delta_poc_s1[i] - (i == 0 ? 0 : delta_poc_s1[i - 1]) - 1); | ||
| 650 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 801 times.
|
3242 | infer(used_by_curr_pic_s1_flag[i], used_by_curr_pic_s1[i]); |
| 651 | } | ||
| 652 | |||
| 653 | } else { | ||
| 654 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 3584 times.
|
7168 | ue(num_negative_pics, 0, 15); |
| 655 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 3584 times.
|
7168 | ue(num_positive_pics, 0, 15 - current->num_negative_pics); |
| 656 | |||
| 657 |
2/2✓ Branch 0 taken 9840 times.
✓ Branch 1 taken 3584 times.
|
26848 | for (i = 0; i < current->num_negative_pics; i++) { |
| 658 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 9840 times.
|
19680 | ues(delta_poc_s0_minus1[i], 0, INT16_MAX, 1, i); |
| 659 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 9840 times.
|
19680 | flags(used_by_curr_pic_s0_flag[i], 1, i); |
| 660 | } | ||
| 661 | |||
| 662 |
2/2✓ Branch 0 taken 810 times.
✓ Branch 1 taken 3584 times.
|
8788 | for (i = 0; i < current->num_positive_pics; i++) { |
| 663 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 810 times.
|
1620 | ues(delta_poc_s1_minus1[i], 0, INT16_MAX, 1, i); |
| 664 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 810 times.
|
1620 | flags(used_by_curr_pic_s1_flag[i], 1, i); |
| 665 | } | ||
| 666 | } | ||
| 667 | |||
| 668 | 9722 | return 0; | |
| 669 | } | ||
| 670 | |||
| 671 | 352 | static int FUNC(scaling_list_data)(CodedBitstreamContext *ctx, RWContext *rw, | |
| 672 | H265RawScalingList *current) | ||
| 673 | { | ||
| 674 | int sizeId, matrixId; | ||
| 675 | int err, n, i; | ||
| 676 | |||
| 677 |
2/2✓ Branch 0 taken 704 times.
✓ Branch 1 taken 176 times.
|
1760 | for (sizeId = 0; sizeId < 4; sizeId++) { |
| 678 |
4/4✓ Branch 0 taken 352 times.
✓ Branch 1 taken 3168 times.
✓ Branch 2 taken 3520 times.
✓ Branch 3 taken 704 times.
|
8448 | for (matrixId = 0; matrixId < 6; matrixId += (sizeId == 3 ? 3 : 1)) { |
| 679 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 3520 times.
|
7040 | flags(scaling_list_pred_mode_flag[sizeId][matrixId], |
| 680 | 2, sizeId, matrixId); | ||
| 681 |
2/2✓ Branch 0 taken 1564 times.
✓ Branch 1 taken 1956 times.
|
7040 | if (!current->scaling_list_pred_mode_flag[sizeId][matrixId]) { |
| 682 |
3/4✓ Branch 0 taken 8 times.
✓ Branch 1 taken 1556 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1564 times.
|
3128 | ues(scaling_list_pred_matrix_id_delta[sizeId][matrixId], |
| 683 | 0, sizeId == 3 ? matrixId / 3 : matrixId, | ||
| 684 | 2, sizeId, matrixId); | ||
| 685 | } else { | ||
| 686 | 3912 | n = FFMIN(64, 1 << (4 + (sizeId << 1))); | |
| 687 |
2/2✓ Branch 0 taken 1188 times.
✓ Branch 1 taken 768 times.
|
3912 | if (sizeId > 1) { |
| 688 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1188 times.
|
2376 | ses(scaling_list_dc_coef_minus8[sizeId - 2][matrixId], -7, +247, |
| 689 | 2, sizeId - 2, matrixId); | ||
| 690 | } | ||
| 691 |
2/2✓ Branch 0 taken 105600 times.
✓ Branch 1 taken 1956 times.
|
215112 | for (i = 0; i < n; i++) { |
| 692 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 105600 times.
|
211200 | ses(scaling_list_delta_coeff[sizeId][matrixId][i], |
| 693 | -128, +127, 3, sizeId, matrixId, i); | ||
| 694 | } | ||
| 695 | } | ||
| 696 | } | ||
| 697 | } | ||
| 698 | |||
| 699 | 352 | return 0; | |
| 700 | } | ||
| 701 | |||
| 702 | ✗ | static int FUNC(sps_range_extension)(CodedBitstreamContext *ctx, RWContext *rw, | |
| 703 | H265RawSPS *current) | ||
| 704 | { | ||
| 705 | int err; | ||
| 706 | |||
| 707 | ✗ | flag(transform_skip_rotation_enabled_flag); | |
| 708 | ✗ | flag(transform_skip_context_enabled_flag); | |
| 709 | ✗ | flag(implicit_rdpcm_enabled_flag); | |
| 710 | ✗ | flag(explicit_rdpcm_enabled_flag); | |
| 711 | ✗ | flag(extended_precision_processing_flag); | |
| 712 | ✗ | flag(intra_smoothing_disabled_flag); | |
| 713 | ✗ | flag(high_precision_offsets_enabled_flag); | |
| 714 | ✗ | flag(persistent_rice_adaptation_enabled_flag); | |
| 715 | ✗ | flag(cabac_bypass_alignment_enabled_flag); | |
| 716 | |||
| 717 | ✗ | return 0; | |
| 718 | } | ||
| 719 | |||
| 720 | ✗ | static int FUNC(sps_scc_extension)(CodedBitstreamContext *ctx, RWContext *rw, | |
| 721 | H265RawSPS *current) | ||
| 722 | { | ||
| 723 | int err, comp, i; | ||
| 724 | |||
| 725 | ✗ | flag(sps_curr_pic_ref_enabled_flag); | |
| 726 | |||
| 727 | ✗ | flag(palette_mode_enabled_flag); | |
| 728 | ✗ | if (current->palette_mode_enabled_flag) { | |
| 729 | ✗ | ue(palette_max_size, 0, 64); | |
| 730 | ✗ | ue(delta_palette_max_predictor_size, 0, 128); | |
| 731 | |||
| 732 | ✗ | flag(sps_palette_predictor_initializer_present_flag); | |
| 733 | ✗ | if (current->sps_palette_predictor_initializer_present_flag) { | |
| 734 | ✗ | ue(sps_num_palette_predictor_initializer_minus1, 0, 127); | |
| 735 | ✗ | for (comp = 0; comp < (current->chroma_format_idc ? 3 : 1); comp++) { | |
| 736 | ✗ | int bit_depth = comp == 0 ? current->bit_depth_luma_minus8 + 8 | |
| 737 | ✗ | : current->bit_depth_chroma_minus8 + 8; | |
| 738 | ✗ | for (i = 0; i <= current->sps_num_palette_predictor_initializer_minus1; i++) | |
| 739 | ✗ | ubs(bit_depth, sps_palette_predictor_initializers[comp][i], 2, comp, i); | |
| 740 | } | ||
| 741 | } | ||
| 742 | } | ||
| 743 | |||
| 744 | ✗ | u(2, motion_vector_resolution_control_idc, 0, 2); | |
| 745 | ✗ | flag(intra_boundary_filtering_disable_flag); | |
| 746 | |||
| 747 | ✗ | return 0; | |
| 748 | } | ||
| 749 | |||
| 750 | ✗ | static int FUNC(sps_multilayer_extension)(CodedBitstreamContext *ctx, RWContext *rw, | |
| 751 | H265RawSPS *current) | ||
| 752 | { | ||
| 753 | int err; | ||
| 754 | |||
| 755 | ✗ | flag(inter_view_mv_vert_constraint_flag); | |
| 756 | |||
| 757 | ✗ | return 0; | |
| 758 | } | ||
| 759 | |||
| 760 | 136 | static int FUNC(vui_parameters_default)(CodedBitstreamContext *ctx, | |
| 761 | RWContext *rw, H265RawVUI *current, | ||
| 762 | H265RawSPS *sps) | ||
| 763 | { | ||
| 764 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 32 times.
|
136 | infer(aspect_ratio_idc, 0); |
| 765 | |||
| 766 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 32 times.
|
136 | infer(video_format, 5); |
| 767 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 32 times.
|
136 | infer(video_full_range_flag, 0); |
| 768 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 32 times.
|
136 | infer(colour_primaries, 2); |
| 769 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 32 times.
|
136 | infer(transfer_characteristics, 2); |
| 770 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 32 times.
|
136 | infer(matrix_coefficients, 2); |
| 771 | |||
| 772 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 32 times.
|
136 | infer(chroma_sample_loc_type_top_field, 0); |
| 773 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 32 times.
|
136 | infer(chroma_sample_loc_type_bottom_field, 0); |
| 774 | |||
| 775 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 32 times.
|
136 | infer(tiles_fixed_structure_flag, 0); |
| 776 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 32 times.
|
136 | infer(motion_vectors_over_pic_boundaries_flag, 1); |
| 777 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 32 times.
|
136 | infer(min_spatial_segmentation_idc, 0); |
| 778 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 32 times.
|
136 | infer(max_bytes_per_pic_denom, 2); |
| 779 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 32 times.
|
136 | infer(max_bits_per_min_cu_denom, 1); |
| 780 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 32 times.
|
136 | infer(log2_max_mv_length_horizontal, 15); |
| 781 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 32 times.
|
136 | infer(log2_max_mv_length_vertical, 15); |
| 782 | |||
| 783 | 136 | return 0; | |
| 784 | } | ||
| 785 | |||
| 786 | 248 | static int FUNC(sps)(CodedBitstreamContext *ctx, RWContext *rw, | |
| 787 | H265RawSPS *current) | ||
| 788 | { | ||
| 789 | 248 | CodedBitstreamH265Context *h265 = ctx->priv_data; | |
| 790 | const H265RawVPS *vps; | ||
| 791 | int err, i; | ||
| 792 | unsigned int min_cb_log2_size_y, ctb_log2_size_y, | ||
| 793 | min_cb_size_y, min_tb_log2_size_y; | ||
| 794 | unsigned int multi_layer_ext_sps_flag; | ||
| 795 | |||
| 796 | 248 | HEADER("Sequence Parameter Set"); | |
| 797 | |||
| 798 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 124 times.
|
248 | CHECK(FUNC(nal_unit_header)(ctx, rw, ¤t->nal_unit_header, HEVC_NAL_SPS)); |
| 799 | |||
| 800 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 124 times.
|
248 | ub(4, sps_video_parameter_set_id); |
| 801 | 248 | h265->active_vps = vps = h265->vps[current->sps_video_parameter_set_id]; | |
| 802 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 124 times.
|
248 | if (!vps) { |
| 803 | ✗ | av_log(ctx->log_ctx, AV_LOG_ERROR, "VPS id %d not available.\n", | |
| 804 | ✗ | current->sps_video_parameter_set_id); | |
| 805 | ✗ | return AVERROR_INVALIDDATA; | |
| 806 | } | ||
| 807 | |||
| 808 |
1/2✓ Branch 0 taken 124 times.
✗ Branch 1 not taken.
|
248 | if (current->nal_unit_header.nuh_layer_id == 0) |
| 809 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 124 times.
|
248 | u(3, sps_max_sub_layers_minus1, 0, vps->vps_max_sub_layers_minus1); |
| 810 | else { | ||
| 811 | ✗ | u(3, sps_ext_or_max_sub_layers_minus1, 0, HEVC_MAX_SUB_LAYERS); | |
| 812 | ✗ | infer(sps_max_sub_layers_minus1, current->sps_ext_or_max_sub_layers_minus1 == HEVC_MAX_SUB_LAYERS | |
| 813 | ? vps->vps_max_sub_layers_minus1 | ||
| 814 | : current->sps_ext_or_max_sub_layers_minus1); | ||
| 815 | } | ||
| 816 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 124 times.
|
248 | multi_layer_ext_sps_flag = current->nal_unit_header.nuh_layer_id && |
| 817 | ✗ | current->sps_ext_or_max_sub_layers_minus1 == HEVC_MAX_SUB_LAYERS; | |
| 818 |
1/2✓ Branch 0 taken 124 times.
✗ Branch 1 not taken.
|
248 | if (!multi_layer_ext_sps_flag) { |
| 819 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 124 times.
|
248 | flag(sps_temporal_id_nesting_flag); |
| 820 | |||
| 821 |
2/2✓ Branch 0 taken 100 times.
✓ Branch 1 taken 24 times.
|
248 | if (vps->vps_temporal_id_nesting_flag && |
| 822 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 100 times.
|
200 | !current->sps_temporal_id_nesting_flag) { |
| 823 | ✗ | av_log(ctx->log_ctx, AV_LOG_ERROR, "Invalid stream: " | |
| 824 | "sps_temporal_id_nesting_flag must be 1 if " | ||
| 825 | "vps_temporal_id_nesting_flag is 1.\n"); | ||
| 826 | ✗ | return AVERROR_INVALIDDATA; | |
| 827 | } | ||
| 828 |
2/2✓ Branch 0 taken 100 times.
✓ Branch 1 taken 24 times.
|
248 | if (current->sps_max_sub_layers_minus1 == 0 && |
| 829 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 100 times.
|
200 | current->sps_temporal_id_nesting_flag != 1) { |
| 830 | ✗ | av_log(ctx->log_ctx, AV_LOG_ERROR, "Invalid stream: " | |
| 831 | "sps_temporal_id_nesting_flag must be 1 if " | ||
| 832 | "sps_max_sub_layers_minus1 is 0.\n"); | ||
| 833 | ✗ | return AVERROR_INVALIDDATA; | |
| 834 | } | ||
| 835 | |||
| 836 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 124 times.
|
248 | CHECK(FUNC(profile_tier_level)(ctx, rw, ¤t->profile_tier_level, |
| 837 | 1, current->sps_max_sub_layers_minus1)); | ||
| 838 | } else { | ||
| 839 | ✗ | if (current->sps_max_sub_layers_minus1 > 0) | |
| 840 | ✗ | infer(sps_temporal_id_nesting_flag, vps->vps_temporal_id_nesting_flag); | |
| 841 | else | ||
| 842 | ✗ | infer(sps_temporal_id_nesting_flag, 1); | |
| 843 | } | ||
| 844 | |||
| 845 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 124 times.
|
248 | ue(sps_seq_parameter_set_id, 0, 15); |
| 846 | |||
| 847 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 124 times.
|
248 | if (multi_layer_ext_sps_flag) { |
| 848 | ✗ | flag(update_rep_format_flag); | |
| 849 | ✗ | if (current->update_rep_format_flag) | |
| 850 | ✗ | ub(8, sps_rep_format_idx); | |
| 851 | } else { | ||
| 852 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 124 times.
|
248 | ue(chroma_format_idc, 0, 3); |
| 853 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 124 times.
|
248 | if (current->chroma_format_idc == 3) |
| 854 | ✗ | flag(separate_colour_plane_flag); | |
| 855 | else | ||
| 856 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 62 times.
|
248 | infer(separate_colour_plane_flag, 0); |
| 857 | |||
| 858 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 124 times.
|
248 | ue(pic_width_in_luma_samples, 1, HEVC_MAX_WIDTH); |
| 859 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 124 times.
|
248 | ue(pic_height_in_luma_samples, 1, HEVC_MAX_HEIGHT); |
| 860 | |||
| 861 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 124 times.
|
248 | flag(conformance_window_flag); |
| 862 |
2/2✓ Branch 0 taken 100 times.
✓ Branch 1 taken 24 times.
|
248 | if (current->conformance_window_flag) { |
| 863 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 100 times.
|
200 | ue(conf_win_left_offset, 0, current->pic_width_in_luma_samples); |
| 864 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 100 times.
|
200 | ue(conf_win_right_offset, 0, current->pic_width_in_luma_samples); |
| 865 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 100 times.
|
200 | ue(conf_win_top_offset, 0, current->pic_height_in_luma_samples); |
| 866 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 100 times.
|
200 | ue(conf_win_bottom_offset, 0, current->pic_height_in_luma_samples); |
| 867 | } else { | ||
| 868 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 12 times.
|
48 | infer(conf_win_left_offset, 0); |
| 869 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 12 times.
|
48 | infer(conf_win_right_offset, 0); |
| 870 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 12 times.
|
48 | infer(conf_win_top_offset, 0); |
| 871 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 12 times.
|
48 | infer(conf_win_bottom_offset, 0); |
| 872 | } | ||
| 873 | |||
| 874 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 124 times.
|
248 | ue(bit_depth_luma_minus8, 0, 8); |
| 875 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 124 times.
|
248 | ue(bit_depth_chroma_minus8, 0, 8); |
| 876 | } | ||
| 877 | |||
| 878 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 124 times.
|
248 | ue(log2_max_pic_order_cnt_lsb_minus4, 0, 12); |
| 879 | |||
| 880 |
1/2✓ Branch 0 taken 124 times.
✗ Branch 1 not taken.
|
248 | if (!multi_layer_ext_sps_flag) { |
| 881 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 124 times.
|
248 | flag(sps_sub_layer_ordering_info_present_flag); |
| 882 | 248 | for (i = (current->sps_sub_layer_ordering_info_present_flag ? | |
| 883 |
2/2✓ Branch 0 taken 24 times.
✓ Branch 1 taken 100 times.
|
248 | 0 : current->sps_max_sub_layers_minus1); |
| 884 |
2/2✓ Branch 0 taken 132 times.
✓ Branch 1 taken 124 times.
|
512 | i <= current->sps_max_sub_layers_minus1; i++) { |
| 885 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 132 times.
|
264 | ues(sps_max_dec_pic_buffering_minus1[i], |
| 886 | 0, HEVC_MAX_DPB_SIZE - 1, 1, i); | ||
| 887 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 132 times.
|
264 | ues(sps_max_num_reorder_pics[i], |
| 888 | 0, current->sps_max_dec_pic_buffering_minus1[i], 1, i); | ||
| 889 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 132 times.
|
264 | ues(sps_max_latency_increase_plus1[i], |
| 890 | 0, UINT32_MAX - 1, 1, i); | ||
| 891 | } | ||
| 892 |
2/2✓ Branch 0 taken 24 times.
✓ Branch 1 taken 100 times.
|
248 | if (!current->sps_sub_layer_ordering_info_present_flag) { |
| 893 |
2/2✓ Branch 0 taken 40 times.
✓ Branch 1 taken 24 times.
|
128 | for (i = 0; i < current->sps_max_sub_layers_minus1; i++) { |
| 894 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 20 times.
|
80 | infer(sps_max_dec_pic_buffering_minus1[i], |
| 895 | current->sps_max_dec_pic_buffering_minus1[current->sps_max_sub_layers_minus1]); | ||
| 896 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 20 times.
|
80 | infer(sps_max_num_reorder_pics[i], |
| 897 | current->sps_max_num_reorder_pics[current->sps_max_sub_layers_minus1]); | ||
| 898 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 20 times.
|
80 | infer(sps_max_latency_increase_plus1[i], |
| 899 | current->sps_max_latency_increase_plus1[current->sps_max_sub_layers_minus1]); | ||
| 900 | } | ||
| 901 | } | ||
| 902 | } | ||
| 903 | |||
| 904 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 124 times.
|
248 | ue(log2_min_luma_coding_block_size_minus3, 0, 3); |
| 905 | 248 | min_cb_log2_size_y = current->log2_min_luma_coding_block_size_minus3 + 3; | |
| 906 | |||
| 907 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 124 times.
|
248 | ue(log2_diff_max_min_luma_coding_block_size, 0, 3); |
| 908 | 248 | ctb_log2_size_y = min_cb_log2_size_y + | |
| 909 | 248 | current->log2_diff_max_min_luma_coding_block_size; | |
| 910 | |||
| 911 | 248 | min_cb_size_y = 1 << min_cb_log2_size_y; | |
| 912 |
1/2✓ Branch 0 taken 124 times.
✗ Branch 1 not taken.
|
248 | if (current->pic_width_in_luma_samples % min_cb_size_y || |
| 913 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 124 times.
|
248 | current->pic_height_in_luma_samples % min_cb_size_y) { |
| 914 | ✗ | av_log(ctx->log_ctx, AV_LOG_ERROR, "Invalid dimensions: %ux%u not divisible " | |
| 915 | ✗ | "by MinCbSizeY = %u.\n", current->pic_width_in_luma_samples, | |
| 916 | ✗ | current->pic_height_in_luma_samples, min_cb_size_y); | |
| 917 | ✗ | return AVERROR_INVALIDDATA; | |
| 918 | } | ||
| 919 | |||
| 920 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 124 times.
|
248 | ue(log2_min_luma_transform_block_size_minus2, 0, min_cb_log2_size_y - 3); |
| 921 | 248 | min_tb_log2_size_y = current->log2_min_luma_transform_block_size_minus2 + 2; | |
| 922 | |||
| 923 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 124 times.
|
248 | ue(log2_diff_max_min_luma_transform_block_size, |
| 924 | 0, FFMIN(ctb_log2_size_y, 5) - min_tb_log2_size_y); | ||
| 925 | |||
| 926 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 124 times.
|
248 | ue(max_transform_hierarchy_depth_inter, |
| 927 | 0, ctb_log2_size_y - min_tb_log2_size_y); | ||
| 928 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 124 times.
|
248 | ue(max_transform_hierarchy_depth_intra, |
| 929 | 0, ctb_log2_size_y - min_tb_log2_size_y); | ||
| 930 | |||
| 931 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 124 times.
|
248 | flag(scaling_list_enabled_flag); |
| 932 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 116 times.
|
248 | if (current->scaling_list_enabled_flag) { |
| 933 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
|
16 | if (multi_layer_ext_sps_flag) |
| 934 | ✗ | flag(sps_infer_scaling_list_flag); | |
| 935 | else | ||
| 936 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 4 times.
|
16 | infer(sps_infer_scaling_list_flag, 0); |
| 937 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
|
16 | if (current->sps_infer_scaling_list_flag) |
| 938 | ✗ | ub(6, sps_scaling_list_ref_layer_id); | |
| 939 | else { | ||
| 940 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 8 times.
|
16 | flag(sps_scaling_list_data_present_flag); |
| 941 |
1/2✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
|
16 | if (current->sps_scaling_list_data_present_flag) |
| 942 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 8 times.
|
16 | CHECK(FUNC(scaling_list_data)(ctx, rw, ¤t->scaling_list)); |
| 943 | } | ||
| 944 | } else { | ||
| 945 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 58 times.
|
232 | infer(sps_scaling_list_data_present_flag, 0); |
| 946 | } | ||
| 947 | |||
| 948 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 124 times.
|
248 | flag(amp_enabled_flag); |
| 949 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 124 times.
|
248 | flag(sample_adaptive_offset_enabled_flag); |
| 950 | |||
| 951 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 124 times.
|
248 | flag(pcm_enabled_flag); |
| 952 |
2/2✓ Branch 0 taken 4 times.
✓ Branch 1 taken 120 times.
|
248 | if (current->pcm_enabled_flag) { |
| 953 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
|
8 | u(4, pcm_sample_bit_depth_luma_minus1, |
| 954 | 0, current->bit_depth_luma_minus8 + 8 - 1); | ||
| 955 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
|
8 | u(4, pcm_sample_bit_depth_chroma_minus1, |
| 956 | 0, current->bit_depth_chroma_minus8 + 8 - 1); | ||
| 957 | |||
| 958 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
|
8 | ue(log2_min_pcm_luma_coding_block_size_minus3, |
| 959 | FFMIN(min_cb_log2_size_y, 5) - 3, FFMIN(ctb_log2_size_y, 5) - 3); | ||
| 960 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
|
8 | ue(log2_diff_max_min_pcm_luma_coding_block_size, |
| 961 | 0, FFMIN(ctb_log2_size_y, 5) - (current->log2_min_pcm_luma_coding_block_size_minus3 + 3)); | ||
| 962 | |||
| 963 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 4 times.
|
8 | flag(pcm_loop_filter_disabled_flag); |
| 964 | } | ||
| 965 | |||
| 966 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 124 times.
|
248 | ue(num_short_term_ref_pic_sets, 0, HEVC_MAX_SHORT_TERM_REF_PIC_SETS); |
| 967 |
2/2✓ Branch 0 taken 1092 times.
✓ Branch 1 taken 124 times.
|
2432 | for (i = 0; i < current->num_short_term_ref_pic_sets; i++) |
| 968 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1092 times.
|
2184 | CHECK(FUNC(st_ref_pic_set)(ctx, rw, ¤t->st_ref_pic_set[i], i, current)); |
| 969 | |||
| 970 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 124 times.
|
248 | flag(long_term_ref_pics_present_flag); |
| 971 |
2/2✓ Branch 0 taken 28 times.
✓ Branch 1 taken 96 times.
|
248 | if (current->long_term_ref_pics_present_flag) { |
| 972 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 28 times.
|
56 | ue(num_long_term_ref_pics_sps, 0, HEVC_MAX_LONG_TERM_REF_PICS); |
| 973 |
2/2✓ Branch 0 taken 32 times.
✓ Branch 1 taken 28 times.
|
120 | for (i = 0; i < current->num_long_term_ref_pics_sps; i++) { |
| 974 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 32 times.
|
64 | ubs(current->log2_max_pic_order_cnt_lsb_minus4 + 4, |
| 975 | lt_ref_pic_poc_lsb_sps[i], 1, i); | ||
| 976 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 32 times.
|
64 | flags(used_by_curr_pic_lt_sps_flag[i], 1, i); |
| 977 | } | ||
| 978 | } | ||
| 979 | |||
| 980 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 124 times.
|
248 | flag(sps_temporal_mvp_enabled_flag); |
| 981 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 124 times.
|
248 | flag(strong_intra_smoothing_enabled_flag); |
| 982 | |||
| 983 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 124 times.
|
248 | flag(vui_parameters_present_flag); |
| 984 |
2/2✓ Branch 0 taken 56 times.
✓ Branch 1 taken 68 times.
|
248 | if (current->vui_parameters_present_flag) |
| 985 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 56 times.
|
112 | CHECK(FUNC(vui_parameters)(ctx, rw, ¤t->vui, current)); |
| 986 | else | ||
| 987 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 68 times.
|
136 | CHECK(FUNC(vui_parameters_default)(ctx, rw, ¤t->vui, current)); |
| 988 | |||
| 989 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 124 times.
|
248 | flag(sps_extension_present_flag); |
| 990 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 124 times.
|
248 | if (current->sps_extension_present_flag) { |
| 991 | ✗ | flag(sps_range_extension_flag); | |
| 992 | ✗ | flag(sps_multilayer_extension_flag); | |
| 993 | ✗ | flag(sps_3d_extension_flag); | |
| 994 | ✗ | flag(sps_scc_extension_flag); | |
| 995 | ✗ | ub(4, sps_extension_4bits); | |
| 996 | } | ||
| 997 | |||
| 998 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 124 times.
|
248 | if (current->sps_range_extension_flag) |
| 999 | ✗ | CHECK(FUNC(sps_range_extension)(ctx, rw, current)); | |
| 1000 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 124 times.
|
248 | if (current->sps_multilayer_extension_flag) |
| 1001 | ✗ | CHECK(FUNC(sps_multilayer_extension)(ctx, rw, current)); | |
| 1002 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 124 times.
|
248 | if (current->sps_3d_extension_flag) |
| 1003 | ✗ | return AVERROR_PATCHWELCOME; | |
| 1004 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 124 times.
|
248 | if (current->sps_scc_extension_flag) |
| 1005 | ✗ | CHECK(FUNC(sps_scc_extension)(ctx, rw, current)); | |
| 1006 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 124 times.
|
248 | if (current->sps_extension_4bits) |
| 1007 | ✗ | CHECK(FUNC(extension_data)(ctx, rw, ¤t->extension_data)); | |
| 1008 | |||
| 1009 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 124 times.
|
248 | CHECK(FUNC(rbsp_trailing_bits)(ctx, rw)); |
| 1010 | |||
| 1011 | 248 | return 0; | |
| 1012 | } | ||
| 1013 | |||
| 1014 | ✗ | static int FUNC(pps_range_extension)(CodedBitstreamContext *ctx, RWContext *rw, | |
| 1015 | H265RawPPS *current) | ||
| 1016 | { | ||
| 1017 | ✗ | CodedBitstreamH265Context *h265 = ctx->priv_data; | |
| 1018 | ✗ | const H265RawSPS *sps = h265->active_sps; | |
| 1019 | int err, i; | ||
| 1020 | |||
| 1021 | ✗ | if (current->transform_skip_enabled_flag) | |
| 1022 | ✗ | ue(log2_max_transform_skip_block_size_minus2, 0, 3); | |
| 1023 | ✗ | flag(cross_component_prediction_enabled_flag); | |
| 1024 | |||
| 1025 | ✗ | flag(chroma_qp_offset_list_enabled_flag); | |
| 1026 | ✗ | if (current->chroma_qp_offset_list_enabled_flag) { | |
| 1027 | ✗ | ue(diff_cu_chroma_qp_offset_depth, | |
| 1028 | 0, sps->log2_diff_max_min_luma_coding_block_size); | ||
| 1029 | ✗ | ue(chroma_qp_offset_list_len_minus1, 0, 5); | |
| 1030 | ✗ | for (i = 0; i <= current->chroma_qp_offset_list_len_minus1; i++) { | |
| 1031 | ✗ | ses(cb_qp_offset_list[i], -12, +12, 1, i); | |
| 1032 | ✗ | ses(cr_qp_offset_list[i], -12, +12, 1, i); | |
| 1033 | } | ||
| 1034 | } | ||
| 1035 | |||
| 1036 | ✗ | ue(log2_sao_offset_scale_luma, 0, FFMAX(0, sps->bit_depth_luma_minus8 - 2)); | |
| 1037 | ✗ | ue(log2_sao_offset_scale_chroma, 0, FFMAX(0, sps->bit_depth_chroma_minus8 - 2)); | |
| 1038 | |||
| 1039 | ✗ | return 0; | |
| 1040 | } | ||
| 1041 | |||
| 1042 | ✗ | static int FUNC(colour_mapping_octants)(CodedBitstreamContext *ctx, RWContext *rw, | |
| 1043 | H265RawPPS *current, unsigned int inp_depth, | ||
| 1044 | unsigned int idx_y, unsigned int idx_cb, | ||
| 1045 | unsigned int idx_cr, unsigned int inp_length) | ||
| 1046 | { | ||
| 1047 | int part_num_y, cm_res_bits; | ||
| 1048 | int err; | ||
| 1049 | |||
| 1050 | ✗ | part_num_y = 1 << current->cm_y_part_num_log2; | |
| 1051 | |||
| 1052 | ✗ | av_assert0(inp_depth <= 1); | |
| 1053 | ✗ | if (inp_depth < current->cm_octant_depth) | |
| 1054 | ✗ | flags(split_octant_flag[inp_depth], 1, inp_depth); | |
| 1055 | else | ||
| 1056 | ✗ | infer(split_octant_flag[inp_depth], 0); | |
| 1057 | |||
| 1058 | ✗ | if (current->split_octant_flag[inp_depth]) | |
| 1059 | ✗ | for (int k = 0; k < 2; k++) | |
| 1060 | ✗ | for (int m = 0; m < 2; m++) | |
| 1061 | ✗ | for (int n = 0; n < 2; n++) | |
| 1062 | ✗ | CHECK(FUNC(colour_mapping_octants)(ctx, rw, current, inp_depth + 1, | |
| 1063 | idx_y + part_num_y * k * inp_length / 2, | ||
| 1064 | idx_cb + m * inp_length / 2, | ||
| 1065 | idx_cr + n * inp_length / 2, | ||
| 1066 | inp_length / 2)); | ||
| 1067 | else | ||
| 1068 | ✗ | for (int i = 0; i < part_num_y; i++) { | |
| 1069 | ✗ | int idx_shift_y = idx_y + (i << (current->cm_octant_depth - inp_depth)); | |
| 1070 | ✗ | for (int j = 0; j < 4; j++) { | |
| 1071 | ✗ | flags(coded_res_flag[idx_shift_y][idx_cb][idx_cr][j], | |
| 1072 | 4, idx_shift_y, idx_cb, idx_cr, j); | ||
| 1073 | ✗ | if (current->coded_res_flag[idx_shift_y][idx_cb][idx_cr][j]) { | |
| 1074 | ✗ | for (int c = 0; c < 3; c++) { | |
| 1075 | ✗ | ues(res_coeff_q[idx_shift_y][idx_cb][idx_cr][j][c], 0, 3, | |
| 1076 | 5, idx_shift_y, idx_cb, idx_cr, j, c); | ||
| 1077 | ✗ | cm_res_bits = FFMAX(0, 10 + (current->luma_bit_depth_cm_input_minus8 + 8) - | |
| 1078 | (current->luma_bit_depth_cm_output_minus8 + 8) - | ||
| 1079 | current->cm_res_quant_bits - (current->cm_delta_flc_bits_minus1 + 1)); | ||
| 1080 | ✗ | if (cm_res_bits) | |
| 1081 | ✗ | ubs(cm_res_bits, res_coeff_r[idx_shift_y][idx_cb][idx_cr][j][c], | |
| 1082 | 5, idx_shift_y, idx_cb, idx_cr, j, c); | ||
| 1083 | else | ||
| 1084 | ✗ | infer(res_coeff_r[idx_shift_y][idx_cb][idx_cr][j][c], 0); | |
| 1085 | ✗ | if (current->res_coeff_q[idx_shift_y][idx_cb][idx_cr][j][c] || | |
| 1086 | ✗ | current->res_coeff_r[idx_shift_y][idx_cb][idx_cr][j][c]) | |
| 1087 | ✗ | ub(1, res_coeff_s[idx_shift_y][idx_cb][idx_cr][j][c]); | |
| 1088 | else | ||
| 1089 | ✗ | infer(res_coeff_s[idx_shift_y][idx_cb][idx_cr][j][c], 0); | |
| 1090 | } | ||
| 1091 | } else { | ||
| 1092 | ✗ | for (int c = 0; c < 3; c++) { | |
| 1093 | ✗ | infer(res_coeff_q[idx_shift_y][idx_cb][idx_cr][j][c], 0); | |
| 1094 | ✗ | infer(res_coeff_r[idx_shift_y][idx_cb][idx_cr][j][c], 0); | |
| 1095 | ✗ | infer(res_coeff_s[idx_shift_y][idx_cb][idx_cr][j][c], 0); | |
| 1096 | } | ||
| 1097 | } | ||
| 1098 | } | ||
| 1099 | } | ||
| 1100 | |||
| 1101 | ✗ | return 0; | |
| 1102 | } | ||
| 1103 | |||
| 1104 | ✗ | static int FUNC(colour_mapping_table)(CodedBitstreamContext *ctx, RWContext *rw, | |
| 1105 | H265RawPPS *current) | ||
| 1106 | { | ||
| 1107 | int err; | ||
| 1108 | |||
| 1109 | ✗ | ue(num_cm_ref_layers_minus1, 0, 61); | |
| 1110 | ✗ | for (int i = 0; i <= current->num_cm_ref_layers_minus1; i++) | |
| 1111 | ✗ | ubs(6, cm_ref_layer_id[i], 1, i); | |
| 1112 | |||
| 1113 | ✗ | u(2, cm_octant_depth, 0, 1); | |
| 1114 | ✗ | u(2, cm_y_part_num_log2, 0, 3 - current->cm_octant_depth); | |
| 1115 | |||
| 1116 | ✗ | ue(luma_bit_depth_cm_input_minus8, 0, 8); | |
| 1117 | ✗ | ue(chroma_bit_depth_cm_input_minus8, 0, 8); | |
| 1118 | ✗ | ue(luma_bit_depth_cm_output_minus8, 0, 8); | |
| 1119 | ✗ | ue(chroma_bit_depth_cm_output_minus8, 0, 8); | |
| 1120 | |||
| 1121 | ✗ | ub(2, cm_res_quant_bits); | |
| 1122 | ✗ | ub(2, cm_delta_flc_bits_minus1); | |
| 1123 | |||
| 1124 | ✗ | if (current->cm_octant_depth == 1) { | |
| 1125 | ✗ | se(cm_adapt_threshold_u_delta, -32768, 32767); | |
| 1126 | ✗ | se(cm_adapt_threshold_v_delta, -32768, 32767); | |
| 1127 | } else { | ||
| 1128 | ✗ | infer(cm_adapt_threshold_u_delta, 0); | |
| 1129 | ✗ | infer(cm_adapt_threshold_v_delta, 0); | |
| 1130 | } | ||
| 1131 | |||
| 1132 | ✗ | CHECK(FUNC(colour_mapping_octants)(ctx, rw, current, 0, 0, 0, 0, 1 << current->cm_octant_depth)); | |
| 1133 | |||
| 1134 | ✗ | return 0; | |
| 1135 | } | ||
| 1136 | |||
| 1137 | ✗ | static int FUNC(pps_multilayer_extension)(CodedBitstreamContext *ctx, RWContext *rw, | |
| 1138 | H265RawPPS *current) | ||
| 1139 | { | ||
| 1140 | ✗ | CodedBitstreamH265Context *h265 = ctx->priv_data; | |
| 1141 | ✗ | const H265RawVPS *vps = h265->active_vps; | |
| 1142 | int offset; | ||
| 1143 | int err, i; | ||
| 1144 | |||
| 1145 | ✗ | flag(poc_reset_info_present_flag); | |
| 1146 | ✗ | flag(pps_infer_scaling_list_flag); | |
| 1147 | ✗ | if (current->pps_infer_scaling_list_flag) | |
| 1148 | ✗ | ub(6, pps_scaling_list_ref_layer_id); | |
| 1149 | |||
| 1150 | ✗ | if (!vps) { | |
| 1151 | ✗ | av_log(ctx->log_ctx, AV_LOG_ERROR, "VPS missing for PPS Multilayer Extension.\n"); | |
| 1152 | ✗ | return AVERROR_INVALIDDATA; | |
| 1153 | } | ||
| 1154 | |||
| 1155 | ✗ | ue(num_ref_loc_offsets, 0, vps->vps_max_layers_minus1); | |
| 1156 | ✗ | for (i = 0; i < current->num_ref_loc_offsets; i++) { | |
| 1157 | ✗ | ubs(6, ref_loc_offset_layer_id[i], 1, i); | |
| 1158 | ✗ | offset = current->ref_loc_offset_layer_id[i]; | |
| 1159 | ✗ | flags(scaled_ref_layer_offset_present_flag[i], 1, i); | |
| 1160 | ✗ | if (current->scaled_ref_layer_offset_present_flag[i]) { | |
| 1161 | ✗ | ses(scaled_ref_layer_left_offset[offset], -16384, 16383, 1, offset); | |
| 1162 | ✗ | ses(scaled_ref_layer_top_offset[offset], -16384, 16383, 1, offset); | |
| 1163 | ✗ | ses(scaled_ref_layer_right_offset[offset], -16384, 16383, 1, offset); | |
| 1164 | ✗ | ses(scaled_ref_layer_bottom_offset[offset], -16384, 16383, 1, offset); | |
| 1165 | } else { | ||
| 1166 | ✗ | infer(scaled_ref_layer_left_offset[offset], 0); | |
| 1167 | ✗ | infer(scaled_ref_layer_top_offset[offset], 0); | |
| 1168 | ✗ | infer(scaled_ref_layer_right_offset[offset], 0); | |
| 1169 | ✗ | infer(scaled_ref_layer_bottom_offset[offset], 0); | |
| 1170 | } | ||
| 1171 | ✗ | flags(ref_region_offset_present_flag[i], 1, i); | |
| 1172 | ✗ | if (current->ref_region_offset_present_flag[i]) { | |
| 1173 | ✗ | ses(ref_region_left_offset[offset], -16384, 16383, 1, offset); | |
| 1174 | ✗ | ses(ref_region_top_offset[offset], -16384, 16383, 1, offset); | |
| 1175 | ✗ | ses(ref_region_right_offset[offset], -16384, 16383, 1, offset); | |
| 1176 | ✗ | ses(ref_region_bottom_offset[offset], -16384, 16383, 1, offset); | |
| 1177 | } else { | ||
| 1178 | ✗ | infer(ref_region_left_offset[offset], 0); | |
| 1179 | ✗ | infer(ref_region_top_offset[offset], 0); | |
| 1180 | ✗ | infer(ref_region_right_offset[offset], 0); | |
| 1181 | ✗ | infer(ref_region_bottom_offset[offset], 0); | |
| 1182 | } | ||
| 1183 | ✗ | flags(resample_phase_set_present_flag[i], 1, i); | |
| 1184 | ✗ | if (current->resample_phase_set_present_flag[i]) { | |
| 1185 | ✗ | ues(phase_hor_luma[offset], 0, 31, 1, offset); | |
| 1186 | ✗ | ues(phase_ver_luma[offset], 0, 31, 1, offset); | |
| 1187 | ✗ | ues(phase_hor_chroma_plus8[offset], 0, 63, 1, offset); | |
| 1188 | ✗ | ues(phase_ver_chroma_plus8[offset], 0, 63, 1, offset); | |
| 1189 | } else { | ||
| 1190 | ✗ | infer(phase_hor_luma[offset], 0); | |
| 1191 | ✗ | infer(phase_ver_luma[offset], 0); | |
| 1192 | ✗ | infer(phase_hor_chroma_plus8[offset], 8); | |
| 1193 | } | ||
| 1194 | } | ||
| 1195 | |||
| 1196 | ✗ | flag(colour_mapping_enabled_flag); | |
| 1197 | ✗ | if (current->colour_mapping_enabled_flag) | |
| 1198 | ✗ | CHECK(FUNC(colour_mapping_table)(ctx, rw, current)); | |
| 1199 | |||
| 1200 | ✗ | return 0; | |
| 1201 | } | ||
| 1202 | |||
| 1203 | ✗ | static int FUNC(pps_scc_extension)(CodedBitstreamContext *ctx, RWContext *rw, | |
| 1204 | H265RawPPS *current) | ||
| 1205 | { | ||
| 1206 | int err, comp, i; | ||
| 1207 | |||
| 1208 | ✗ | flag(pps_curr_pic_ref_enabled_flag); | |
| 1209 | |||
| 1210 | ✗ | flag(residual_adaptive_colour_transform_enabled_flag); | |
| 1211 | ✗ | if (current->residual_adaptive_colour_transform_enabled_flag) { | |
| 1212 | ✗ | flag(pps_slice_act_qp_offsets_present_flag); | |
| 1213 | ✗ | se(pps_act_y_qp_offset_plus5, -7, +17); | |
| 1214 | ✗ | se(pps_act_cb_qp_offset_plus5, -7, +17); | |
| 1215 | ✗ | se(pps_act_cr_qp_offset_plus3, -9, +15); | |
| 1216 | } else { | ||
| 1217 | ✗ | infer(pps_slice_act_qp_offsets_present_flag, 0); | |
| 1218 | ✗ | infer(pps_act_y_qp_offset_plus5, 0); | |
| 1219 | ✗ | infer(pps_act_cb_qp_offset_plus5, 0); | |
| 1220 | ✗ | infer(pps_act_cr_qp_offset_plus3, 0); | |
| 1221 | } | ||
| 1222 | |||
| 1223 | ✗ | flag(pps_palette_predictor_initializer_present_flag); | |
| 1224 | ✗ | if (current->pps_palette_predictor_initializer_present_flag) { | |
| 1225 | ✗ | ue(pps_num_palette_predictor_initializer, 0, 128); | |
| 1226 | ✗ | if (current->pps_num_palette_predictor_initializer > 0) { | |
| 1227 | ✗ | flag(monochrome_palette_flag); | |
| 1228 | ✗ | ue(luma_bit_depth_entry_minus8, 0, 8); | |
| 1229 | ✗ | if (!current->monochrome_palette_flag) | |
| 1230 | ✗ | ue(chroma_bit_depth_entry_minus8, 0, 8); | |
| 1231 | ✗ | for (comp = 0; comp < (current->monochrome_palette_flag ? 1 : 3); comp++) { | |
| 1232 | ✗ | int bit_depth = comp == 0 ? current->luma_bit_depth_entry_minus8 + 8 | |
| 1233 | ✗ | : current->chroma_bit_depth_entry_minus8 + 8; | |
| 1234 | ✗ | for (i = 0; i < current->pps_num_palette_predictor_initializer; i++) | |
| 1235 | ✗ | ubs(bit_depth, pps_palette_predictor_initializers[comp][i], 2, comp, i); | |
| 1236 | } | ||
| 1237 | } | ||
| 1238 | } | ||
| 1239 | |||
| 1240 | ✗ | return 0; | |
| 1241 | } | ||
| 1242 | |||
| 1243 | 1148 | static int FUNC(pps)(CodedBitstreamContext *ctx, RWContext *rw, | |
| 1244 | H265RawPPS *current) | ||
| 1245 | { | ||
| 1246 | 1148 | CodedBitstreamH265Context *h265 = ctx->priv_data; | |
| 1247 | const H265RawSPS *sps; | ||
| 1248 | int err, i; | ||
| 1249 | |||
| 1250 | 1148 | HEADER("Picture Parameter Set"); | |
| 1251 | |||
| 1252 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 574 times.
|
1148 | CHECK(FUNC(nal_unit_header)(ctx, rw, ¤t->nal_unit_header, HEVC_NAL_PPS)); |
| 1253 | |||
| 1254 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 574 times.
|
1148 | ue(pps_pic_parameter_set_id, 0, 63); |
| 1255 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 574 times.
|
1148 | ue(pps_seq_parameter_set_id, 0, 15); |
| 1256 | 1148 | sps = h265->sps[current->pps_seq_parameter_set_id]; | |
| 1257 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 574 times.
|
1148 | if (!sps) { |
| 1258 | ✗ | av_log(ctx->log_ctx, AV_LOG_ERROR, "SPS id %d not available.\n", | |
| 1259 | ✗ | current->pps_seq_parameter_set_id); | |
| 1260 | ✗ | return AVERROR_INVALIDDATA; | |
| 1261 | } | ||
| 1262 | 1148 | h265->active_sps = sps; | |
| 1263 | |||
| 1264 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 574 times.
|
1148 | flag(dependent_slice_segments_enabled_flag); |
| 1265 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 574 times.
|
1148 | flag(output_flag_present_flag); |
| 1266 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 574 times.
|
1148 | ub(3, num_extra_slice_header_bits); |
| 1267 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 574 times.
|
1148 | flag(sign_data_hiding_enabled_flag); |
| 1268 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 574 times.
|
1148 | flag(cabac_init_present_flag); |
| 1269 | |||
| 1270 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 574 times.
|
1148 | ue(num_ref_idx_l0_default_active_minus1, 0, 14); |
| 1271 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 574 times.
|
1148 | ue(num_ref_idx_l1_default_active_minus1, 0, 14); |
| 1272 | |||
| 1273 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 574 times.
|
1148 | se(init_qp_minus26, -(26 + 6 * sps->bit_depth_luma_minus8), +25); |
| 1274 | |||
| 1275 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 574 times.
|
1148 | flag(constrained_intra_pred_flag); |
| 1276 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 574 times.
|
1148 | flag(transform_skip_enabled_flag); |
| 1277 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 574 times.
|
1148 | flag(cu_qp_delta_enabled_flag); |
| 1278 |
2/2✓ Branch 0 taken 28 times.
✓ Branch 1 taken 546 times.
|
1148 | if (current->cu_qp_delta_enabled_flag) |
| 1279 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 28 times.
|
56 | ue(diff_cu_qp_delta_depth, |
| 1280 | 0, sps->log2_diff_max_min_luma_coding_block_size); | ||
| 1281 | else | ||
| 1282 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 273 times.
|
1092 | infer(diff_cu_qp_delta_depth, 0); |
| 1283 | |||
| 1284 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 574 times.
|
1148 | se(pps_cb_qp_offset, -12, +12); |
| 1285 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 574 times.
|
1148 | se(pps_cr_qp_offset, -12, +12); |
| 1286 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 574 times.
|
1148 | flag(pps_slice_chroma_qp_offsets_present_flag); |
| 1287 | |||
| 1288 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 574 times.
|
1148 | flag(weighted_pred_flag); |
| 1289 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 574 times.
|
1148 | flag(weighted_bipred_flag); |
| 1290 | |||
| 1291 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 574 times.
|
1148 | flag(transquant_bypass_enabled_flag); |
| 1292 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 574 times.
|
1148 | flag(tiles_enabled_flag); |
| 1293 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 574 times.
|
1148 | flag(entropy_coding_sync_enabled_flag); |
| 1294 | |||
| 1295 |
2/2✓ Branch 0 taken 210 times.
✓ Branch 1 taken 364 times.
|
1148 | if (current->tiles_enabled_flag) { |
| 1296 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 210 times.
|
420 | ue(num_tile_columns_minus1, 0, HEVC_MAX_TILE_COLUMNS); |
| 1297 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 210 times.
|
420 | ue(num_tile_rows_minus1, 0, HEVC_MAX_TILE_ROWS); |
| 1298 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 210 times.
|
420 | flag(uniform_spacing_flag); |
| 1299 |
2/2✓ Branch 0 taken 202 times.
✓ Branch 1 taken 8 times.
|
420 | if (!current->uniform_spacing_flag) { |
| 1300 |
2/2✓ Branch 0 taken 808 times.
✓ Branch 1 taken 202 times.
|
2020 | for (i = 0; i < current->num_tile_columns_minus1; i++) |
| 1301 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 808 times.
|
1616 | ues(column_width_minus1[i], 0, sps->pic_width_in_luma_samples, 1, i); |
| 1302 |
2/2✓ Branch 0 taken 808 times.
✓ Branch 1 taken 202 times.
|
2020 | for (i = 0; i < current->num_tile_rows_minus1; i++) |
| 1303 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 808 times.
|
1616 | ues(row_height_minus1[i], 0, sps->pic_height_in_luma_samples, 1, i); |
| 1304 | } | ||
| 1305 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 210 times.
|
420 | flag(loop_filter_across_tiles_enabled_flag); |
| 1306 | } else { | ||
| 1307 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 182 times.
|
728 | infer(num_tile_columns_minus1, 0); |
| 1308 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 182 times.
|
728 | infer(num_tile_rows_minus1, 0); |
| 1309 | } | ||
| 1310 | |||
| 1311 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 574 times.
|
1148 | flag(pps_loop_filter_across_slices_enabled_flag); |
| 1312 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 574 times.
|
1148 | flag(deblocking_filter_control_present_flag); |
| 1313 |
2/2✓ Branch 0 taken 226 times.
✓ Branch 1 taken 348 times.
|
1148 | if (current->deblocking_filter_control_present_flag) { |
| 1314 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 226 times.
|
452 | flag(deblocking_filter_override_enabled_flag); |
| 1315 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 226 times.
|
452 | flag(pps_deblocking_filter_disabled_flag); |
| 1316 |
2/2✓ Branch 0 taken 222 times.
✓ Branch 1 taken 4 times.
|
452 | if (!current->pps_deblocking_filter_disabled_flag) { |
| 1317 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 222 times.
|
444 | se(pps_beta_offset_div2, -6, +6); |
| 1318 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 222 times.
|
444 | se(pps_tc_offset_div2, -6, +6); |
| 1319 | } else { | ||
| 1320 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
|
8 | infer(pps_beta_offset_div2, 0); |
| 1321 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
|
8 | infer(pps_tc_offset_div2, 0); |
| 1322 | } | ||
| 1323 | } else { | ||
| 1324 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 174 times.
|
696 | infer(deblocking_filter_override_enabled_flag, 0); |
| 1325 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 174 times.
|
696 | infer(pps_deblocking_filter_disabled_flag, 0); |
| 1326 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 174 times.
|
696 | infer(pps_beta_offset_div2, 0); |
| 1327 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 174 times.
|
696 | infer(pps_tc_offset_div2, 0); |
| 1328 | } | ||
| 1329 | |||
| 1330 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 574 times.
|
1148 | flag(pps_scaling_list_data_present_flag); |
| 1331 |
2/2✓ Branch 0 taken 168 times.
✓ Branch 1 taken 406 times.
|
1148 | if (current->pps_scaling_list_data_present_flag) |
| 1332 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 168 times.
|
336 | CHECK(FUNC(scaling_list_data)(ctx, rw, ¤t->scaling_list)); |
| 1333 | |||
| 1334 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 574 times.
|
1148 | flag(lists_modification_present_flag); |
| 1335 | |||
| 1336 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 574 times.
|
1148 | ue(log2_parallel_merge_level_minus2, |
| 1337 | 0, (sps->log2_min_luma_coding_block_size_minus3 + 3 + | ||
| 1338 | sps->log2_diff_max_min_luma_coding_block_size - 2)); | ||
| 1339 | |||
| 1340 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 574 times.
|
1148 | flag(slice_segment_header_extension_present_flag); |
| 1341 | |||
| 1342 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 574 times.
|
1148 | flag(pps_extension_present_flag); |
| 1343 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 574 times.
|
1148 | if (current->pps_extension_present_flag) { |
| 1344 | ✗ | flag(pps_range_extension_flag); | |
| 1345 | ✗ | flag(pps_multilayer_extension_flag); | |
| 1346 | ✗ | flag(pps_3d_extension_flag); | |
| 1347 | ✗ | flag(pps_scc_extension_flag); | |
| 1348 | ✗ | ub(4, pps_extension_4bits); | |
| 1349 | } | ||
| 1350 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 574 times.
|
1148 | if (current->pps_range_extension_flag) |
| 1351 | ✗ | CHECK(FUNC(pps_range_extension)(ctx, rw, current)); | |
| 1352 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 574 times.
|
1148 | if (current->pps_multilayer_extension_flag) |
| 1353 | ✗ | CHECK(FUNC(pps_multilayer_extension)(ctx, rw, current)); | |
| 1354 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 574 times.
|
1148 | if (current->pps_3d_extension_flag) |
| 1355 | ✗ | return AVERROR_PATCHWELCOME; | |
| 1356 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 574 times.
|
1148 | if (current->pps_scc_extension_flag) |
| 1357 | ✗ | CHECK(FUNC(pps_scc_extension)(ctx, rw, current)); | |
| 1358 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 574 times.
|
1148 | if (current->pps_extension_4bits) |
| 1359 | ✗ | CHECK(FUNC(extension_data)(ctx, rw, ¤t->extension_data)); | |
| 1360 | |||
| 1361 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 574 times.
|
1148 | CHECK(FUNC(rbsp_trailing_bits)(ctx, rw)); |
| 1362 | |||
| 1363 | 1148 | return 0; | |
| 1364 | } | ||
| 1365 | |||
| 1366 | 240 | static int FUNC(aud)(CodedBitstreamContext *ctx, RWContext *rw, | |
| 1367 | H265RawAUD *current) | ||
| 1368 | { | ||
| 1369 | int err; | ||
| 1370 | |||
| 1371 | 240 | HEADER("Access Unit Delimiter"); | |
| 1372 | |||
| 1373 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 120 times.
|
240 | CHECK(FUNC(nal_unit_header)(ctx, rw, ¤t->nal_unit_header, HEVC_NAL_AUD)); |
| 1374 | |||
| 1375 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 120 times.
|
240 | u(3, pic_type, 0, 2); |
| 1376 | |||
| 1377 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 120 times.
|
240 | CHECK(FUNC(rbsp_trailing_bits)(ctx, rw)); |
| 1378 | |||
| 1379 | 240 | return 0; | |
| 1380 | } | ||
| 1381 | |||
| 1382 | 2992 | static int FUNC(ref_pic_lists_modification)(CodedBitstreamContext *ctx, RWContext *rw, | |
| 1383 | H265RawSliceHeader *current, | ||
| 1384 | unsigned int num_pic_total_curr) | ||
| 1385 | { | ||
| 1386 | unsigned int entry_size; | ||
| 1387 | int err, i; | ||
| 1388 | |||
| 1389 | 2992 | entry_size = av_log2(num_pic_total_curr - 1) + 1; | |
| 1390 | |||
| 1391 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1496 times.
|
2992 | flag(ref_pic_list_modification_flag_l0); |
| 1392 |
2/2✓ Branch 0 taken 726 times.
✓ Branch 1 taken 770 times.
|
2992 | if (current->ref_pic_list_modification_flag_l0) { |
| 1393 |
2/2✓ Branch 0 taken 1672 times.
✓ Branch 1 taken 726 times.
|
4796 | for (i = 0; i <= current->num_ref_idx_l0_active_minus1; i++) |
| 1394 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1672 times.
|
3344 | us(entry_size, list_entry_l0[i], 0, num_pic_total_curr - 1, 1, i); |
| 1395 | } | ||
| 1396 | |||
| 1397 |
1/2✓ Branch 0 taken 1496 times.
✗ Branch 1 not taken.
|
2992 | if (current->slice_type == HEVC_SLICE_B) { |
| 1398 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1496 times.
|
2992 | flag(ref_pic_list_modification_flag_l1); |
| 1399 |
2/2✓ Branch 0 taken 426 times.
✓ Branch 1 taken 1070 times.
|
2992 | if (current->ref_pic_list_modification_flag_l1) { |
| 1400 |
2/2✓ Branch 0 taken 1010 times.
✓ Branch 1 taken 426 times.
|
2872 | for (i = 0; i <= current->num_ref_idx_l1_active_minus1; i++) |
| 1401 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1010 times.
|
2020 | us(entry_size, list_entry_l1[i], 0, num_pic_total_curr - 1, 1, i); |
| 1402 | } | ||
| 1403 | } | ||
| 1404 | |||
| 1405 | 2992 | return 0; | |
| 1406 | } | ||
| 1407 | |||
| 1408 | 1020 | static int FUNC(pred_weight_table)(CodedBitstreamContext *ctx, RWContext *rw, | |
| 1409 | H265RawSliceHeader *current) | ||
| 1410 | { | ||
| 1411 | 1020 | CodedBitstreamH265Context *h265 = ctx->priv_data; | |
| 1412 | 1020 | const H265RawSPS *sps = h265->active_sps; | |
| 1413 | int err, i, j; | ||
| 1414 |
1/2✓ Branch 0 taken 510 times.
✗ Branch 1 not taken.
|
2040 | int chroma = !sps->separate_colour_plane_flag && |
| 1415 |
1/2✓ Branch 0 taken 510 times.
✗ Branch 1 not taken.
|
1020 | sps->chroma_format_idc != 0; |
| 1416 | |||
| 1417 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 510 times.
|
1020 | ue(luma_log2_weight_denom, 0, 7); |
| 1418 |
1/2✓ Branch 0 taken 510 times.
✗ Branch 1 not taken.
|
1020 | if (chroma) |
| 1419 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 510 times.
|
1020 | se(delta_chroma_log2_weight_denom, -7, 7); |
| 1420 | else | ||
| 1421 | ✗ | infer(delta_chroma_log2_weight_denom, 0); | |
| 1422 | |||
| 1423 |
2/2✓ Branch 0 taken 2028 times.
✓ Branch 1 taken 510 times.
|
5076 | for (i = 0; i <= current->num_ref_idx_l0_active_minus1; i++) { |
| 1424 | if (1 /* is not same POC and same layer_id */) | ||
| 1425 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 2028 times.
|
4056 | flags(luma_weight_l0_flag[i], 1, i); |
| 1426 | else | ||
| 1427 | infer(luma_weight_l0_flag[i], 0); | ||
| 1428 | } | ||
| 1429 |
1/2✓ Branch 0 taken 510 times.
✗ Branch 1 not taken.
|
1020 | if (chroma) { |
| 1430 |
2/2✓ Branch 0 taken 2028 times.
✓ Branch 1 taken 510 times.
|
5076 | for (i = 0; i <= current->num_ref_idx_l0_active_minus1; i++) { |
| 1431 | if (1 /* is not same POC and same layer_id */) | ||
| 1432 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 2028 times.
|
4056 | flags(chroma_weight_l0_flag[i], 1, i); |
| 1433 | else | ||
| 1434 | infer(chroma_weight_l0_flag[i], 0); | ||
| 1435 | } | ||
| 1436 | } | ||
| 1437 | |||
| 1438 |
2/2✓ Branch 0 taken 2028 times.
✓ Branch 1 taken 510 times.
|
5076 | for (i = 0; i <= current->num_ref_idx_l0_active_minus1; i++) { |
| 1439 |
2/2✓ Branch 0 taken 1540 times.
✓ Branch 1 taken 488 times.
|
4056 | if (current->luma_weight_l0_flag[i]) { |
| 1440 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1540 times.
|
3080 | ses(delta_luma_weight_l0[i], -128, +127, 1, i); |
| 1441 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1540 times.
|
3080 | ses(luma_offset_l0[i], |
| 1442 | -(1 << (sps->bit_depth_luma_minus8 + 8 - 1)), | ||
| 1443 | ((1 << (sps->bit_depth_luma_minus8 + 8 - 1)) - 1), 1, i); | ||
| 1444 | } else { | ||
| 1445 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 244 times.
|
976 | infer(delta_luma_weight_l0[i], 0); |
| 1446 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 244 times.
|
976 | infer(luma_offset_l0[i], 0); |
| 1447 | } | ||
| 1448 |
2/2✓ Branch 0 taken 506 times.
✓ Branch 1 taken 1522 times.
|
4056 | if (current->chroma_weight_l0_flag[i]) { |
| 1449 |
2/2✓ Branch 0 taken 1012 times.
✓ Branch 1 taken 506 times.
|
3036 | for (j = 0; j < 2; j++) { |
| 1450 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1012 times.
|
2024 | ses(delta_chroma_weight_l0[i][j], -128, +127, 2, i, j); |
| 1451 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1012 times.
|
2024 | ses(chroma_offset_l0[i][j], |
| 1452 | -(4 << (sps->bit_depth_chroma_minus8 + 8 - 1)), | ||
| 1453 | ((4 << (sps->bit_depth_chroma_minus8 + 8 - 1)) - 1), 2, i, j); | ||
| 1454 | } | ||
| 1455 | } else { | ||
| 1456 |
2/2✓ Branch 0 taken 3044 times.
✓ Branch 1 taken 1522 times.
|
9132 | for (j = 0; j < 2; j++) { |
| 1457 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1522 times.
|
6088 | infer(delta_chroma_weight_l0[i][j], 0); |
| 1458 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1522 times.
|
6088 | infer(chroma_offset_l0[i][j], 0); |
| 1459 | } | ||
| 1460 | } | ||
| 1461 | } | ||
| 1462 | |||
| 1463 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 510 times.
|
1020 | if (current->slice_type == HEVC_SLICE_B) { |
| 1464 | ✗ | for (i = 0; i <= current->num_ref_idx_l1_active_minus1; i++) { | |
| 1465 | if (1 /* RefPicList1[i] is not CurrPic, nor is it in a different layer */) | ||
| 1466 | ✗ | flags(luma_weight_l1_flag[i], 1, i); | |
| 1467 | else | ||
| 1468 | infer(luma_weight_l1_flag[i], 0); | ||
| 1469 | } | ||
| 1470 | ✗ | if (chroma) { | |
| 1471 | ✗ | for (i = 0; i <= current->num_ref_idx_l1_active_minus1; i++) { | |
| 1472 | if (1 /* RefPicList1[i] is not CurrPic, nor is it in a different layer */) | ||
| 1473 | ✗ | flags(chroma_weight_l1_flag[i], 1, i); | |
| 1474 | else | ||
| 1475 | infer(chroma_weight_l1_flag[i], 0); | ||
| 1476 | } | ||
| 1477 | } | ||
| 1478 | |||
| 1479 | ✗ | for (i = 0; i <= current->num_ref_idx_l1_active_minus1; i++) { | |
| 1480 | ✗ | if (current->luma_weight_l1_flag[i]) { | |
| 1481 | ✗ | ses(delta_luma_weight_l1[i], -128, +127, 1, i); | |
| 1482 | ✗ | ses(luma_offset_l1[i], | |
| 1483 | -(1 << (sps->bit_depth_luma_minus8 + 8 - 1)), | ||
| 1484 | ((1 << (sps->bit_depth_luma_minus8 + 8 - 1)) - 1), 1, i); | ||
| 1485 | } else { | ||
| 1486 | ✗ | infer(delta_luma_weight_l1[i], 0); | |
| 1487 | ✗ | infer(luma_offset_l1[i], 0); | |
| 1488 | } | ||
| 1489 | ✗ | if (current->chroma_weight_l1_flag[i]) { | |
| 1490 | ✗ | for (j = 0; j < 2; j++) { | |
| 1491 | ✗ | ses(delta_chroma_weight_l1[i][j], -128, +127, 2, i, j); | |
| 1492 | ✗ | ses(chroma_offset_l1[i][j], | |
| 1493 | -(4 << (sps->bit_depth_chroma_minus8 + 8 - 1)), | ||
| 1494 | ((4 << (sps->bit_depth_chroma_minus8 + 8 - 1)) - 1), 2, i, j); | ||
| 1495 | } | ||
| 1496 | } else { | ||
| 1497 | ✗ | for (j = 0; j < 2; j++) { | |
| 1498 | ✗ | infer(delta_chroma_weight_l1[i][j], 0); | |
| 1499 | ✗ | infer(chroma_offset_l1[i][j], 0); | |
| 1500 | } | ||
| 1501 | } | ||
| 1502 | } | ||
| 1503 | } | ||
| 1504 | |||
| 1505 | 1020 | return 0; | |
| 1506 | } | ||
| 1507 | |||
| 1508 | 26738 | static int FUNC(slice_segment_header)(CodedBitstreamContext *ctx, RWContext *rw, | |
| 1509 | H265RawSliceHeader *current) | ||
| 1510 | { | ||
| 1511 | 26738 | CodedBitstreamH265Context *h265 = ctx->priv_data; | |
| 1512 | const H265RawSPS *sps; | ||
| 1513 | const H265RawPPS *pps; | ||
| 1514 | unsigned int min_cb_log2_size_y, ctb_log2_size_y, ctb_size_y; | ||
| 1515 | unsigned int pic_width_in_ctbs_y, pic_height_in_ctbs_y, pic_size_in_ctbs_y; | ||
| 1516 | 26738 | unsigned int num_pic_total_curr = 0; | |
| 1517 | int err, i; | ||
| 1518 | |||
| 1519 | 26738 | HEADER("Slice Segment Header"); | |
| 1520 | |||
| 1521 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 13369 times.
|
26738 | CHECK(FUNC(nal_unit_header)(ctx, rw, ¤t->nal_unit_header, -1)); |
| 1522 | |||
| 1523 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 13369 times.
|
26738 | flag(first_slice_segment_in_pic_flag); |
| 1524 | |||
| 1525 |
2/2✓ Branch 0 taken 272 times.
✓ Branch 1 taken 13097 times.
|
26738 | if (current->nal_unit_header.nal_unit_type >= HEVC_NAL_BLA_W_LP && |
| 1526 |
1/2✓ Branch 0 taken 272 times.
✗ Branch 1 not taken.
|
544 | current->nal_unit_header.nal_unit_type <= HEVC_NAL_RSV_IRAP_VCL23) |
| 1527 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 272 times.
|
544 | flag(no_output_of_prior_pics_flag); |
| 1528 | |||
| 1529 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 13369 times.
|
26738 | ue(slice_pic_parameter_set_id, 0, 63); |
| 1530 | |||
| 1531 | 26738 | pps = h265->pps[current->slice_pic_parameter_set_id]; | |
| 1532 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 13369 times.
|
26738 | if (!pps) { |
| 1533 | ✗ | av_log(ctx->log_ctx, AV_LOG_ERROR, "PPS id %d not available.\n", | |
| 1534 | ✗ | current->slice_pic_parameter_set_id); | |
| 1535 | ✗ | return AVERROR_INVALIDDATA; | |
| 1536 | } | ||
| 1537 | 26738 | h265->active_pps = pps; | |
| 1538 | |||
| 1539 | 26738 | sps = h265->sps[pps->pps_seq_parameter_set_id]; | |
| 1540 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 13369 times.
|
26738 | if (!sps) { |
| 1541 | ✗ | av_log(ctx->log_ctx, AV_LOG_ERROR, "SPS id %d not available.\n", | |
| 1542 | ✗ | pps->pps_seq_parameter_set_id); | |
| 1543 | ✗ | return AVERROR_INVALIDDATA; | |
| 1544 | } | ||
| 1545 | 26738 | h265->active_sps = sps; | |
| 1546 | |||
| 1547 | 26738 | min_cb_log2_size_y = sps->log2_min_luma_coding_block_size_minus3 + 3; | |
| 1548 | 26738 | ctb_log2_size_y = min_cb_log2_size_y + sps->log2_diff_max_min_luma_coding_block_size; | |
| 1549 | 26738 | ctb_size_y = 1 << ctb_log2_size_y; | |
| 1550 | 26738 | pic_width_in_ctbs_y = | |
| 1551 | 26738 | (sps->pic_width_in_luma_samples + ctb_size_y - 1) / ctb_size_y; | |
| 1552 | 26738 | pic_height_in_ctbs_y = | |
| 1553 | 26738 | (sps->pic_height_in_luma_samples + ctb_size_y - 1) / ctb_size_y; | |
| 1554 | 26738 | pic_size_in_ctbs_y = pic_width_in_ctbs_y * pic_height_in_ctbs_y; | |
| 1555 | |||
| 1556 |
2/2✓ Branch 0 taken 8736 times.
✓ Branch 1 taken 4633 times.
|
26738 | if (!current->first_slice_segment_in_pic_flag) { |
| 1557 | 17472 | unsigned int address_size = av_log2(pic_size_in_ctbs_y - 1) + 1; | |
| 1558 |
2/2✓ Branch 0 taken 5354 times.
✓ Branch 1 taken 3382 times.
|
17472 | if (pps->dependent_slice_segments_enabled_flag) |
| 1559 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 5354 times.
|
10708 | flag(dependent_slice_segment_flag); |
| 1560 | else | ||
| 1561 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1691 times.
|
6764 | infer(dependent_slice_segment_flag, 0); |
| 1562 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 8736 times.
|
17472 | u(address_size, slice_segment_address, 0, pic_size_in_ctbs_y - 1); |
| 1563 | } else { | ||
| 1564 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 2234 times.
|
9266 | infer(dependent_slice_segment_flag, 0); |
| 1565 | } | ||
| 1566 | |||
| 1567 |
2/2✓ Branch 0 taken 8859 times.
✓ Branch 1 taken 4510 times.
|
26738 | if (!current->dependent_slice_segment_flag) { |
| 1568 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 8859 times.
|
17718 | for (i = 0; i < pps->num_extra_slice_header_bits; i++) |
| 1569 | ✗ | flags(slice_reserved_flag[i], 1, i); | |
| 1570 | |||
| 1571 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 8859 times.
|
17718 | ue(slice_type, 0, 2); |
| 1572 | |||
| 1573 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 8859 times.
|
17718 | if (pps->output_flag_present_flag) |
| 1574 | ✗ | flag(pic_output_flag); | |
| 1575 | |||
| 1576 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 8859 times.
|
17718 | if (sps->separate_colour_plane_flag) |
| 1577 | ✗ | u(2, colour_plane_id, 0, 2); | |
| 1578 | |||
| 1579 |
2/2✓ Branch 0 taken 8741 times.
✓ Branch 1 taken 118 times.
|
17718 | if (current->nal_unit_header.nal_unit_type != HEVC_NAL_IDR_W_RADL && |
| 1580 |
2/2✓ Branch 0 taken 8739 times.
✓ Branch 1 taken 2 times.
|
17482 | current->nal_unit_header.nal_unit_type != HEVC_NAL_IDR_N_LP) { |
| 1581 | const H265RawSTRefPicSet *rps; | ||
| 1582 | int dpb_slots_remaining; | ||
| 1583 | |||
| 1584 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 8739 times.
|
17478 | ub(sps->log2_max_pic_order_cnt_lsb_minus4 + 4, slice_pic_order_cnt_lsb); |
| 1585 | |||
| 1586 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 8739 times.
|
17478 | flag(short_term_ref_pic_set_sps_flag); |
| 1587 |
2/2✓ Branch 0 taken 3769 times.
✓ Branch 1 taken 4970 times.
|
17478 | if (!current->short_term_ref_pic_set_sps_flag) { |
| 1588 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 3769 times.
|
7538 | CHECK(FUNC(st_ref_pic_set)(ctx, rw, ¤t->short_term_ref_pic_set, |
| 1589 | sps->num_short_term_ref_pic_sets, sps)); | ||
| 1590 | 7538 | rps = ¤t->short_term_ref_pic_set; | |
| 1591 |
1/2✓ Branch 0 taken 4970 times.
✗ Branch 1 not taken.
|
9940 | } else if (sps->num_short_term_ref_pic_sets > 1) { |
| 1592 | 9940 | unsigned int idx_size = av_log2(sps->num_short_term_ref_pic_sets - 1) + 1; | |
| 1593 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 4970 times.
|
9940 | u(idx_size, short_term_ref_pic_set_idx, |
| 1594 | 0, sps->num_short_term_ref_pic_sets - 1); | ||
| 1595 | 9940 | rps = &sps->st_ref_pic_set[current->short_term_ref_pic_set_idx]; | |
| 1596 | } else { | ||
| 1597 | ✗ | infer(short_term_ref_pic_set_idx, 0); | |
| 1598 | ✗ | rps = &sps->st_ref_pic_set[0]; | |
| 1599 | } | ||
| 1600 | |||
| 1601 | 17478 | dpb_slots_remaining = HEVC_MAX_DPB_SIZE - 1 - | |
| 1602 | 17478 | rps->num_negative_pics - rps->num_positive_pics; | |
| 1603 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 8739 times.
|
17478 | if (pps->pps_curr_pic_ref_enabled_flag && |
| 1604 | ✗ | (sps->sample_adaptive_offset_enabled_flag || | |
| 1605 | ✗ | !pps->pps_deblocking_filter_disabled_flag || | |
| 1606 | ✗ | pps->deblocking_filter_override_enabled_flag)) { | |
| 1607 | // This picture will occupy two DPB slots. | ||
| 1608 | ✗ | if (dpb_slots_remaining == 0) { | |
| 1609 | ✗ | av_log(ctx->log_ctx, AV_LOG_ERROR, "Invalid stream: " | |
| 1610 | "short-term ref pic set contains too many pictures " | ||
| 1611 | "to use with current picture reference enabled.\n"); | ||
| 1612 | ✗ | return AVERROR_INVALIDDATA; | |
| 1613 | } | ||
| 1614 | ✗ | --dpb_slots_remaining; | |
| 1615 | } | ||
| 1616 | |||
| 1617 | 17478 | num_pic_total_curr = 0; | |
| 1618 |
2/2✓ Branch 0 taken 23439 times.
✓ Branch 1 taken 8739 times.
|
64356 | for (i = 0; i < rps->num_negative_pics; i++) |
| 1619 |
2/2✓ Branch 0 taken 22383 times.
✓ Branch 1 taken 1056 times.
|
46878 | if (rps->used_by_curr_pic_s0_flag[i]) |
| 1620 | 44766 | ++num_pic_total_curr; | |
| 1621 |
2/2✓ Branch 0 taken 6642 times.
✓ Branch 1 taken 8739 times.
|
30762 | for (i = 0; i < rps->num_positive_pics; i++) |
| 1622 |
2/2✓ Branch 0 taken 6352 times.
✓ Branch 1 taken 290 times.
|
13284 | if (rps->used_by_curr_pic_s1_flag[i]) |
| 1623 | 12704 | ++num_pic_total_curr; | |
| 1624 | |||
| 1625 |
2/2✓ Branch 0 taken 1664 times.
✓ Branch 1 taken 7075 times.
|
17478 | if (sps->long_term_ref_pics_present_flag) { |
| 1626 | unsigned int idx_size; | ||
| 1627 | |||
| 1628 |
2/2✓ Branch 0 taken 998 times.
✓ Branch 1 taken 666 times.
|
3328 | if (sps->num_long_term_ref_pics_sps > 0) { |
| 1629 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 998 times.
|
1996 | ue(num_long_term_sps, 0, FFMIN(sps->num_long_term_ref_pics_sps, |
| 1630 | dpb_slots_remaining)); | ||
| 1631 | 1996 | idx_size = av_log2(sps->num_long_term_ref_pics_sps - 1) + 1; | |
| 1632 | 1996 | dpb_slots_remaining -= current->num_long_term_sps; | |
| 1633 | } else { | ||
| 1634 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 333 times.
|
1332 | infer(num_long_term_sps, 0); |
| 1635 | 1332 | idx_size = 0; | |
| 1636 | } | ||
| 1637 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1664 times.
|
3328 | ue(num_long_term_pics, 0, dpb_slots_remaining); |
| 1638 | |||
| 1639 | 3328 | for (i = 0; i < current->num_long_term_sps + | |
| 1640 |
2/2✓ Branch 0 taken 2820 times.
✓ Branch 1 taken 1664 times.
|
8968 | current->num_long_term_pics; i++) { |
| 1641 |
2/2✓ Branch 0 taken 368 times.
✓ Branch 1 taken 2452 times.
|
5640 | if (i < current->num_long_term_sps) { |
| 1642 |
1/2✓ Branch 0 taken 368 times.
✗ Branch 1 not taken.
|
736 | if (sps->num_long_term_ref_pics_sps > 1) |
| 1643 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 368 times.
|
736 | us(idx_size, lt_idx_sps[i], |
| 1644 | 0, sps->num_long_term_ref_pics_sps - 1, 1, i); | ||
| 1645 |
2/2✓ Branch 0 taken 176 times.
✓ Branch 1 taken 192 times.
|
736 | if (sps->used_by_curr_pic_lt_sps_flag[current->lt_idx_sps[i]]) |
| 1646 | 352 | ++num_pic_total_curr; | |
| 1647 | } else { | ||
| 1648 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 2452 times.
|
4904 | ubs(sps->log2_max_pic_order_cnt_lsb_minus4 + 4, poc_lsb_lt[i], 1, i); |
| 1649 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 2452 times.
|
4904 | flags(used_by_curr_pic_lt_flag[i], 1, i); |
| 1650 |
2/2✓ Branch 0 taken 756 times.
✓ Branch 1 taken 1696 times.
|
4904 | if (current->used_by_curr_pic_lt_flag[i]) |
| 1651 | 1512 | ++num_pic_total_curr; | |
| 1652 | } | ||
| 1653 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 2820 times.
|
5640 | flags(delta_poc_msb_present_flag[i], 1, i); |
| 1654 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 2820 times.
|
5640 | if (current->delta_poc_msb_present_flag[i]) |
| 1655 | ✗ | ues(delta_poc_msb_cycle_lt[i], 0, UINT32_MAX - 1, 1, i); | |
| 1656 | else | ||
| 1657 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1410 times.
|
5640 | infer(delta_poc_msb_cycle_lt[i], 0); |
| 1658 | } | ||
| 1659 | } | ||
| 1660 | |||
| 1661 |
2/2✓ Branch 0 taken 6093 times.
✓ Branch 1 taken 2646 times.
|
17478 | if (sps->sps_temporal_mvp_enabled_flag) |
| 1662 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 6093 times.
|
12186 | flag(slice_temporal_mvp_enabled_flag); |
| 1663 | else | ||
| 1664 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1323 times.
|
5292 | infer(slice_temporal_mvp_enabled_flag, 0); |
| 1665 | |||
| 1666 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 8739 times.
|
17478 | if (pps->pps_curr_pic_ref_enabled_flag) |
| 1667 | ✗ | ++num_pic_total_curr; | |
| 1668 | } | ||
| 1669 | |||
| 1670 |
2/2✓ Branch 0 taken 5591 times.
✓ Branch 1 taken 3268 times.
|
17718 | if (sps->sample_adaptive_offset_enabled_flag) { |
| 1671 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 5591 times.
|
11182 | flag(slice_sao_luma_flag); |
| 1672 |
2/4✓ Branch 0 taken 5591 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5591 times.
✗ Branch 3 not taken.
|
11182 | if (!sps->separate_colour_plane_flag && sps->chroma_format_idc != 0) |
| 1673 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 5591 times.
|
11182 | flag(slice_sao_chroma_flag); |
| 1674 | else | ||
| 1675 | ✗ | infer(slice_sao_chroma_flag, 0); | |
| 1676 | } else { | ||
| 1677 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1634 times.
|
6536 | infer(slice_sao_luma_flag, 0); |
| 1678 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1634 times.
|
6536 | infer(slice_sao_chroma_flag, 0); |
| 1679 | } | ||
| 1680 | |||
| 1681 |
2/2✓ Branch 0 taken 5491 times.
✓ Branch 1 taken 3368 times.
|
17718 | if (current->slice_type == HEVC_SLICE_P || |
| 1682 |
2/2✓ Branch 0 taken 5271 times.
✓ Branch 1 taken 220 times.
|
10982 | current->slice_type == HEVC_SLICE_B) { |
| 1683 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 8639 times.
|
17278 | flag(num_ref_idx_active_override_flag); |
| 1684 |
2/2✓ Branch 0 taken 3693 times.
✓ Branch 1 taken 4946 times.
|
17278 | if (current->num_ref_idx_active_override_flag) { |
| 1685 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 3693 times.
|
7386 | ue(num_ref_idx_l0_active_minus1, 0, 14); |
| 1686 |
2/2✓ Branch 0 taken 953 times.
✓ Branch 1 taken 2740 times.
|
7386 | if (current->slice_type == HEVC_SLICE_B) |
| 1687 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 953 times.
|
1906 | ue(num_ref_idx_l1_active_minus1, 0, 14); |
| 1688 | else | ||
| 1689 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1370 times.
|
5480 | infer(num_ref_idx_l1_active_minus1, pps->num_ref_idx_l1_default_active_minus1); |
| 1690 | } else { | ||
| 1691 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 2187 times.
|
9892 | infer(num_ref_idx_l0_active_minus1, pps->num_ref_idx_l0_default_active_minus1); |
| 1692 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 2187 times.
|
9892 | infer(num_ref_idx_l1_active_minus1, pps->num_ref_idx_l1_default_active_minus1); |
| 1693 | } | ||
| 1694 | |||
| 1695 |
4/4✓ Branch 0 taken 1548 times.
✓ Branch 1 taken 7091 times.
✓ Branch 2 taken 1496 times.
✓ Branch 3 taken 52 times.
|
17278 | if (pps->lists_modification_present_flag && num_pic_total_curr > 1) |
| 1696 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1496 times.
|
2992 | CHECK(FUNC(ref_pic_lists_modification)(ctx, rw, current, |
| 1697 | num_pic_total_curr)); | ||
| 1698 | |||
| 1699 |
2/2✓ Branch 0 taken 5271 times.
✓ Branch 1 taken 3368 times.
|
17278 | if (current->slice_type == HEVC_SLICE_B) |
| 1700 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 5271 times.
|
10542 | flag(mvd_l1_zero_flag); |
| 1701 |
2/2✓ Branch 0 taken 5823 times.
✓ Branch 1 taken 2816 times.
|
17278 | if (pps->cabac_init_present_flag) |
| 1702 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 5823 times.
|
11646 | flag(cabac_init_flag); |
| 1703 | else | ||
| 1704 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1408 times.
|
5632 | infer(cabac_init_flag, 0); |
| 1705 |
2/2✓ Branch 0 taken 6003 times.
✓ Branch 1 taken 2636 times.
|
17278 | if (current->slice_temporal_mvp_enabled_flag) { |
| 1706 |
2/2✓ Branch 0 taken 5271 times.
✓ Branch 1 taken 732 times.
|
12006 | if (current->slice_type == HEVC_SLICE_B) |
| 1707 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 5271 times.
|
10542 | flag(collocated_from_l0_flag); |
| 1708 | else | ||
| 1709 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 366 times.
|
1464 | infer(collocated_from_l0_flag, 1); |
| 1710 |
2/2✓ Branch 0 taken 2783 times.
✓ Branch 1 taken 3220 times.
|
12006 | if (current->collocated_from_l0_flag) { |
| 1711 |
2/2✓ Branch 0 taken 2547 times.
✓ Branch 1 taken 236 times.
|
5566 | if (current->num_ref_idx_l0_active_minus1 > 0) |
| 1712 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 2547 times.
|
5094 | ue(collocated_ref_idx, 0, current->num_ref_idx_l0_active_minus1); |
| 1713 | else | ||
| 1714 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 118 times.
|
472 | infer(collocated_ref_idx, 0); |
| 1715 | } else { | ||
| 1716 |
2/2✓ Branch 0 taken 3027 times.
✓ Branch 1 taken 193 times.
|
6440 | if (current->num_ref_idx_l1_active_minus1 > 0) |
| 1717 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 3027 times.
|
6054 | ue(collocated_ref_idx, 0, current->num_ref_idx_l1_active_minus1); |
| 1718 | else | ||
| 1719 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 95 times.
|
386 | infer(collocated_ref_idx, 0); |
| 1720 | } | ||
| 1721 | } | ||
| 1722 | |||
| 1723 |
3/4✓ Branch 0 taken 510 times.
✓ Branch 1 taken 8129 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 510 times.
|
17278 | if ((pps->weighted_pred_flag && current->slice_type == HEVC_SLICE_P) || |
| 1724 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 8129 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
16258 | (pps->weighted_bipred_flag && current->slice_type == HEVC_SLICE_B)) |
| 1725 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 510 times.
|
1020 | CHECK(FUNC(pred_weight_table)(ctx, rw, current)); |
| 1726 | |||
| 1727 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 8639 times.
|
17278 | ue(five_minus_max_num_merge_cand, 0, 4); |
| 1728 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 8639 times.
|
17278 | if (sps->motion_vector_resolution_control_idc == 2) |
| 1729 | ✗ | flag(use_integer_mv_flag); | |
| 1730 | else | ||
| 1731 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 4026 times.
|
17278 | infer(use_integer_mv_flag, sps->motion_vector_resolution_control_idc); |
| 1732 | } | ||
| 1733 | |||
| 1734 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 8859 times.
|
17718 | se(slice_qp_delta, |
| 1735 | - 6 * sps->bit_depth_luma_minus8 - (pps->init_qp_minus26 + 26), | ||
| 1736 | + 51 - (pps->init_qp_minus26 + 26)); | ||
| 1737 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 8859 times.
|
17718 | if (pps->pps_slice_chroma_qp_offsets_present_flag) { |
| 1738 | ✗ | se(slice_cb_qp_offset, -12, +12); | |
| 1739 | ✗ | se(slice_cr_qp_offset, -12, +12); | |
| 1740 | } else { | ||
| 1741 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 4136 times.
|
17718 | infer(slice_cb_qp_offset, 0); |
| 1742 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 4136 times.
|
17718 | infer(slice_cr_qp_offset, 0); |
| 1743 | } | ||
| 1744 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 8859 times.
|
17718 | if (pps->pps_slice_act_qp_offsets_present_flag) { |
| 1745 | ✗ | se(slice_act_y_qp_offset, | |
| 1746 | -12 - (pps->pps_act_y_qp_offset_plus5 - 5), | ||
| 1747 | +12 - (pps->pps_act_y_qp_offset_plus5 - 5)); | ||
| 1748 | ✗ | se(slice_act_cb_qp_offset, | |
| 1749 | -12 - (pps->pps_act_cb_qp_offset_plus5 - 5), | ||
| 1750 | +12 - (pps->pps_act_cb_qp_offset_plus5 - 5)); | ||
| 1751 | ✗ | se(slice_act_cr_qp_offset, | |
| 1752 | -12 - (pps->pps_act_cr_qp_offset_plus3 - 3), | ||
| 1753 | +12 - (pps->pps_act_cr_qp_offset_plus3 - 3)); | ||
| 1754 | } else { | ||
| 1755 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 4136 times.
|
17718 | infer(slice_act_y_qp_offset, 0); |
| 1756 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 4136 times.
|
17718 | infer(slice_act_cb_qp_offset, 0); |
| 1757 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 4136 times.
|
17718 | infer(slice_act_cr_qp_offset, 0); |
| 1758 | } | ||
| 1759 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 8859 times.
|
17718 | if (pps->chroma_qp_offset_list_enabled_flag) |
| 1760 | ✗ | flag(cu_chroma_qp_offset_enabled_flag); | |
| 1761 | else | ||
| 1762 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 4136 times.
|
17718 | infer(cu_chroma_qp_offset_enabled_flag, 0); |
| 1763 | |||
| 1764 |
2/2✓ Branch 0 taken 74 times.
✓ Branch 1 taken 8785 times.
|
17718 | if (pps->deblocking_filter_override_enabled_flag) |
| 1765 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 74 times.
|
148 | flag(deblocking_filter_override_flag); |
| 1766 | else | ||
| 1767 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 4099 times.
|
17570 | infer(deblocking_filter_override_flag, 0); |
| 1768 |
2/2✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8857 times.
|
17718 | if (current->deblocking_filter_override_flag) { |
| 1769 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
|
4 | flag(slice_deblocking_filter_disabled_flag); |
| 1770 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
|
4 | if (!current->slice_deblocking_filter_disabled_flag) { |
| 1771 | ✗ | se(slice_beta_offset_div2, -6, +6); | |
| 1772 | ✗ | se(slice_tc_offset_div2, -6, +6); | |
| 1773 | } else { | ||
| 1774 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
4 | infer(slice_beta_offset_div2, pps->pps_beta_offset_div2); |
| 1775 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
4 | infer(slice_tc_offset_div2, pps->pps_tc_offset_div2); |
| 1776 | } | ||
| 1777 | } else { | ||
| 1778 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 4135 times.
|
17714 | infer(slice_deblocking_filter_disabled_flag, |
| 1779 | pps->pps_deblocking_filter_disabled_flag); | ||
| 1780 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 4135 times.
|
17714 | infer(slice_beta_offset_div2, pps->pps_beta_offset_div2); |
| 1781 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 4135 times.
|
17714 | infer(slice_tc_offset_div2, pps->pps_tc_offset_div2); |
| 1782 | } | ||
| 1783 |
2/2✓ Branch 0 taken 7369 times.
✓ Branch 1 taken 1490 times.
|
17718 | if (pps->pps_loop_filter_across_slices_enabled_flag && |
| 1784 |
3/4✓ Branch 0 taken 5227 times.
✓ Branch 1 taken 2142 times.
✓ Branch 2 taken 5227 times.
✗ Branch 3 not taken.
|
14738 | (current->slice_sao_luma_flag || current->slice_sao_chroma_flag || |
| 1785 |
2/2✓ Branch 0 taken 5225 times.
✓ Branch 1 taken 2 times.
|
10454 | !current->slice_deblocking_filter_disabled_flag)) |
| 1786 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 7367 times.
|
14734 | flag(slice_loop_filter_across_slices_enabled_flag); |
| 1787 | else | ||
| 1788 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 746 times.
|
2984 | infer(slice_loop_filter_across_slices_enabled_flag, |
| 1789 | pps->pps_loop_filter_across_slices_enabled_flag); | ||
| 1790 | } | ||
| 1791 | |||
| 1792 |
4/4✓ Branch 0 taken 10633 times.
✓ Branch 1 taken 2736 times.
✓ Branch 2 taken 2365 times.
✓ Branch 3 taken 8268 times.
|
26738 | if (pps->tiles_enabled_flag || pps->entropy_coding_sync_enabled_flag) { |
| 1793 | unsigned int num_entry_point_offsets_limit; | ||
| 1794 |
3/4✓ Branch 0 taken 2365 times.
✓ Branch 1 taken 2736 times.
✓ Branch 2 taken 2365 times.
✗ Branch 3 not taken.
|
10202 | if (!pps->tiles_enabled_flag && pps->entropy_coding_sync_enabled_flag) |
| 1795 | 4730 | num_entry_point_offsets_limit = pic_height_in_ctbs_y - 1; | |
| 1796 |
2/4✓ Branch 0 taken 2736 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2736 times.
✗ Branch 3 not taken.
|
5472 | else if (pps->tiles_enabled_flag && !pps->entropy_coding_sync_enabled_flag) |
| 1797 | 5472 | num_entry_point_offsets_limit = | |
| 1798 | 5472 | (pps->num_tile_columns_minus1 + 1) * (pps->num_tile_rows_minus1 + 1); | |
| 1799 | else | ||
| 1800 | ✗ | num_entry_point_offsets_limit = | |
| 1801 | ✗ | (pps->num_tile_columns_minus1 + 1) * pic_height_in_ctbs_y - 1; | |
| 1802 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 5101 times.
|
10202 | ue(num_entry_point_offsets, 0, num_entry_point_offsets_limit); |
| 1803 | |||
| 1804 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 5101 times.
|
10202 | if (current->num_entry_point_offsets > HEVC_MAX_ENTRY_POINT_OFFSETS) { |
| 1805 | ✗ | av_log(ctx->log_ctx, AV_LOG_ERROR, "Too many entry points: " | |
| 1806 | ✗ | "%"PRIu16".\n", current->num_entry_point_offsets); | |
| 1807 | ✗ | return AVERROR_PATCHWELCOME; | |
| 1808 | } | ||
| 1809 | |||
| 1810 |
2/2✓ Branch 0 taken 1703 times.
✓ Branch 1 taken 3398 times.
|
10202 | if (current->num_entry_point_offsets > 0) { |
| 1811 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1703 times.
|
3406 | ue(offset_len_minus1, 0, 31); |
| 1812 |
2/2✓ Branch 0 taken 3481 times.
✓ Branch 1 taken 1703 times.
|
10368 | for (i = 0; i < current->num_entry_point_offsets; i++) |
| 1813 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 3481 times.
|
6962 | ubs(current->offset_len_minus1 + 1, entry_point_offset_minus1[i], 1, i); |
| 1814 | } | ||
| 1815 | } | ||
| 1816 | |||
| 1817 |
2/2✓ Branch 0 taken 2365 times.
✓ Branch 1 taken 11004 times.
|
26738 | if (pps->slice_segment_header_extension_present_flag) { |
| 1818 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 2365 times.
|
4730 | ue(slice_segment_header_extension_length, 0, 256); |
| 1819 |
2/2✓ Branch 0 taken 16835 times.
✓ Branch 1 taken 2365 times.
|
38400 | for (i = 0; i < current->slice_segment_header_extension_length; i++) |
| 1820 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 16835 times.
|
33670 | us(8, slice_segment_header_extension_data_byte[i], 0x00, 0xff, 1, i); |
| 1821 | } | ||
| 1822 | |||
| 1823 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 13369 times.
|
26738 | CHECK(FUNC(byte_alignment)(ctx, rw)); |
| 1824 | |||
| 1825 | 26738 | return 0; | |
| 1826 | } | ||
| 1827 | |||
| 1828 | 60 | SEI_FUNC(sei_buffering_period, (CodedBitstreamContext *ctx, RWContext *rw, | |
| 1829 | H265RawSEIBufferingPeriod *current, | ||
| 1830 | SEIMessageState *sei)) | ||
| 1831 | { | ||
| 1832 | 30 | CodedBitstreamH265Context *h265 = ctx->priv_data; | |
| 1833 | const H265RawSPS *sps; | ||
| 1834 | const H265RawHRDParameters *hrd; | ||
| 1835 | int err, i, length; | ||
| 1836 | |||
| 1837 | #ifdef READ | ||
| 1838 | int start_pos, end_pos; | ||
| 1839 | 10 | start_pos = get_bits_count(rw); | |
| 1840 | #endif | ||
| 1841 | |||
| 1842 | 30 | HEADER("Buffering Period"); | |
| 1843 | |||
| 1844 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 15 times.
|
30 | ue(bp_seq_parameter_set_id, 0, HEVC_MAX_SPS_COUNT - 1); |
| 1845 | |||
| 1846 | 30 | sps = h265->sps[current->bp_seq_parameter_set_id]; | |
| 1847 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 15 times.
|
30 | if (!sps) { |
| 1848 | ✗ | av_log(ctx->log_ctx, AV_LOG_ERROR, "SPS id %d not available.\n", | |
| 1849 | ✗ | current->bp_seq_parameter_set_id); | |
| 1850 | ✗ | return AVERROR_INVALIDDATA; | |
| 1851 | } | ||
| 1852 | 30 | h265->active_sps = sps; | |
| 1853 | |||
| 1854 |
1/2✓ Branch 0 taken 15 times.
✗ Branch 1 not taken.
|
30 | if (!sps->vui_parameters_present_flag || |
| 1855 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 15 times.
|
30 | !sps->vui.vui_hrd_parameters_present_flag) { |
| 1856 | ✗ | av_log(ctx->log_ctx, AV_LOG_ERROR, "Buffering period SEI requires " | |
| 1857 | "HRD parameters to be present in SPS.\n"); | ||
| 1858 | ✗ | return AVERROR_INVALIDDATA; | |
| 1859 | } | ||
| 1860 | 30 | hrd = &sps->vui.hrd_parameters; | |
| 1861 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 15 times.
|
30 | if (!hrd->nal_hrd_parameters_present_flag && |
| 1862 | ✗ | !hrd->vcl_hrd_parameters_present_flag) { | |
| 1863 | ✗ | av_log(ctx->log_ctx, AV_LOG_ERROR, "Buffering period SEI requires " | |
| 1864 | "NAL or VCL HRD parameters to be present.\n"); | ||
| 1865 | ✗ | return AVERROR_INVALIDDATA; | |
| 1866 | } | ||
| 1867 | |||
| 1868 |
2/2✓ Branch 0 taken 6 times.
✓ Branch 1 taken 9 times.
|
30 | if (!hrd->sub_pic_hrd_params_present_flag) |
| 1869 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 6 times.
|
12 | flag(irap_cpb_params_present_flag); |
| 1870 | else | ||
| 1871 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 6 times.
|
18 | infer(irap_cpb_params_present_flag, 0); |
| 1872 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 15 times.
|
30 | if (current->irap_cpb_params_present_flag) { |
| 1873 | ✗ | length = hrd->au_cpb_removal_delay_length_minus1 + 1; | |
| 1874 | ✗ | ub(length, cpb_delay_offset); | |
| 1875 | ✗ | length = hrd->dpb_output_delay_length_minus1 + 1; | |
| 1876 | ✗ | ub(length, dpb_delay_offset); | |
| 1877 | } else { | ||
| 1878 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
30 | infer(cpb_delay_offset, 0); |
| 1879 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
30 | infer(dpb_delay_offset, 0); |
| 1880 | } | ||
| 1881 | |||
| 1882 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 15 times.
|
30 | flag(concatenation_flag); |
| 1883 | |||
| 1884 | 30 | length = hrd->au_cpb_removal_delay_length_minus1 + 1; | |
| 1885 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 15 times.
|
30 | ub(length, au_cpb_removal_delay_delta_minus1); |
| 1886 | |||
| 1887 |
1/2✓ Branch 0 taken 15 times.
✗ Branch 1 not taken.
|
30 | if (hrd->nal_hrd_parameters_present_flag) { |
| 1888 |
2/2✓ Branch 0 taken 15 times.
✓ Branch 1 taken 15 times.
|
60 | for (i = 0; i <= hrd->cpb_cnt_minus1[0]; i++) { |
| 1889 | 30 | length = hrd->initial_cpb_removal_delay_length_minus1 + 1; | |
| 1890 | |||
| 1891 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 15 times.
|
30 | ubs(length, nal_initial_cpb_removal_delay[i], 1, i); |
| 1892 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 15 times.
|
30 | ubs(length, nal_initial_cpb_removal_offset[i], 1, i); |
| 1893 | |||
| 1894 |
2/2✓ Branch 0 taken 6 times.
✓ Branch 1 taken 9 times.
|
30 | if (hrd->sub_pic_hrd_params_present_flag || |
| 1895 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 6 times.
|
12 | current->irap_cpb_params_present_flag) { |
| 1896 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 9 times.
|
18 | ubs(length, nal_initial_alt_cpb_removal_delay[i], 1, i); |
| 1897 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 9 times.
|
18 | ubs(length, nal_initial_alt_cpb_removal_offset[i], 1, i); |
| 1898 | } | ||
| 1899 | } | ||
| 1900 | } | ||
| 1901 |
1/2✓ Branch 0 taken 15 times.
✗ Branch 1 not taken.
|
30 | if (hrd->vcl_hrd_parameters_present_flag) { |
| 1902 |
2/2✓ Branch 0 taken 15 times.
✓ Branch 1 taken 15 times.
|
60 | for (i = 0; i <= hrd->cpb_cnt_minus1[0]; i++) { |
| 1903 | 30 | length = hrd->initial_cpb_removal_delay_length_minus1 + 1; | |
| 1904 | |||
| 1905 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 15 times.
|
30 | ubs(length, vcl_initial_cpb_removal_delay[i], 1, i); |
| 1906 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 15 times.
|
30 | ubs(length, vcl_initial_cpb_removal_offset[i], 1, i); |
| 1907 | |||
| 1908 |
2/2✓ Branch 0 taken 6 times.
✓ Branch 1 taken 9 times.
|
30 | if (hrd->sub_pic_hrd_params_present_flag || |
| 1909 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 6 times.
|
12 | current->irap_cpb_params_present_flag) { |
| 1910 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 9 times.
|
18 | ubs(length, vcl_initial_alt_cpb_removal_delay[i], 1, i); |
| 1911 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 9 times.
|
18 | ubs(length, vcl_initial_alt_cpb_removal_offset[i], 1, i); |
| 1912 | } | ||
| 1913 | } | ||
| 1914 | } | ||
| 1915 | |||
| 1916 | #ifdef READ | ||
| 1917 | 10 | end_pos = get_bits_count(rw); | |
| 1918 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 5 times.
|
10 | if (cbs_h265_payload_extension_present(rw, sei->payload_size, |
| 1919 | end_pos - start_pos)) | ||
| 1920 | ✗ | flag(use_alt_cpb_params_flag); | |
| 1921 | else | ||
| 1922 | 10 | infer(use_alt_cpb_params_flag, 0); | |
| 1923 | #else | ||
| 1924 | // If unknown extension data exists, then use_alt_cpb_params_flag is | ||
| 1925 | // coded in the bitstream and must be written even if it's 0. | ||
| 1926 |
2/4✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
|
20 | if (current->use_alt_cpb_params_flag || sei->extension_present) { |
| 1927 | ✗ | flag(use_alt_cpb_params_flag); | |
| 1928 | // Ensure this bit is not the last in the payload by making the | ||
| 1929 | // more_data_in_payload() check evaluate to true, so it may not | ||
| 1930 | // be mistaken as something else by decoders. | ||
| 1931 | ✗ | sei->extension_present = 1; | |
| 1932 | } | ||
| 1933 | #endif | ||
| 1934 | |||
| 1935 | 30 | return 0; | |
| 1936 | } | ||
| 1937 | |||
| 1938 | 1872 | SEI_FUNC(sei_pic_timing, (CodedBitstreamContext *ctx, RWContext *rw, | |
| 1939 | H265RawSEIPicTiming *current, SEIMessageState *sei)) | ||
| 1940 | { | ||
| 1941 | 936 | CodedBitstreamH265Context *h265 = ctx->priv_data; | |
| 1942 | const H265RawSPS *sps; | ||
| 1943 | const H265RawHRDParameters *hrd; | ||
| 1944 | int err, expected_source_scan_type, i, length; | ||
| 1945 | |||
| 1946 | 936 | HEADER("Picture Timing"); | |
| 1947 | |||
| 1948 | 936 | sps = h265->active_sps; | |
| 1949 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 468 times.
|
936 | if (!sps) { |
| 1950 | ✗ | av_log(ctx->log_ctx, AV_LOG_ERROR, | |
| 1951 | "No active SPS for pic_timing.\n"); | ||
| 1952 | ✗ | return AVERROR_INVALIDDATA; | |
| 1953 | } | ||
| 1954 | |||
| 1955 | 936 | expected_source_scan_type = 2 - | |
| 1956 | 936 | 2 * sps->profile_tier_level.general_interlaced_source_flag - | |
| 1957 | 936 | sps->profile_tier_level.general_progressive_source_flag; | |
| 1958 | |||
| 1959 |
2/2✓ Branch 0 taken 180 times.
✓ Branch 1 taken 288 times.
|
936 | if (sps->vui.frame_field_info_present_flag) { |
| 1960 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 180 times.
|
360 | u(4, pic_struct, 0, 12); |
| 1961 |
2/4✓ Branch 0 taken 180 times.
✗ Branch 1 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 180 times.
|
360 | u(2, source_scan_type, |
| 1962 | expected_source_scan_type >= 0 ? expected_source_scan_type : 0, | ||
| 1963 | expected_source_scan_type >= 0 ? expected_source_scan_type : 2); | ||
| 1964 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 180 times.
|
360 | flag(duplicate_flag); |
| 1965 | } else { | ||
| 1966 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 192 times.
|
576 | infer(pic_struct, 0); |
| 1967 |
2/6✓ Branch 0 taken 288 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 192 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
576 | infer(source_scan_type, |
| 1968 | expected_source_scan_type >= 0 ? expected_source_scan_type : 2); | ||
| 1969 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 192 times.
|
576 | infer(duplicate_flag, 0); |
| 1970 | } | ||
| 1971 | |||
| 1972 |
1/2✓ Branch 0 taken 468 times.
✗ Branch 1 not taken.
|
936 | if (sps->vui_parameters_present_flag && |
| 1973 |
1/2✓ Branch 0 taken 468 times.
✗ Branch 1 not taken.
|
936 | sps->vui.vui_hrd_parameters_present_flag) |
| 1974 | 936 | hrd = &sps->vui.hrd_parameters; | |
| 1975 | else | ||
| 1976 | ✗ | hrd = NULL; | |
| 1977 |
2/4✓ Branch 0 taken 468 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 468 times.
|
936 | if (hrd && (hrd->nal_hrd_parameters_present_flag || |
| 1978 | ✗ | hrd->vcl_hrd_parameters_present_flag)) { | |
| 1979 | 936 | length = hrd->au_cpb_removal_delay_length_minus1 + 1; | |
| 1980 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 468 times.
|
936 | ub(length, au_cpb_removal_delay_minus1); |
| 1981 | |||
| 1982 | 936 | length = hrd->dpb_output_delay_length_minus1 + 1; | |
| 1983 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 468 times.
|
936 | ub(length, pic_dpb_output_delay); |
| 1984 | |||
| 1985 |
2/2✓ Branch 0 taken 288 times.
✓ Branch 1 taken 180 times.
|
936 | if (hrd->sub_pic_hrd_params_present_flag) { |
| 1986 | 576 | length = hrd->dpb_output_delay_du_length_minus1 + 1; | |
| 1987 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 288 times.
|
576 | ub(length, pic_dpb_output_du_delay); |
| 1988 | } | ||
| 1989 | |||
| 1990 |
2/2✓ Branch 0 taken 288 times.
✓ Branch 1 taken 180 times.
|
936 | if (hrd->sub_pic_hrd_params_present_flag && |
| 1991 |
1/2✓ Branch 0 taken 288 times.
✗ Branch 1 not taken.
|
576 | hrd->sub_pic_cpb_params_in_pic_timing_sei_flag) { |
| 1992 | // Each decoding unit must contain at least one slice segment. | ||
| 1993 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 288 times.
|
576 | ue(num_decoding_units_minus1, 0, HEVC_MAX_SLICE_SEGMENTS); |
| 1994 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 288 times.
|
576 | flag(du_common_cpb_removal_delay_flag); |
| 1995 | |||
| 1996 | 576 | length = hrd->du_cpb_removal_delay_increment_length_minus1 + 1; | |
| 1997 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 288 times.
|
576 | if (current->du_common_cpb_removal_delay_flag) |
| 1998 | ✗ | ub(length, du_common_cpb_removal_delay_increment_minus1); | |
| 1999 | |||
| 2000 |
2/2✓ Branch 0 taken 1152 times.
✓ Branch 1 taken 288 times.
|
2880 | for (i = 0; i <= current->num_decoding_units_minus1; i++) { |
| 2001 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1152 times.
|
2304 | ues(num_nalus_in_du_minus1[i], |
| 2002 | 0, HEVC_MAX_SLICE_SEGMENTS, 1, i); | ||
| 2003 |
1/2✓ Branch 0 taken 1152 times.
✗ Branch 1 not taken.
|
2304 | if (!current->du_common_cpb_removal_delay_flag && |
| 2004 |
2/2✓ Branch 0 taken 864 times.
✓ Branch 1 taken 288 times.
|
2304 | i < current->num_decoding_units_minus1) |
| 2005 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 864 times.
|
1728 | ubs(length, du_cpb_removal_delay_increment_minus1[i], 1, i); |
| 2006 | } | ||
| 2007 | } | ||
| 2008 | } | ||
| 2009 | |||
| 2010 | 936 | return 0; | |
| 2011 | } | ||
| 2012 | |||
| 2013 | ✗ | SEI_FUNC(sei_pan_scan_rect, (CodedBitstreamContext *ctx, RWContext *rw, | |
| 2014 | H265RawSEIPanScanRect *current, | ||
| 2015 | SEIMessageState *sei)) | ||
| 2016 | { | ||
| 2017 | int err, i; | ||
| 2018 | |||
| 2019 | ✗ | HEADER("Pan-Scan Rectangle"); | |
| 2020 | |||
| 2021 | ✗ | ue(pan_scan_rect_id, 0, UINT32_MAX - 1); | |
| 2022 | ✗ | flag(pan_scan_rect_cancel_flag); | |
| 2023 | |||
| 2024 | ✗ | if (!current->pan_scan_rect_cancel_flag) { | |
| 2025 | ✗ | ue(pan_scan_cnt_minus1, 0, 2); | |
| 2026 | |||
| 2027 | ✗ | for (i = 0; i <= current->pan_scan_cnt_minus1; i++) { | |
| 2028 | ✗ | ses(pan_scan_rect_left_offset[i], INT32_MIN + 1, INT32_MAX, 1, i); | |
| 2029 | ✗ | ses(pan_scan_rect_right_offset[i], INT32_MIN + 1, INT32_MAX, 1, i); | |
| 2030 | ✗ | ses(pan_scan_rect_top_offset[i], INT32_MIN + 1, INT32_MAX, 1, i); | |
| 2031 | ✗ | ses(pan_scan_rect_bottom_offset[i], INT32_MIN + 1, INT32_MAX, 1, i); | |
| 2032 | } | ||
| 2033 | |||
| 2034 | ✗ | flag(pan_scan_rect_persistence_flag); | |
| 2035 | } | ||
| 2036 | |||
| 2037 | ✗ | return 0; | |
| 2038 | } | ||
| 2039 | |||
| 2040 | 60 | SEI_FUNC(sei_recovery_point, (CodedBitstreamContext *ctx, RWContext *rw, | |
| 2041 | H265RawSEIRecoveryPoint *current, | ||
| 2042 | SEIMessageState *sei)) | ||
| 2043 | { | ||
| 2044 | int err; | ||
| 2045 | |||
| 2046 | 30 | HEADER("Recovery Point"); | |
| 2047 | |||
| 2048 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 15 times.
|
30 | se(recovery_poc_cnt, -32768, 32767); |
| 2049 | |||
| 2050 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 15 times.
|
30 | flag(exact_match_flag); |
| 2051 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 15 times.
|
30 | flag(broken_link_flag); |
| 2052 | |||
| 2053 | 30 | return 0; | |
| 2054 | } | ||
| 2055 | |||
| 2056 | ✗ | SEI_FUNC(film_grain_characteristics, (CodedBitstreamContext *ctx, RWContext *rw, | |
| 2057 | H265RawFilmGrainCharacteristics *current, | ||
| 2058 | SEIMessageState *state)) | ||
| 2059 | { | ||
| 2060 | ✗ | CodedBitstreamH265Context *h265 = ctx->priv_data; | |
| 2061 | ✗ | const H265RawSPS *sps = h265->active_sps; | |
| 2062 | int err, c, i, j; | ||
| 2063 | |||
| 2064 | ✗ | HEADER("Film Grain Characteristics"); | |
| 2065 | |||
| 2066 | ✗ | flag(film_grain_characteristics_cancel_flag); | |
| 2067 | ✗ | if (!current->film_grain_characteristics_cancel_flag) { | |
| 2068 | int filmGrainBitDepth[3]; | ||
| 2069 | |||
| 2070 | ✗ | u(2, film_grain_model_id, 0, 1); | |
| 2071 | ✗ | flag(separate_colour_description_present_flag); | |
| 2072 | ✗ | if (current->separate_colour_description_present_flag) { | |
| 2073 | ✗ | ub(3, film_grain_bit_depth_luma_minus8); | |
| 2074 | ✗ | ub(3, film_grain_bit_depth_chroma_minus8); | |
| 2075 | ✗ | flag(film_grain_full_range_flag); | |
| 2076 | ✗ | ub(8, film_grain_colour_primaries); | |
| 2077 | ✗ | ub(8, film_grain_transfer_characteristics); | |
| 2078 | ✗ | ub(8, film_grain_matrix_coeffs); | |
| 2079 | } else { | ||
| 2080 | ✗ | if (!sps) { | |
| 2081 | ✗ | av_log(ctx->log_ctx, AV_LOG_ERROR, | |
| 2082 | "No active SPS for film_grain_characteristics.\n"); | ||
| 2083 | ✗ | return AVERROR_INVALIDDATA; | |
| 2084 | } | ||
| 2085 | ✗ | infer(film_grain_bit_depth_luma_minus8, sps->bit_depth_luma_minus8); | |
| 2086 | ✗ | infer(film_grain_bit_depth_chroma_minus8, sps->bit_depth_chroma_minus8); | |
| 2087 | ✗ | infer(film_grain_full_range_flag, sps->vui.video_full_range_flag); | |
| 2088 | ✗ | infer(film_grain_colour_primaries, sps->vui.colour_primaries); | |
| 2089 | ✗ | infer(film_grain_transfer_characteristics, sps->vui.transfer_characteristics); | |
| 2090 | ✗ | infer(film_grain_matrix_coeffs, sps->vui.matrix_coefficients); | |
| 2091 | } | ||
| 2092 | |||
| 2093 | ✗ | filmGrainBitDepth[0] = current->film_grain_bit_depth_luma_minus8 + 8; | |
| 2094 | ✗ | filmGrainBitDepth[1] = | |
| 2095 | ✗ | filmGrainBitDepth[2] = current->film_grain_bit_depth_chroma_minus8 + 8; | |
| 2096 | |||
| 2097 | ✗ | u(2, blending_mode_id, 0, 1); | |
| 2098 | ✗ | ub(4, log2_scale_factor); | |
| 2099 | ✗ | for (c = 0; c < 3; c++) | |
| 2100 | ✗ | flags(comp_model_present_flag[c], 1, c); | |
| 2101 | ✗ | for (c = 0; c < 3; c++) { | |
| 2102 | ✗ | if (current->comp_model_present_flag[c]) { | |
| 2103 | ✗ | ubs(8, num_intensity_intervals_minus1[c], 1, c); | |
| 2104 | ✗ | us(3, num_model_values_minus1[c], 0, 5, 1, c); | |
| 2105 | ✗ | for (i = 0; i <= current->num_intensity_intervals_minus1[c]; i++) { | |
| 2106 | ✗ | ubs(8, intensity_interval_lower_bound[c][i], 2, c, i); | |
| 2107 | ✗ | ubs(8, intensity_interval_upper_bound[c][i], 2, c, i); | |
| 2108 | ✗ | for (j = 0; j <= current->num_model_values_minus1[c]; j++) | |
| 2109 | ✗ | ses(comp_model_value[c][i][j], 0 - current->film_grain_model_id * (1 << (filmGrainBitDepth[c] - 1)), | |
| 2110 | ((1 << filmGrainBitDepth[c]) - 1) - current->film_grain_model_id * (1 << (filmGrainBitDepth[c] - 1)), | ||
| 2111 | 3, c, i, j); | ||
| 2112 | } | ||
| 2113 | } | ||
| 2114 | } | ||
| 2115 | ✗ | flag(film_grain_characteristics_persistence_flag); | |
| 2116 | } | ||
| 2117 | |||
| 2118 | ✗ | return 0; | |
| 2119 | } | ||
| 2120 | |||
| 2121 | ✗ | SEI_FUNC(sei_display_orientation, (CodedBitstreamContext *ctx, RWContext *rw, | |
| 2122 | H265RawSEIDisplayOrientation *current, | ||
| 2123 | SEIMessageState *sei)) | ||
| 2124 | { | ||
| 2125 | int err; | ||
| 2126 | |||
| 2127 | ✗ | HEADER("Display Orientation"); | |
| 2128 | |||
| 2129 | ✗ | flag(display_orientation_cancel_flag); | |
| 2130 | ✗ | if (!current->display_orientation_cancel_flag) { | |
| 2131 | ✗ | flag(hor_flip); | |
| 2132 | ✗ | flag(ver_flip); | |
| 2133 | ✗ | ub(16, anticlockwise_rotation); | |
| 2134 | ✗ | flag(display_orientation_persistence_flag); | |
| 2135 | } | ||
| 2136 | |||
| 2137 | ✗ | return 0; | |
| 2138 | } | ||
| 2139 | |||
| 2140 | 36 | SEI_FUNC(sei_active_parameter_sets, (CodedBitstreamContext *ctx, RWContext *rw, | |
| 2141 | H265RawSEIActiveParameterSets *current, | ||
| 2142 | SEIMessageState *sei)) | ||
| 2143 | { | ||
| 2144 | 18 | CodedBitstreamH265Context *h265 = ctx->priv_data; | |
| 2145 | const H265RawVPS *vps; | ||
| 2146 | int err, i; | ||
| 2147 | |||
| 2148 | 18 | HEADER("Active Parameter Sets"); | |
| 2149 | |||
| 2150 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 9 times.
|
18 | u(4, active_video_parameter_set_id, 0, HEVC_MAX_VPS_COUNT); |
| 2151 | 18 | vps = h265->vps[current->active_video_parameter_set_id]; | |
| 2152 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 9 times.
|
18 | if (!vps) { |
| 2153 | ✗ | av_log(ctx->log_ctx, AV_LOG_ERROR, "VPS id %d not available for active " | |
| 2154 | ✗ | "parameter sets.\n", current->active_video_parameter_set_id); | |
| 2155 | ✗ | return AVERROR_INVALIDDATA; | |
| 2156 | } | ||
| 2157 | 18 | h265->active_vps = vps; | |
| 2158 | |||
| 2159 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 9 times.
|
18 | flag(self_contained_cvs_flag); |
| 2160 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 9 times.
|
18 | flag(no_parameter_set_update_flag); |
| 2161 | |||
| 2162 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 9 times.
|
18 | ue(num_sps_ids_minus1, 0, HEVC_MAX_SPS_COUNT - 1); |
| 2163 |
2/2✓ Branch 0 taken 9 times.
✓ Branch 1 taken 9 times.
|
36 | for (i = 0; i <= current->num_sps_ids_minus1; i++) |
| 2164 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 9 times.
|
18 | ues(active_seq_parameter_set_id[i], 0, HEVC_MAX_SPS_COUNT - 1, 1, i); |
| 2165 | |||
| 2166 | 18 | for (i = vps->vps_base_layer_internal_flag; | |
| 2167 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 9 times.
|
18 | i <= FFMIN(62, vps->vps_max_layers_minus1); i++) { |
| 2168 | ✗ | ues(layer_sps_idx[i], 0, current->num_sps_ids_minus1, 1, i); | |
| 2169 | |||
| 2170 | ✗ | if (i == 0) | |
| 2171 | ✗ | h265->active_sps = h265->sps[current->active_seq_parameter_set_id[current->layer_sps_idx[0]]]; | |
| 2172 | } | ||
| 2173 | |||
| 2174 | 18 | return 0; | |
| 2175 | } | ||
| 2176 | |||
| 2177 | 17376 | SEI_FUNC(sei_decoded_picture_hash, (CodedBitstreamContext *ctx, RWContext *rw, | |
| 2178 | H265RawSEIDecodedPictureHash *current, | ||
| 2179 | SEIMessageState *sei)) | ||
| 2180 | { | ||
| 2181 | 8688 | CodedBitstreamH265Context *h265 = ctx->priv_data; | |
| 2182 | 8688 | const H265RawSPS *sps = h265->active_sps; | |
| 2183 | int err, c, i; | ||
| 2184 | |||
| 2185 | 8688 | HEADER("Decoded Picture Hash"); | |
| 2186 | |||
| 2187 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 4344 times.
|
8688 | if (!sps) { |
| 2188 | ✗ | av_log(ctx->log_ctx, AV_LOG_ERROR, | |
| 2189 | "No active SPS for decoded picture hash.\n"); | ||
| 2190 | ✗ | return AVERROR_INVALIDDATA; | |
| 2191 | } | ||
| 2192 | |||
| 2193 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 4344 times.
|
8688 | u(8, hash_type, 0, 2); |
| 2194 | |||
| 2195 |
3/4✗ Branch 0 not taken.
✓ Branch 1 taken 17376 times.
✓ Branch 2 taken 13032 times.
✓ Branch 3 taken 4344 times.
|
34752 | for (c = 0; c < (sps->chroma_format_idc == 0 ? 1 : 3); c++) { |
| 2196 |
2/2✓ Branch 0 taken 11988 times.
✓ Branch 1 taken 1044 times.
|
26064 | if (current->hash_type == 0) { |
| 2197 |
2/2✓ Branch 0 taken 191808 times.
✓ Branch 1 taken 11988 times.
|
407592 | for (i = 0; i < 16; i++) |
| 2198 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 191808 times.
|
383616 | us(8, picture_md5[c][i], 0x00, 0xff, 2, c, i); |
| 2199 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1044 times.
|
2088 | } else if (current->hash_type == 1) { |
| 2200 | ✗ | us(16, picture_crc[c], 0x0000, 0xffff, 1, c); | |
| 2201 |
1/2✓ Branch 0 taken 1044 times.
✗ Branch 1 not taken.
|
2088 | } else if (current->hash_type == 2) { |
| 2202 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1044 times.
|
2088 | us(32, picture_checksum[c], 0x00000000, 0xffffffff, 1, c); |
| 2203 | } | ||
| 2204 | } | ||
| 2205 | |||
| 2206 | 8688 | return 0; | |
| 2207 | } | ||
| 2208 | |||
| 2209 | ✗ | SEI_FUNC(sei_time_code, (CodedBitstreamContext *ctx, RWContext *rw, | |
| 2210 | H265RawSEITimeCode *current, SEIMessageState *sei)) | ||
| 2211 | { | ||
| 2212 | int err, i; | ||
| 2213 | |||
| 2214 | ✗ | HEADER("Time Code"); | |
| 2215 | |||
| 2216 | ✗ | u(2, num_clock_ts, 1, 3); | |
| 2217 | |||
| 2218 | ✗ | for (i = 0; i < current->num_clock_ts; i++) { | |
| 2219 | ✗ | flags(clock_timestamp_flag[i], 1, i); | |
| 2220 | |||
| 2221 | ✗ | if (current->clock_timestamp_flag[i]) { | |
| 2222 | ✗ | flags(units_field_based_flag[i], 1, i); | |
| 2223 | ✗ | us(5, counting_type[i], 0, 6, 1, i); | |
| 2224 | ✗ | flags(full_timestamp_flag[i], 1, i); | |
| 2225 | ✗ | flags(discontinuity_flag[i], 1, i); | |
| 2226 | ✗ | flags(cnt_dropped_flag[i], 1, i); | |
| 2227 | |||
| 2228 | ✗ | ubs(9, n_frames[i], 1, i); | |
| 2229 | |||
| 2230 | ✗ | if (current->full_timestamp_flag[i]) { | |
| 2231 | ✗ | us(6, seconds_value[i], 0, 59, 1, i); | |
| 2232 | ✗ | us(6, minutes_value[i], 0, 59, 1, i); | |
| 2233 | ✗ | us(5, hours_value[i], 0, 23, 1, i); | |
| 2234 | } else { | ||
| 2235 | ✗ | flags(seconds_flag[i], 1, i); | |
| 2236 | ✗ | if (current->seconds_flag[i]) { | |
| 2237 | ✗ | us(6, seconds_value[i], 0, 59, 1, i); | |
| 2238 | ✗ | flags(minutes_flag[i], 1, i); | |
| 2239 | ✗ | if (current->minutes_flag[i]) { | |
| 2240 | ✗ | us(6, minutes_value[i], 0, 59, 1, i); | |
| 2241 | ✗ | flags(hours_flag[i], 1, i); | |
| 2242 | ✗ | if (current->hours_flag[i]) | |
| 2243 | ✗ | us(5, hours_value[i], 0, 23, 1, i); | |
| 2244 | } | ||
| 2245 | } | ||
| 2246 | } | ||
| 2247 | |||
| 2248 | ✗ | ubs(5, time_offset_length[i], 1, i); | |
| 2249 | ✗ | if (current->time_offset_length[i] > 0) | |
| 2250 | ✗ | ibs(current->time_offset_length[i], time_offset_value[i], 1, i); | |
| 2251 | else | ||
| 2252 | ✗ | infer(time_offset_value[i], 0); | |
| 2253 | } | ||
| 2254 | } | ||
| 2255 | |||
| 2256 | ✗ | return 0; | |
| 2257 | } | ||
| 2258 | |||
| 2259 | ✗ | SEI_FUNC(sei_alpha_channel_info, (CodedBitstreamContext *ctx, RWContext *rw, | |
| 2260 | H265RawSEIAlphaChannelInfo *current, | ||
| 2261 | SEIMessageState *sei)) | ||
| 2262 | { | ||
| 2263 | int err, length; | ||
| 2264 | |||
| 2265 | ✗ | HEADER("Alpha Channel Information"); | |
| 2266 | |||
| 2267 | ✗ | flag(alpha_channel_cancel_flag); | |
| 2268 | ✗ | if (!current->alpha_channel_cancel_flag) { | |
| 2269 | ✗ | ub(3, alpha_channel_use_idc); | |
| 2270 | ✗ | ub(3, alpha_channel_bit_depth_minus8); | |
| 2271 | ✗ | length = current->alpha_channel_bit_depth_minus8 + 9; | |
| 2272 | ✗ | ub(length, alpha_transparent_value); | |
| 2273 | ✗ | ub(length, alpha_opaque_value); | |
| 2274 | ✗ | flag(alpha_channel_incr_flag); | |
| 2275 | ✗ | flag(alpha_channel_clip_flag); | |
| 2276 | ✗ | if (current->alpha_channel_clip_flag) | |
| 2277 | ✗ | flag(alpha_channel_clip_type_flag); | |
| 2278 | } else { | ||
| 2279 | ✗ | infer(alpha_channel_use_idc, 2); | |
| 2280 | ✗ | infer(alpha_channel_incr_flag, 0); | |
| 2281 | ✗ | infer(alpha_channel_clip_flag, 0); | |
| 2282 | } | ||
| 2283 | |||
| 2284 | ✗ | return 0; | |
| 2285 | } | ||
| 2286 | |||
| 2287 | ✗ | SEI_FUNC(sei_3d_reference_displays_info, (CodedBitstreamContext *ctx, RWContext *rw, | |
| 2288 | H265RawSEI3DReferenceDisplaysInfo *current, | ||
| 2289 | SEIMessageState *sei)) | ||
| 2290 | { | ||
| 2291 | int length; | ||
| 2292 | int err, i; | ||
| 2293 | |||
| 2294 | ✗ | HEADER("Three Dimensional Reference Displays Information"); | |
| 2295 | |||
| 2296 | ✗ | ue(prec_ref_display_width, 0, 31); | |
| 2297 | ✗ | flag(ref_viewing_distance_flag); | |
| 2298 | ✗ | if (current->ref_viewing_distance_flag) | |
| 2299 | ✗ | ue(prec_ref_viewing_dist, 0, 31); | |
| 2300 | ✗ | ue(num_ref_displays_minus1, 0, 31); | |
| 2301 | ✗ | for (i = 0; i <= current->num_ref_displays_minus1; i++) { | |
| 2302 | ✗ | ues(left_view_id[i], 0, MAX_UINT_BITS(15), 1, i); | |
| 2303 | ✗ | ues(right_view_id[i], 0, MAX_UINT_BITS(15), 1, i); | |
| 2304 | ✗ | us(6, exponent_ref_display_width[i], 0, 62, 1, i); | |
| 2305 | ✗ | if (!current->exponent_ref_display_width[i]) | |
| 2306 | ✗ | length = FFMAX(0, (int)current->prec_ref_display_width - 30); | |
| 2307 | else | ||
| 2308 | ✗ | length = FFMAX(0, (int)current->exponent_ref_display_width[i] + | |
| 2309 | (int)current->prec_ref_display_width - 31); | ||
| 2310 | |||
| 2311 | ✗ | if (length > 32) { | |
| 2312 | ✗ | av_log(ctx->log_ctx, AV_LOG_ERROR, "refDispWidthBits > 32 is not supported\n"); | |
| 2313 | ✗ | return AVERROR_PATCHWELCOME; | |
| 2314 | } | ||
| 2315 | |||
| 2316 | ✗ | if (length) | |
| 2317 | ✗ | ubs(length, mantissa_ref_display_width[i], 1, i); | |
| 2318 | else | ||
| 2319 | ✗ | infer(mantissa_ref_display_width[i], 0); | |
| 2320 | ✗ | if (current->ref_viewing_distance_flag) { | |
| 2321 | ✗ | us(6, exponent_ref_viewing_distance[i], 0, 62, 1, i); | |
| 2322 | ✗ | if (!current->exponent_ref_viewing_distance[i]) | |
| 2323 | ✗ | length = FFMAX(0, (int)current->prec_ref_viewing_dist - 30); | |
| 2324 | else | ||
| 2325 | ✗ | length = FFMAX(0, (int)current->exponent_ref_viewing_distance[i] + | |
| 2326 | (int)current->prec_ref_viewing_dist - 31); | ||
| 2327 | |||
| 2328 | ✗ | if (length > 32) { | |
| 2329 | ✗ | av_log(ctx->log_ctx, AV_LOG_ERROR, "refViewDistBits > 32 is not supported\n"); | |
| 2330 | ✗ | return AVERROR_PATCHWELCOME; | |
| 2331 | } | ||
| 2332 | |||
| 2333 | ✗ | if (length) | |
| 2334 | ✗ | ubs(length, mantissa_ref_viewing_distance[i], 1, i); | |
| 2335 | else | ||
| 2336 | ✗ | infer(mantissa_ref_viewing_distance[i], 0); | |
| 2337 | } | ||
| 2338 | ✗ | flags(additional_shift_present_flag[i], 1, i); | |
| 2339 | ✗ | if (current->additional_shift_present_flag[i]) | |
| 2340 | ✗ | us(10, num_sample_shift_plus512[i], 0, 1023, 1, i); | |
| 2341 | } | ||
| 2342 | ✗ | flag(three_dimensional_reference_displays_extension_flag); | |
| 2343 | |||
| 2344 | ✗ | return 0; | |
| 2345 | } | ||
| 2346 | |||
| 2347 | 6578 | static int FUNC(sei)(CodedBitstreamContext *ctx, RWContext *rw, | |
| 2348 | H265RawSEI *current, int prefix) | ||
| 2349 | { | ||
| 2350 | int err; | ||
| 2351 | |||
| 2352 |
2/2✓ Branch 0 taken 338 times.
✓ Branch 1 taken 2951 times.
|
6578 | if (prefix) |
| 2353 | 676 | HEADER("Prefix Supplemental Enhancement Information"); | |
| 2354 | else | ||
| 2355 | 5902 | HEADER("Suffix Supplemental Enhancement Information"); | |
| 2356 | |||
| 2357 |
3/4✓ Branch 0 taken 338 times.
✓ Branch 1 taken 2951 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 3289 times.
|
6578 | CHECK(FUNC(nal_unit_header)(ctx, rw, ¤t->nal_unit_header, |
| 2358 | prefix ? HEVC_NAL_SEI_PREFIX | ||
| 2359 | : HEVC_NAL_SEI_SUFFIX)); | ||
| 2360 | |||
| 2361 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 3289 times.
|
6578 | CHECK(FUNC_SEI(message_list)(ctx, rw, ¤t->message_list, prefix)); |
| 2362 | |||
| 2363 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 3289 times.
|
6578 | CHECK(FUNC(rbsp_trailing_bits)(ctx, rw)); |
| 2364 | |||
| 2365 | 6578 | return 0; | |
| 2366 | } | ||
| 2367 | |||
| 2368 | |||
| 2369 | ✗ | static int FUNC(filler)(CodedBitstreamContext *ctx, RWContext *rw, | |
| 2370 | H265RawFiller *current) | ||
| 2371 | { | ||
| 2372 | int err; | ||
| 2373 | |||
| 2374 | ✗ | HEADER("Filler Data"); | |
| 2375 | |||
| 2376 | ✗ | CHECK(FUNC(nal_unit_header)(ctx, rw, ¤t->nal_unit_header, | |
| 2377 | HEVC_NAL_FD_NUT)); | ||
| 2378 | |||
| 2379 | #ifdef READ | ||
| 2380 | ✗ | while (show_bits(rw, 8) == 0xff) { | |
| 2381 | ✗ | fixed(8, ff_byte, 0xff); | |
| 2382 | ✗ | ++current->filler_size; | |
| 2383 | } | ||
| 2384 | #else | ||
| 2385 | { | ||
| 2386 | uint32_t i; | ||
| 2387 | ✗ | for (i = 0; i < current->filler_size; i++) | |
| 2388 | ✗ | fixed(8, ff_byte, 0xff); | |
| 2389 | } | ||
| 2390 | #endif | ||
| 2391 | |||
| 2392 | ✗ | CHECK(FUNC(rbsp_trailing_bits)(ctx, rw)); | |
| 2393 | |||
| 2394 | ✗ | return 0; | |
| 2395 | } | ||
| 2396 |