FFmpeg
Loading...
Searching...
No Matches
h264_cavlc.c
Go to the documentation of this file.
1/*
2 * H.26L/H.264/AVC/JVT/14496-10/... cavlc bitstream decoding
3 * Copyright (c) 2003 Michael Niedermayer <michaelni@gmx.at>
4 *
5 * This file is part of FFmpeg.
6 *
7 * FFmpeg is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
11 *
12 * FFmpeg is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with FFmpeg; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 */
21
22/**
23 * @file
24 * H.264 / AVC / MPEG-4 part10 cavlc bitstream decoding.
25 * @author Michael Niedermayer <michaelni@gmx.at>
26 */
27
28#define CABAC(h) 0
29#define UNCHECKED_BITSTREAM_READER 1
30
31#include "h264dec.h"
32#include "h264_mvpred.h"
33#include "h264data.h"
34#include "golomb.h"
35#include "mpegutils.h"
36#include "libavutil/avassert.h"
37
38
39static const uint8_t golomb_to_inter_cbp_gray[16]={
40 0, 1, 2, 4, 8, 3, 5,10,12,15, 7,11,13,14, 6, 9,
41};
42
43static const uint8_t golomb_to_intra4x4_cbp_gray[16]={
4415, 0, 7,11,13,14, 3, 5,10,12, 1, 2, 4, 8, 6, 9,
45};
46
47static const uint8_t chroma_dc_coeff_token_len[4*5]={
48 2, 0, 0, 0,
49 6, 1, 0, 0,
50 6, 6, 3, 0,
51 6, 7, 7, 6,
52 6, 8, 8, 7,
53};
54
55static const uint8_t chroma_dc_coeff_token_bits[4*5]={
56 1, 0, 0, 0,
57 7, 1, 0, 0,
58 4, 6, 1, 0,
59 3, 3, 2, 5,
60 2, 3, 2, 0,
61};
62
63static const uint8_t chroma422_dc_coeff_token_len[4*9]={
64 1, 0, 0, 0,
65 7, 2, 0, 0,
66 7, 7, 3, 0,
67 9, 7, 7, 5,
68 9, 9, 7, 6,
69 10, 10, 9, 7,
70 11, 11, 10, 7,
71 12, 12, 11, 10,
72 13, 12, 12, 11,
73};
74
75static const uint8_t chroma422_dc_coeff_token_bits[4*9]={
76 1, 0, 0, 0,
77 15, 1, 0, 0,
78 14, 13, 1, 0,
79 7, 12, 11, 1,
80 6, 5, 10, 1,
81 7, 6, 4, 9,
82 7, 6, 5, 8,
83 7, 6, 5, 4,
84 7, 5, 4, 4,
85};
86
87static const uint8_t coeff_token_len[4][4*17]={
88{
89 1, 0, 0, 0,
90 6, 2, 0, 0, 8, 6, 3, 0, 9, 8, 7, 5, 10, 9, 8, 6,
91 11,10, 9, 7, 13,11,10, 8, 13,13,11, 9, 13,13,13,10,
92 14,14,13,11, 14,14,14,13, 15,15,14,14, 15,15,15,14,
93 16,15,15,15, 16,16,16,15, 16,16,16,16, 16,16,16,16,
94},
95{
96 2, 0, 0, 0,
97 6, 2, 0, 0, 6, 5, 3, 0, 7, 6, 6, 4, 8, 6, 6, 4,
98 8, 7, 7, 5, 9, 8, 8, 6, 11, 9, 9, 6, 11,11,11, 7,
99 12,11,11, 9, 12,12,12,11, 12,12,12,11, 13,13,13,12,
100 13,13,13,13, 13,14,13,13, 14,14,14,13, 14,14,14,14,
101},
102{
103 4, 0, 0, 0,
104 6, 4, 0, 0, 6, 5, 4, 0, 6, 5, 5, 4, 7, 5, 5, 4,
105 7, 5, 5, 4, 7, 6, 6, 4, 7, 6, 6, 4, 8, 7, 7, 5,
106 8, 8, 7, 6, 9, 8, 8, 7, 9, 9, 8, 8, 9, 9, 9, 8,
107 10, 9, 9, 9, 10,10,10,10, 10,10,10,10, 10,10,10,10,
108},
109{
110 6, 0, 0, 0,
111 6, 6, 0, 0, 6, 6, 6, 0, 6, 6, 6, 6, 6, 6, 6, 6,
112 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
113 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
114 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
115}
116};
117
118static const uint8_t coeff_token_bits[4][4*17]={
119{
120 1, 0, 0, 0,
121 5, 1, 0, 0, 7, 4, 1, 0, 7, 6, 5, 3, 7, 6, 5, 3,
122 7, 6, 5, 4, 15, 6, 5, 4, 11,14, 5, 4, 8,10,13, 4,
123 15,14, 9, 4, 11,10,13,12, 15,14, 9,12, 11,10,13, 8,
124 15, 1, 9,12, 11,14,13, 8, 7,10, 9,12, 4, 6, 5, 8,
125},
126{
127 3, 0, 0, 0,
128 11, 2, 0, 0, 7, 7, 3, 0, 7,10, 9, 5, 7, 6, 5, 4,
129 4, 6, 5, 6, 7, 6, 5, 8, 15, 6, 5, 4, 11,14,13, 4,
130 15,10, 9, 4, 11,14,13,12, 8,10, 9, 8, 15,14,13,12,
131 11,10, 9,12, 7,11, 6, 8, 9, 8,10, 1, 7, 6, 5, 4,
132},
133{
134 15, 0, 0, 0,
135 15,14, 0, 0, 11,15,13, 0, 8,12,14,12, 15,10,11,11,
136 11, 8, 9,10, 9,14,13, 9, 8,10, 9, 8, 15,14,13,13,
137 11,14,10,12, 15,10,13,12, 11,14, 9,12, 8,10,13, 8,
138 13, 7, 9,12, 9,12,11,10, 5, 8, 7, 6, 1, 4, 3, 2,
139},
140{
141 3, 0, 0, 0,
142 0, 1, 0, 0, 4, 5, 6, 0, 8, 9,10,11, 12,13,14,15,
143 16,17,18,19, 20,21,22,23, 24,25,26,27, 28,29,30,31,
144 32,33,34,35, 36,37,38,39, 40,41,42,43, 44,45,46,47,
145 48,49,50,51, 52,53,54,55, 56,57,58,59, 60,61,62,63,
146}
147};
148
149static const uint8_t total_zeros_len[16][16]= {
150 {1,3,3,4,4,5,5,6,6,7,7,8,8,9,9,9},
151 {3,3,3,3,3,4,4,4,4,5,5,6,6,6,6},
152 {4,3,3,3,4,4,3,3,4,5,5,6,5,6},
153 {5,3,4,4,3,3,3,4,3,4,5,5,5},
154 {4,4,4,3,3,3,3,3,4,5,4,5},
155 {6,5,3,3,3,3,3,3,4,3,6},
156 {6,5,3,3,3,2,3,4,3,6},
157 {6,4,5,3,2,2,3,3,6},
158 {6,6,4,2,2,3,2,5},
159 {5,5,3,2,2,2,4},
160 {4,4,3,3,1,3},
161 {4,4,2,1,3},
162 {3,3,1,2},
163 {2,2,1},
164 {1,1},
165};
166
167static const uint8_t total_zeros_bits[16][16]= {
168 {1,3,2,3,2,3,2,3,2,3,2,3,2,3,2,1},
169 {7,6,5,4,3,5,4,3,2,3,2,3,2,1,0},
170 {5,7,6,5,4,3,4,3,2,3,2,1,1,0},
171 {3,7,5,4,6,5,4,3,3,2,2,1,0},
172 {5,4,3,7,6,5,4,3,2,1,1,0},
173 {1,1,7,6,5,4,3,2,1,1,0},
174 {1,1,5,4,3,3,2,1,1,0},
175 {1,1,1,3,3,2,2,1,0},
176 {1,0,1,3,2,1,1,1},
177 {1,0,1,3,2,1,1},
178 {0,1,1,2,1,3},
179 {0,1,1,1,1},
180 {0,1,1,1},
181 {0,1,1},
182 {0,1},
183};
184
185static const uint8_t chroma_dc_total_zeros_len[3][4]= {
186 { 1, 2, 3, 3,},
187 { 1, 2, 2, 0,},
188 { 1, 1, 0, 0,},
189};
190
191static const uint8_t chroma_dc_total_zeros_bits[3][4]= {
192 { 1, 1, 1, 0,},
193 { 1, 1, 0, 0,},
194 { 1, 0, 0, 0,},
195};
196
197static const uint8_t chroma422_dc_total_zeros_len[7][8]= {
198 { 1, 3, 3, 4, 4, 4, 5, 5 },
199 { 3, 2, 3, 3, 3, 3, 3 },
200 { 3, 3, 2, 2, 3, 3 },
201 { 3, 2, 2, 2, 3 },
202 { 2, 2, 2, 2 },
203 { 2, 2, 1 },
204 { 1, 1 },
205};
206
207static const uint8_t chroma422_dc_total_zeros_bits[7][8]= {
208 { 1, 2, 3, 2, 3, 1, 1, 0 },
209 { 0, 1, 1, 4, 5, 6, 7 },
210 { 0, 1, 1, 2, 6, 7 },
211 { 6, 0, 1, 2, 7 },
212 { 0, 1, 2, 3 },
213 { 0, 1, 1 },
214 { 0, 1 },
215};
216
217static const uint8_t run_len[7][16]={
218 {1,1},
219 {1,2,2},
220 {2,2,2,2},
221 {2,2,2,3,3},
222 {2,2,3,3,3,3},
223 {2,3,3,3,3,3,3},
224 {3,3,3,3,3,3,3,4,5,6,7,8,9,10,11},
225};
226
227static const uint8_t run_bits[7][16]={
228 {1,0},
229 {1,1,0},
230 {3,2,1,0},
231 {3,2,1,1,0},
232 {3,2,3,2,1,0},
233 {3,0,1,3,2,5,4},
234 {7,6,5,4,3,2,1,1,1,1,1,1,1,1,1},
235};
236
237#define LEVEL_TAB_BITS 8
238static int8_t cavlc_level_tab[7][1<<LEVEL_TAB_BITS][2];
239
240#define CHROMA_DC_COEFF_TOKEN_VLC_BITS 8
241#define CHROMA422_DC_COEFF_TOKEN_VLC_BITS 13
242#define COEFF_TOKEN_VLC_BITS 8
243#define TOTAL_ZEROS_VLC_BITS 9
244#define CHROMA_DC_TOTAL_ZEROS_VLC_BITS 3
245#define CHROMA422_DC_TOTAL_ZEROS_VLC_BITS 5
246#define RUN_VLC_BITS 3
247#define RUN7_VLC_BITS 6
248
249/// 17 pointers to only four different VLCs
250static const VLCElem *coeff_token_vlc[17];
251
253
255
256static const VLCElem *total_zeros_vlc[15+1];
257
259
261
262static const VLCElem *run_vlc[6+1];
263
264// The other pointers to VLCElem point into this array.
266 + (15 << TOTAL_ZEROS_VLC_BITS)
269 + (520 + 332 + 280 + 256) /* coeff token */];
270
271/**
272 * Get the predicted number of non-zero coefficients.
273 * @param n block index
274 */
275static inline int pred_non_zero_count(const H264Context *h, const H264SliceContext *sl, int n)
276{
277 const int index8= scan8[n];
278 const int left = sl->non_zero_count_cache[index8 - 1];
279 const int top = sl->non_zero_count_cache[index8 - 8];
280 int i= left + top;
281
282 if(i<64) i= (i+1)>>1;
283
284 ff_tlog(h->avctx, "pred_nnz L%X T%X n%d s%d P%X\n", left, top, n, scan8[n], i&31);
285
286 return i&31;
287}
288
290 int suffix_length;
291 unsigned int i;
292
293 for(suffix_length=0; suffix_length<7; suffix_length++){
294 for(i=0; i<(1<<LEVEL_TAB_BITS); i++){
295 int prefix= LEVEL_TAB_BITS - av_log2(2*i);
296
297 if(prefix + 1 + suffix_length <= LEVEL_TAB_BITS){
298 int level_code = (prefix << suffix_length) +
299 (i >> (av_log2(i) - suffix_length)) - (1 << suffix_length);
300 int mask = -(level_code&1);
301 level_code = (((2 + level_code) >> 1) ^ mask) - mask;
302 cavlc_level_tab[suffix_length][i][0]= level_code;
303 cavlc_level_tab[suffix_length][i][1]= prefix + 1 + suffix_length;
304 }else if(prefix + 1 <= LEVEL_TAB_BITS){
305 cavlc_level_tab[suffix_length][i][0]= prefix+100;
306 cavlc_level_tab[suffix_length][i][1]= prefix + 1;
307 }else{
308 cavlc_level_tab[suffix_length][i][0]= LEVEL_TAB_BITS+100;
309 cavlc_level_tab[suffix_length][i][1]= LEVEL_TAB_BITS;
310 }
311 }
312 }
313}
314
316{
317 const VLCElem *coeff_token_vlc_original[4];
319
322 &chroma_dc_coeff_token_len [0], 1, 1,
323 &chroma_dc_coeff_token_bits[0], 1, 1, 0);
324
328 &chroma422_dc_coeff_token_bits[0], 1, 1, 0);
329
331 &run_len [6][0], 1, 1,
332 &run_bits[6][0], 1, 1, 0);
333
334 for (int i = 0; i < 6; i++) {
336 &run_len [i][0], 1, 1,
337 &run_bits[i][0], 1, 1, 0);
338 }
339
340 for (int i = 0; i < 4; i++) {
341 coeff_token_vlc_original[i] =
343 &coeff_token_len [i][0], 1, 1,
344 &coeff_token_bits[i][0], 1, 1, 0);
345 }
346 for (int i = 0; i < FF_ARRAY_ELEMS(coeff_token_vlc); i++) {
347 static const uint8_t coeff_token_table_index[17] = {
348 0, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3
349 };
350 coeff_token_vlc[i] = coeff_token_vlc_original[coeff_token_table_index[i]];
351 }
352
353 for (int i = 0; i < 3; i++) {
356 &chroma_dc_total_zeros_len [i][0], 1, 1,
357 &chroma_dc_total_zeros_bits[i][0], 1, 1, 0);
358 }
359
360 for (int i = 0; i < 7; i++) {
364 &chroma422_dc_total_zeros_bits[i][0], 1, 1, 0);
365 }
366
367 for (int i = 0; i < 15; i++) {
368 total_zeros_vlc[i + 1] =
370 &total_zeros_len [i][0], 1, 1,
371 &total_zeros_bits[i][0], 1, 1, 0);
372 }
373 /*
374 * This is a one time safety check to make sure that
375 * the vlc table sizes were initialized correctly.
376 */
377 av_assert1(state.size == 0);
378
380}
381
382static inline int get_level_prefix(GetBitContext *gb){
383 unsigned int buf;
384 int log;
385
386 OPEN_READER(re, gb);
387 UPDATE_CACHE(re, gb);
388 buf=GET_CACHE(re, gb);
389
390 log= 32 - av_log2(buf);
391
392 LAST_SKIP_BITS(re, gb, log);
393 CLOSE_READER(re, gb);
394
395 return log-1;
396}
397
398/**
399 * Decode a residual block.
400 * @param n block index
401 * @param scantable scantable
402 * @param max_coeff number of coefficients in the block
403 * @return <0 if an error occurred
404 */
406 GetBitContext *gb, int16_t *block, int n,
407 const uint8_t *scantable, const uint32_t *qmul,
408 int max_coeff)
409{
410 int level[16];
411 int zeros_left, coeff_token, total_coeff, i, trailing_ones, run_before;
412
413 //FIXME put trailing_onex into the context
414
415 if(max_coeff <= 8){
416 if (max_coeff == 4)
419 else
422 }else{
423 total_coeff = pred_non_zero_count(h, sl, n >= LUMA_DC_BLOCK_INDEX ?
424 (n - LUMA_DC_BLOCK_INDEX) * 16 : n);
425 coeff_token = get_vlc2(gb, coeff_token_vlc[total_coeff],
427 }
428 total_coeff = coeff_token >> 2;
429 sl->non_zero_count_cache[scan8[n]] = total_coeff;
430
431 //FIXME set last_non_zero?
432
433 if(total_coeff==0)
434 return 0;
435 if(total_coeff > (unsigned)max_coeff) {
436 av_log(h->avctx, AV_LOG_ERROR, "corrupted macroblock %d %d (total_coeff=%d)\n", sl->mb_x, sl->mb_y, total_coeff);
437 return -1;
438 }
439
440 trailing_ones= coeff_token&3;
441 ff_tlog(h->avctx, "trailing:%d, total:%d\n", trailing_ones, total_coeff);
442 av_assert2(total_coeff<=16);
443
444 i = show_bits(gb, 3);
445 skip_bits(gb, trailing_ones);
446 level[0] = 1-((i&4)>>1);
447 level[1] = 1-((i&2) );
448 level[2] = 1-((i&1)<<1);
449
450 if(trailing_ones<total_coeff) {
451 int mask, prefix;
452 int suffix_length = total_coeff > 10 & trailing_ones < 3;
453 int bitsi= show_bits(gb, LEVEL_TAB_BITS);
454 int level_code= cavlc_level_tab[suffix_length][bitsi][0];
455
456 skip_bits(gb, cavlc_level_tab[suffix_length][bitsi][1]);
457 if(level_code >= 100){
458 prefix= level_code - 100;
461
462 //first coefficient has suffix_length equal to 0 or 1
463 if(prefix<14){ //FIXME try to build a large unified VLC table for all this
464 if(suffix_length)
465 level_code= (prefix<<1) + get_bits1(gb); //part
466 else
467 level_code= prefix; //part
468 }else if(prefix==14){
469 if(suffix_length)
470 level_code= (prefix<<1) + get_bits1(gb); //part
471 else
472 level_code= prefix + get_bits(gb, 4); //part
473 }else{
474 level_code= 30;
475 if(prefix>=16){
476 if(prefix > 25+3){
477 av_log(h->avctx, AV_LOG_ERROR, "Invalid level prefix\n");
478 return -1;
479 }
480 level_code += (1<<(prefix-3))-4096;
481 }
482 level_code += get_bits(gb, prefix-3); //part
483 }
484
485 if(trailing_ones < 3) level_code += 2;
486
487 suffix_length = 2;
488 mask= -(level_code&1);
489 level[trailing_ones]= (((2+level_code)>>1) ^ mask) - mask;
490 }else{
491 level_code += ((level_code>>31)|1) & -(trailing_ones < 3);
492
493 suffix_length = 1 + (level_code + 3U > 6U);
494 level[trailing_ones]= level_code;
495 }
496
497 //remaining coefficients have suffix_length > 0
498 for(i=trailing_ones+1;i<total_coeff;i++) {
499 static const unsigned int suffix_limit[7] = {0,3,6,12,24,48,INT_MAX };
500 int bitsi= show_bits(gb, LEVEL_TAB_BITS);
501 level_code= cavlc_level_tab[suffix_length][bitsi][0];
502
503 skip_bits(gb, cavlc_level_tab[suffix_length][bitsi][1]);
504 if(level_code >= 100){
505 prefix= level_code - 100;
506 if(prefix == LEVEL_TAB_BITS){
508 }
509 if(prefix<15){
510 level_code = (prefix<<suffix_length) + get_bits(gb, suffix_length);
511 }else{
512 level_code = 15<<suffix_length;
513 if (prefix>=16) {
514 if(prefix > 25+3){
515 av_log(h->avctx, AV_LOG_ERROR, "Invalid level prefix\n");
516 return AVERROR_INVALIDDATA;
517 }
518 level_code += (1<<(prefix-3))-4096;
519 }
520 level_code += get_bits(gb, prefix-3);
521 }
522 mask= -(level_code&1);
523 level_code= (((2+level_code)>>1) ^ mask) - mask;
524 }
525 level[i]= level_code;
526 suffix_length+= suffix_limit[suffix_length] + level_code > 2U*suffix_limit[suffix_length];
527 }
528 }
529
530 if(total_coeff == max_coeff)
531 zeros_left=0;
532 else{
533 if (max_coeff <= 8) {
534 if (max_coeff == 4)
535 zeros_left = get_vlc2(gb, chroma_dc_total_zeros_vlc[total_coeff],
537 else
538 zeros_left = get_vlc2(gb, chroma422_dc_total_zeros_vlc[total_coeff],
540 } else {
541 zeros_left = get_vlc2(gb, total_zeros_vlc[total_coeff],
543 }
544 }
545
546#define STORE_BLOCK(type) \
547 scantable += zeros_left + total_coeff - 1; \
548 if(n >= LUMA_DC_BLOCK_INDEX){ \
549 ((type*)block)[*scantable] = level[0]; \
550 for(i=1;i<total_coeff && zeros_left > 0;i++) { \
551 if(zeros_left < 7) \
552 run_before = get_vlc2(gb, run_vlc[zeros_left], RUN_VLC_BITS, 1); \
553 else \
554 run_before = get_vlc2(gb, run7_vlc_table, RUN7_VLC_BITS, 2); \
555 zeros_left -= run_before; \
556 scantable -= 1 + run_before; \
557 ((type*)block)[*scantable]= level[i]; \
558 } \
559 for(;i<total_coeff;i++) { \
560 scantable--; \
561 ((type*)block)[*scantable]= level[i]; \
562 } \
563 }else{ \
564 ((type*)block)[*scantable] = ((int)(level[0] * qmul[*scantable] + 32))>>6; \
565 for(i=1;i<total_coeff && zeros_left > 0;i++) { \
566 if(zeros_left < 7) \
567 run_before = get_vlc2(gb, run_vlc[zeros_left], RUN_VLC_BITS, 1); \
568 else \
569 run_before = get_vlc2(gb, run7_vlc_table, RUN7_VLC_BITS, 2); \
570 zeros_left -= run_before; \
571 scantable -= 1 + run_before; \
572 ((type*)block)[*scantable]= ((int)(level[i] * qmul[*scantable] + 32))>>6; \
573 } \
574 for(;i<total_coeff;i++) { \
575 scantable--; \
576 ((type*)block)[*scantable]= ((int)(level[i] * qmul[*scantable] + 32))>>6; \
577 } \
578 }
579
580 if (h->pixel_shift) {
582 } else {
583 STORE_BLOCK(int16_t)
584 }
585
586 if(zeros_left<0){
587 av_log(h->avctx, AV_LOG_ERROR, "negative number of zero coeffs at %d %d\n", sl->mb_x, sl->mb_y);
588 return -1;
589 }
590
591 return 0;
592}
593
594static av_always_inline
596 GetBitContext *gb, const uint8_t *scan,
597 const uint8_t *scan8x8, int pixel_shift,
598 int mb_type, int cbp, int p)
599{
600 int i4x4, i8x8;
601 int qscale = p == 0 ? sl->qscale : sl->chroma_qp[p - 1];
602 if(IS_INTRA16x16(mb_type)){
603 AV_ZERO128(sl->mb_luma_dc[p]+0);
604 AV_ZERO128(sl->mb_luma_dc[p]+8);
605 AV_ZERO128(sl->mb_luma_dc[p]+16);
606 AV_ZERO128(sl->mb_luma_dc[p]+24);
607 if (decode_residual(h, sl, gb, sl->mb_luma_dc[p], LUMA_DC_BLOCK_INDEX + p, scan, NULL, 16) < 0) {
608 return -1; //FIXME continue if partitioned and other return -1 too
609 }
610
611 av_assert2((cbp&15) == 0 || (cbp&15) == 15);
612
613 if(cbp&15){
614 for(i8x8=0; i8x8<4; i8x8++){
615 for(i4x4=0; i4x4<4; i4x4++){
616 const int index= i4x4 + 4*i8x8 + p*16;
617 if( decode_residual(h, sl, gb, sl->mb + (16*index << pixel_shift),
618 index, scan + 1, h->ps.pps->dequant4_coeff[p][qscale], 15) < 0 ){
619 return -1;
620 }
621 }
622 }
623 return 0xf;
624 }else{
625 fill_rectangle(&sl->non_zero_count_cache[scan8[p*16]], 4, 4, 8, 0, 1);
626 return 0;
627 }
628 }else{
629 int cqm = (IS_INTRA( mb_type ) ? 0:3)+p;
630 /* For CAVLC 4:4:4, we need to keep track of the luma 8x8 CBP for deblocking nnz purposes. */
631 int new_cbp = 0;
632 for(i8x8=0; i8x8<4; i8x8++){
633 if(cbp & (1<<i8x8)){
634 if(IS_8x8DCT(mb_type)){
635 int16_t *buf = &sl->mb[64*i8x8+256*p << pixel_shift];
636 uint8_t *nnz;
637 for(i4x4=0; i4x4<4; i4x4++){
638 const int index= i4x4 + 4*i8x8 + p*16;
639 if( decode_residual(h, sl, gb, buf, index, scan8x8+16*i4x4,
640 h->ps.pps->dequant8_coeff[cqm][qscale], 16) < 0 )
641 return -1;
642 }
643 nnz = &sl->non_zero_count_cache[scan8[4 * i8x8 + p * 16]];
644 nnz[0] += nnz[1] + nnz[8] + nnz[9];
645 new_cbp |= !!nnz[0] << i8x8;
646 }else{
647 for(i4x4=0; i4x4<4; i4x4++){
648 const int index= i4x4 + 4*i8x8 + p*16;
649 if( decode_residual(h, sl, gb, sl->mb + (16*index << pixel_shift), index,
650 scan, h->ps.pps->dequant4_coeff[cqm][qscale], 16) < 0 ){
651 return -1;
652 }
653 new_cbp |= sl->non_zero_count_cache[scan8[index]] << i8x8;
654 }
655 }
656 }else{
657 uint8_t * const nnz = &sl->non_zero_count_cache[scan8[4 * i8x8 + p * 16]];
658 nnz[0] = nnz[1] = nnz[8] = nnz[9] = 0;
659 }
660 }
661 return new_cbp;
662 }
663}
664
666{
667 int mb_xy;
668 int partition_count;
669 unsigned int mb_type, cbp;
670 int dct8x8_allowed = h->ps.pps->transform_8x8_mode;
671 const int decode_chroma = h->ps.sps->chroma_format_idc == 1 || h->ps.sps->chroma_format_idc == 2;
672 const int pixel_shift = h->pixel_shift;
673
674 mb_xy = sl->mb_xy = sl->mb_x + sl->mb_y*h->mb_stride;
675
676 ff_tlog(h->avctx, "pic:%d mb:%d/%d\n", h->poc.frame_num, sl->mb_x, sl->mb_y);
677 cbp = 0; /* avoid warning. FIXME: find a solution without slowing
678 down the code */
680 if (sl->mb_skip_run == -1) {
681 unsigned mb_skip_run = get_ue_golomb_long(&sl->gb);
682 if (mb_skip_run > h->mb_num) {
683 av_log(h->avctx, AV_LOG_ERROR, "mb_skip_run %d is invalid\n", mb_skip_run);
684 return AVERROR_INVALIDDATA;
685 }
686 sl->mb_skip_run = mb_skip_run;
687 }
688
689 if (sl->mb_skip_run--) {
690 if (FRAME_MBAFF(h) && (sl->mb_y & 1) == 0) {
691 if (sl->mb_skip_run == 0)
693 }
694 decode_mb_skip(h, sl);
695 return 0;
696 }
697 }
698 if (FRAME_MBAFF(h)) {
699 if ((sl->mb_y & 1) == 0)
701 }
702
703 sl->prev_mb_skipped = 0;
704
705 mb_type= get_ue_golomb(&sl->gb);
707 if(mb_type < 23){
708 partition_count = ff_h264_b_mb_type_info[mb_type].partition_count;
709 mb_type = ff_h264_b_mb_type_info[mb_type].type;
710 }else{
711 mb_type -= 23;
712 goto decode_intra_mb;
713 }
714 } else if (sl->slice_type_nos == AV_PICTURE_TYPE_P) {
715 if(mb_type < 5){
716 partition_count = ff_h264_p_mb_type_info[mb_type].partition_count;
717 mb_type = ff_h264_p_mb_type_info[mb_type].type;
718 }else{
719 mb_type -= 5;
720 goto decode_intra_mb;
721 }
722 }else{
724 if (sl->slice_type == AV_PICTURE_TYPE_SI && mb_type)
725 mb_type--;
726decode_intra_mb:
727 if(mb_type > 25){
728 av_log(h->avctx, AV_LOG_ERROR, "mb_type %d in %c slice too large at %d %d\n", mb_type, av_get_picture_type_char(sl->slice_type), sl->mb_x, sl->mb_y);
729 return -1;
730 }
731 partition_count=0;
732 cbp = ff_h264_i_mb_type_info[mb_type].cbp;
733 sl->intra16x16_pred_mode = ff_h264_i_mb_type_info[mb_type].pred_mode;
734 mb_type = ff_h264_i_mb_type_info[mb_type].type;
735 }
736
737 if (MB_FIELD(sl))
738 mb_type |= MB_TYPE_INTERLACED;
739
740 h->slice_table[mb_xy] = sl->slice_num;
741
742 if(IS_INTRA_PCM(mb_type)){
743 const int mb_size = ff_h264_mb_sizes[h->ps.sps->chroma_format_idc] *
744 h->ps.sps->bit_depth_luma;
745
746 // We assume these blocks are very rare so we do not optimize it.
747 sl->intra_pcm_ptr = align_get_bits(&sl->gb);
748 if (get_bits_left(&sl->gb) < mb_size) {
749 av_log(h->avctx, AV_LOG_ERROR, "Not enough data for an intra PCM block.\n");
750 return AVERROR_INVALIDDATA;
751 }
752 skip_bits_long(&sl->gb, mb_size);
753
754 // In deblocking, the quantizer is 0
755 h->cur_pic.qscale_table[mb_xy] = 0;
756 // All coeffs are present
757 memset(h->non_zero_count[mb_xy], 16, 48);
758
759 h->cur_pic.mb_type[mb_xy] = mb_type;
760 return 0;
761 }
762
763 fill_decode_neighbors(h, sl, mb_type);
764 fill_decode_caches(h, sl, mb_type);
765
766 //mb_pred
767 if(IS_INTRA(mb_type)){
768 int pred_mode;
769// init_top_left_availability(h);
770 if(IS_INTRA4x4(mb_type)){
771 int i;
772 int di = 1;
773 if(dct8x8_allowed && get_bits1(&sl->gb)){
774 mb_type |= MB_TYPE_8x8DCT;
775 di = 4;
776 }
777
778// fill_intra4x4_pred_table(h);
779 for(i=0; i<16; i+=di){
780 int mode = pred_intra_mode(h, sl, i);
781
782 if(!get_bits1(&sl->gb)){
783 const int rem_mode= get_bits(&sl->gb, 3);
784 mode = rem_mode + (rem_mode >= mode);
785 }
786
787 if(di==4)
788 fill_rectangle(&sl->intra4x4_pred_mode_cache[ scan8[i] ], 2, 2, 8, mode, 1);
789 else
791 }
795 return -1;
796 }else{
799 if (sl->intra16x16_pred_mode < 0)
800 return -1;
801 }
802 if(decode_chroma){
805 if(pred_mode < 0)
806 return -1;
807 sl->chroma_pred_mode = pred_mode;
808 } else {
810 }
811 }else if(partition_count==4){
812 int i, j, sub_partition_count[4], list, ref[2][4];
813
815 for(i=0; i<4; i++){
816 sl->sub_mb_type[i]= get_ue_golomb_31(&sl->gb);
817 if(sl->sub_mb_type[i] >=13){
818 av_log(h->avctx, AV_LOG_ERROR, "B sub_mb_type %u out of range at %d %d\n", sl->sub_mb_type[i], sl->mb_x, sl->mb_y);
819 return -1;
820 }
821 sub_partition_count[i] = ff_h264_b_sub_mb_type_info[sl->sub_mb_type[i]].partition_count;
823 }
824 if( IS_DIRECT(sl->sub_mb_type[0]|sl->sub_mb_type[1]|sl->sub_mb_type[2]|sl->sub_mb_type[3])) {
825 ff_h264_pred_direct_motion(h, sl, &mb_type);
826 sl->ref_cache[0][scan8[4]] =
827 sl->ref_cache[1][scan8[4]] =
828 sl->ref_cache[0][scan8[12]] =
829 sl->ref_cache[1][scan8[12]] = PART_NOT_AVAILABLE;
830 }
831 }else{
832 av_assert2(sl->slice_type_nos == AV_PICTURE_TYPE_P); //FIXME SP correct ?
833 for(i=0; i<4; i++){
834 sl->sub_mb_type[i]= get_ue_golomb_31(&sl->gb);
835 if(sl->sub_mb_type[i] >=4){
836 av_log(h->avctx, AV_LOG_ERROR, "P sub_mb_type %u out of range at %d %d\n", sl->sub_mb_type[i], sl->mb_x, sl->mb_y);
837 return -1;
838 }
839 sub_partition_count[i] = ff_h264_p_sub_mb_type_info[sl->sub_mb_type[i]].partition_count;
841 }
842 }
843
844 for (list = 0; list < sl->list_count; list++) {
845 int ref_count = IS_REF0(mb_type) ? 1 : sl->ref_count[list] << MB_MBAFF(sl);
846 for(i=0; i<4; i++){
847 if(IS_DIRECT(sl->sub_mb_type[i])) continue;
848 if(IS_DIR(sl->sub_mb_type[i], 0, list)){
849 unsigned int tmp;
850 if(ref_count == 1){
851 tmp= 0;
852 }else if(ref_count == 2){
853 tmp= get_bits1(&sl->gb)^1;
854 }else{
855 tmp= get_ue_golomb_31(&sl->gb);
856 if(tmp>=ref_count){
857 av_log(h->avctx, AV_LOG_ERROR, "ref %u overflow\n", tmp);
858 return -1;
859 }
860 }
861 ref[list][i]= tmp;
862 }else{
863 //FIXME
864 ref[list][i] = -1;
865 }
866 }
867 }
868
869 if(dct8x8_allowed)
870 dct8x8_allowed = get_dct8x8_allowed(h, sl);
871
872 for (list = 0; list < sl->list_count; list++) {
873 for(i=0; i<4; i++){
874 if(IS_DIRECT(sl->sub_mb_type[i])) {
875 sl->ref_cache[list][ scan8[4*i] ] = sl->ref_cache[list][ scan8[4*i]+1 ];
876 continue;
877 }
878 sl->ref_cache[list][ scan8[4*i] ]=sl->ref_cache[list][ scan8[4*i]+1 ]=
879 sl->ref_cache[list][ scan8[4*i]+8 ]=sl->ref_cache[list][ scan8[4*i]+9 ]= ref[list][i];
880
881 if(IS_DIR(sl->sub_mb_type[i], 0, list)){
882 const int sub_mb_type= sl->sub_mb_type[i];
883 const int block_width= (sub_mb_type & (MB_TYPE_16x16|MB_TYPE_16x8)) ? 2 : 1;
884 for(j=0; j<sub_partition_count[i]; j++){
885 int mx, my;
886 const int index= 4*i + block_width*j;
887 int16_t (* mv_cache)[2]= &sl->mv_cache[list][ scan8[index] ];
888 pred_motion(h, sl, index, block_width, list, sl->ref_cache[list][ scan8[index] ], &mx, &my);
889 mx += (unsigned)get_se_golomb(&sl->gb);
890 my += (unsigned)get_se_golomb(&sl->gb);
891 ff_tlog(h->avctx, "final mv:%d %d\n", mx, my);
892
893 if(IS_SUB_8X8(sub_mb_type)){
894 mv_cache[ 1 ][0]=
895 mv_cache[ 8 ][0]= mv_cache[ 9 ][0]= mx;
896 mv_cache[ 1 ][1]=
897 mv_cache[ 8 ][1]= mv_cache[ 9 ][1]= my;
898 }else if(IS_SUB_8X4(sub_mb_type)){
899 mv_cache[ 1 ][0]= mx;
900 mv_cache[ 1 ][1]= my;
901 }else if(IS_SUB_4X8(sub_mb_type)){
902 mv_cache[ 8 ][0]= mx;
903 mv_cache[ 8 ][1]= my;
904 }
905 mv_cache[ 0 ][0]= mx;
906 mv_cache[ 0 ][1]= my;
907 }
908 }else{
909 uint32_t *p= (uint32_t *)&sl->mv_cache[list][ scan8[4*i] ][0];
910 p[0] = p[1]=
911 p[8] = p[9]= 0;
912 }
913 }
914 }
915 }else if(IS_DIRECT(mb_type)){
916 ff_h264_pred_direct_motion(h, sl, &mb_type);
917 dct8x8_allowed &= h->ps.sps->direct_8x8_inference_flag;
918 }else{
919 int list, mx, my, i;
920 //FIXME we should set ref_idx_l? to 0 if we use that later ...
921 if(IS_16X16(mb_type)){
922 for (list = 0; list < sl->list_count; list++) {
923 unsigned int val;
924 if (IS_DIR(mb_type, 0, list)) {
925 unsigned rc = sl->ref_count[list] << MB_MBAFF(sl);
926 if (rc == 1) {
927 val = 0;
928 } else if (rc == 2) {
929 val = get_bits1(&sl->gb)^1;
930 } else {
931 val = get_ue_golomb_31(&sl->gb);
932 if (val >= rc) {
933 av_log(h->avctx, AV_LOG_ERROR, "ref %u overflow\n", val);
934 return -1;
935 }
936 }
937 fill_rectangle(&sl->ref_cache[list][scan8[0]], 4, 4, 8, val, 1);
938 }
939 }
940 for (list = 0; list < sl->list_count; list++) {
941 if(IS_DIR(mb_type, 0, list)){
942 pred_motion(h, sl, 0, 4, list, sl->ref_cache[list][ scan8[0] ], &mx, &my);
943 mx += (unsigned)get_se_golomb(&sl->gb);
944 my += (unsigned)get_se_golomb(&sl->gb);
945 ff_tlog(h->avctx, "final mv:%d %d\n", mx, my);
946
947 fill_rectangle(sl->mv_cache[list][ scan8[0] ], 4, 4, 8, pack16to32(mx,my), 4);
948 }
949 }
950 }
951 else if(IS_16X8(mb_type)){
952 for (list = 0; list < sl->list_count; list++) {
953 for (i = 0; i < 2; i++) {
954 unsigned int val;
955 if (IS_DIR(mb_type, i, list)) {
956 unsigned rc = sl->ref_count[list] << MB_MBAFF(sl);
957 if (rc == 1) {
958 val = 0;
959 } else if (rc == 2) {
960 val = get_bits1(&sl->gb)^1;
961 } else {
962 val = get_ue_golomb_31(&sl->gb);
963 if (val >= rc) {
964 av_log(h->avctx, AV_LOG_ERROR, "ref %u overflow\n", val);
965 return -1;
966 }
967 }
968 } else
969 val = LIST_NOT_USED & 0xFF;
970 fill_rectangle(&sl->ref_cache[list][scan8[0] + 16*i], 4, 2, 8, val, 1);
971 }
972 }
973 for (list = 0; list < sl->list_count; list++) {
974 for(i=0; i<2; i++){
975 unsigned int val;
976 if(IS_DIR(mb_type, i, list)){
977 pred_16x8_motion(h, sl, 8*i, list, sl->ref_cache[list][scan8[0] + 16*i], &mx, &my);
978 mx += (unsigned)get_se_golomb(&sl->gb);
979 my += (unsigned)get_se_golomb(&sl->gb);
980 ff_tlog(h->avctx, "final mv:%d %d\n", mx, my);
981
983 }else
984 val=0;
985 fill_rectangle(sl->mv_cache[list][ scan8[0] + 16*i ], 4, 2, 8, val, 4);
986 }
987 }
988 }else{
989 av_assert2(IS_8X16(mb_type));
990 for (list = 0; list < sl->list_count; list++) {
991 for (i = 0; i < 2; i++) {
992 unsigned int val;
993 if (IS_DIR(mb_type, i, list)) { //FIXME optimize
994 unsigned rc = sl->ref_count[list] << MB_MBAFF(sl);
995 if (rc == 1) {
996 val = 0;
997 } else if (rc == 2) {
998 val = get_bits1(&sl->gb)^1;
999 } else {
1000 val = get_ue_golomb_31(&sl->gb);
1001 if (val >= rc) {
1002 av_log(h->avctx, AV_LOG_ERROR, "ref %u overflow\n", val);
1003 return -1;
1004 }
1005 }
1006 } else
1007 val = LIST_NOT_USED & 0xFF;
1008 fill_rectangle(&sl->ref_cache[list][scan8[0] + 2*i], 2, 4, 8, val, 1);
1009 }
1010 }
1011 for (list = 0; list < sl->list_count; list++) {
1012 for(i=0; i<2; i++){
1013 unsigned int val;
1014 if(IS_DIR(mb_type, i, list)){
1015 pred_8x16_motion(h, sl, i*4, list, sl->ref_cache[list][ scan8[0] + 2*i ], &mx, &my);
1016 mx += (unsigned)get_se_golomb(&sl->gb);
1017 my += (unsigned)get_se_golomb(&sl->gb);
1018 ff_tlog(h->avctx, "final mv:%d %d\n", mx, my);
1019
1020 val= pack16to32(mx,my);
1021 }else
1022 val=0;
1023 fill_rectangle(sl->mv_cache[list][ scan8[0] + 2*i ], 2, 4, 8, val, 4);
1024 }
1025 }
1026 }
1027 }
1028
1029 if(IS_INTER(mb_type))
1030 write_back_motion(h, sl, mb_type);
1031
1032 if(!IS_INTRA16x16(mb_type)){
1033 cbp= get_ue_golomb(&sl->gb);
1034
1035 if(decode_chroma){
1036 if(cbp > 47){
1037 av_log(h->avctx, AV_LOG_ERROR, "cbp too large (%u) at %d %d\n", cbp, sl->mb_x, sl->mb_y);
1038 return -1;
1039 }
1040 if (IS_INTRA4x4(mb_type))
1042 else
1043 cbp = ff_h264_golomb_to_inter_cbp[cbp];
1044 }else{
1045 if(cbp > 15){
1046 av_log(h->avctx, AV_LOG_ERROR, "cbp too large (%u) at %d %d\n", cbp, sl->mb_x, sl->mb_y);
1047 return -1;
1048 }
1049 if(IS_INTRA4x4(mb_type)) cbp= golomb_to_intra4x4_cbp_gray[cbp];
1050 else cbp= golomb_to_inter_cbp_gray[cbp];
1051 }
1052 } else {
1053 if (!decode_chroma && cbp>15) {
1054 av_log(h->avctx, AV_LOG_ERROR, "gray chroma\n");
1055 return AVERROR_INVALIDDATA;
1056 }
1057 }
1058
1059 if(dct8x8_allowed && (cbp&15) && !IS_INTRA(mb_type)){
1060 mb_type |= MB_TYPE_8x8DCT*get_bits1(&sl->gb);
1061 }
1062 sl->cbp=
1063 h->cbp_table[mb_xy]= cbp;
1064 h->cur_pic.mb_type[mb_xy] = mb_type;
1065
1066 if(cbp || IS_INTRA16x16(mb_type)){
1067 int i4x4, i8x8, chroma_idx;
1068 int dquant;
1069 int ret;
1070 GetBitContext *gb = &sl->gb;
1071 const uint8_t *scan, *scan8x8;
1072 const int max_qp = 51 + 6 * (h->ps.sps->bit_depth_luma - 8);
1073
1074 dquant= get_se_golomb(&sl->gb);
1075
1076 sl->qscale += (unsigned)dquant;
1077
1078 if (((unsigned)sl->qscale) > max_qp){
1079 if (sl->qscale < 0) sl->qscale += max_qp + 1;
1080 else sl->qscale -= max_qp+1;
1081 if (((unsigned)sl->qscale) > max_qp){
1082 av_log(h->avctx, AV_LOG_ERROR, "dquant out of range (%d) at %d %d\n", dquant, sl->mb_x, sl->mb_y);
1083 sl->qscale = max_qp;
1084 return -1;
1085 }
1086 }
1087
1088 sl->chroma_qp[0] = get_chroma_qp(h->ps.pps, 0, sl->qscale);
1089 sl->chroma_qp[1] = get_chroma_qp(h->ps.pps, 1, sl->qscale);
1090
1091 if(IS_INTERLACED(mb_type)){
1092 scan8x8 = sl->qscale ? h->field_scan8x8_cavlc : h->field_scan8x8_cavlc_q0;
1093 scan = sl->qscale ? h->field_scan : h->field_scan_q0;
1094 }else{
1095 scan8x8 = sl->qscale ? h->zigzag_scan8x8_cavlc : h->zigzag_scan8x8_cavlc_q0;
1096 scan = sl->qscale ? h->zigzag_scan : h->zigzag_scan_q0;
1097 }
1098
1099 if ((ret = decode_luma_residual(h, sl, gb, scan, scan8x8, pixel_shift, mb_type, cbp, 0)) < 0 ) {
1100 return -1;
1101 }
1102 h->cbp_table[mb_xy] |= ret << 12;
1103 if (CHROMA444(h)) {
1104 if (decode_luma_residual(h, sl, gb, scan, scan8x8, pixel_shift, mb_type, cbp, 1) < 0 ) {
1105 return -1;
1106 }
1107 if (decode_luma_residual(h, sl, gb, scan, scan8x8, pixel_shift, mb_type, cbp, 2) < 0 ) {
1108 return -1;
1109 }
1110 } else {
1111 const int num_c8x8 = h->ps.sps->chroma_format_idc;
1112
1113 if(cbp&0x30){
1114 for(chroma_idx=0; chroma_idx<2; chroma_idx++)
1115 if (decode_residual(h, sl, gb, sl->mb + ((256 + 16*16*chroma_idx) << pixel_shift),
1116 CHROMA_DC_BLOCK_INDEX + chroma_idx,
1118 NULL, 4 * num_c8x8) < 0) {
1119 return -1;
1120 }
1121 }
1122
1123 if(cbp&0x20){
1124 for(chroma_idx=0; chroma_idx<2; chroma_idx++){
1125 const uint32_t *qmul = h->ps.pps->dequant4_coeff[chroma_idx+1+(IS_INTRA( mb_type ) ? 0:3)][sl->chroma_qp[chroma_idx]];
1126 int16_t *mb = sl->mb + (16*(16 + 16*chroma_idx) << pixel_shift);
1127 for (i8x8 = 0; i8x8<num_c8x8; i8x8++) {
1128 for (i4x4 = 0; i4x4 < 4; i4x4++) {
1129 const int index = 16 + 16*chroma_idx + 8*i8x8 + i4x4;
1130 if (decode_residual(h, sl, gb, mb, index, scan + 1, qmul, 15) < 0)
1131 return -1;
1132 mb += 16 << pixel_shift;
1133 }
1134 }
1135 }
1136 }else{
1137 fill_rectangle(&sl->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
1138 fill_rectangle(&sl->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
1139 }
1140 }
1141 }else{
1142 fill_rectangle(&sl->non_zero_count_cache[scan8[ 0]], 4, 4, 8, 0, 1);
1143 fill_rectangle(&sl->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
1144 fill_rectangle(&sl->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
1145 }
1146 h->cur_pic.qscale_table[mb_xy] = sl->qscale;
1148
1149 return 0;
1150}
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t my
Definition dsp.h:57
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t mx
Definition dsp.h:57
static double val(void *priv, double ch)
Definition aeval.c:77
int32_t
simple assert() macros that are a bit more flexible than ISO C assert().
#define av_assert2(cond)
assert() equivalent, that does lie in speed critical code.
Definition avassert.h:68
#define av_assert1(cond)
assert() equivalent, that does not lie in speed critical code.
Definition avassert.h:58
static int BS_FUNC left(const BSCTX *bc)
Return the number of the bits left in a buffer.
#define i(width, name, range_min, range_max)
Definition cbs_h264.c:63
#define mb(name)
Definition cbs_lcevc.c:95
#define NULL
Definition coverity.c:32
static int16_t block[64]
Definition dct.c:125
static struct @346255127015250356166251341105367306144006377143 state
static void fill_rectangle(int x, int y, int w, int h)
Definition ffplay.c:829
#define GET_CACHE(name, gb)
Definition get_bits.h:251
static av_always_inline int get_vlc2(GetBitContext *s, const VLCElem *table, int bits, int max_depth)
Parse a vlc code.
Definition get_bits.h:645
#define CLOSE_READER(name, gb)
Definition get_bits.h:189
static int get_bits_left(GetBitContext *gb)
Definition get_bits.h:688
static void skip_bits_long(GetBitContext *s, int n)
Skips the specified number of bits.
Definition get_bits.h:280
static unsigned int get_bits1(GetBitContext *s)
Definition get_bits.h:391
#define OPEN_READER(name, gb)
Definition get_bits.h:182
static void skip_bits(GetBitContext *s, int n)
Definition get_bits.h:383
#define UPDATE_CACHE(name, gb)
Definition get_bits.h:213
#define LAST_SKIP_BITS(name, gb, num)
Definition get_bits.h:235
static const uint8_t * align_get_bits(GetBitContext *s)
Definition get_bits.h:560
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
Definition get_bits.h:337
static unsigned int show_bits(GetBitContext *s, int n)
Show 1-25 bits.
Definition get_bits.h:373
exp golomb vlc stuff
static int get_se_golomb(GetBitContext *gb)
read signed exp golomb code.
Definition golomb.h:239
static int get_ue_golomb_31(GetBitContext *gb)
read unsigned exp golomb code, constraint to a max of 31.
Definition golomb.h:120
static int get_ue_golomb(GetBitContext *gb)
Read an unsigned Exp-Golomb code in the range 0 to 8190.
Definition golomb.h:53
static unsigned get_ue_golomb_long(GetBitContext *gb)
Read an unsigned Exp-Golomb code in the range 0 to UINT32_MAX-1.
Definition golomb.h:104
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition error.h:61
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition log.h:210
char av_get_picture_type_char(enum AVPictureType pict_type)
Return a single letter to describe the given picture type pict_type.
Definition utils.c:40
@ AV_PICTURE_TYPE_I
Intra.
Definition avutil.h:278
@ AV_PICTURE_TYPE_P
Predicted.
Definition avutil.h:279
@ AV_PICTURE_TYPE_SI
Switching Intra.
Definition avutil.h:282
@ AV_PICTURE_TYPE_B
Bi-dir predicted.
Definition avutil.h:280
int index
Definition gxfenc.c:90
#define CHROMA_DC_COEFF_TOKEN_VLC_BITS
Definition h264_cavlc.c:240
static int get_level_prefix(GetBitContext *gb)
Definition h264_cavlc.c:382
static const uint8_t chroma422_dc_total_zeros_bits[7][8]
Definition h264_cavlc.c:207
static const uint8_t coeff_token_bits[4][4 *17]
Definition h264_cavlc.c:118
static const uint8_t coeff_token_len[4][4 *17]
Definition h264_cavlc.c:87
static const uint8_t chroma422_dc_total_zeros_len[7][8]
Definition h264_cavlc.c:197
int ff_h264_decode_mb_cavlc(const H264Context *h, H264SliceContext *sl)
Decode a macroblock.
Definition h264_cavlc.c:665
static av_cold void init_cavlc_level_tab(void)
Definition h264_cavlc.c:289
static const uint8_t chroma422_dc_coeff_token_len[4 *9]
Definition h264_cavlc.c:63
#define COEFF_TOKEN_VLC_BITS
Definition h264_cavlc.c:242
static const uint8_t chroma_dc_coeff_token_bits[4 *5]
Definition h264_cavlc.c:55
static int decode_residual(const H264Context *h, H264SliceContext *sl, GetBitContext *gb, int16_t *block, int n, const uint8_t *scantable, const uint32_t *qmul, int max_coeff)
Decode a residual block.
Definition h264_cavlc.c:405
static const uint8_t chroma_dc_coeff_token_len[4 *5]
Definition h264_cavlc.c:47
static const uint8_t chroma_dc_total_zeros_bits[3][4]
Definition h264_cavlc.c:191
static const uint8_t golomb_to_intra4x4_cbp_gray[16]
Definition h264_cavlc.c:43
static const VLCElem * total_zeros_vlc[15+1]
Definition h264_cavlc.c:256
#define TOTAL_ZEROS_VLC_BITS
Definition h264_cavlc.c:243
static const uint8_t total_zeros_bits[16][16]
Definition h264_cavlc.c:167
#define CHROMA_DC_TOTAL_ZEROS_VLC_BITS
Definition h264_cavlc.c:244
#define CHROMA422_DC_TOTAL_ZEROS_VLC_BITS
Definition h264_cavlc.c:245
static VLCElem run7_vlc_table[96+(6<< RUN_VLC_BITS)+(15<< TOTAL_ZEROS_VLC_BITS)+(3<< CHROMA_DC_TOTAL_ZEROS_VLC_BITS)+(7<< CHROMA422_DC_TOTAL_ZEROS_VLC_BITS)+(520+332+280+256)]
Definition h264_cavlc.c:269
static const uint8_t chroma422_dc_coeff_token_bits[4 *9]
Definition h264_cavlc.c:75
static const uint8_t chroma_dc_total_zeros_len[3][4]
Definition h264_cavlc.c:185
static const uint8_t total_zeros_len[16][16]
Definition h264_cavlc.c:149
#define STORE_BLOCK(type)
#define RUN7_VLC_BITS
Definition h264_cavlc.c:247
static const VLCElem * chroma422_dc_total_zeros_vlc[7+1]
Definition h264_cavlc.c:260
static const uint8_t run_len[7][16]
Definition h264_cavlc.c:217
#define RUN_VLC_BITS
Definition h264_cavlc.c:246
static const VLCElem * run_vlc[6+1]
Definition h264_cavlc.c:262
static const uint8_t golomb_to_inter_cbp_gray[16]
Definition h264_cavlc.c:39
static av_always_inline int decode_luma_residual(const H264Context *h, H264SliceContext *sl, GetBitContext *gb, const uint8_t *scan, const uint8_t *scan8x8, int pixel_shift, int mb_type, int cbp, int p)
Definition h264_cavlc.c:595
static VLCElem chroma422_dc_coeff_token_vlc_table[1<< CHROMA422_DC_COEFF_TOKEN_VLC_BITS]
Definition h264_cavlc.c:254
#define CHROMA422_DC_COEFF_TOKEN_VLC_BITS
Definition h264_cavlc.c:241
static const uint8_t run_bits[7][16]
Definition h264_cavlc.c:227
static int pred_non_zero_count(const H264Context *h, const H264SliceContext *sl, int n)
Get the predicted number of non-zero coefficients.
Definition h264_cavlc.c:275
static VLCElem chroma_dc_coeff_token_vlc_table[256]
Definition h264_cavlc.c:252
#define LEVEL_TAB_BITS
Definition h264_cavlc.c:237
static const VLCElem * chroma_dc_total_zeros_vlc[3+1]
Definition h264_cavlc.c:258
static int8_t cavlc_level_tab[7][1<< LEVEL_TAB_BITS][2]
Definition h264_cavlc.c:238
av_cold void ff_h264_decode_init_vlc(void)
Definition h264_cavlc.c:315
static const VLCElem * coeff_token_vlc[17]
17 pointers to only four different VLCs
Definition h264_cavlc.c:250
void ff_h264_pred_direct_motion(const H264Context *const h, H264SliceContext *sl, int *mb_type)
H.264 / AVC / MPEG-4 part10 motion vector prediction.
static void fill_decode_neighbors(const H264Context *h, H264SliceContext *sl, int mb_type)
static av_always_inline void write_back_motion(const H264Context *h, H264SliceContext *sl, int mb_type)
static av_always_inline int pred_intra_mode(const H264Context *h, H264SliceContext *sl, int n)
Get the predicted intra4x4 prediction mode.
Definition h264_mvpred.h:42
static av_always_inline int get_dct8x8_allowed(const H264Context *h, H264SliceContext *sl)
static av_always_inline void write_back_non_zero_count(const H264Context *h, H264SliceContext *sl)
Definition h264_mvpred.h:70
static av_unused void decode_mb_skip(const H264Context *h, H264SliceContext *sl)
decodes a P_SKIP or B_SKIP macroblock
static av_always_inline void pred_motion(const H264Context *const h, H264SliceContext *sl, int n, int part_width, int list, int ref, int *const mx, int *const my)
Get the predicted MV.
static void fill_decode_caches(const H264Context *h, H264SliceContext *sl, int mb_type)
static av_always_inline void pred_8x16_motion(const H264Context *const h, H264SliceContext *sl, int n, int list, int ref, int *const mx, int *const my)
Get the directionally predicted 8x16 MV.
static av_always_inline void write_back_intra_pred_mode(const H264Context *h, H264SliceContext *sl)
Definition h264_mvpred.h:58
static av_always_inline void pred_16x8_motion(const H264Context *const h, H264SliceContext *sl, int n, int list, int ref, int *const mx, int *const my)
Get the directionally predicted 16x8 MV.
int ff_h264_check_intra4x4_pred_mode(int8_t *pred_mode_cache, void *logctx, int top_samples_available, int left_samples_available)
Check if the top & left blocks are available if needed and change the dc mode so it only uses the ava...
Definition h264_parse.c:134
int ff_h264_check_intra_pred_mode(void *logctx, int top_samples_available, int left_samples_available, int mode, int is_chroma)
Check if the top & left blocks are available if needed and change the dc mode so it only uses the ava...
Definition h264_parse.c:182
static const uint8_t scan8[16 *3+3]
Definition h264_parse.h:40
static av_always_inline uint32_t pack16to32(unsigned a, unsigned b)
Definition h264_parse.h:127
#define MB_TYPE_8x8DCT
Definition h264_parse.h:37
const IMbInfo ff_h264_i_mb_type_info[26]
Definition h264data.c:66
const PMbInfo ff_h264_p_mb_type_info[5]
Definition h264data.c:95
const uint8_t ff_h264_golomb_to_inter_cbp[48]
Definition h264data.c:48
const uint8_t ff_h264_chroma422_dc_scan[8]
Definition h264data.c:59
const PMbInfo ff_h264_b_sub_mb_type_info[13]
Definition h264data.c:136
const uint8_t ff_h264_chroma_dc_scan[4]
Definition h264data.c:54
const PMbInfo ff_h264_b_mb_type_info[23]
Definition h264data.c:110
const uint8_t ff_h264_golomb_to_intra4x4_cbp[48]
Definition h264data.c:42
const PMbInfo ff_h264_p_sub_mb_type_info[4]
Definition h264data.c:103
H.264 / AVC / MPEG-4 part10 codec.
#define MB_MBAFF(h)
Definition h264dec.h:62
#define IS_SUB_8X8(a)
Definition h264dec.h:94
#define CHROMA444(h)
Definition h264dec.h:90
#define IS_DIR(a, part, list)
Definition h264dec.h:98
#define IS_8x8DCT(a)
Definition h264dec.h:93
#define MB_FIELD(sl)
Definition h264dec.h:63
#define IS_SUB_4X8(a)
Definition h264dec.h:96
#define IS_SUB_8X4(a)
Definition h264dec.h:95
#define LIST_NOT_USED
Definition h264dec.h:395
static av_always_inline int get_chroma_qp(const PPS *pps, int t, int qscale)
Get the chroma qp.
Definition h264dec.h:672
#define CHROMA422(h)
Definition h264dec.h:89
#define LUMA_DC_BLOCK_INDEX
Definition h264dec.h:666
#define CHROMA_DC_BLOCK_INDEX
Definition h264dec.h:667
#define IS_REF0(a)
Definition h264dec.h:92
#define FRAME_MBAFF(h)
Definition h264dec.h:64
#define PART_NOT_AVAILABLE
Definition h264pred.h:89
#define DC_128_PRED8x8
Definition h264pred.h:76
#define av_log2
Definition intmath.h:84
#define AV_ZERO128(d)
const uint16_t ff_h264_mb_sizes[4]
Definition h264dec.c:60
#define av_always_inline
Definition attributes.h:72
#define av_cold
Definition attributes.h:117
static const uint16_t mask[17]
Definition lzw.c:38
#define IS_INTRA_PCM(a)
Definition mpegutils.h:76
#define IS_INTERLACED(a)
Definition mpegutils.h:77
#define IS_DIRECT(a)
Definition mpegutils.h:78
#define IS_INTRA4x4(a)
Definition mpegutils.h:69
#define IS_INTER(a)
Definition mpegutils.h:73
#define IS_16X8(a)
Definition mpegutils.h:81
#define IS_8X16(a)
Definition mpegutils.h:82
#define MB_TYPE_16x8
Definition mpegutils.h:42
#define IS_16X16(a)
Definition mpegutils.h:80
#define MB_TYPE_INTERLACED
Definition mpegutils.h:45
#define MB_TYPE_16x16
Definition mpegutils.h:41
#define IS_INTRA16x16(a)
Definition mpegutils.h:70
#define IS_INTRA(x, y)
#define FF_ARRAY_ELEMS(a)
H264Context.
Definition h264dec.h:338
int mb_field_decoding_flag
Definition h264dec.h:242
unsigned int list_count
Definition h264dec.h:269
int8_t ref_cache[2][5 *8]
Definition h264dec.h:300
uint16_t sub_mb_type[4]
Definition h264dec.h:304
const uint8_t * intra_pcm_ptr
Definition h264dec.h:281
int16_t mv_cache[2][5 *8][2]
Motion vector cache.
Definition h264dec.h:299
unsigned int left_samples_available
Definition h264dec.h:225
int slice_type_nos
S free slice type (SI/SP are remapped to I/P)
Definition h264dec.h:185
unsigned int top_samples_available
Definition h264dec.h:223
int16_t mb[16 *48 *2]
as a DCT coefficient is int32_t in high depth, we need to reserve twice the space.
Definition h264dec.h:307
int mb_mbaff
mb_aff_frame && mb_field_decoding_flag
Definition h264dec.h:243
GetBitContext gb
Definition h264dec.h:180
int chroma_qp[2]
Definition h264dec.h:189
int8_t intra4x4_pred_mode_cache[5 *8]
Definition h264dec.h:206
uint8_t non_zero_count_cache[15 *8]
non zero coeff count cache.
Definition h264dec.h:294
unsigned int ref_count[2]
num_ref_idx_l0/1_active_minus1 + 1
Definition h264dec.h:268
int16_t mb_luma_dc[3][16 *2]
Definition h264dec.h:308
int intra16x16_pred_mode
Definition h264dec.h:204
Definition vlc.h:32
For static VLCs, the number of bits can often be hardcoded at each get_vlc2() callsite.
Definition vlc.h:220
Definition swscale.c:71
uint8_t level
Definition svq3.c:208
#define ff_tlog(a,...)
#define av_log(a,...)
static uint8_t tmp[40]
Definition aes_ctr.c:52
static int ref[MAX_W *MAX_W]
char prefix[8]
#define VLC_INIT_STATIC_TABLE(vlc_table, nb_bits, nb_codes, bits, bits_wrap, bits_size, codes, codes_wrap, codes_size, flags)
Definition vlc.h:278
#define VLC_INIT_STATE(_table)
Definition vlc.h:225
static const VLCElem * ff_vlc_init_tables(VLCInitState *state, int nb_bits, int nb_codes, const void *bits, int bits_wrap, int bits_size, const void *codes, int codes_wrap, int codes_size, int flags)
Definition vlc.h:254