1a89ad92c44b0d4fea0ee8b078f0a54e575bb857
[ffmpeg.git] / libavcodec / h264_cavlc.c
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 Libav.
6  *
7  * Libav 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  * Libav 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 Libav; 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 / MPEG4 part10 cavlc bitstream decoding.
25  * @author Michael Niedermayer <michaelni@gmx.at>
26  */
27
28 #define CABAC(h) 0
29
30 #include "internal.h"
31 #include "avcodec.h"
32 #include "h264.h"
33 #include "h264data.h" // FIXME FIXME FIXME
34 #include "h264_mvpred.h"
35 #include "golomb.h"
36 #include "mpegutils.h"
37
38 #include <assert.h>
39
40 static const uint8_t golomb_to_inter_cbp_gray[16]={
41  0, 1, 2, 4, 8, 3, 5,10,12,15, 7,11,13,14, 6, 9,
42 };
43
44 static const uint8_t golomb_to_intra4x4_cbp_gray[16]={
45 15, 0, 7,11,13,14, 3, 5,10,12, 1, 2, 4, 8, 6, 9,
46 };
47
48 static const uint8_t chroma_dc_coeff_token_len[4*5]={
49  2, 0, 0, 0,
50  6, 1, 0, 0,
51  6, 6, 3, 0,
52  6, 7, 7, 6,
53  6, 8, 8, 7,
54 };
55
56 static const uint8_t chroma_dc_coeff_token_bits[4*5]={
57  1, 0, 0, 0,
58  7, 1, 0, 0,
59  4, 6, 1, 0,
60  3, 3, 2, 5,
61  2, 3, 2, 0,
62 };
63
64 static const uint8_t chroma422_dc_coeff_token_len[4*9]={
65   1,  0,  0,  0,
66   7,  2,  0,  0,
67   7,  7,  3,  0,
68   9,  7,  7,  5,
69   9,  9,  7,  6,
70  10, 10,  9,  7,
71  11, 11, 10,  7,
72  12, 12, 11, 10,
73  13, 12, 12, 11,
74 };
75
76 static const uint8_t chroma422_dc_coeff_token_bits[4*9]={
77   1,   0,  0, 0,
78  15,   1,  0, 0,
79  14,  13,  1, 0,
80   7,  12, 11, 1,
81   6,   5, 10, 1,
82   7,   6,  4, 9,
83   7,   6,  5, 8,
84   7,   6,  5, 4,
85   7,   5,  4, 4,
86 };
87
88 static const uint8_t coeff_token_len[4][4*17]={
89 {
90      1, 0, 0, 0,
91      6, 2, 0, 0,     8, 6, 3, 0,     9, 8, 7, 5,    10, 9, 8, 6,
92     11,10, 9, 7,    13,11,10, 8,    13,13,11, 9,    13,13,13,10,
93     14,14,13,11,    14,14,14,13,    15,15,14,14,    15,15,15,14,
94     16,15,15,15,    16,16,16,15,    16,16,16,16,    16,16,16,16,
95 },
96 {
97      2, 0, 0, 0,
98      6, 2, 0, 0,     6, 5, 3, 0,     7, 6, 6, 4,     8, 6, 6, 4,
99      8, 7, 7, 5,     9, 8, 8, 6,    11, 9, 9, 6,    11,11,11, 7,
100     12,11,11, 9,    12,12,12,11,    12,12,12,11,    13,13,13,12,
101     13,13,13,13,    13,14,13,13,    14,14,14,13,    14,14,14,14,
102 },
103 {
104      4, 0, 0, 0,
105      6, 4, 0, 0,     6, 5, 4, 0,     6, 5, 5, 4,     7, 5, 5, 4,
106      7, 5, 5, 4,     7, 6, 6, 4,     7, 6, 6, 4,     8, 7, 7, 5,
107      8, 8, 7, 6,     9, 8, 8, 7,     9, 9, 8, 8,     9, 9, 9, 8,
108     10, 9, 9, 9,    10,10,10,10,    10,10,10,10,    10,10,10,10,
109 },
110 {
111      6, 0, 0, 0,
112      6, 6, 0, 0,     6, 6, 6, 0,     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      6, 6, 6, 6,     6, 6, 6, 6,     6, 6, 6, 6,     6, 6, 6, 6,
116 }
117 };
118
119 static const uint8_t coeff_token_bits[4][4*17]={
120 {
121      1, 0, 0, 0,
122      5, 1, 0, 0,     7, 4, 1, 0,     7, 6, 5, 3,     7, 6, 5, 3,
123      7, 6, 5, 4,    15, 6, 5, 4,    11,14, 5, 4,     8,10,13, 4,
124     15,14, 9, 4,    11,10,13,12,    15,14, 9,12,    11,10,13, 8,
125     15, 1, 9,12,    11,14,13, 8,     7,10, 9,12,     4, 6, 5, 8,
126 },
127 {
128      3, 0, 0, 0,
129     11, 2, 0, 0,     7, 7, 3, 0,     7,10, 9, 5,     7, 6, 5, 4,
130      4, 6, 5, 6,     7, 6, 5, 8,    15, 6, 5, 4,    11,14,13, 4,
131     15,10, 9, 4,    11,14,13,12,     8,10, 9, 8,    15,14,13,12,
132     11,10, 9,12,     7,11, 6, 8,     9, 8,10, 1,     7, 6, 5, 4,
133 },
134 {
135     15, 0, 0, 0,
136     15,14, 0, 0,    11,15,13, 0,     8,12,14,12,    15,10,11,11,
137     11, 8, 9,10,     9,14,13, 9,     8,10, 9, 8,    15,14,13,13,
138     11,14,10,12,    15,10,13,12,    11,14, 9,12,     8,10,13, 8,
139     13, 7, 9,12,     9,12,11,10,     5, 8, 7, 6,     1, 4, 3, 2,
140 },
141 {
142      3, 0, 0, 0,
143      0, 1, 0, 0,     4, 5, 6, 0,     8, 9,10,11,    12,13,14,15,
144     16,17,18,19,    20,21,22,23,    24,25,26,27,    28,29,30,31,
145     32,33,34,35,    36,37,38,39,    40,41,42,43,    44,45,46,47,
146     48,49,50,51,    52,53,54,55,    56,57,58,59,    60,61,62,63,
147 }
148 };
149
150 static const uint8_t total_zeros_len[16][16]= {
151     {1,3,3,4,4,5,5,6,6,7,7,8,8,9,9,9},
152     {3,3,3,3,3,4,4,4,4,5,5,6,6,6,6},
153     {4,3,3,3,4,4,3,3,4,5,5,6,5,6},
154     {5,3,4,4,3,3,3,4,3,4,5,5,5},
155     {4,4,4,3,3,3,3,3,4,5,4,5},
156     {6,5,3,3,3,3,3,3,4,3,6},
157     {6,5,3,3,3,2,3,4,3,6},
158     {6,4,5,3,2,2,3,3,6},
159     {6,6,4,2,2,3,2,5},
160     {5,5,3,2,2,2,4},
161     {4,4,3,3,1,3},
162     {4,4,2,1,3},
163     {3,3,1,2},
164     {2,2,1},
165     {1,1},
166 };
167
168 static const uint8_t total_zeros_bits[16][16]= {
169     {1,3,2,3,2,3,2,3,2,3,2,3,2,3,2,1},
170     {7,6,5,4,3,5,4,3,2,3,2,3,2,1,0},
171     {5,7,6,5,4,3,4,3,2,3,2,1,1,0},
172     {3,7,5,4,6,5,4,3,3,2,2,1,0},
173     {5,4,3,7,6,5,4,3,2,1,1,0},
174     {1,1,7,6,5,4,3,2,1,1,0},
175     {1,1,5,4,3,3,2,1,1,0},
176     {1,1,1,3,3,2,2,1,0},
177     {1,0,1,3,2,1,1,1},
178     {1,0,1,3,2,1,1},
179     {0,1,1,2,1,3},
180     {0,1,1,1,1},
181     {0,1,1,1},
182     {0,1,1},
183     {0,1},
184 };
185
186 static const uint8_t chroma_dc_total_zeros_len[3][4]= {
187     { 1, 2, 3, 3,},
188     { 1, 2, 2, 0,},
189     { 1, 1, 0, 0,},
190 };
191
192 static const uint8_t chroma_dc_total_zeros_bits[3][4]= {
193     { 1, 1, 1, 0,},
194     { 1, 1, 0, 0,},
195     { 1, 0, 0, 0,},
196 };
197
198 static const uint8_t chroma422_dc_total_zeros_len[7][8]= {
199     { 1, 3, 3, 4, 4, 4, 5, 5 },
200     { 3, 2, 3, 3, 3, 3, 3 },
201     { 3, 3, 2, 2, 3, 3 },
202     { 3, 2, 2, 2, 3 },
203     { 2, 2, 2, 2 },
204     { 2, 2, 1 },
205     { 1, 1 },
206 };
207
208 static const uint8_t chroma422_dc_total_zeros_bits[7][8]= {
209     { 1, 2, 3, 2, 3, 1, 1, 0 },
210     { 0, 1, 1, 4, 5, 6, 7 },
211     { 0, 1, 1, 2, 6, 7 },
212     { 6, 0, 1, 2, 7 },
213     { 0, 1, 2, 3 },
214     { 0, 1, 1 },
215     { 0, 1 },
216 };
217
218 static const uint8_t run_len[7][16]={
219     {1,1},
220     {1,2,2},
221     {2,2,2,2},
222     {2,2,2,3,3},
223     {2,2,3,3,3,3},
224     {2,3,3,3,3,3,3},
225     {3,3,3,3,3,3,3,4,5,6,7,8,9,10,11},
226 };
227
228 static const uint8_t run_bits[7][16]={
229     {1,0},
230     {1,1,0},
231     {3,2,1,0},
232     {3,2,1,1,0},
233     {3,2,3,2,1,0},
234     {3,0,1,3,2,5,4},
235     {7,6,5,4,3,2,1,1,1,1,1,1,1,1,1},
236 };
237
238 static VLC coeff_token_vlc[4];
239 static VLC_TYPE coeff_token_vlc_tables[520+332+280+256][2];
240 static const int coeff_token_vlc_tables_size[4]={520,332,280,256};
241
242 static VLC chroma_dc_coeff_token_vlc;
243 static VLC_TYPE chroma_dc_coeff_token_vlc_table[256][2];
244 static const int chroma_dc_coeff_token_vlc_table_size = 256;
245
246 static VLC chroma422_dc_coeff_token_vlc;
247 static VLC_TYPE chroma422_dc_coeff_token_vlc_table[8192][2];
248 static const int chroma422_dc_coeff_token_vlc_table_size = 8192;
249
250 static VLC total_zeros_vlc[15];
251 static VLC_TYPE total_zeros_vlc_tables[15][512][2];
252 static const int total_zeros_vlc_tables_size = 512;
253
254 static VLC chroma_dc_total_zeros_vlc[3];
255 static VLC_TYPE chroma_dc_total_zeros_vlc_tables[3][8][2];
256 static const int chroma_dc_total_zeros_vlc_tables_size = 8;
257
258 static VLC chroma422_dc_total_zeros_vlc[7];
259 static VLC_TYPE chroma422_dc_total_zeros_vlc_tables[7][32][2];
260 static const int chroma422_dc_total_zeros_vlc_tables_size = 32;
261
262 static VLC run_vlc[6];
263 static VLC_TYPE run_vlc_tables[6][8][2];
264 static const int run_vlc_tables_size = 8;
265
266 static VLC run7_vlc;
267 static VLC_TYPE run7_vlc_table[96][2];
268 static const int run7_vlc_table_size = 96;
269
270 #define LEVEL_TAB_BITS 8
271 static int8_t cavlc_level_tab[7][1<<LEVEL_TAB_BITS][2];
272
273 #define CHROMA_DC_COEFF_TOKEN_VLC_BITS 8
274 #define CHROMA422_DC_COEFF_TOKEN_VLC_BITS 13
275 #define COEFF_TOKEN_VLC_BITS           8
276 #define TOTAL_ZEROS_VLC_BITS           9
277 #define CHROMA_DC_TOTAL_ZEROS_VLC_BITS 3
278 #define CHROMA422_DC_TOTAL_ZEROS_VLC_BITS 5
279 #define RUN_VLC_BITS                   3
280 #define RUN7_VLC_BITS                  6
281
282 /**
283  * Get the predicted number of non-zero coefficients.
284  * @param n block index
285  */
286 static inline int pred_non_zero_count(H264Context *h, int n){
287     const int index8= scan8[n];
288     const int left= h->non_zero_count_cache[index8 - 1];
289     const int top = h->non_zero_count_cache[index8 - 8];
290     int i= left + top;
291
292     if(i<64) i= (i+1)>>1;
293
294     tprintf(h->avctx, "pred_nnz L%X T%X n%d s%d P%X\n", left, top, n, scan8[n], i&31);
295
296     return i&31;
297 }
298
299 static av_cold void init_cavlc_level_tab(void){
300     int suffix_length;
301     unsigned int i;
302
303     for(suffix_length=0; suffix_length<7; suffix_length++){
304         for(i=0; i<(1<<LEVEL_TAB_BITS); i++){
305             int prefix= LEVEL_TAB_BITS - av_log2(2*i);
306
307             if(prefix + 1 + suffix_length <= LEVEL_TAB_BITS){
308                 int level_code = (prefix << suffix_length) +
309                     (i >> (av_log2(i) - suffix_length)) - (1 << suffix_length);
310                 int mask = -(level_code&1);
311                 level_code = (((2 + level_code) >> 1) ^ mask) - mask;
312                 cavlc_level_tab[suffix_length][i][0]= level_code;
313                 cavlc_level_tab[suffix_length][i][1]= prefix + 1 + suffix_length;
314             }else if(prefix + 1 <= LEVEL_TAB_BITS){
315                 cavlc_level_tab[suffix_length][i][0]= prefix+100;
316                 cavlc_level_tab[suffix_length][i][1]= prefix + 1;
317             }else{
318                 cavlc_level_tab[suffix_length][i][0]= LEVEL_TAB_BITS+100;
319                 cavlc_level_tab[suffix_length][i][1]= LEVEL_TAB_BITS;
320             }
321         }
322     }
323 }
324
325 av_cold void ff_h264_decode_init_vlc(void){
326     static int done = 0;
327
328     if (!done) {
329         int i;
330         int offset;
331         done = 1;
332
333         chroma_dc_coeff_token_vlc.table = chroma_dc_coeff_token_vlc_table;
334         chroma_dc_coeff_token_vlc.table_allocated = chroma_dc_coeff_token_vlc_table_size;
335         init_vlc(&chroma_dc_coeff_token_vlc, CHROMA_DC_COEFF_TOKEN_VLC_BITS, 4*5,
336                  &chroma_dc_coeff_token_len [0], 1, 1,
337                  &chroma_dc_coeff_token_bits[0], 1, 1,
338                  INIT_VLC_USE_NEW_STATIC);
339
340         chroma422_dc_coeff_token_vlc.table = chroma422_dc_coeff_token_vlc_table;
341         chroma422_dc_coeff_token_vlc.table_allocated = chroma422_dc_coeff_token_vlc_table_size;
342         init_vlc(&chroma422_dc_coeff_token_vlc, CHROMA422_DC_COEFF_TOKEN_VLC_BITS, 4*9,
343                  &chroma422_dc_coeff_token_len [0], 1, 1,
344                  &chroma422_dc_coeff_token_bits[0], 1, 1,
345                  INIT_VLC_USE_NEW_STATIC);
346
347         offset = 0;
348         for(i=0; i<4; i++){
349             coeff_token_vlc[i].table = coeff_token_vlc_tables+offset;
350             coeff_token_vlc[i].table_allocated = coeff_token_vlc_tables_size[i];
351             init_vlc(&coeff_token_vlc[i], COEFF_TOKEN_VLC_BITS, 4*17,
352                      &coeff_token_len [i][0], 1, 1,
353                      &coeff_token_bits[i][0], 1, 1,
354                      INIT_VLC_USE_NEW_STATIC);
355             offset += coeff_token_vlc_tables_size[i];
356         }
357         /*
358          * This is a one time safety check to make sure that
359          * the packed static coeff_token_vlc table sizes
360          * were initialized correctly.
361          */
362         assert(offset == FF_ARRAY_ELEMS(coeff_token_vlc_tables));
363
364         for(i=0; i<3; i++){
365             chroma_dc_total_zeros_vlc[i].table = chroma_dc_total_zeros_vlc_tables[i];
366             chroma_dc_total_zeros_vlc[i].table_allocated = chroma_dc_total_zeros_vlc_tables_size;
367             init_vlc(&chroma_dc_total_zeros_vlc[i],
368                      CHROMA_DC_TOTAL_ZEROS_VLC_BITS, 4,
369                      &chroma_dc_total_zeros_len [i][0], 1, 1,
370                      &chroma_dc_total_zeros_bits[i][0], 1, 1,
371                      INIT_VLC_USE_NEW_STATIC);
372         }
373
374         for(i=0; i<7; i++){
375             chroma422_dc_total_zeros_vlc[i].table = chroma422_dc_total_zeros_vlc_tables[i];
376             chroma422_dc_total_zeros_vlc[i].table_allocated = chroma422_dc_total_zeros_vlc_tables_size;
377             init_vlc(&chroma422_dc_total_zeros_vlc[i],
378                      CHROMA422_DC_TOTAL_ZEROS_VLC_BITS, 8,
379                      &chroma422_dc_total_zeros_len [i][0], 1, 1,
380                      &chroma422_dc_total_zeros_bits[i][0], 1, 1,
381                      INIT_VLC_USE_NEW_STATIC);
382         }
383
384         for(i=0; i<15; i++){
385             total_zeros_vlc[i].table = total_zeros_vlc_tables[i];
386             total_zeros_vlc[i].table_allocated = total_zeros_vlc_tables_size;
387             init_vlc(&total_zeros_vlc[i],
388                      TOTAL_ZEROS_VLC_BITS, 16,
389                      &total_zeros_len [i][0], 1, 1,
390                      &total_zeros_bits[i][0], 1, 1,
391                      INIT_VLC_USE_NEW_STATIC);
392         }
393
394         for(i=0; i<6; i++){
395             run_vlc[i].table = run_vlc_tables[i];
396             run_vlc[i].table_allocated = run_vlc_tables_size;
397             init_vlc(&run_vlc[i],
398                      RUN_VLC_BITS, 7,
399                      &run_len [i][0], 1, 1,
400                      &run_bits[i][0], 1, 1,
401                      INIT_VLC_USE_NEW_STATIC);
402         }
403         run7_vlc.table = run7_vlc_table,
404         run7_vlc.table_allocated = run7_vlc_table_size;
405         init_vlc(&run7_vlc, RUN7_VLC_BITS, 16,
406                  &run_len [6][0], 1, 1,
407                  &run_bits[6][0], 1, 1,
408                  INIT_VLC_USE_NEW_STATIC);
409
410         init_cavlc_level_tab();
411     }
412 }
413
414 /**
415  *
416  */
417 static inline int get_level_prefix(GetBitContext *gb){
418     unsigned int buf;
419     int log;
420
421     OPEN_READER(re, gb);
422     UPDATE_CACHE(re, gb);
423     buf=GET_CACHE(re, gb);
424
425     log= 32 - av_log2(buf);
426 #ifdef TRACE
427     print_bin(buf>>(32-log), log);
428     av_log(NULL, AV_LOG_DEBUG, "%5d %2d %3d lpr @%5d in %s get_level_prefix\n", buf>>(32-log), log, log-1, get_bits_count(gb), __FILE__);
429 #endif
430
431     LAST_SKIP_BITS(re, gb, log);
432     CLOSE_READER(re, gb);
433
434     return log-1;
435 }
436
437 /**
438  * Decode a residual block.
439  * @param n block index
440  * @param scantable scantable
441  * @param max_coeff number of coefficients in the block
442  * @return <0 if an error occurred
443  */
444 static int decode_residual(H264Context *h, GetBitContext *gb, int16_t *block, int n, const uint8_t *scantable, const uint32_t *qmul, int max_coeff){
445     static const int coeff_token_table_index[17]= {0, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3};
446     int level[16];
447     int zeros_left, coeff_token, total_coeff, i, trailing_ones, run_before;
448
449     //FIXME put trailing_onex into the context
450
451     if(max_coeff <= 8){
452         if (max_coeff == 4)
453             coeff_token = get_vlc2(gb, chroma_dc_coeff_token_vlc.table, CHROMA_DC_COEFF_TOKEN_VLC_BITS, 1);
454         else
455             coeff_token = get_vlc2(gb, chroma422_dc_coeff_token_vlc.table, CHROMA422_DC_COEFF_TOKEN_VLC_BITS, 1);
456         total_coeff= coeff_token>>2;
457     }else{
458         if(n >= LUMA_DC_BLOCK_INDEX){
459             total_coeff= pred_non_zero_count(h, (n - LUMA_DC_BLOCK_INDEX)*16);
460             coeff_token= get_vlc2(gb, coeff_token_vlc[ coeff_token_table_index[total_coeff] ].table, COEFF_TOKEN_VLC_BITS, 2);
461             total_coeff= coeff_token>>2;
462         }else{
463             total_coeff= pred_non_zero_count(h, n);
464             coeff_token= get_vlc2(gb, coeff_token_vlc[ coeff_token_table_index[total_coeff] ].table, COEFF_TOKEN_VLC_BITS, 2);
465             total_coeff= coeff_token>>2;
466         }
467     }
468     h->non_zero_count_cache[ scan8[n] ]= total_coeff;
469
470     //FIXME set last_non_zero?
471
472     if(total_coeff==0)
473         return 0;
474     if(total_coeff > (unsigned)max_coeff) {
475         av_log(h->avctx, AV_LOG_ERROR, "corrupted macroblock %d %d (total_coeff=%d)\n", h->mb_x, h->mb_y, total_coeff);
476         return -1;
477     }
478
479     trailing_ones= coeff_token&3;
480     tprintf(h->avctx, "trailing:%d, total:%d\n", trailing_ones, total_coeff);
481     assert(total_coeff<=16);
482
483     i = show_bits(gb, 3);
484     skip_bits(gb, trailing_ones);
485     level[0] = 1-((i&4)>>1);
486     level[1] = 1-((i&2)   );
487     level[2] = 1-((i&1)<<1);
488
489     if(trailing_ones<total_coeff) {
490         int mask, prefix;
491         int suffix_length = total_coeff > 10 & trailing_ones < 3;
492         int bitsi= show_bits(gb, LEVEL_TAB_BITS);
493         int level_code= cavlc_level_tab[suffix_length][bitsi][0];
494
495         skip_bits(gb, cavlc_level_tab[suffix_length][bitsi][1]);
496         if(level_code >= 100){
497             prefix= level_code - 100;
498             if(prefix == LEVEL_TAB_BITS)
499                 prefix += get_level_prefix(gb);
500
501             //first coefficient has suffix_length equal to 0 or 1
502             if(prefix<14){ //FIXME try to build a large unified VLC table for all this
503                 if(suffix_length)
504                     level_code= (prefix<<1) + get_bits1(gb); //part
505                 else
506                     level_code= prefix; //part
507             }else if(prefix==14){
508                 if(suffix_length)
509                     level_code= (prefix<<1) + get_bits1(gb); //part
510                 else
511                     level_code= prefix + get_bits(gb, 4); //part
512             }else{
513                 level_code= 30 + get_bits(gb, prefix-3); //part
514                 if(prefix>=16){
515                     if(prefix > 25+3){
516                         av_log(h->avctx, AV_LOG_ERROR, "Invalid level prefix\n");
517                         return -1;
518                     }
519                     level_code += (1<<(prefix-3))-4096;
520                 }
521             }
522
523             if(trailing_ones < 3) level_code += 2;
524
525             suffix_length = 2;
526             mask= -(level_code&1);
527             level[trailing_ones]= (((2+level_code)>>1) ^ mask) - mask;
528         }else{
529             level_code += ((level_code>>31)|1) & -(trailing_ones < 3);
530
531             suffix_length = 1 + (level_code + 3U > 6U);
532             level[trailing_ones]= level_code;
533         }
534
535         //remaining coefficients have suffix_length > 0
536         for(i=trailing_ones+1;i<total_coeff;i++) {
537             static const unsigned int suffix_limit[7] = {0,3,6,12,24,48,INT_MAX };
538             int bitsi= show_bits(gb, LEVEL_TAB_BITS);
539             level_code= cavlc_level_tab[suffix_length][bitsi][0];
540
541             skip_bits(gb, cavlc_level_tab[suffix_length][bitsi][1]);
542             if(level_code >= 100){
543                 prefix= level_code - 100;
544                 if(prefix == LEVEL_TAB_BITS){
545                     prefix += get_level_prefix(gb);
546                 }
547                 if(prefix<15){
548                     level_code = (prefix<<suffix_length) + get_bits(gb, suffix_length);
549                 }else{
550                     level_code = (15<<suffix_length) + get_bits(gb, prefix-3);
551                     if(prefix>=16)
552                         level_code += (1<<(prefix-3))-4096;
553                 }
554                 mask= -(level_code&1);
555                 level_code= (((2+level_code)>>1) ^ mask) - mask;
556             }
557             level[i]= level_code;
558             suffix_length+= suffix_limit[suffix_length] + level_code > 2U*suffix_limit[suffix_length];
559         }
560     }
561
562     if(total_coeff == max_coeff)
563         zeros_left=0;
564     else{
565         if (max_coeff <= 8) {
566             if (max_coeff == 4)
567                 zeros_left = get_vlc2(gb, chroma_dc_total_zeros_vlc[total_coeff - 1].table,
568                                       CHROMA_DC_TOTAL_ZEROS_VLC_BITS, 1);
569             else
570                 zeros_left = get_vlc2(gb, chroma422_dc_total_zeros_vlc[total_coeff - 1].table,
571                                       CHROMA422_DC_TOTAL_ZEROS_VLC_BITS, 1);
572         } else {
573             zeros_left= get_vlc2(gb, total_zeros_vlc[total_coeff - 1].table, TOTAL_ZEROS_VLC_BITS, 1);
574         }
575     }
576
577 #define STORE_BLOCK(type) \
578     scantable += zeros_left + total_coeff - 1; \
579     if(n >= LUMA_DC_BLOCK_INDEX){ \
580         ((type*)block)[*scantable] = level[0]; \
581         for(i=1;i<total_coeff && zeros_left > 0;i++) { \
582             if(zeros_left < 7) \
583                 run_before= get_vlc2(gb, run_vlc[zeros_left - 1].table, RUN_VLC_BITS, 1); \
584             else \
585                 run_before= get_vlc2(gb, run7_vlc.table, RUN7_VLC_BITS, 2); \
586             zeros_left -= run_before; \
587             scantable -= 1 + run_before; \
588             ((type*)block)[*scantable]= level[i]; \
589         } \
590         for(;i<total_coeff;i++) { \
591             scantable--; \
592             ((type*)block)[*scantable]= level[i]; \
593         } \
594     }else{ \
595         ((type*)block)[*scantable] = ((int)(level[0] * qmul[*scantable] + 32))>>6; \
596         for(i=1;i<total_coeff && zeros_left > 0;i++) { \
597             if(zeros_left < 7) \
598                 run_before= get_vlc2(gb, run_vlc[zeros_left - 1].table, RUN_VLC_BITS, 1); \
599             else \
600                 run_before= get_vlc2(gb, run7_vlc.table, RUN7_VLC_BITS, 2); \
601             zeros_left -= run_before; \
602             scantable -= 1 + run_before; \
603             ((type*)block)[*scantable]= ((int)(level[i] * qmul[*scantable] + 32))>>6; \
604         } \
605         for(;i<total_coeff;i++) { \
606             scantable--; \
607             ((type*)block)[*scantable]= ((int)(level[i] * qmul[*scantable] + 32))>>6; \
608         } \
609     }
610
611     if (zeros_left < 0) {
612         av_log(h->avctx, AV_LOG_ERROR,
613                "negative number of zero coeffs at %d %d\n", h->mb_x, h->mb_y);
614         return AVERROR_INVALIDDATA;
615     }
616
617     if (h->pixel_shift) {
618         STORE_BLOCK(int32_t)
619     } else {
620         STORE_BLOCK(int16_t)
621     }
622
623     return 0;
624 }
625
626 static av_always_inline int decode_luma_residual(H264Context *h, H264SliceContext *sl, GetBitContext *gb, const uint8_t *scan, const uint8_t *scan8x8, int pixel_shift, int mb_type, int cbp, int p){
627     int i4x4, i8x8;
628     int qscale = p == 0 ? sl->qscale : sl->chroma_qp[p - 1];
629     if(IS_INTRA16x16(mb_type)){
630         AV_ZERO128(h->mb_luma_dc[p]+0);
631         AV_ZERO128(h->mb_luma_dc[p]+8);
632         AV_ZERO128(h->mb_luma_dc[p]+16);
633         AV_ZERO128(h->mb_luma_dc[p]+24);
634         if( decode_residual(h, h->intra_gb_ptr, h->mb_luma_dc[p], LUMA_DC_BLOCK_INDEX+p, scan, NULL, 16) < 0){
635             return -1; //FIXME continue if partitioned and other return -1 too
636         }
637
638         assert((cbp&15) == 0 || (cbp&15) == 15);
639
640         if(cbp&15){
641             for(i8x8=0; i8x8<4; i8x8++){
642                 for(i4x4=0; i4x4<4; i4x4++){
643                     const int index= i4x4 + 4*i8x8 + p*16;
644                     if( decode_residual(h, h->intra_gb_ptr, h->mb + (16*index << pixel_shift),
645                         index, scan + 1, h->dequant4_coeff[p][qscale], 15) < 0 ){
646                         return -1;
647                     }
648                 }
649             }
650             return 0xf;
651         }else{
652             fill_rectangle(&h->non_zero_count_cache[scan8[p*16]], 4, 4, 8, 0, 1);
653             return 0;
654         }
655     }else{
656         int cqm = (IS_INTRA( mb_type ) ? 0:3)+p;
657         /* For CAVLC 4:4:4, we need to keep track of the luma 8x8 CBP for deblocking nnz purposes. */
658         int new_cbp = 0;
659         for(i8x8=0; i8x8<4; i8x8++){
660             if(cbp & (1<<i8x8)){
661                 if(IS_8x8DCT(mb_type)){
662                     int16_t *buf = &h->mb[64*i8x8+256*p << pixel_shift];
663                     uint8_t *nnz;
664                     for(i4x4=0; i4x4<4; i4x4++){
665                         const int index= i4x4 + 4*i8x8 + p*16;
666                         if( decode_residual(h, gb, buf, index, scan8x8+16*i4x4,
667                                             h->dequant8_coeff[cqm][qscale], 16) < 0 )
668                             return -1;
669                     }
670                     nnz= &h->non_zero_count_cache[ scan8[4*i8x8+p*16] ];
671                     nnz[0] += nnz[1] + nnz[8] + nnz[9];
672                     new_cbp |= !!nnz[0] << i8x8;
673                 }else{
674                     for(i4x4=0; i4x4<4; i4x4++){
675                         const int index= i4x4 + 4*i8x8 + p*16;
676                         if( decode_residual(h, gb, h->mb + (16*index << pixel_shift), index,
677                                             scan, h->dequant4_coeff[cqm][qscale], 16) < 0 ){
678                             return -1;
679                         }
680                         new_cbp |= h->non_zero_count_cache[ scan8[index] ] << i8x8;
681                     }
682                 }
683             }else{
684                 uint8_t * const nnz= &h->non_zero_count_cache[ scan8[4*i8x8+p*16] ];
685                 nnz[0] = nnz[1] = nnz[8] = nnz[9] = 0;
686             }
687         }
688         return new_cbp;
689     }
690 }
691
692 int ff_h264_decode_mb_cavlc(H264Context *h, H264SliceContext *sl)
693 {
694     int mb_xy;
695     int partition_count;
696     unsigned int mb_type, cbp;
697     int dct8x8_allowed= h->pps.transform_8x8_mode;
698     int decode_chroma = h->sps.chroma_format_idc == 1 || h->sps.chroma_format_idc == 2;
699     const int pixel_shift = h->pixel_shift;
700
701     mb_xy = h->mb_xy = h->mb_x + h->mb_y*h->mb_stride;
702
703     tprintf(h->avctx, "pic:%d mb:%d/%d\n", h->frame_num, h->mb_x, h->mb_y);
704     cbp = 0; /* avoid warning. FIXME: find a solution without slowing
705                 down the code */
706     if(h->slice_type_nos != AV_PICTURE_TYPE_I){
707         if(h->mb_skip_run==-1)
708             h->mb_skip_run= get_ue_golomb(&h->gb);
709
710         if (h->mb_skip_run--) {
711             if(FRAME_MBAFF(h) && (h->mb_y&1) == 0){
712                 if(h->mb_skip_run==0)
713                     h->mb_mbaff = h->mb_field_decoding_flag = get_bits1(&h->gb);
714             }
715             decode_mb_skip(h, sl);
716             return 0;
717         }
718     }
719     if (FRAME_MBAFF(h)) {
720         if( (h->mb_y&1) == 0 )
721             h->mb_mbaff = h->mb_field_decoding_flag = get_bits1(&h->gb);
722     }
723
724     sl->prev_mb_skipped = 0;
725
726     mb_type= get_ue_golomb(&h->gb);
727     if(h->slice_type_nos == AV_PICTURE_TYPE_B){
728         if(mb_type < 23){
729             partition_count= b_mb_type_info[mb_type].partition_count;
730             mb_type=         b_mb_type_info[mb_type].type;
731         }else{
732             mb_type -= 23;
733             goto decode_intra_mb;
734         }
735     }else if(h->slice_type_nos == AV_PICTURE_TYPE_P){
736         if(mb_type < 5){
737             partition_count= p_mb_type_info[mb_type].partition_count;
738             mb_type=         p_mb_type_info[mb_type].type;
739         }else{
740             mb_type -= 5;
741             goto decode_intra_mb;
742         }
743     }else{
744        assert(h->slice_type_nos == AV_PICTURE_TYPE_I);
745         if(h->slice_type == AV_PICTURE_TYPE_SI && mb_type)
746             mb_type--;
747 decode_intra_mb:
748         if(mb_type > 25){
749             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(h->slice_type), h->mb_x, h->mb_y);
750             return -1;
751         }
752         partition_count=0;
753         cbp= i_mb_type_info[mb_type].cbp;
754         sl->intra16x16_pred_mode = i_mb_type_info[mb_type].pred_mode;
755         mb_type= i_mb_type_info[mb_type].type;
756     }
757
758     if(MB_FIELD(h))
759         mb_type |= MB_TYPE_INTERLACED;
760
761     h->slice_table[ mb_xy ]= h->slice_num;
762
763     if(IS_INTRA_PCM(mb_type)){
764         const int mb_size = ff_h264_mb_sizes[h->sps.chroma_format_idc] *
765                             h->sps.bit_depth_luma;
766
767         // We assume these blocks are very rare so we do not optimize it.
768         h->intra_pcm_ptr = align_get_bits(&h->gb);
769         if (get_bits_left(&h->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(&h->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(&h->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(&h->gb)){
804                     const int rem_mode= get_bits(&h->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
811                     sl->intra4x4_pred_mode_cache[scan8[i]] = mode;
812             }
813             write_back_intra_pred_mode(h, sl);
814             if (ff_h264_check_intra4x4_pred_mode(h, sl) < 0)
815                 return -1;
816         }else{
817             sl->intra16x16_pred_mode = ff_h264_check_intra_pred_mode(h, sl, sl->intra16x16_pred_mode, 0);
818             if (sl->intra16x16_pred_mode < 0)
819                 return -1;
820         }
821         if(decode_chroma){
822             pred_mode= ff_h264_check_intra_pred_mode(h, sl, get_ue_golomb_31(&h->gb), 1);
823             if(pred_mode < 0)
824                 return -1;
825             sl->chroma_pred_mode = pred_mode;
826         } else {
827             sl->chroma_pred_mode = DC_128_PRED8x8;
828         }
829     }else if(partition_count==4){
830         int i, j, sub_partition_count[4], list, ref[2][4];
831
832         if(h->slice_type_nos == AV_PICTURE_TYPE_B){
833             for(i=0; i<4; i++){
834                 h->sub_mb_type[i]= get_ue_golomb_31(&h->gb);
835                 if(h->sub_mb_type[i] >=13){
836                     av_log(h->avctx, AV_LOG_ERROR, "B sub_mb_type %u out of range at %d %d\n", h->sub_mb_type[i], h->mb_x, h->mb_y);
837                     return -1;
838                 }
839                 sub_partition_count[i]= b_sub_mb_type_info[ h->sub_mb_type[i] ].partition_count;
840                 h->sub_mb_type[i]=      b_sub_mb_type_info[ h->sub_mb_type[i] ].type;
841             }
842             if( IS_DIRECT(h->sub_mb_type[0]|h->sub_mb_type[1]|h->sub_mb_type[2]|h->sub_mb_type[3])) {
843                 ff_h264_pred_direct_motion(h, &mb_type);
844                 h->ref_cache[0][scan8[4]] =
845                 h->ref_cache[1][scan8[4]] =
846                 h->ref_cache[0][scan8[12]] =
847                 h->ref_cache[1][scan8[12]] = PART_NOT_AVAILABLE;
848             }
849         }else{
850             assert(h->slice_type_nos == AV_PICTURE_TYPE_P); //FIXME SP correct ?
851             for(i=0; i<4; i++){
852                 h->sub_mb_type[i]= get_ue_golomb_31(&h->gb);
853                 if(h->sub_mb_type[i] >=4){
854                     av_log(h->avctx, AV_LOG_ERROR, "P sub_mb_type %u out of range at %d %d\n", h->sub_mb_type[i], h->mb_x, h->mb_y);
855                     return -1;
856                 }
857                 sub_partition_count[i]= p_sub_mb_type_info[ h->sub_mb_type[i] ].partition_count;
858                 h->sub_mb_type[i]=      p_sub_mb_type_info[ h->sub_mb_type[i] ].type;
859             }
860         }
861
862         for(list=0; list<h->list_count; list++){
863             int ref_count = IS_REF0(mb_type) ? 1 : h->ref_count[list] << MB_MBAFF(h);
864             for(i=0; i<4; i++){
865                 if(IS_DIRECT(h->sub_mb_type[i])) continue;
866                 if(IS_DIR(h->sub_mb_type[i], 0, list)){
867                     unsigned int tmp;
868                     if(ref_count == 1){
869                         tmp= 0;
870                     }else if(ref_count == 2){
871                         tmp= get_bits1(&h->gb)^1;
872                     }else{
873                         tmp= get_ue_golomb_31(&h->gb);
874                         if(tmp>=ref_count){
875                             av_log(h->avctx, AV_LOG_ERROR, "ref %u overflow\n", tmp);
876                             return -1;
877                         }
878                     }
879                     ref[list][i]= tmp;
880                 }else{
881                  //FIXME
882                     ref[list][i] = -1;
883                 }
884             }
885         }
886
887         if(dct8x8_allowed)
888             dct8x8_allowed = get_dct8x8_allowed(h);
889
890         for(list=0; list<h->list_count; list++){
891             for(i=0; i<4; i++){
892                 if(IS_DIRECT(h->sub_mb_type[i])) {
893                     h->ref_cache[list][ scan8[4*i] ] = h->ref_cache[list][ scan8[4*i]+1 ];
894                     continue;
895                 }
896                 h->ref_cache[list][ scan8[4*i]   ]=h->ref_cache[list][ scan8[4*i]+1 ]=
897                 h->ref_cache[list][ scan8[4*i]+8 ]=h->ref_cache[list][ scan8[4*i]+9 ]= ref[list][i];
898
899                 if(IS_DIR(h->sub_mb_type[i], 0, list)){
900                     const int sub_mb_type= h->sub_mb_type[i];
901                     const int block_width= (sub_mb_type & (MB_TYPE_16x16|MB_TYPE_16x8)) ? 2 : 1;
902                     for(j=0; j<sub_partition_count[i]; j++){
903                         int mx, my;
904                         const int index= 4*i + block_width*j;
905                         int16_t (* mv_cache)[2]= &h->mv_cache[list][ scan8[index] ];
906                         pred_motion(h, sl, index, block_width, list, h->ref_cache[list][ scan8[index] ], &mx, &my);
907                         mx += get_se_golomb(&h->gb);
908                         my += get_se_golomb(&h->gb);
909                         tprintf(h->avctx, "final mv:%d %d\n", mx, my);
910
911                         if(IS_SUB_8X8(sub_mb_type)){
912                             mv_cache[ 1 ][0]=
913                             mv_cache[ 8 ][0]= mv_cache[ 9 ][0]= mx;
914                             mv_cache[ 1 ][1]=
915                             mv_cache[ 8 ][1]= mv_cache[ 9 ][1]= my;
916                         }else if(IS_SUB_8X4(sub_mb_type)){
917                             mv_cache[ 1 ][0]= mx;
918                             mv_cache[ 1 ][1]= my;
919                         }else if(IS_SUB_4X8(sub_mb_type)){
920                             mv_cache[ 8 ][0]= mx;
921                             mv_cache[ 8 ][1]= my;
922                         }
923                         mv_cache[ 0 ][0]= mx;
924                         mv_cache[ 0 ][1]= my;
925                     }
926                 }else{
927                     uint32_t *p= (uint32_t *)&h->mv_cache[list][ scan8[4*i] ][0];
928                     p[0] = p[1]=
929                     p[8] = p[9]= 0;
930                 }
931             }
932         }
933     }else if(IS_DIRECT(mb_type)){
934         ff_h264_pred_direct_motion(h, &mb_type);
935         dct8x8_allowed &= h->sps.direct_8x8_inference_flag;
936     }else{
937         int list, mx, my, i;
938          //FIXME we should set ref_idx_l? to 0 if we use that later ...
939         if(IS_16X16(mb_type)){
940             for(list=0; list<h->list_count; list++){
941                     unsigned int val;
942                     if(IS_DIR(mb_type, 0, list)){
943                         int rc = h->ref_count[list] << MB_MBAFF(h);
944                         if (rc == 1) {
945                             val= 0;
946                         } else if (rc == 2) {
947                             val= get_bits1(&h->gb)^1;
948                         }else{
949                             val= get_ue_golomb_31(&h->gb);
950                             if (val >= rc) {
951                                 av_log(h->avctx, AV_LOG_ERROR, "ref %u overflow\n", val);
952                                 return -1;
953                             }
954                         }
955                     fill_rectangle(&h->ref_cache[list][ scan8[0] ], 4, 4, 8, val, 1);
956                     }
957             }
958             for(list=0; list<h->list_count; list++){
959                 if(IS_DIR(mb_type, 0, list)){
960                     pred_motion(h, sl, 0, 4, list, h->ref_cache[list][ scan8[0] ], &mx, &my);
961                     mx += get_se_golomb(&h->gb);
962                     my += get_se_golomb(&h->gb);
963                     tprintf(h->avctx, "final mv:%d %d\n", mx, my);
964
965                     fill_rectangle(h->mv_cache[list][ scan8[0] ], 4, 4, 8, pack16to32(mx,my), 4);
966                 }
967             }
968         }
969         else if(IS_16X8(mb_type)){
970             for(list=0; list<h->list_count; list++){
971                     for(i=0; i<2; i++){
972                         unsigned int val;
973                         if(IS_DIR(mb_type, i, list)){
974                             int rc = h->ref_count[list] << MB_MBAFF(h);
975                             if (rc == 1) {
976                                 val= 0;
977                             } else if (rc == 2) {
978                                 val= get_bits1(&h->gb)^1;
979                             }else{
980                                 val= get_ue_golomb_31(&h->gb);
981                                 if (val >= rc) {
982                                     av_log(h->avctx, AV_LOG_ERROR, "ref %u overflow\n", val);
983                                     return -1;
984                                 }
985                             }
986                         }else
987                             val= LIST_NOT_USED&0xFF;
988                         fill_rectangle(&h->ref_cache[list][ scan8[0] + 16*i ], 4, 2, 8, val, 1);
989                     }
990             }
991             for(list=0; list<h->list_count; list++){
992                 for(i=0; i<2; i++){
993                     unsigned int val;
994                     if(IS_DIR(mb_type, i, list)){
995                         pred_16x8_motion(h, sl, 8*i, list, h->ref_cache[list][scan8[0] + 16*i], &mx, &my);
996                         mx += get_se_golomb(&h->gb);
997                         my += get_se_golomb(&h->gb);
998                         tprintf(h->avctx, "final mv:%d %d\n", mx, my);
999
1000                         val= pack16to32(mx,my);
1001                     }else
1002                         val=0;
1003                     fill_rectangle(h->mv_cache[list][ scan8[0] + 16*i ], 4, 2, 8, val, 4);
1004                 }
1005             }
1006         }else{
1007             assert(IS_8X16(mb_type));
1008             for(list=0; list<h->list_count; list++){
1009                     for(i=0; i<2; i++){
1010                         unsigned int val;
1011                         if(IS_DIR(mb_type, i, list)){ //FIXME optimize
1012                             int rc = h->ref_count[list] << MB_MBAFF(h);
1013                             if (rc == 1) {
1014                                 val= 0;
1015                             } else if (rc == 2) {
1016                                 val= get_bits1(&h->gb)^1;
1017                             }else{
1018                                 val= get_ue_golomb_31(&h->gb);
1019                                 if (val >= rc) {
1020                                     av_log(h->avctx, AV_LOG_ERROR, "ref %u overflow\n", val);
1021                                     return -1;
1022                                 }
1023                             }
1024                         }else
1025                             val= LIST_NOT_USED&0xFF;
1026                         fill_rectangle(&h->ref_cache[list][ scan8[0] + 2*i ], 2, 4, 8, val, 1);
1027                     }
1028             }
1029             for(list=0; list<h->list_count; list++){
1030                 for(i=0; i<2; i++){
1031                     unsigned int val;
1032                     if(IS_DIR(mb_type, i, list)){
1033                         pred_8x16_motion(h, sl, i*4, list, h->ref_cache[list][ scan8[0] + 2*i ], &mx, &my);
1034                         mx += get_se_golomb(&h->gb);
1035                         my += get_se_golomb(&h->gb);
1036                         tprintf(h->avctx, "final mv:%d %d\n", mx, my);
1037
1038                         val= pack16to32(mx,my);
1039                     }else
1040                         val=0;
1041                     fill_rectangle(h->mv_cache[list][ scan8[0] + 2*i ], 2, 4, 8, val, 4);
1042                 }
1043             }
1044         }
1045     }
1046
1047     if(IS_INTER(mb_type))
1048         write_back_motion(h, mb_type);
1049
1050     if(!IS_INTRA16x16(mb_type)){
1051         cbp= get_ue_golomb(&h->gb);
1052
1053         if(decode_chroma){
1054             if(cbp > 47){
1055                 av_log(h->avctx, AV_LOG_ERROR, "cbp too large (%u) at %d %d\n", cbp, h->mb_x, h->mb_y);
1056                 return -1;
1057             }
1058             if(IS_INTRA4x4(mb_type)) cbp= golomb_to_intra4x4_cbp[cbp];
1059             else                     cbp= golomb_to_inter_cbp   [cbp];
1060         }else{
1061             if(cbp > 15){
1062                 av_log(h->avctx, AV_LOG_ERROR, "cbp too large (%u) at %d %d\n", cbp, h->mb_x, h->mb_y);
1063                 return -1;
1064             }
1065             if(IS_INTRA4x4(mb_type)) cbp= golomb_to_intra4x4_cbp_gray[cbp];
1066             else                     cbp= golomb_to_inter_cbp_gray[cbp];
1067         }
1068     }
1069
1070     if(dct8x8_allowed && (cbp&15) && !IS_INTRA(mb_type)){
1071         mb_type |= MB_TYPE_8x8DCT*get_bits1(&h->gb);
1072     }
1073     h->cbp=
1074     h->cbp_table[mb_xy]= cbp;
1075     h->cur_pic.mb_type[mb_xy] = mb_type;
1076
1077     if(cbp || IS_INTRA16x16(mb_type)){
1078         int i4x4, i8x8, chroma_idx;
1079         int dquant;
1080         int ret;
1081         GetBitContext *gb= IS_INTRA(mb_type) ? h->intra_gb_ptr : h->inter_gb_ptr;
1082         const uint8_t *scan, *scan8x8;
1083         const int max_qp = 51 + 6*(h->sps.bit_depth_luma-8);
1084
1085         if(IS_INTERLACED(mb_type)){
1086             scan8x8 = sl->qscale ? h->field_scan8x8_cavlc : h->field_scan8x8_cavlc_q0;
1087             scan    = sl->qscale ? h->field_scan : h->field_scan_q0;
1088         }else{
1089             scan8x8 = sl->qscale ? h->zigzag_scan8x8_cavlc : h->zigzag_scan8x8_cavlc_q0;
1090             scan    = sl->qscale ? h->zigzag_scan : h->zigzag_scan_q0;
1091         }
1092
1093         dquant= get_se_golomb(&h->gb);
1094
1095         sl->qscale += dquant;
1096
1097         if (((unsigned)sl->qscale) > max_qp){
1098             if (sl->qscale < 0) sl->qscale += max_qp + 1;
1099             else                sl->qscale -= max_qp+1;
1100             if (((unsigned)sl->qscale) > max_qp){
1101                 av_log(h->avctx, AV_LOG_ERROR, "dquant out of range (%d) at %d %d\n", dquant, h->mb_x, h->mb_y);
1102                 return -1;
1103             }
1104         }
1105
1106         sl->chroma_qp[0] = get_chroma_qp(h, 0, sl->qscale);
1107         sl->chroma_qp[1] = get_chroma_qp(h, 1, sl->qscale);
1108
1109         if ((ret = decode_luma_residual(h, sl, gb, scan, scan8x8, pixel_shift, mb_type, cbp, 0)) < 0 ) {
1110             return -1;
1111         }
1112         h->cbp_table[mb_xy] |= ret << 12;
1113         if (CHROMA444(h)) {
1114             if (decode_luma_residual(h, sl, gb, scan, scan8x8, pixel_shift, mb_type, cbp, 1) < 0 ) {
1115                 return -1;
1116             }
1117             if (decode_luma_residual(h, sl, gb, scan, scan8x8, pixel_shift, mb_type, cbp, 2) < 0 ) {
1118                 return -1;
1119             }
1120         } else if (CHROMA422(h)) {
1121             if(cbp&0x30){
1122                 for(chroma_idx=0; chroma_idx<2; chroma_idx++)
1123                     if (decode_residual(h, gb, h->mb + ((256 + 16*16*chroma_idx) << pixel_shift),
1124                                         CHROMA_DC_BLOCK_INDEX+chroma_idx, chroma422_dc_scan,
1125                                         NULL, 8) < 0) {
1126                         return -1;
1127                     }
1128             }
1129
1130             if(cbp&0x20){
1131                 for(chroma_idx=0; chroma_idx<2; chroma_idx++){
1132                     const uint32_t *qmul = h->dequant4_coeff[chroma_idx+1+(IS_INTRA( mb_type ) ? 0:3)][sl->chroma_qp[chroma_idx]];
1133                     int16_t *mb = h->mb + (16*(16 + 16*chroma_idx) << pixel_shift);
1134                     for (i8x8 = 0; i8x8 < 2; i8x8++) {
1135                         for (i4x4 = 0; i4x4 < 4; i4x4++) {
1136                             const int index = 16 + 16*chroma_idx + 8*i8x8 + i4x4;
1137                             if (decode_residual(h, gb, mb, index, scan + 1, qmul, 15) < 0)
1138                                 return -1;
1139                             mb += 16 << pixel_shift;
1140                         }
1141                     }
1142                 }
1143             }else{
1144                 fill_rectangle(&h->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
1145                 fill_rectangle(&h->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
1146             }
1147         } else /* yuv420 */ {
1148             if(cbp&0x30){
1149                 for(chroma_idx=0; chroma_idx<2; chroma_idx++)
1150                     if( decode_residual(h, gb, h->mb + ((256 + 16*16*chroma_idx) << pixel_shift), CHROMA_DC_BLOCK_INDEX+chroma_idx, chroma_dc_scan, NULL, 4) < 0){
1151                         return -1;
1152                     }
1153             }
1154
1155             if(cbp&0x20){
1156                 for(chroma_idx=0; chroma_idx<2; chroma_idx++){
1157                     const uint32_t *qmul = h->dequant4_coeff[chroma_idx+1+(IS_INTRA( mb_type ) ? 0:3)][sl->chroma_qp[chroma_idx]];
1158                     for(i4x4=0; i4x4<4; i4x4++){
1159                         const int index= 16 + 16*chroma_idx + i4x4;
1160                         if( decode_residual(h, gb, h->mb + (16*index << pixel_shift), index, scan + 1, qmul, 15) < 0){
1161                             return -1;
1162                         }
1163                     }
1164                 }
1165             }else{
1166                 fill_rectangle(&h->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
1167                 fill_rectangle(&h->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
1168             }
1169         }
1170     }else{
1171         fill_rectangle(&h->non_zero_count_cache[scan8[ 0]], 4, 4, 8, 0, 1);
1172         fill_rectangle(&h->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
1173         fill_rectangle(&h->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
1174     }
1175     h->cur_pic.qscale_table[mb_xy] = sl->qscale;
1176     write_back_non_zero_count(h);
1177
1178     return 0;
1179 }