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
665/* Residual is category 3 (intra) or 4 (inter), so it comes from partition B
666 * or C. NULL if that partition was not received. */
668 unsigned mb_type)
669{
670 int intra = IS_INTRA(mb_type);
671
672 if (!sl->data_partitioning)
673 return &sl->gb;
674 if (intra ? sl->dpb_available : sl->dpc_available)
675 return intra ? &sl->gb_dpb : &sl->gb_dpc;
676
677 av_log(h->avctx, AV_LOG_ERROR, "Missing slice data partition %c\n",
678 intra ? 'B' : 'C');
679 return NULL;
680}
681
683{
684 int mb_xy;
685 int partition_count;
686 unsigned int mb_type, cbp;
687 int dct8x8_allowed = h->ps.pps->transform_8x8_mode;
688 const int decode_chroma = h->ps.sps->chroma_format_idc == 1 || h->ps.sps->chroma_format_idc == 2;
689 const int pixel_shift = h->pixel_shift;
690
691 mb_xy = sl->mb_xy = sl->mb_x + sl->mb_y*h->mb_stride;
692
693 ff_tlog(h->avctx, "pic:%d mb:%d/%d\n", h->poc.frame_num, sl->mb_x, sl->mb_y);
694 cbp = 0; /* avoid warning. FIXME: find a solution without slowing
695 down the code */
697 if (sl->mb_skip_run == -1) {
698 unsigned mb_skip_run = get_ue_golomb_long(&sl->gb);
699 if (mb_skip_run > h->mb_num) {
700 av_log(h->avctx, AV_LOG_ERROR, "mb_skip_run %d is invalid\n", mb_skip_run);
701 return AVERROR_INVALIDDATA;
702 }
703 sl->mb_skip_run = mb_skip_run;
704 }
705
706 if (sl->mb_skip_run--) {
707 if (FRAME_MBAFF(h) && (sl->mb_y & 1) == 0) {
708 if (sl->mb_skip_run == 0)
710 }
711 decode_mb_skip(h, sl);
712 return 0;
713 }
714 }
715 if (FRAME_MBAFF(h)) {
716 if ((sl->mb_y & 1) == 0)
718 }
719
720 sl->prev_mb_skipped = 0;
721
722 mb_type= get_ue_golomb(&sl->gb);
724 if(mb_type < 23){
725 partition_count = ff_h264_b_mb_type_info[mb_type].partition_count;
726 mb_type = ff_h264_b_mb_type_info[mb_type].type;
727 }else{
728 mb_type -= 23;
729 goto decode_intra_mb;
730 }
731 } else if (sl->slice_type_nos == AV_PICTURE_TYPE_P) {
732 if(mb_type < 5){
733 partition_count = ff_h264_p_mb_type_info[mb_type].partition_count;
734 mb_type = ff_h264_p_mb_type_info[mb_type].type;
735 }else{
736 mb_type -= 5;
737 goto decode_intra_mb;
738 }
739 }else{
741 if (sl->slice_type == AV_PICTURE_TYPE_SI && mb_type)
742 mb_type--;
743decode_intra_mb:
744 if(mb_type > 25){
745 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);
746 return -1;
747 }
748 partition_count=0;
749 cbp = ff_h264_i_mb_type_info[mb_type].cbp;
750 sl->intra16x16_pred_mode = ff_h264_i_mb_type_info[mb_type].pred_mode;
751 mb_type = ff_h264_i_mb_type_info[mb_type].type;
752 }
753
754 if (MB_FIELD(sl))
755 mb_type |= MB_TYPE_INTERLACED;
756
757 h->slice_table[mb_xy] = sl->slice_num;
758
759 if(IS_INTRA_PCM(mb_type)){
760 const int mb_size = ff_h264_mb_sizes[h->ps.sps->chroma_format_idc] *
761 h->ps.sps->bit_depth_luma;
762 GetBitContext *gb = mb_residual_gb(h, sl, mb_type); // samples are category 3
763
764 if (!gb)
765 return AVERROR_INVALIDDATA;
766
767 // We assume these blocks are very rare so we do not optimize it.
769 if (get_bits_left(gb) < mb_size) {
770 av_log(h->avctx, AV_LOG_ERROR, "Not enough data for an intra PCM block.\n");
771 return AVERROR_INVALIDDATA;
772 }
773 skip_bits_long(gb, mb_size);
774
775 // In deblocking, the quantizer is 0
776 h->cur_pic.qscale_table[mb_xy] = 0;
777 // All coeffs are present
778 memset(h->non_zero_count[mb_xy], 16, 48);
779
780 h->cur_pic.mb_type[mb_xy] = mb_type;
781 return 0;
782 }
783
784 fill_decode_neighbors(h, sl, mb_type);
785 fill_decode_caches(h, sl, mb_type);
786
787 //mb_pred
788 if(IS_INTRA(mb_type)){
789 int pred_mode;
790// init_top_left_availability(h);
791 if(IS_INTRA4x4(mb_type)){
792 int i;
793 int di = 1;
794 if(dct8x8_allowed && get_bits1(&sl->gb)){
795 mb_type |= MB_TYPE_8x8DCT;
796 di = 4;
797 }
798
799// fill_intra4x4_pred_table(h);
800 for(i=0; i<16; i+=di){
801 int mode = pred_intra_mode(h, sl, i);
802
803 if(!get_bits1(&sl->gb)){
804 const int rem_mode= get_bits(&sl->gb, 3);
805 mode = rem_mode + (rem_mode >= mode);
806 }
807
808 if(di==4)
809 fill_rectangle(&sl->intra4x4_pred_mode_cache[ scan8[i] ], 2, 2, 8, mode, 1);
810 else
812 }
816 return -1;
817 }else{
820 if (sl->intra16x16_pred_mode < 0)
821 return -1;
822 }
823 if(decode_chroma){
826 if(pred_mode < 0)
827 return -1;
828 sl->chroma_pred_mode = pred_mode;
829 } else {
831 }
832 }else if(partition_count==4){
833 int i, j, sub_partition_count[4], list, ref[2][4];
834
836 for(i=0; i<4; i++){
837 sl->sub_mb_type[i]= get_ue_golomb_31(&sl->gb);
838 if(sl->sub_mb_type[i] >=13){
839 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);
840 return -1;
841 }
842 sub_partition_count[i] = ff_h264_b_sub_mb_type_info[sl->sub_mb_type[i]].partition_count;
844 }
845 if( IS_DIRECT(sl->sub_mb_type[0]|sl->sub_mb_type[1]|sl->sub_mb_type[2]|sl->sub_mb_type[3])) {
846 ff_h264_pred_direct_motion(h, sl, &mb_type);
847 sl->ref_cache[0][scan8[4]] =
848 sl->ref_cache[1][scan8[4]] =
849 sl->ref_cache[0][scan8[12]] =
850 sl->ref_cache[1][scan8[12]] = PART_NOT_AVAILABLE;
851 }
852 }else{
853 av_assert2(sl->slice_type_nos == AV_PICTURE_TYPE_P); //FIXME SP correct ?
854 for(i=0; i<4; i++){
855 sl->sub_mb_type[i]= get_ue_golomb_31(&sl->gb);
856 if(sl->sub_mb_type[i] >=4){
857 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);
858 return -1;
859 }
860 sub_partition_count[i] = ff_h264_p_sub_mb_type_info[sl->sub_mb_type[i]].partition_count;
862 }
863 }
864
865 for (list = 0; list < sl->list_count; list++) {
866 int ref_count = IS_REF0(mb_type) ? 1 : sl->ref_count[list] << MB_MBAFF(sl);
867 for(i=0; i<4; i++){
868 if(IS_DIRECT(sl->sub_mb_type[i])) continue;
869 if(IS_DIR(sl->sub_mb_type[i], 0, list)){
870 unsigned int tmp;
871 if(ref_count == 1){
872 tmp= 0;
873 }else if(ref_count == 2){
874 tmp= get_bits1(&sl->gb)^1;
875 }else{
876 tmp= get_ue_golomb_31(&sl->gb);
877 if(tmp>=ref_count){
878 av_log(h->avctx, AV_LOG_ERROR, "ref %u overflow\n", tmp);
879 return -1;
880 }
881 }
882 ref[list][i]= tmp;
883 }else{
884 //FIXME
885 ref[list][i] = -1;
886 }
887 }
888 }
889
890 if(dct8x8_allowed)
891 dct8x8_allowed = get_dct8x8_allowed(h, sl);
892
893 for (list = 0; list < sl->list_count; list++) {
894 for(i=0; i<4; i++){
895 if(IS_DIRECT(sl->sub_mb_type[i])) {
896 sl->ref_cache[list][ scan8[4*i] ] = sl->ref_cache[list][ scan8[4*i]+1 ];
897 continue;
898 }
899 sl->ref_cache[list][ scan8[4*i] ]=sl->ref_cache[list][ scan8[4*i]+1 ]=
900 sl->ref_cache[list][ scan8[4*i]+8 ]=sl->ref_cache[list][ scan8[4*i]+9 ]= ref[list][i];
901
902 if(IS_DIR(sl->sub_mb_type[i], 0, list)){
903 const int sub_mb_type= sl->sub_mb_type[i];
904 const int block_width= (sub_mb_type & (MB_TYPE_16x16|MB_TYPE_16x8)) ? 2 : 1;
905 for(j=0; j<sub_partition_count[i]; j++){
906 int mx, my;
907 const int index= 4*i + block_width*j;
908 int16_t (* mv_cache)[2]= &sl->mv_cache[list][ scan8[index] ];
909 pred_motion(h, sl, index, block_width, list, sl->ref_cache[list][ scan8[index] ], &mx, &my);
910 mx += (unsigned)get_se_golomb(&sl->gb);
911 my += (unsigned)get_se_golomb(&sl->gb);
912 ff_tlog(h->avctx, "final mv:%d %d\n", mx, my);
913
914 if(IS_SUB_8X8(sub_mb_type)){
915 mv_cache[ 1 ][0]=
916 mv_cache[ 8 ][0]= mv_cache[ 9 ][0]= mx;
917 mv_cache[ 1 ][1]=
918 mv_cache[ 8 ][1]= mv_cache[ 9 ][1]= my;
919 }else if(IS_SUB_8X4(sub_mb_type)){
920 mv_cache[ 1 ][0]= mx;
921 mv_cache[ 1 ][1]= my;
922 }else if(IS_SUB_4X8(sub_mb_type)){
923 mv_cache[ 8 ][0]= mx;
924 mv_cache[ 8 ][1]= my;
925 }
926 mv_cache[ 0 ][0]= mx;
927 mv_cache[ 0 ][1]= my;
928 }
929 }else{
930 uint32_t *p= (uint32_t *)&sl->mv_cache[list][ scan8[4*i] ][0];
931 p[0] = p[1]=
932 p[8] = p[9]= 0;
933 }
934 }
935 }
936 }else if(IS_DIRECT(mb_type)){
937 ff_h264_pred_direct_motion(h, sl, &mb_type);
938 dct8x8_allowed &= h->ps.sps->direct_8x8_inference_flag;
939 }else{
940 int list, mx, my, i;
941 //FIXME we should set ref_idx_l? to 0 if we use that later ...
942 if(IS_16X16(mb_type)){
943 for (list = 0; list < sl->list_count; list++) {
944 unsigned int val;
945 if (IS_DIR(mb_type, 0, list)) {
946 unsigned rc = sl->ref_count[list] << MB_MBAFF(sl);
947 if (rc == 1) {
948 val = 0;
949 } else if (rc == 2) {
950 val = get_bits1(&sl->gb)^1;
951 } else {
952 val = get_ue_golomb_31(&sl->gb);
953 if (val >= rc) {
954 av_log(h->avctx, AV_LOG_ERROR, "ref %u overflow\n", val);
955 return -1;
956 }
957 }
958 fill_rectangle(&sl->ref_cache[list][scan8[0]], 4, 4, 8, val, 1);
959 }
960 }
961 for (list = 0; list < sl->list_count; list++) {
962 if(IS_DIR(mb_type, 0, list)){
963 pred_motion(h, sl, 0, 4, list, sl->ref_cache[list][ scan8[0] ], &mx, &my);
964 mx += (unsigned)get_se_golomb(&sl->gb);
965 my += (unsigned)get_se_golomb(&sl->gb);
966 ff_tlog(h->avctx, "final mv:%d %d\n", mx, my);
967
968 fill_rectangle(sl->mv_cache[list][ scan8[0] ], 4, 4, 8, pack16to32(mx,my), 4);
969 }
970 }
971 }
972 else if(IS_16X8(mb_type)){
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 unsigned rc = sl->ref_count[list] << MB_MBAFF(sl);
978 if (rc == 1) {
979 val = 0;
980 } else if (rc == 2) {
981 val = get_bits1(&sl->gb)^1;
982 } else {
983 val = get_ue_golomb_31(&sl->gb);
984 if (val >= rc) {
985 av_log(h->avctx, AV_LOG_ERROR, "ref %u overflow\n", val);
986 return -1;
987 }
988 }
989 } else
990 val = LIST_NOT_USED & 0xFF;
991 fill_rectangle(&sl->ref_cache[list][scan8[0] + 16*i], 4, 2, 8, val, 1);
992 }
993 }
994 for (list = 0; list < sl->list_count; list++) {
995 for(i=0; i<2; i++){
996 unsigned int val;
997 if(IS_DIR(mb_type, i, list)){
998 pred_16x8_motion(h, sl, 8*i, list, sl->ref_cache[list][scan8[0] + 16*i], &mx, &my);
999 mx += (unsigned)get_se_golomb(&sl->gb);
1000 my += (unsigned)get_se_golomb(&sl->gb);
1001 ff_tlog(h->avctx, "final mv:%d %d\n", mx, my);
1002
1003 val= pack16to32(mx,my);
1004 }else
1005 val=0;
1006 fill_rectangle(sl->mv_cache[list][ scan8[0] + 16*i ], 4, 2, 8, val, 4);
1007 }
1008 }
1009 }else{
1010 av_assert2(IS_8X16(mb_type));
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)) { //FIXME optimize
1015 unsigned rc = sl->ref_count[list] << MB_MBAFF(sl);
1016 if (rc == 1) {
1017 val = 0;
1018 } else if (rc == 2) {
1019 val = get_bits1(&sl->gb)^1;
1020 } else {
1021 val = get_ue_golomb_31(&sl->gb);
1022 if (val >= rc) {
1023 av_log(h->avctx, AV_LOG_ERROR, "ref %u overflow\n", val);
1024 return -1;
1025 }
1026 }
1027 } else
1028 val = LIST_NOT_USED & 0xFF;
1029 fill_rectangle(&sl->ref_cache[list][scan8[0] + 2*i], 2, 4, 8, val, 1);
1030 }
1031 }
1032 for (list = 0; list < sl->list_count; list++) {
1033 for(i=0; i<2; i++){
1034 unsigned int val;
1035 if(IS_DIR(mb_type, i, list)){
1036 pred_8x16_motion(h, sl, i*4, list, sl->ref_cache[list][ scan8[0] + 2*i ], &mx, &my);
1037 mx += (unsigned)get_se_golomb(&sl->gb);
1038 my += (unsigned)get_se_golomb(&sl->gb);
1039 ff_tlog(h->avctx, "final mv:%d %d\n", mx, my);
1040
1041 val= pack16to32(mx,my);
1042 }else
1043 val=0;
1044 fill_rectangle(sl->mv_cache[list][ scan8[0] + 2*i ], 2, 4, 8, val, 4);
1045 }
1046 }
1047 }
1048 }
1049
1050 if(IS_INTER(mb_type))
1051 write_back_motion(h, sl, mb_type);
1052
1053 if(!IS_INTRA16x16(mb_type)){
1054 cbp= get_ue_golomb(&sl->gb);
1055
1056 if(decode_chroma){
1057 if(cbp > 47){
1058 av_log(h->avctx, AV_LOG_ERROR, "cbp too large (%u) at %d %d\n", cbp, sl->mb_x, sl->mb_y);
1059 return -1;
1060 }
1061 if (IS_INTRA4x4(mb_type))
1063 else
1064 cbp = ff_h264_golomb_to_inter_cbp[cbp];
1065 }else{
1066 if(cbp > 15){
1067 av_log(h->avctx, AV_LOG_ERROR, "cbp too large (%u) at %d %d\n", cbp, sl->mb_x, sl->mb_y);
1068 return -1;
1069 }
1070 if(IS_INTRA4x4(mb_type)) cbp= golomb_to_intra4x4_cbp_gray[cbp];
1071 else cbp= golomb_to_inter_cbp_gray[cbp];
1072 }
1073 } else {
1074 if (!decode_chroma && cbp>15) {
1075 av_log(h->avctx, AV_LOG_ERROR, "gray chroma\n");
1076 return AVERROR_INVALIDDATA;
1077 }
1078 }
1079
1080 if(dct8x8_allowed && (cbp&15) && !IS_INTRA(mb_type)){
1081 mb_type |= MB_TYPE_8x8DCT*get_bits1(&sl->gb);
1082 }
1083 sl->cbp=
1084 h->cbp_table[mb_xy]= cbp;
1085 h->cur_pic.mb_type[mb_xy] = mb_type;
1086
1087 if(cbp || IS_INTRA16x16(mb_type)){
1088 int i4x4, i8x8, chroma_idx;
1089 int dquant;
1090 int ret;
1091 GetBitContext *gb = mb_residual_gb(h, sl, mb_type);
1092 const uint8_t *scan, *scan8x8;
1093 const int max_qp = 51 + 6 * (h->ps.sps->bit_depth_luma - 8);
1094
1095 if (!gb)
1096 return AVERROR_INVALIDDATA;
1097
1098 dquant= get_se_golomb(&sl->gb);
1099
1100 sl->qscale += (unsigned)dquant;
1101
1102 if (((unsigned)sl->qscale) > max_qp){
1103 if (sl->qscale < 0) sl->qscale += max_qp + 1;
1104 else sl->qscale -= max_qp+1;
1105 if (((unsigned)sl->qscale) > max_qp){
1106 av_log(h->avctx, AV_LOG_ERROR, "dquant out of range (%d) at %d %d\n", dquant, sl->mb_x, sl->mb_y);
1107 sl->qscale = max_qp;
1108 return -1;
1109 }
1110 }
1111
1112 sl->chroma_qp[0] = get_chroma_qp(h->ps.pps, 0, sl->qscale);
1113 sl->chroma_qp[1] = get_chroma_qp(h->ps.pps, 1, sl->qscale);
1114
1115 if(IS_INTERLACED(mb_type)){
1116 scan8x8 = sl->qscale ? h->field_scan8x8_cavlc : h->field_scan8x8_cavlc_q0;
1117 scan = sl->qscale ? h->field_scan : h->field_scan_q0;
1118 }else{
1119 scan8x8 = sl->qscale ? h->zigzag_scan8x8_cavlc : h->zigzag_scan8x8_cavlc_q0;
1120 scan = sl->qscale ? h->zigzag_scan : h->zigzag_scan_q0;
1121 }
1122
1123 if ((ret = decode_luma_residual(h, sl, gb, scan, scan8x8, pixel_shift, mb_type, cbp, 0)) < 0 ) {
1124 return -1;
1125 }
1126 h->cbp_table[mb_xy] |= ret << 12;
1127 if (CHROMA444(h)) {
1128 if (decode_luma_residual(h, sl, gb, scan, scan8x8, pixel_shift, mb_type, cbp, 1) < 0 ) {
1129 return -1;
1130 }
1131 if (decode_luma_residual(h, sl, gb, scan, scan8x8, pixel_shift, mb_type, cbp, 2) < 0 ) {
1132 return -1;
1133 }
1134 } else {
1135 const int num_c8x8 = h->ps.sps->chroma_format_idc;
1136
1137 if(cbp&0x30){
1138 for(chroma_idx=0; chroma_idx<2; chroma_idx++)
1139 if (decode_residual(h, sl, gb, sl->mb + ((256 + 16*16*chroma_idx) << pixel_shift),
1140 CHROMA_DC_BLOCK_INDEX + chroma_idx,
1142 NULL, 4 * num_c8x8) < 0) {
1143 return -1;
1144 }
1145 }
1146
1147 if(cbp&0x20){
1148 for(chroma_idx=0; chroma_idx<2; chroma_idx++){
1149 const uint32_t *qmul = h->ps.pps->dequant4_coeff[chroma_idx+1+(IS_INTRA( mb_type ) ? 0:3)][sl->chroma_qp[chroma_idx]];
1150 int16_t *mb = sl->mb + (16*(16 + 16*chroma_idx) << pixel_shift);
1151 for (i8x8 = 0; i8x8<num_c8x8; i8x8++) {
1152 for (i4x4 = 0; i4x4 < 4; i4x4++) {
1153 const int index = 16 + 16*chroma_idx + 8*i8x8 + i4x4;
1154 if (decode_residual(h, sl, gb, mb, index, scan + 1, qmul, 15) < 0)
1155 return -1;
1156 mb += 16 << pixel_shift;
1157 }
1158 }
1159 }
1160 }else{
1161 fill_rectangle(&sl->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
1162 fill_rectangle(&sl->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
1163 }
1164 }
1165 }else{
1166 fill_rectangle(&sl->non_zero_count_cache[scan8[ 0]], 4, 4, 8, 0, 1);
1167 fill_rectangle(&sl->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
1168 fill_rectangle(&sl->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
1169 }
1170 h->cur_pic.qscale_table[mb_xy] = sl->qscale;
1172
1173 return 0;
1174}
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:682
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 GetBitContext * mb_residual_gb(const H264Context *h, H264SliceContext *sl, unsigned mb_type)
Definition h264_cavlc.c:667
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:404
static av_always_inline int get_chroma_qp(const PPS *pps, int t, int qscale)
Get the chroma qp.
Definition h264dec.h:681
#define CHROMA422(h)
Definition h264dec.h:89
#define LUMA_DC_BLOCK_INDEX
Definition h264dec.h:675
#define CHROMA_DC_BLOCK_INDEX
Definition h264dec.h:676
#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:347
int mb_field_decoding_flag
Definition h264dec.h:251
unsigned int list_count
Definition h264dec.h:278
int8_t ref_cache[2][5 *8]
Definition h264dec.h:309
int data_partitioning
Definition h264dec.h:187
uint16_t sub_mb_type[4]
Definition h264dec.h:313
const uint8_t * intra_pcm_ptr
Definition h264dec.h:290
int16_t mv_cache[2][5 *8][2]
Motion vector cache.
Definition h264dec.h:308
GetBitContext gb_dpb
Definition h264dec.h:185
unsigned int left_samples_available
Definition h264dec.h:234
int slice_type_nos
S free slice type (SI/SP are remapped to I/P)
Definition h264dec.h:194
unsigned int top_samples_available
Definition h264dec.h:232
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:316
int mb_mbaff
mb_aff_frame && mb_field_decoding_flag
Definition h264dec.h:252
GetBitContext gb
Definition h264dec.h:180
int chroma_qp[2]
Definition h264dec.h:198
int8_t intra4x4_pred_mode_cache[5 *8]
Definition h264dec.h:215
uint8_t non_zero_count_cache[15 *8]
non zero coeff count cache.
Definition h264dec.h:303
unsigned int ref_count[2]
num_ref_idx_l0/1_active_minus1 + 1
Definition h264dec.h:277
int16_t mb_luma_dc[3][16 *2]
Definition h264dec.h:317
int intra16x16_pred_mode
Definition h264dec.h:213
GetBitContext gb_dpc
Definition h264dec.h:186
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