avcodec/jpeg2000dec: Fix h/vden typo
[ffmpeg.git] / libavcodec / cabac.c
1 /*
2  * H.26L/H.264/AVC/JVT/14496-10/... encoder/decoder
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  * Context Adaptive Binary Arithmetic Coder.
25  */
26
27 #include <string.h>
28
29 #include "libavutil/common.h"
30 #include "libavutil/timer.h"
31
32 #include "cabac.h"
33 #include "cabac_functions.h"
34
35 const uint8_t ff_h264_cabac_tables[512 + 4*2*64 + 4*64 + 63] = {
36     9,8,7,7,6,6,6,6,5,5,5,5,5,5,5,5,
37     4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
38     3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
39     3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
40     2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
41     2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
42     2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
43     2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
44     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
45     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
46     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
47     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
48     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
49     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
50     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
51     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
52     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
53     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
54     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
55     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
56     // LPS range
57     -128,    -128,    -128,    -128,    -128,    -128,    123,     123,
58     116,     116,     111,     111,     105,     105,     100,     100,
59     95,      95,      90,      90,      85,      85,      81,      81,
60     77,      77,      73,      73,      69,      69,      66,      66,
61     62,      62,      59,      59,      56,      56,      53,      53,
62     51,      51,      48,      48,      46,      46,      43,      43,
63     41,      41,      39,      39,      37,      37,      35,      35,
64     33,      33,      32,      32,      30,      30,      29,      29,
65     27,      27,      26,      26,      24,      24,      23,      23,
66     22,      22,      21,      21,      20,      20,      19,      19,
67     18,      18,      17,      17,      16,      16,      15,      15,
68     14,      14,      14,      14,      13,      13,      12,      12,
69     12,      12,      11,      11,      11,      11,      10,      10,
70     10,      10,      9,       9,       9,       9,       8,       8,
71     8,       8,       7,       7,       7,       7,       7,       7,
72     6,       6,       6,       6,       6,       6,       2,       2,
73     -80,     -80,     -89,     -89,     -98,     -98,     -106,    -106,
74     -114,    -114,    -121,    -121,    -128,    -128,    122,     122,
75     116,     116,     110,     110,     104,     104,     99,      99,
76     94,      94,      89,      89,      85,      85,      80,      80,
77     76,      76,      72,      72,      69,      69,      65,      65,
78     62,      62,      59,      59,      56,      56,      53,      53,
79     50,      50,      48,      48,      45,      45,      43,      43,
80     41,      41,      39,      39,      37,      37,      35,      35,
81     33,      33,      31,      31,      30,      30,      28,      28,
82     27,      27,      26,      26,      24,      24,      23,      23,
83     22,      22,      21,      21,      20,      20,      19,      19,
84     18,      18,      17,      17,      16,      16,      15,      15,
85     14,      14,      14,      14,      13,      13,      12,      12,
86     12,      12,      11,      11,      11,      11,      10,      10,
87     9,       9,       9,       9,       9,       9,       8,       8,
88     8,       8,       7,       7,       7,       7,       2,       2,
89     -48,     -48,     -59,     -59,     -69,     -69,     -78,     -78,
90     -87,     -87,     -96,     -96,     -104,    -104,    -112,    -112,
91     -119,    -119,    -126,    -126,    123,     123,     117,     117,
92     111,     111,     105,     105,     100,     100,     95,      95,
93     90,      90,      86,      86,      81,      81,      77,      77,
94     73,      73,      69,      69,      66,      66,      63,      63,
95     59,      59,      56,      56,      54,      54,      51,      51,
96     48,      48,      46,      46,      43,      43,      41,      41,
97     39,      39,      37,      37,      35,      35,      33,      33,
98     32,      32,      30,      30,      29,      29,      27,      27,
99     26,      26,      25,      25,      23,      23,      22,      22,
100     21,      21,      20,      20,      19,      19,      18,      18,
101     17,      17,      16,      16,      15,      15,      15,      15,
102     14,      14,      13,      13,      12,      12,      12,      12,
103     11,      11,      11,      11,      10,      10,      10,      10,
104     9,       9,       9,       9,       8,       8,       2,       2,
105     -16,     -16,     -29,     -29,     -40,     -40,     -51,     -51,
106     -61,     -61,     -71,     -71,     -81,     -81,     -90,     -90,
107     -98,     -98,     -106,    -106,    -114,    -114,    -121,    -121,
108     -128,    -128,    122,     122,     116,     116,     110,     110,
109     104,     104,     99,      99,      94,      94,      89,      89,
110     85,      85,      80,      80,      76,      76,      72,      72,
111     69,      69,      65,      65,      62,      62,      59,      59,
112     56,      56,      53,      53,      50,      50,      48,      48,
113     45,      45,      43,      43,      41,      41,      39,      39,
114     37,      37,      35,      35,      33,      33,      31,      31,
115     30,      30,      28,      28,      27,      27,      25,      25,
116     24,      24,      23,      23,      22,      22,      21,      21,
117     20,      20,      19,      19,      18,      18,      17,      17,
118     16,      16,      15,      15,      14,      14,      14,      14,
119     13,      13,      12,      12,      12,      12,      11,      11,
120     11,      11,      10,      10,      9,       9,       2,       2,
121     // mlps state
122     127,     126,     77,      76,      77,      76,      75,      74,
123     75,      74,      75,      74,      73,      72,      73,      72,
124     73,      72,      71,      70,      71,      70,      71,      70,
125     69,      68,      69,      68,      67,      66,      67,      66,
126     67,      66,      65,      64,      65,      64,      63,      62,
127     61,      60,      61,      60,      61,      60,      59,      58,
128     59,      58,      57,      56,      55,      54,      55,      54,
129     53,      52,      53,      52,      51,      50,      49,      48,
130     49,      48,      47,      46,      45,      44,      45,      44,
131     43,      42,      43,      42,      39,      38,      39,      38,
132     37,      36,      37,      36,      33,      32,      33,      32,
133     31,      30,      31,      30,      27,      26,      27,      26,
134     25,      24,      23,      22,      23,      22,      19,      18,
135     19,      18,      17,      16,      15,      14,      13,      12,
136     11,      10,      9,       8,       9,       8,       5,       4,
137     5,       4,       3,       2,       1,       0,       0,       1,
138     2,       3,       4,       5,       6,       7,       8,       9,
139     10,      11,      12,      13,      14,      15,      16,      17,
140     18,      19,      20,      21,      22,      23,      24,      25,
141     26,      27,      28,      29,      30,      31,      32,      33,
142     34,      35,      36,      37,      38,      39,      40,      41,
143     42,      43,      44,      45,      46,      47,      48,      49,
144     50,      51,      52,      53,      54,      55,      56,      57,
145     58,      59,      60,      61,      62,      63,      64,      65,
146     66,      67,      68,      69,      70,      71,      72,      73,
147     74,      75,      76,      77,      78,      79,      80,      81,
148     82,      83,      84,      85,      86,      87,      88,      89,
149     90,      91,      92,      93,      94,      95,      96,      97,
150     98,      99,      100,     101,     102,     103,     104,     105,
151     106,     107,     108,     109,     110,     111,     112,     113,
152     114,     115,     116,     117,     118,     119,     120,     121,
153     122,     123,     124,     125,     124,     125,     126,     127,
154     // last_coeff_flag_offset_8x8
155     0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
156     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
157     3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,
158     5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8
159 };
160
161 /**
162  * @param buf_size size of buf in bits
163  */
164 void ff_init_cabac_encoder(CABACContext *c, uint8_t *buf, int buf_size){
165     init_put_bits(&c->pb, buf, buf_size);
166
167     c->low= 0;
168     c->range= 0x1FE;
169     c->outstanding_count= 0;
170     c->pb.bit_left++; //avoids firstBitFlag
171 }
172
173 /**
174  *
175  * @param buf_size size of buf in bits
176  */
177 int ff_init_cabac_decoder(CABACContext *c, const uint8_t *buf, int buf_size){
178     c->bytestream_start=
179     c->bytestream= buf;
180     c->bytestream_end= buf + buf_size;
181
182 #if CABAC_BITS == 16
183     c->low =  (*c->bytestream++)<<18;
184     c->low+=  (*c->bytestream++)<<10;
185     // Keep our fetches on a 2-byte boundary as this should avoid ever having to
186     // do unaligned loads if the compiler (or asm) optimises the double byte
187     // load into a single instruction
188     if(((uintptr_t)c->bytestream & 1) == 0) {
189         c->low += (1 << 9);
190     }
191     else {
192         c->low += ((*c->bytestream++) << 2) + 2;
193     }
194 #else
195     c->low =  (*c->bytestream++)<<10;
196     c->low+= ((*c->bytestream++)<<2) + 2;
197 #endif
198     c->range= 0x1FE;
199     if ((c->range<<(CABAC_BITS+1)) < c->low)
200         return AVERROR_INVALIDDATA;
201     return 0;
202 }