/src/x264/common/bitstream.h
Line | Count | Source |
1 | | /***************************************************************************** |
2 | | * bitstream.h: bitstream writing |
3 | | ***************************************************************************** |
4 | | * Copyright (C) 2003-2025 x264 project |
5 | | * |
6 | | * Authors: Loren Merritt <lorenm@u.washington.edu> |
7 | | * Fiona Glaser <fiona@x264.com> |
8 | | * Laurent Aimar <fenrir@via.ecp.fr> |
9 | | * |
10 | | * This program is free software; you can redistribute it and/or modify |
11 | | * it under the terms of the GNU General Public License as published by |
12 | | * the Free Software Foundation; either version 2 of the License, or |
13 | | * (at your option) any later version. |
14 | | * |
15 | | * This program is distributed in the hope that it will be useful, |
16 | | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
17 | | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
18 | | * GNU General Public License for more details. |
19 | | * |
20 | | * You should have received a copy of the GNU General Public License |
21 | | * along with this program; if not, write to the Free Software |
22 | | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111, USA. |
23 | | * |
24 | | * This program is also available under a commercial proprietary license. |
25 | | * For more information, contact us at licensing@x264.com. |
26 | | *****************************************************************************/ |
27 | | |
28 | | #ifndef X264_BS_H |
29 | | #define X264_BS_H |
30 | | |
31 | | typedef struct |
32 | | { |
33 | | uint16_t i_bits; |
34 | | uint8_t i_size; |
35 | | /* Next level table to use */ |
36 | | uint8_t i_next; |
37 | | } vlc_large_t; |
38 | | |
39 | | typedef struct bs_s |
40 | | { |
41 | | uint8_t *p_start; |
42 | | uint8_t *p; |
43 | | uint8_t *p_end; |
44 | | |
45 | | uintptr_t cur_bits; |
46 | | int i_left; /* i_count number of available bits */ |
47 | | int i_bits_encoded; /* RD only */ |
48 | | } bs_t; |
49 | | |
50 | | typedef struct |
51 | | { |
52 | | int32_t last; |
53 | | int32_t mask; |
54 | | ALIGNED_16( dctcoef level[18] ); |
55 | | } x264_run_level_t; |
56 | | |
57 | | typedef struct |
58 | | { |
59 | | uint8_t *(*nal_escape)( uint8_t *dst, uint8_t *src, uint8_t *end ); |
60 | | void (*cabac_block_residual_internal)( dctcoef *l, int b_interlaced, |
61 | | intptr_t ctx_block_cat, x264_cabac_t *cb ); |
62 | | void (*cabac_block_residual_rd_internal)( dctcoef *l, int b_interlaced, |
63 | | intptr_t ctx_block_cat, x264_cabac_t *cb ); |
64 | | void (*cabac_block_residual_8x8_rd_internal)( dctcoef *l, int b_interlaced, |
65 | | intptr_t ctx_block_cat, x264_cabac_t *cb ); |
66 | | } x264_bitstream_function_t; |
67 | | |
68 | 0 | #define x264_bitstream_init x264_template(bitstream_init) |
69 | | void x264_bitstream_init( uint32_t cpu, x264_bitstream_function_t *pf ); |
70 | | |
71 | | /* A larger level table size theoretically could help a bit at extremely |
72 | | * high bitrates, but the cost in cache is usually too high for it to be |
73 | | * useful. |
74 | | * This size appears to be optimal for QP18 encoding on a Nehalem CPU. |
75 | | * FIXME: Do further testing? */ |
76 | 0 | #define LEVEL_TABLE_SIZE 128 |
77 | 0 | #define x264_level_token x264_template(level_token) |
78 | | extern vlc_large_t x264_level_token[7][LEVEL_TABLE_SIZE]; |
79 | | |
80 | | /* The longest possible set of zero run codes sums to 25 bits. This leaves |
81 | | * plenty of room for both the code (25 bits) and size (5 bits) in a uint32_t. */ |
82 | | |
83 | 0 | #define x264_run_before x264_template(run_before) |
84 | | extern uint32_t x264_run_before[1<<16]; |
85 | | |
86 | | static inline void bs_init( bs_t *s, void *p_data, int i_data ) |
87 | 0 | { |
88 | 0 | int offset = ((intptr_t)p_data & 3); |
89 | 0 | s->p = s->p_start = (uint8_t*)p_data - offset; |
90 | 0 | s->p_end = (uint8_t*)p_data + i_data; |
91 | 0 | s->i_left = (WORD_SIZE - offset)*8; |
92 | 0 | if( offset ) |
93 | 0 | { |
94 | 0 | s->cur_bits = endian_fix32( M32(s->p) ); |
95 | 0 | s->cur_bits >>= (4-offset)*8; |
96 | 0 | } |
97 | 0 | else |
98 | 0 | s->cur_bits = 0; |
99 | 0 | } Unexecuted instantiation: bitstream.c:bs_init Unexecuted instantiation: encoder.c:bs_init Unexecuted instantiation: lookahead.c:bs_init Unexecuted instantiation: threadpool.c:bs_init Unexecuted instantiation: mc.c:bs_init Unexecuted instantiation: predict.c:bs_init Unexecuted instantiation: pixel.c:bs_init Unexecuted instantiation: macroblock.c:bs_init Unexecuted instantiation: frame.c:bs_init Unexecuted instantiation: dct.c:bs_init Unexecuted instantiation: cabac.c:bs_init Unexecuted instantiation: common.c:bs_init Unexecuted instantiation: set.c:bs_init Unexecuted instantiation: quant.c:bs_init Unexecuted instantiation: deblock.c:bs_init Unexecuted instantiation: vlc.c:bs_init Unexecuted instantiation: mvpred.c:bs_init Unexecuted instantiation: analyse.c:bs_init Unexecuted instantiation: me.c:bs_init Unexecuted instantiation: ratecontrol.c:bs_init Unexecuted instantiation: cavlc.c:bs_init Unexecuted instantiation: rectangle.c:bs_init |
100 | | static inline int bs_pos( bs_t *s ) |
101 | 0 | { |
102 | 0 | return( 8 * (s->p - s->p_start) + (WORD_SIZE*8) - s->i_left ); |
103 | 0 | } Unexecuted instantiation: bitstream.c:bs_pos Unexecuted instantiation: encoder.c:bs_pos Unexecuted instantiation: lookahead.c:bs_pos Unexecuted instantiation: threadpool.c:bs_pos Unexecuted instantiation: mc.c:bs_pos Unexecuted instantiation: predict.c:bs_pos Unexecuted instantiation: pixel.c:bs_pos Unexecuted instantiation: macroblock.c:bs_pos Unexecuted instantiation: frame.c:bs_pos Unexecuted instantiation: dct.c:bs_pos Unexecuted instantiation: cabac.c:bs_pos Unexecuted instantiation: common.c:bs_pos Unexecuted instantiation: set.c:bs_pos Unexecuted instantiation: quant.c:bs_pos Unexecuted instantiation: deblock.c:bs_pos Unexecuted instantiation: vlc.c:bs_pos Unexecuted instantiation: mvpred.c:bs_pos Unexecuted instantiation: analyse.c:bs_pos Unexecuted instantiation: me.c:bs_pos Unexecuted instantiation: ratecontrol.c:bs_pos Unexecuted instantiation: cavlc.c:bs_pos Unexecuted instantiation: rectangle.c:bs_pos |
104 | | |
105 | | /* Write the rest of cur_bits to the bitstream; results in a bitstream no longer 32-bit aligned. */ |
106 | | static inline void bs_flush( bs_t *s ) |
107 | 0 | { |
108 | 0 | M32( s->p ) = endian_fix32( s->cur_bits << (s->i_left&31) ); |
109 | 0 | s->p += WORD_SIZE - (s->i_left >> 3); |
110 | 0 | s->i_left = WORD_SIZE*8; |
111 | 0 | } Unexecuted instantiation: bitstream.c:bs_flush Unexecuted instantiation: encoder.c:bs_flush Unexecuted instantiation: lookahead.c:bs_flush Unexecuted instantiation: threadpool.c:bs_flush Unexecuted instantiation: mc.c:bs_flush Unexecuted instantiation: predict.c:bs_flush Unexecuted instantiation: pixel.c:bs_flush Unexecuted instantiation: macroblock.c:bs_flush Unexecuted instantiation: frame.c:bs_flush Unexecuted instantiation: dct.c:bs_flush Unexecuted instantiation: cabac.c:bs_flush Unexecuted instantiation: common.c:bs_flush Unexecuted instantiation: set.c:bs_flush Unexecuted instantiation: quant.c:bs_flush Unexecuted instantiation: deblock.c:bs_flush Unexecuted instantiation: vlc.c:bs_flush Unexecuted instantiation: mvpred.c:bs_flush Unexecuted instantiation: analyse.c:bs_flush Unexecuted instantiation: me.c:bs_flush Unexecuted instantiation: ratecontrol.c:bs_flush Unexecuted instantiation: cavlc.c:bs_flush Unexecuted instantiation: rectangle.c:bs_flush |
112 | | /* The inverse of bs_flush: prepare the bitstream to be written to again. */ |
113 | | static inline void bs_realign( bs_t *s ) |
114 | 0 | { |
115 | 0 | int offset = ((intptr_t)s->p & 3); |
116 | 0 | if( offset ) |
117 | 0 | { |
118 | 0 | s->p = (uint8_t*)s->p - offset; |
119 | 0 | s->i_left = (WORD_SIZE - offset)*8; |
120 | 0 | s->cur_bits = endian_fix32( M32(s->p) ); |
121 | 0 | s->cur_bits >>= (4-offset)*8; |
122 | 0 | } |
123 | 0 | } Unexecuted instantiation: bitstream.c:bs_realign Unexecuted instantiation: encoder.c:bs_realign Unexecuted instantiation: lookahead.c:bs_realign Unexecuted instantiation: threadpool.c:bs_realign Unexecuted instantiation: mc.c:bs_realign Unexecuted instantiation: predict.c:bs_realign Unexecuted instantiation: pixel.c:bs_realign Unexecuted instantiation: macroblock.c:bs_realign Unexecuted instantiation: frame.c:bs_realign Unexecuted instantiation: dct.c:bs_realign Unexecuted instantiation: cabac.c:bs_realign Unexecuted instantiation: common.c:bs_realign Unexecuted instantiation: set.c:bs_realign Unexecuted instantiation: quant.c:bs_realign Unexecuted instantiation: deblock.c:bs_realign Unexecuted instantiation: vlc.c:bs_realign Unexecuted instantiation: mvpred.c:bs_realign Unexecuted instantiation: analyse.c:bs_realign Unexecuted instantiation: me.c:bs_realign Unexecuted instantiation: ratecontrol.c:bs_realign Unexecuted instantiation: cavlc.c:bs_realign Unexecuted instantiation: rectangle.c:bs_realign |
124 | | |
125 | | static inline void bs_write( bs_t *s, int i_count, uint32_t i_bits ) |
126 | 0 | { |
127 | 0 | if( WORD_SIZE == 8 ) |
128 | 0 | { |
129 | 0 | s->cur_bits = (s->cur_bits << i_count) | i_bits; |
130 | 0 | s->i_left -= i_count; |
131 | 0 | if( s->i_left <= 32 ) |
132 | 0 | { |
133 | | #if WORDS_BIGENDIAN |
134 | | M32( s->p ) = s->cur_bits >> (32 - s->i_left); |
135 | | #else |
136 | 0 | M32( s->p ) = endian_fix( s->cur_bits << s->i_left ); |
137 | 0 | #endif |
138 | 0 | s->i_left += 32; |
139 | 0 | s->p += 4; |
140 | 0 | } |
141 | 0 | } |
142 | 0 | else |
143 | 0 | { |
144 | 0 | if( i_count < s->i_left ) |
145 | 0 | { |
146 | 0 | s->cur_bits = (s->cur_bits << i_count) | i_bits; |
147 | 0 | s->i_left -= i_count; |
148 | 0 | } |
149 | 0 | else |
150 | 0 | { |
151 | 0 | i_count -= s->i_left; |
152 | 0 | s->cur_bits = (s->cur_bits << s->i_left) | (i_bits >> i_count); |
153 | 0 | M32( s->p ) = endian_fix( s->cur_bits ); |
154 | 0 | s->p += 4; |
155 | 0 | s->cur_bits = i_bits; |
156 | 0 | s->i_left = 32 - i_count; |
157 | 0 | } |
158 | 0 | } |
159 | 0 | } Unexecuted instantiation: bitstream.c:bs_write Unexecuted instantiation: encoder.c:bs_write Unexecuted instantiation: lookahead.c:bs_write Unexecuted instantiation: threadpool.c:bs_write Unexecuted instantiation: mc.c:bs_write Unexecuted instantiation: predict.c:bs_write Unexecuted instantiation: pixel.c:bs_write Unexecuted instantiation: macroblock.c:bs_write Unexecuted instantiation: frame.c:bs_write Unexecuted instantiation: dct.c:bs_write Unexecuted instantiation: cabac.c:bs_write Unexecuted instantiation: common.c:bs_write Unexecuted instantiation: set.c:bs_write Unexecuted instantiation: quant.c:bs_write Unexecuted instantiation: deblock.c:bs_write Unexecuted instantiation: vlc.c:bs_write Unexecuted instantiation: mvpred.c:bs_write Unexecuted instantiation: analyse.c:bs_write Unexecuted instantiation: me.c:bs_write Unexecuted instantiation: ratecontrol.c:bs_write Unexecuted instantiation: cavlc.c:bs_write Unexecuted instantiation: rectangle.c:bs_write |
160 | | |
161 | | /* Special case to eliminate branch in normal bs_write. */ |
162 | | /* Golomb never writes an even-size code, so this is only used in slice headers. */ |
163 | | static inline void bs_write32( bs_t *s, uint32_t i_bits ) |
164 | 0 | { |
165 | 0 | bs_write( s, 16, i_bits >> 16 ); |
166 | 0 | bs_write( s, 16, i_bits ); |
167 | 0 | } Unexecuted instantiation: bitstream.c:bs_write32 Unexecuted instantiation: encoder.c:bs_write32 Unexecuted instantiation: lookahead.c:bs_write32 Unexecuted instantiation: threadpool.c:bs_write32 Unexecuted instantiation: mc.c:bs_write32 Unexecuted instantiation: predict.c:bs_write32 Unexecuted instantiation: pixel.c:bs_write32 Unexecuted instantiation: macroblock.c:bs_write32 Unexecuted instantiation: frame.c:bs_write32 Unexecuted instantiation: dct.c:bs_write32 Unexecuted instantiation: cabac.c:bs_write32 Unexecuted instantiation: common.c:bs_write32 Unexecuted instantiation: set.c:bs_write32 Unexecuted instantiation: quant.c:bs_write32 Unexecuted instantiation: deblock.c:bs_write32 Unexecuted instantiation: vlc.c:bs_write32 Unexecuted instantiation: mvpred.c:bs_write32 Unexecuted instantiation: analyse.c:bs_write32 Unexecuted instantiation: me.c:bs_write32 Unexecuted instantiation: ratecontrol.c:bs_write32 Unexecuted instantiation: cavlc.c:bs_write32 Unexecuted instantiation: rectangle.c:bs_write32 |
168 | | |
169 | | static inline void bs_write1( bs_t *s, uint32_t i_bit ) |
170 | 0 | { |
171 | 0 | s->cur_bits <<= 1; |
172 | 0 | s->cur_bits |= i_bit; |
173 | 0 | s->i_left--; |
174 | 0 | if( s->i_left == WORD_SIZE*8-32 ) |
175 | 0 | { |
176 | 0 | M32( s->p ) = endian_fix32( s->cur_bits ); |
177 | 0 | s->p += 4; |
178 | 0 | s->i_left = WORD_SIZE*8; |
179 | 0 | } |
180 | 0 | } Unexecuted instantiation: bitstream.c:bs_write1 Unexecuted instantiation: encoder.c:bs_write1 Unexecuted instantiation: lookahead.c:bs_write1 Unexecuted instantiation: threadpool.c:bs_write1 Unexecuted instantiation: mc.c:bs_write1 Unexecuted instantiation: predict.c:bs_write1 Unexecuted instantiation: pixel.c:bs_write1 Unexecuted instantiation: macroblock.c:bs_write1 Unexecuted instantiation: frame.c:bs_write1 Unexecuted instantiation: dct.c:bs_write1 Unexecuted instantiation: cabac.c:bs_write1 Unexecuted instantiation: common.c:bs_write1 Unexecuted instantiation: set.c:bs_write1 Unexecuted instantiation: quant.c:bs_write1 Unexecuted instantiation: deblock.c:bs_write1 Unexecuted instantiation: vlc.c:bs_write1 Unexecuted instantiation: mvpred.c:bs_write1 Unexecuted instantiation: analyse.c:bs_write1 Unexecuted instantiation: me.c:bs_write1 Unexecuted instantiation: ratecontrol.c:bs_write1 Unexecuted instantiation: cavlc.c:bs_write1 Unexecuted instantiation: rectangle.c:bs_write1 |
181 | | |
182 | | static inline void bs_align_0( bs_t *s ) |
183 | 0 | { |
184 | 0 | bs_write( s, s->i_left&7, 0 ); |
185 | 0 | bs_flush( s ); |
186 | 0 | } Unexecuted instantiation: bitstream.c:bs_align_0 Unexecuted instantiation: encoder.c:bs_align_0 Unexecuted instantiation: lookahead.c:bs_align_0 Unexecuted instantiation: threadpool.c:bs_align_0 Unexecuted instantiation: mc.c:bs_align_0 Unexecuted instantiation: predict.c:bs_align_0 Unexecuted instantiation: pixel.c:bs_align_0 Unexecuted instantiation: macroblock.c:bs_align_0 Unexecuted instantiation: frame.c:bs_align_0 Unexecuted instantiation: dct.c:bs_align_0 Unexecuted instantiation: cabac.c:bs_align_0 Unexecuted instantiation: common.c:bs_align_0 Unexecuted instantiation: set.c:bs_align_0 Unexecuted instantiation: quant.c:bs_align_0 Unexecuted instantiation: deblock.c:bs_align_0 Unexecuted instantiation: vlc.c:bs_align_0 Unexecuted instantiation: mvpred.c:bs_align_0 Unexecuted instantiation: analyse.c:bs_align_0 Unexecuted instantiation: me.c:bs_align_0 Unexecuted instantiation: ratecontrol.c:bs_align_0 Unexecuted instantiation: cavlc.c:bs_align_0 Unexecuted instantiation: rectangle.c:bs_align_0 |
187 | | static inline void bs_align_1( bs_t *s ) |
188 | 0 | { |
189 | 0 | bs_write( s, s->i_left&7, (1 << (s->i_left&7)) - 1 ); |
190 | 0 | bs_flush( s ); |
191 | 0 | } Unexecuted instantiation: bitstream.c:bs_align_1 Unexecuted instantiation: encoder.c:bs_align_1 Unexecuted instantiation: lookahead.c:bs_align_1 Unexecuted instantiation: threadpool.c:bs_align_1 Unexecuted instantiation: mc.c:bs_align_1 Unexecuted instantiation: predict.c:bs_align_1 Unexecuted instantiation: pixel.c:bs_align_1 Unexecuted instantiation: macroblock.c:bs_align_1 Unexecuted instantiation: frame.c:bs_align_1 Unexecuted instantiation: dct.c:bs_align_1 Unexecuted instantiation: cabac.c:bs_align_1 Unexecuted instantiation: common.c:bs_align_1 Unexecuted instantiation: set.c:bs_align_1 Unexecuted instantiation: quant.c:bs_align_1 Unexecuted instantiation: deblock.c:bs_align_1 Unexecuted instantiation: vlc.c:bs_align_1 Unexecuted instantiation: mvpred.c:bs_align_1 Unexecuted instantiation: analyse.c:bs_align_1 Unexecuted instantiation: me.c:bs_align_1 Unexecuted instantiation: ratecontrol.c:bs_align_1 Unexecuted instantiation: cavlc.c:bs_align_1 Unexecuted instantiation: rectangle.c:bs_align_1 |
192 | | static inline void bs_align_10( bs_t *s ) |
193 | 0 | { |
194 | 0 | if( s->i_left&7 ) |
195 | 0 | bs_write( s, s->i_left&7, 1 << ( (s->i_left&7) - 1 ) ); |
196 | 0 | bs_flush( s ); |
197 | 0 | } Unexecuted instantiation: bitstream.c:bs_align_10 Unexecuted instantiation: encoder.c:bs_align_10 Unexecuted instantiation: lookahead.c:bs_align_10 Unexecuted instantiation: threadpool.c:bs_align_10 Unexecuted instantiation: mc.c:bs_align_10 Unexecuted instantiation: predict.c:bs_align_10 Unexecuted instantiation: pixel.c:bs_align_10 Unexecuted instantiation: macroblock.c:bs_align_10 Unexecuted instantiation: frame.c:bs_align_10 Unexecuted instantiation: dct.c:bs_align_10 Unexecuted instantiation: cabac.c:bs_align_10 Unexecuted instantiation: common.c:bs_align_10 Unexecuted instantiation: set.c:bs_align_10 Unexecuted instantiation: quant.c:bs_align_10 Unexecuted instantiation: deblock.c:bs_align_10 Unexecuted instantiation: vlc.c:bs_align_10 Unexecuted instantiation: mvpred.c:bs_align_10 Unexecuted instantiation: analyse.c:bs_align_10 Unexecuted instantiation: me.c:bs_align_10 Unexecuted instantiation: ratecontrol.c:bs_align_10 Unexecuted instantiation: cavlc.c:bs_align_10 Unexecuted instantiation: rectangle.c:bs_align_10 |
198 | | |
199 | | /* golomb functions */ |
200 | | |
201 | | static const uint8_t x264_ue_size_tab[256] = |
202 | | { |
203 | | 1, 1, 3, 3, 5, 5, 5, 5, 7, 7, 7, 7, 7, 7, 7, 7, |
204 | | 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, |
205 | | 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, |
206 | | 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11, |
207 | | 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, |
208 | | 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, |
209 | | 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, |
210 | | 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, |
211 | | 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, |
212 | | 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, |
213 | | 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, |
214 | | 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, |
215 | | 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, |
216 | | 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, |
217 | | 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, |
218 | | 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, |
219 | | }; |
220 | | |
221 | | static inline void bs_write_ue_big( bs_t *s, unsigned int val ) |
222 | 0 | { |
223 | 0 | int size = 0; |
224 | 0 | int tmp = ++val; |
225 | 0 | if( tmp >= 0x10000 ) |
226 | 0 | { |
227 | 0 | size = 32; |
228 | 0 | tmp >>= 16; |
229 | 0 | } |
230 | 0 | if( tmp >= 0x100 ) |
231 | 0 | { |
232 | 0 | size += 16; |
233 | 0 | tmp >>= 8; |
234 | 0 | } |
235 | 0 | size += x264_ue_size_tab[tmp]; |
236 | 0 | bs_write( s, size>>1, 0 ); |
237 | 0 | bs_write( s, (size>>1)+1, val ); |
238 | 0 | } Unexecuted instantiation: bitstream.c:bs_write_ue_big Unexecuted instantiation: encoder.c:bs_write_ue_big Unexecuted instantiation: lookahead.c:bs_write_ue_big Unexecuted instantiation: threadpool.c:bs_write_ue_big Unexecuted instantiation: mc.c:bs_write_ue_big Unexecuted instantiation: predict.c:bs_write_ue_big Unexecuted instantiation: pixel.c:bs_write_ue_big Unexecuted instantiation: macroblock.c:bs_write_ue_big Unexecuted instantiation: frame.c:bs_write_ue_big Unexecuted instantiation: dct.c:bs_write_ue_big Unexecuted instantiation: cabac.c:bs_write_ue_big Unexecuted instantiation: common.c:bs_write_ue_big Unexecuted instantiation: set.c:bs_write_ue_big Unexecuted instantiation: quant.c:bs_write_ue_big Unexecuted instantiation: deblock.c:bs_write_ue_big Unexecuted instantiation: vlc.c:bs_write_ue_big Unexecuted instantiation: mvpred.c:bs_write_ue_big Unexecuted instantiation: analyse.c:bs_write_ue_big Unexecuted instantiation: me.c:bs_write_ue_big Unexecuted instantiation: ratecontrol.c:bs_write_ue_big Unexecuted instantiation: cavlc.c:bs_write_ue_big Unexecuted instantiation: rectangle.c:bs_write_ue_big |
239 | | |
240 | | /* Only works on values under 255. */ |
241 | | static inline void bs_write_ue( bs_t *s, int val ) |
242 | 0 | { |
243 | 0 | bs_write( s, x264_ue_size_tab[val+1], val+1 ); |
244 | 0 | } Unexecuted instantiation: bitstream.c:bs_write_ue Unexecuted instantiation: encoder.c:bs_write_ue Unexecuted instantiation: lookahead.c:bs_write_ue Unexecuted instantiation: threadpool.c:bs_write_ue Unexecuted instantiation: mc.c:bs_write_ue Unexecuted instantiation: predict.c:bs_write_ue Unexecuted instantiation: pixel.c:bs_write_ue Unexecuted instantiation: macroblock.c:bs_write_ue Unexecuted instantiation: frame.c:bs_write_ue Unexecuted instantiation: dct.c:bs_write_ue Unexecuted instantiation: cabac.c:bs_write_ue Unexecuted instantiation: common.c:bs_write_ue Unexecuted instantiation: set.c:bs_write_ue Unexecuted instantiation: quant.c:bs_write_ue Unexecuted instantiation: deblock.c:bs_write_ue Unexecuted instantiation: vlc.c:bs_write_ue Unexecuted instantiation: mvpred.c:bs_write_ue Unexecuted instantiation: analyse.c:bs_write_ue Unexecuted instantiation: me.c:bs_write_ue Unexecuted instantiation: ratecontrol.c:bs_write_ue Unexecuted instantiation: cavlc.c:bs_write_ue Unexecuted instantiation: rectangle.c:bs_write_ue |
245 | | |
246 | | static inline void bs_write_se( bs_t *s, int val ) |
247 | 0 | { |
248 | 0 | int size = 0; |
249 | | /* Faster than (val <= 0 ? -val*2+1 : val*2) */ |
250 | | /* 4 instructions on x86, 3 on ARM */ |
251 | 0 | int tmp = 1 - val*2; |
252 | 0 | if( tmp < 0 ) tmp = val*2; |
253 | 0 | val = tmp; |
254 | |
|
255 | 0 | if( tmp >= 0x100 ) |
256 | 0 | { |
257 | 0 | size = 16; |
258 | 0 | tmp >>= 8; |
259 | 0 | } |
260 | 0 | size += x264_ue_size_tab[tmp]; |
261 | 0 | bs_write( s, size, val ); |
262 | 0 | } Unexecuted instantiation: bitstream.c:bs_write_se Unexecuted instantiation: encoder.c:bs_write_se Unexecuted instantiation: lookahead.c:bs_write_se Unexecuted instantiation: threadpool.c:bs_write_se Unexecuted instantiation: mc.c:bs_write_se Unexecuted instantiation: predict.c:bs_write_se Unexecuted instantiation: pixel.c:bs_write_se Unexecuted instantiation: macroblock.c:bs_write_se Unexecuted instantiation: frame.c:bs_write_se Unexecuted instantiation: dct.c:bs_write_se Unexecuted instantiation: cabac.c:bs_write_se Unexecuted instantiation: common.c:bs_write_se Unexecuted instantiation: set.c:bs_write_se Unexecuted instantiation: quant.c:bs_write_se Unexecuted instantiation: deblock.c:bs_write_se Unexecuted instantiation: vlc.c:bs_write_se Unexecuted instantiation: mvpred.c:bs_write_se Unexecuted instantiation: analyse.c:bs_write_se Unexecuted instantiation: me.c:bs_write_se Unexecuted instantiation: ratecontrol.c:bs_write_se Unexecuted instantiation: cavlc.c:bs_write_se Unexecuted instantiation: rectangle.c:bs_write_se |
263 | | |
264 | | static inline void bs_write_te( bs_t *s, int x, int val ) |
265 | 0 | { |
266 | 0 | if( x == 1 ) |
267 | 0 | bs_write1( s, 1^val ); |
268 | 0 | else //if( x > 1 ) |
269 | 0 | bs_write_ue( s, val ); |
270 | 0 | } Unexecuted instantiation: bitstream.c:bs_write_te Unexecuted instantiation: encoder.c:bs_write_te Unexecuted instantiation: lookahead.c:bs_write_te Unexecuted instantiation: threadpool.c:bs_write_te Unexecuted instantiation: mc.c:bs_write_te Unexecuted instantiation: predict.c:bs_write_te Unexecuted instantiation: pixel.c:bs_write_te Unexecuted instantiation: macroblock.c:bs_write_te Unexecuted instantiation: frame.c:bs_write_te Unexecuted instantiation: dct.c:bs_write_te Unexecuted instantiation: cabac.c:bs_write_te Unexecuted instantiation: common.c:bs_write_te Unexecuted instantiation: set.c:bs_write_te Unexecuted instantiation: quant.c:bs_write_te Unexecuted instantiation: deblock.c:bs_write_te Unexecuted instantiation: vlc.c:bs_write_te Unexecuted instantiation: mvpred.c:bs_write_te Unexecuted instantiation: analyse.c:bs_write_te Unexecuted instantiation: me.c:bs_write_te Unexecuted instantiation: ratecontrol.c:bs_write_te Unexecuted instantiation: cavlc.c:bs_write_te Unexecuted instantiation: rectangle.c:bs_write_te |
271 | | |
272 | | static inline void bs_rbsp_trailing( bs_t *s ) |
273 | 0 | { |
274 | 0 | bs_write1( s, 1 ); |
275 | 0 | bs_write( s, s->i_left&7, 0 ); |
276 | 0 | } Unexecuted instantiation: bitstream.c:bs_rbsp_trailing Unexecuted instantiation: encoder.c:bs_rbsp_trailing Unexecuted instantiation: lookahead.c:bs_rbsp_trailing Unexecuted instantiation: threadpool.c:bs_rbsp_trailing Unexecuted instantiation: mc.c:bs_rbsp_trailing Unexecuted instantiation: predict.c:bs_rbsp_trailing Unexecuted instantiation: pixel.c:bs_rbsp_trailing Unexecuted instantiation: macroblock.c:bs_rbsp_trailing Unexecuted instantiation: frame.c:bs_rbsp_trailing Unexecuted instantiation: dct.c:bs_rbsp_trailing Unexecuted instantiation: cabac.c:bs_rbsp_trailing Unexecuted instantiation: common.c:bs_rbsp_trailing Unexecuted instantiation: set.c:bs_rbsp_trailing Unexecuted instantiation: quant.c:bs_rbsp_trailing Unexecuted instantiation: deblock.c:bs_rbsp_trailing Unexecuted instantiation: vlc.c:bs_rbsp_trailing Unexecuted instantiation: mvpred.c:bs_rbsp_trailing Unexecuted instantiation: analyse.c:bs_rbsp_trailing Unexecuted instantiation: me.c:bs_rbsp_trailing Unexecuted instantiation: ratecontrol.c:bs_rbsp_trailing Unexecuted instantiation: cavlc.c:bs_rbsp_trailing Unexecuted instantiation: rectangle.c:bs_rbsp_trailing |
277 | | |
278 | | static ALWAYS_INLINE int bs_size_ue( unsigned int val ) |
279 | 0 | { |
280 | 0 | return x264_ue_size_tab[val+1]; |
281 | 0 | } Unexecuted instantiation: bitstream.c:bs_size_ue Unexecuted instantiation: encoder.c:bs_size_ue Unexecuted instantiation: lookahead.c:bs_size_ue Unexecuted instantiation: threadpool.c:bs_size_ue Unexecuted instantiation: mc.c:bs_size_ue Unexecuted instantiation: predict.c:bs_size_ue Unexecuted instantiation: pixel.c:bs_size_ue Unexecuted instantiation: macroblock.c:bs_size_ue Unexecuted instantiation: frame.c:bs_size_ue Unexecuted instantiation: dct.c:bs_size_ue Unexecuted instantiation: cabac.c:bs_size_ue Unexecuted instantiation: common.c:bs_size_ue Unexecuted instantiation: set.c:bs_size_ue Unexecuted instantiation: quant.c:bs_size_ue Unexecuted instantiation: deblock.c:bs_size_ue Unexecuted instantiation: vlc.c:bs_size_ue Unexecuted instantiation: mvpred.c:bs_size_ue Unexecuted instantiation: analyse.c:bs_size_ue Unexecuted instantiation: me.c:bs_size_ue Unexecuted instantiation: ratecontrol.c:bs_size_ue Unexecuted instantiation: cavlc.c:bs_size_ue Unexecuted instantiation: rectangle.c:bs_size_ue |
282 | | |
283 | | static ALWAYS_INLINE int bs_size_ue_big( unsigned int val ) |
284 | 0 | { |
285 | 0 | if( val < 255 ) |
286 | 0 | return x264_ue_size_tab[val+1]; |
287 | 0 | else |
288 | 0 | return x264_ue_size_tab[(val+1)>>8] + 16; |
289 | 0 | } Unexecuted instantiation: bitstream.c:bs_size_ue_big Unexecuted instantiation: encoder.c:bs_size_ue_big Unexecuted instantiation: lookahead.c:bs_size_ue_big Unexecuted instantiation: threadpool.c:bs_size_ue_big Unexecuted instantiation: mc.c:bs_size_ue_big Unexecuted instantiation: predict.c:bs_size_ue_big Unexecuted instantiation: pixel.c:bs_size_ue_big Unexecuted instantiation: macroblock.c:bs_size_ue_big Unexecuted instantiation: frame.c:bs_size_ue_big Unexecuted instantiation: dct.c:bs_size_ue_big Unexecuted instantiation: cabac.c:bs_size_ue_big Unexecuted instantiation: common.c:bs_size_ue_big Unexecuted instantiation: set.c:bs_size_ue_big Unexecuted instantiation: quant.c:bs_size_ue_big Unexecuted instantiation: deblock.c:bs_size_ue_big Unexecuted instantiation: vlc.c:bs_size_ue_big Unexecuted instantiation: mvpred.c:bs_size_ue_big Unexecuted instantiation: analyse.c:bs_size_ue_big Unexecuted instantiation: me.c:bs_size_ue_big Unexecuted instantiation: ratecontrol.c:bs_size_ue_big Unexecuted instantiation: cavlc.c:bs_size_ue_big Unexecuted instantiation: rectangle.c:bs_size_ue_big |
290 | | |
291 | | static ALWAYS_INLINE int bs_size_se( int val ) |
292 | 0 | { |
293 | 0 | int tmp = 1 - val*2; |
294 | 0 | if( tmp < 0 ) tmp = val*2; |
295 | 0 | if( tmp < 256 ) |
296 | 0 | return x264_ue_size_tab[tmp]; |
297 | 0 | else |
298 | 0 | return x264_ue_size_tab[tmp>>8]+16; |
299 | 0 | } Unexecuted instantiation: bitstream.c:bs_size_se Unexecuted instantiation: encoder.c:bs_size_se Unexecuted instantiation: lookahead.c:bs_size_se Unexecuted instantiation: threadpool.c:bs_size_se Unexecuted instantiation: mc.c:bs_size_se Unexecuted instantiation: predict.c:bs_size_se Unexecuted instantiation: pixel.c:bs_size_se Unexecuted instantiation: macroblock.c:bs_size_se Unexecuted instantiation: frame.c:bs_size_se Unexecuted instantiation: dct.c:bs_size_se Unexecuted instantiation: cabac.c:bs_size_se Unexecuted instantiation: common.c:bs_size_se Unexecuted instantiation: set.c:bs_size_se Unexecuted instantiation: quant.c:bs_size_se Unexecuted instantiation: deblock.c:bs_size_se Unexecuted instantiation: vlc.c:bs_size_se Unexecuted instantiation: mvpred.c:bs_size_se Unexecuted instantiation: analyse.c:bs_size_se Unexecuted instantiation: me.c:bs_size_se Unexecuted instantiation: ratecontrol.c:bs_size_se Unexecuted instantiation: cavlc.c:bs_size_se Unexecuted instantiation: rectangle.c:bs_size_se |
300 | | |
301 | | static ALWAYS_INLINE int bs_size_te( int x, int val ) |
302 | 0 | { |
303 | 0 | if( x == 1 ) |
304 | 0 | return 1; |
305 | 0 | else //if( x > 1 ) |
306 | 0 | return x264_ue_size_tab[val+1]; |
307 | 0 | } Unexecuted instantiation: bitstream.c:bs_size_te Unexecuted instantiation: encoder.c:bs_size_te Unexecuted instantiation: lookahead.c:bs_size_te Unexecuted instantiation: threadpool.c:bs_size_te Unexecuted instantiation: mc.c:bs_size_te Unexecuted instantiation: predict.c:bs_size_te Unexecuted instantiation: pixel.c:bs_size_te Unexecuted instantiation: macroblock.c:bs_size_te Unexecuted instantiation: frame.c:bs_size_te Unexecuted instantiation: dct.c:bs_size_te Unexecuted instantiation: cabac.c:bs_size_te Unexecuted instantiation: common.c:bs_size_te Unexecuted instantiation: set.c:bs_size_te Unexecuted instantiation: quant.c:bs_size_te Unexecuted instantiation: deblock.c:bs_size_te Unexecuted instantiation: vlc.c:bs_size_te Unexecuted instantiation: mvpred.c:bs_size_te Unexecuted instantiation: analyse.c:bs_size_te Unexecuted instantiation: me.c:bs_size_te Unexecuted instantiation: ratecontrol.c:bs_size_te Unexecuted instantiation: cavlc.c:bs_size_te Unexecuted instantiation: rectangle.c:bs_size_te |
308 | | |
309 | | #endif |