Go to the documentation of this file. 1 /*
2 * This file is part of FFmpeg.
3 *
4 * FFmpeg is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * FFmpeg is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with FFmpeg; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17 */
18
29
31 const int *ref_count, int slice_type_nos,
33 int picture_structure, void *logctx)
34 {
36 int luma_def, chroma_def;
37
40
45 }
47
48 if (
sps->chroma_format_idc) {
53 }
55 }
56
60 for (
i = 0;
i < ref_count[
list];
i++) {
61 int luma_weight_flag, chroma_weight_flag;
62
64 if (luma_weight_flag) {
69 goto out_range_weight;
74 }
75 } else {
78 }
79
80 if (
sps->chroma_format_idc) {
82 if (chroma_weight_flag) {
83 int j;
84 for (j = 0; j < 2; j++) {
91 goto out_range_weight;
92 }
97 }
98 }
99 } else {
100 int j;
101 for (j = 0; j < 2; j++) {
104 }
105 }
106 }
107
108 // for MBAFF
112 if (
sps->chroma_format_idc) {
113 for (j = 0; j < 2; j++) {
116 }
117 }
118 }
119 }
121 break;
122 }
124 return 0;
125 out_range_weight:
128 }
129
130 /**
131 * Check if the top & left blocks are available if needed and
132 * change the dc mode so it only uses the available blocks.
133 */
135 int top_samples_available, int left_samples_available)
136 {
137 static const int8_t top[12] = {
139 };
140 static const int8_t
left[12] = {
142 };
144
145 if (!(top_samples_available & 0x8000)) {
146 for (
i = 0;
i < 4;
i++) {
150 "top block unavailable for requested intra mode %d\n",
155 }
156 }
157 }
158
159 if ((left_samples_available & 0x8888) != 0x8888) {
160 static const int mask[4] = { 0x8000, 0x2000, 0x80, 0x20 };
161 for (
i = 0;
i < 4;
i++)
162 if (!(left_samples_available &
mask[
i])) {
166 "left block unavailable for requested intra4x4 mode %d\n",
171 }
172 }
173 }
174
175 return 0;
176 }
177
178 /**
179 * Check if the top & left blocks are available if needed and
180 * change the dc mode so it only uses the available blocks.
181 */
183 int left_samples_available,
184 int mode,
int is_chroma)
185 {
188
191 "out of range intra chroma pred mode\n");
193 }
194
195 if (!(top_samples_available & 0x8000)) {
199 "top block unavailable for requested intra mode\n");
201 }
202 }
203
204 if ((left_samples_available & 0x8080) != 0x8080) {
208 "left block unavailable for requested intra mode\n");
210 }
211 if (is_chroma && (left_samples_available & 0x8080)) {
212 // mad cow disease mode, aka MBAFF + constrained_intra_pred
214 (!(left_samples_available & 0x8000)) +
216 }
217 }
218
220 }
221
224 int slice_type_nos, int picture_structure, void *logctx)
225 {
226 int list_count;
227 int num_ref_idx_active_override_flag;
228
229 // set defaults, might be overridden a few lines later
230 ref_count[0] =
pps->ref_count[0];
231 ref_count[1] =
pps->ref_count[1];
232
236
237 num_ref_idx_active_override_flag =
get_bits1(gb);
238
239 if (num_ref_idx_active_override_flag) {
243 } else
244 // full range is spec-ok in this case, even for frames
245 ref_count[1] = 1;
246 }
247
249 list_count = 2;
250 else
251 list_count = 1;
252
253 if (ref_count[0] - 1 >
max[0] || (list_count == 2 && (ref_count[1] - 1 >
max[1]))) {
255 ref_count[0] - 1,
max[0], ref_count[1] - 1,
max[1]);
256 ref_count[0] = ref_count[1] = 0;
257 *plist_count = 0;
259 }
else if (ref_count[1] - 1 >
max[1]) {
261 ref_count[1] - 1,
max[1]);
262 ref_count[1] = 0;
263 }
264
265 } else {
266 list_count = 0;
267 ref_count[0] = ref_count[1] = 0;
268 }
269
270 *plist_count = list_count;
271
272 return 0;
274 *plist_count = 0;
275 ref_count[0] = 0;
276 ref_count[1] = 0;
278 }
279
282 int picture_structure, int nal_ref_idc)
283 {
284 const int max_frame_num = 1 <<
sps->log2_max_frame_num;
286
290
291 if (
sps->poc_type == 0) {
292 const int max_poc_lsb = 1 <<
sps->log2_max_poc_lsb;
295
302 else
304 field_poc[0] =
308 }
else if (
sps->poc_type == 1) {
309 int abs_frame_num;
310 int64_t expected_delta_per_poc_cycle, expectedpoc;
312
313 if (
sps->poc_cycle_length != 0)
315 else
316 abs_frame_num = 0;
317
318 if (nal_ref_idc == 0 && abs_frame_num > 0)
319 abs_frame_num--;
320
321 expected_delta_per_poc_cycle = 0;
322 for (
i = 0;
i <
sps->poc_cycle_length;
i++)
323 // FIXME integrate during sps parse
324 expected_delta_per_poc_cycle +=
sps->offset_for_ref_frame[
i];
325
326 if (abs_frame_num > 0) {
327 int poc_cycle_cnt = (abs_frame_num - 1) /
sps->poc_cycle_length;
328 int frame_num_in_poc_cycle = (abs_frame_num - 1) %
sps->poc_cycle_length;
329
330 expectedpoc = poc_cycle_cnt * expected_delta_per_poc_cycle;
331 for (
i = 0;
i <= frame_num_in_poc_cycle;
i++)
332 expectedpoc = expectedpoc +
sps->offset_for_ref_frame[
i];
333 } else
334 expectedpoc = 0;
335
336 if (nal_ref_idc == 0)
337 expectedpoc = expectedpoc +
sps->offset_for_non_ref_pic;
338
339 field_poc[0] = expectedpoc + pc->
delta_poc[0];
340 field_poc[1] = field_poc[0] +
sps->offset_for_top_to_bottom_field;
341
344 } else {
346
347 if (!nal_ref_idc)
348 poc--;
349
350 field_poc[0] = poc;
351 field_poc[1] = poc;
352 }
353
354 if ( field_poc[0] != (int)field_poc[0]
355 || field_poc[1] != (int)field_poc[1])
357
359 pic_field_poc[0] = field_poc[0];
361 pic_field_poc[1] = field_poc[1];
362 *pic_poc =
FFMIN(pic_field_poc[0], pic_field_poc[1]);
363
364 return 0;
365 }
366
368 int is_avc, void *logctx)
369 {
373
378 }
379
380 for (
i = 0;
i <
pkt.nb_nals;
i++) {
387 break;
389 "SPS decoding failure, trying again with the complete NAL\n");
393 break;
397 break;
398 }
404 break;
405 default:
408 break;
409 }
410 }
411
415 }
416
417 /* There are (invalid) samples in the wild with mp4-style extradata, where the
418 * parameter sets are stored unescaped (i.e. as RBSP).
419 * This function catches the parameter set decoding failure and tries again
420 * after escaping it */
422 int err_recognition, void *logctx)
423 {
425
430 uint8_t *escaped_buf;
431 int escaped_buf_size;
432
434 "SPS decoding failure, trying again after escaping the NAL\n");
435
440 if (!escaped_buf)
442
445
448 bytestream2_peek_be24(&gbc) <= 3) {
449 bytestream2_put_be24(&pbc, 3);
451 } else
452 bytestream2_put_byte(&pbc, bytestream2_get_byte(&gbc));
453 }
454
456 AV_WB16(escaped_buf, escaped_buf_size - 2);
457
459 // lorex.mp4 decodes ok even with extradata decoding failing
461 }
462
463 return 0;
464 }
465
467 int *is_avc, int *nal_length_size,
468 int err_recognition, void *logctx)
469 {
471
474
477 const uint8_t *
p =
data;
478
479 *is_avc = 1;
480
484 }
485
486 // Decode sps from avcC
487 cnt = *(
p + 5) & 0x1f;
// Number of sps
489 for (
i = 0;
i < cnt;
i++) {
496 "Decoding sps %d from avcC failed\n",
i);
498 }
500 }
501 // Decode pps from avcC
502 cnt = *(
p++);
// Number of pps
503 for (
i = 0;
i < cnt;
i++) {
510 "Decoding pps %d from avcC failed\n",
i);
512 }
514 }
515 // Store right nal length size that will be used to parse all other nals
516 *nal_length_size = (
data[4] & 0x03) + 1;
517 } else {
518 *is_avc = 0;
522 }
524 }
525
526 /**
527 * Compute profile from profile_idc and constraint_set?_flags.
528 *
529 * @param sps SPS
530 *
531 * @return profile as defined by AV_PROFILE_H264_*
532 */
534 {
536
537 switch (
sps->profile_idc) {
539 // constraint_set1_flag set to 1
541 break;
545 // constraint_set3_flag set to 1
547 break;
548 }
549
551 }
Tag MUST be and< 10hcoeff half pel interpolation filter coefficients, hcoeff[0] are the 2 middle coefficients[1] are the next outer ones and so on, resulting in a filter like:...eff[2], hcoeff[1], hcoeff[0], hcoeff[0], hcoeff[1], hcoeff[2] ... the sign of the coefficients is not explicitly stored but alternates after each coeff and coeff[0] is positive, so ...,+,-,+,-,+,+,-,+,-,+,... hcoeff[0] is not explicitly stored but found by subtracting the sum of all stored coefficients with signs from 32 hcoeff[0]=32 - hcoeff[1] - hcoeff[2] - ... a good choice for hcoeff and htaps is htaps=6 hcoeff={40,-10, 2} an alternative which requires more computations at both encoder and decoder side and may or may not be better is htaps=8 hcoeff={42,-14, 6,-2}ref_frames minimum of the number of available reference frames and max_ref_frames for example the first frame after a key frame always has ref_frames=1spatial_decomposition_type wavelet type 0 is a 9/7 symmetric compact integer wavelet 1 is a 5/3 symmetric compact integer wavelet others are reserved stored as delta from last, last is reset to 0 if always_reset||keyframeqlog quality(logarithmic quantizer scale) stored as delta from last, last is reset to 0 if always_reset||keyframemv_scale stored as delta from last, last is reset to 0 if always_reset||keyframe FIXME check that everything works fine if this changes between framesqbias dequantization bias stored as delta from last, last is reset to 0 if always_reset||keyframeblock_max_depth maximum depth of the block tree stored as delta from last, last is reset to 0 if always_reset||keyframequant_table quantization tableHighlevel bitstream structure:==============================--------------------------------------------|Header|--------------------------------------------|------------------------------------|||Block0||||split?||||yes no||||......... intra?||||:Block01 :yes no||||:Block02 :....... ..........||||:Block03 ::y DC ::ref index:||||:Block04 ::cb DC ::motion x :||||......... :cr DC ::motion y :||||....... ..........|||------------------------------------||------------------------------------|||Block1|||...|--------------------------------------------|------------ ------------ ------------|||Y subbands||Cb subbands||Cr subbands||||--- ---||--- ---||--- ---|||||LL0||HL0||||LL0||HL0||||LL0||HL0|||||--- ---||--- ---||--- ---||||--- ---||--- ---||--- ---|||||LH0||HH0||||LH0||HH0||||LH0||HH0|||||--- ---||--- ---||--- ---||||--- ---||--- ---||--- ---|||||HL1||LH1||||HL1||LH1||||HL1||LH1|||||--- ---||--- ---||--- ---||||--- ---||--- ---||--- ---|||||HH1||HL2||||HH1||HL2||||HH1||HL2|||||...||...||...|||------------ ------------ ------------|--------------------------------------------Decoding process:=================------------|||Subbands|------------||||------------|Intra DC||||LL0 subband prediction ------------|\ Dequantization ------------------- \||Reference frames|\ IDWT|------- -------|Motion \|||Frame 0||Frame 1||Compensation . OBMC v -------|------- -------|--------------. \------> Frame n output Frame Frame<----------------------------------/|...|------------------- Range Coder:============Binary Range Coder:------------------- The implemented range coder is an adapted version based upon "Range encoding: an algorithm for removing redundancy from a digitised message." by G. N. N. Martin. The symbols encoded by the Snow range coder are bits(0|1). The associated probabilities are not fix but change depending on the symbol mix seen so far. bit seen|new state ---------+----------------------------------------------- 0|256 - state_transition_table[256 - old_state];1|state_transition_table[old_state];state_transition_table={ 0, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 190, 191, 192, 194, 194, 195, 196, 197, 198, 199, 200, 201, 202, 202, 204, 205, 206, 207, 208, 209, 209, 210, 211, 212, 213, 215, 215, 216, 217, 218, 219, 220, 220, 222, 223, 224, 225, 226, 227, 227, 229, 229, 230, 231, 232, 234, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 248, 0, 0, 0, 0, 0, 0, 0};FIXME Range Coding of integers:------------------------- FIXME Neighboring Blocks:===================left and top are set to the respective blocks unless they are outside of the image in which case they are set to the Null block top-left is set to the top left block unless it is outside of the image in which case it is set to the left block if this block has no larger parent block or it is at the left side of its parent block and the top right block is not outside of the image then the top right block is used for top-right else the top-left block is used Null block y, cb, cr are 128 level, ref, mx and my are 0 Motion Vector Prediction:=========================1. the motion vectors of all the neighboring blocks are scaled to compensate for the difference of reference frames scaled_mv=(mv *(256 *(current_reference+1)/(mv.reference+1))+128)> the median of the scaled left