Coverage Report

Created: 2026-06-10 07:00

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/work/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
164
#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
164
{
88
164
    int offset = ((intptr_t)p_data & 3);
89
164
    s->p       = s->p_start = (uint8_t*)p_data - offset;
90
164
    s->p_end   = (uint8_t*)p_data + i_data;
91
164
    s->i_left  = (WORD_SIZE - offset)*8;
92
164
    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
164
    else
98
164
        s->cur_bits = 0;
99
164
}
Unexecuted instantiation: bitstream.c:bs_init
encoder.c:bs_init
Line
Count
Source
87
164
{
88
164
    int offset = ((intptr_t)p_data & 3);
89
164
    s->p       = s->p_start = (uint8_t*)p_data - offset;
90
164
    s->p_end   = (uint8_t*)p_data + i_data;
91
164
    s->i_left  = (WORD_SIZE - offset)*8;
92
164
    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
164
    else
98
164
        s->cur_bits = 0;
99
164
}
Unexecuted instantiation: lookahead.c:bs_init
Unexecuted instantiation: threadpool.c:bs_init
Unexecuted instantiation: opencl.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: slicetype-cl.c:bs_init
Unexecuted instantiation: rectangle.c:bs_init
100
static inline int bs_pos( bs_t *s )
101
43.7k
{
102
43.7k
    return( 8 * (s->p - s->p_start) + (WORD_SIZE*8) - s->i_left );
103
43.7k
}
Unexecuted instantiation: bitstream.c:bs_pos
encoder.c:bs_pos
Line
Count
Source
101
43.7k
{
102
43.7k
    return( 8 * (s->p - s->p_start) + (WORD_SIZE*8) - s->i_left );
103
43.7k
}
Unexecuted instantiation: lookahead.c:bs_pos
Unexecuted instantiation: threadpool.c:bs_pos
Unexecuted instantiation: opencl.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: slicetype-cl.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
656
{
108
656
    M32( s->p ) = endian_fix32( s->cur_bits << (s->i_left&31) );
109
656
    s->p += WORD_SIZE - (s->i_left >> 3);
110
656
    s->i_left = WORD_SIZE*8;
111
656
}
Unexecuted instantiation: bitstream.c:bs_flush
encoder.c:bs_flush
Line
Count
Source
107
164
{
108
164
    M32( s->p ) = endian_fix32( s->cur_bits << (s->i_left&31) );
109
164
    s->p += WORD_SIZE - (s->i_left >> 3);
110
164
    s->i_left = WORD_SIZE*8;
111
164
}
Unexecuted instantiation: lookahead.c:bs_flush
Unexecuted instantiation: threadpool.c:bs_flush
Unexecuted instantiation: opencl.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
set.c:bs_flush
Line
Count
Source
107
492
{
108
492
    M32( s->p ) = endian_fix32( s->cur_bits << (s->i_left&31) );
109
492
    s->p += WORD_SIZE - (s->i_left >> 3);
110
492
    s->i_left = WORD_SIZE*8;
111
492
}
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: slicetype-cl.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
656
{
115
656
    int offset = ((intptr_t)s->p & 3);
116
656
    if( offset )
117
403
    {
118
403
        s->p       = (uint8_t*)s->p - offset;
119
403
        s->i_left  = (WORD_SIZE - offset)*8;
120
403
        s->cur_bits = endian_fix32( M32(s->p) );
121
403
        s->cur_bits >>= (4-offset)*8;
122
403
    }
123
656
}
Unexecuted instantiation: bitstream.c:bs_realign
encoder.c:bs_realign
Line
Count
Source
114
164
{
115
164
    int offset = ((intptr_t)s->p & 3);
116
164
    if( offset )
117
130
    {
118
130
        s->p       = (uint8_t*)s->p - offset;
119
130
        s->i_left  = (WORD_SIZE - offset)*8;
120
130
        s->cur_bits = endian_fix32( M32(s->p) );
121
130
        s->cur_bits >>= (4-offset)*8;
122
130
    }
123
164
}
Unexecuted instantiation: lookahead.c:bs_realign
Unexecuted instantiation: threadpool.c:bs_realign
Unexecuted instantiation: opencl.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
set.c:bs_realign
Line
Count
Source
114
492
{
115
492
    int offset = ((intptr_t)s->p & 3);
116
492
    if( offset )
117
273
    {
118
273
        s->p       = (uint8_t*)s->p - offset;
119
273
        s->i_left  = (WORD_SIZE - offset)*8;
120
273
        s->cur_bits = endian_fix32( M32(s->p) );
121
273
        s->cur_bits >>= (4-offset)*8;
122
273
    }
123
492
}
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: slicetype-cl.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
111k
{
127
111k
    if( WORD_SIZE == 8 )
128
111k
    {
129
111k
        s->cur_bits = (s->cur_bits << i_count) | i_bits;
130
111k
        s->i_left -= i_count;
131
111k
        if( s->i_left <= 32 )
132
25.9k
        {
133
#if WORDS_BIGENDIAN
134
            M32( s->p ) = s->cur_bits >> (32 - s->i_left);
135
#else
136
25.9k
            M32( s->p ) = endian_fix( s->cur_bits << s->i_left );
137
25.9k
#endif
138
25.9k
            s->i_left += 32;
139
25.9k
            s->p += 4;
140
25.9k
        }
141
111k
    }
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
111k
}
Unexecuted instantiation: bitstream.c:bs_write
encoder.c:bs_write
Line
Count
Source
126
2.47k
{
127
2.47k
    if( WORD_SIZE == 8 )
128
2.47k
    {
129
2.47k
        s->cur_bits = (s->cur_bits << i_count) | i_bits;
130
2.47k
        s->i_left -= i_count;
131
2.47k
        if( s->i_left <= 32 )
132
145
        {
133
#if WORDS_BIGENDIAN
134
            M32( s->p ) = s->cur_bits >> (32 - s->i_left);
135
#else
136
145
            M32( s->p ) = endian_fix( s->cur_bits << s->i_left );
137
145
#endif
138
145
            s->i_left += 32;
139
145
            s->p += 4;
140
145
        }
141
2.47k
    }
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
2.47k
}
Unexecuted instantiation: lookahead.c:bs_write
Unexecuted instantiation: threadpool.c:bs_write
Unexecuted instantiation: opencl.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
set.c:bs_write
Line
Count
Source
126
109k
{
127
109k
    if( WORD_SIZE == 8 )
128
109k
    {
129
109k
        s->cur_bits = (s->cur_bits << i_count) | i_bits;
130
109k
        s->i_left -= i_count;
131
109k
        if( s->i_left <= 32 )
132
25.7k
        {
133
#if WORDS_BIGENDIAN
134
            M32( s->p ) = s->cur_bits >> (32 - s->i_left);
135
#else
136
25.7k
            M32( s->p ) = endian_fix( s->cur_bits << s->i_left );
137
25.7k
#endif
138
25.7k
            s->i_left += 32;
139
25.7k
            s->p += 4;
140
25.7k
        }
141
109k
    }
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
109k
}
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: slicetype-cl.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
328
{
165
328
    bs_write( s, 16, i_bits >> 16 );
166
328
    bs_write( s, 16, i_bits );
167
328
}
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: opencl.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
set.c:bs_write32
Line
Count
Source
164
328
{
165
328
    bs_write( s, 16, i_bits >> 16 );
166
328
    bs_write( s, 16, i_bits );
167
328
}
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: slicetype-cl.c:bs_write32
Unexecuted instantiation: rectangle.c:bs_write32
168
169
static inline void bs_write1( bs_t *s, uint32_t i_bit )
170
5.18k
{
171
5.18k
    s->cur_bits <<= 1;
172
5.18k
    s->cur_bits |= i_bit;
173
5.18k
    s->i_left--;
174
5.18k
    if( s->i_left == WORD_SIZE*8-32 )
175
177
    {
176
177
        M32( s->p ) = endian_fix32( s->cur_bits );
177
177
        s->p += 4;
178
177
        s->i_left = WORD_SIZE*8;
179
177
    }
180
5.18k
}
Unexecuted instantiation: bitstream.c:bs_write1
encoder.c:bs_write1
Line
Count
Source
170
328
{
171
328
    s->cur_bits <<= 1;
172
328
    s->cur_bits |= i_bit;
173
328
    s->i_left--;
174
328
    if( s->i_left == WORD_SIZE*8-32 )
175
24
    {
176
24
        M32( s->p ) = endian_fix32( s->cur_bits );
177
24
        s->p += 4;
178
24
        s->i_left = WORD_SIZE*8;
179
24
    }
180
328
}
Unexecuted instantiation: lookahead.c:bs_write1
Unexecuted instantiation: threadpool.c:bs_write1
Unexecuted instantiation: opencl.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
set.c:bs_write1
Line
Count
Source
170
4.85k
{
171
4.85k
    s->cur_bits <<= 1;
172
4.85k
    s->cur_bits |= i_bit;
173
4.85k
    s->i_left--;
174
4.85k
    if( s->i_left == WORD_SIZE*8-32 )
175
153
    {
176
153
        M32( s->p ) = endian_fix32( s->cur_bits );
177
153
        s->p += 4;
178
153
        s->i_left = WORD_SIZE*8;
179
153
    }
180
4.85k
}
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: slicetype-cl.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: opencl.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: slicetype-cl.c:bs_align_0
Unexecuted instantiation: rectangle.c:bs_align_0
187
static inline void bs_align_1( bs_t *s )
188
164
{
189
164
    bs_write( s, s->i_left&7, (1 << (s->i_left&7)) - 1 );
190
164
    bs_flush( s );
191
164
}
Unexecuted instantiation: bitstream.c:bs_align_1
encoder.c:bs_align_1
Line
Count
Source
188
164
{
189
164
    bs_write( s, s->i_left&7, (1 << (s->i_left&7)) - 1 );
190
164
    bs_flush( s );
191
164
}
Unexecuted instantiation: lookahead.c:bs_align_1
Unexecuted instantiation: threadpool.c:bs_align_1
Unexecuted instantiation: opencl.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: slicetype-cl.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: opencl.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: slicetype-cl.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
4.47k
{
223
4.47k
    int size = 0;
224
4.47k
    int tmp = ++val;
225
4.47k
    if( tmp >= 0x10000 )
226
0
    {
227
0
        size = 32;
228
0
        tmp >>= 16;
229
0
    }
230
4.47k
    if( tmp >= 0x100 )
231
0
    {
232
0
        size += 16;
233
0
        tmp >>= 8;
234
0
    }
235
4.47k
    size += x264_ue_size_tab[tmp];
236
4.47k
    bs_write( s, size>>1, 0 );
237
4.47k
    bs_write( s, (size>>1)+1, val );
238
4.47k
}
Unexecuted instantiation: bitstream.c:bs_write_ue_big
encoder.c:bs_write_ue_big
Line
Count
Source
222
820
{
223
820
    int size = 0;
224
820
    int tmp = ++val;
225
820
    if( tmp >= 0x10000 )
226
0
    {
227
0
        size = 32;
228
0
        tmp >>= 16;
229
0
    }
230
820
    if( tmp >= 0x100 )
231
0
    {
232
0
        size += 16;
233
0
        tmp >>= 8;
234
0
    }
235
820
    size += x264_ue_size_tab[tmp];
236
820
    bs_write( s, size>>1, 0 );
237
820
    bs_write( s, (size>>1)+1, val );
238
820
}
Unexecuted instantiation: lookahead.c:bs_write_ue_big
Unexecuted instantiation: threadpool.c:bs_write_ue_big
Unexecuted instantiation: opencl.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
set.c:bs_write_ue_big
Line
Count
Source
222
3.65k
{
223
3.65k
    int size = 0;
224
3.65k
    int tmp = ++val;
225
3.65k
    if( tmp >= 0x10000 )
226
0
    {
227
0
        size = 32;
228
0
        tmp >>= 16;
229
0
    }
230
3.65k
    if( tmp >= 0x100 )
231
0
    {
232
0
        size += 16;
233
0
        tmp >>= 8;
234
0
    }
235
3.65k
    size += x264_ue_size_tab[tmp];
236
3.65k
    bs_write( s, size>>1, 0 );
237
3.65k
    bs_write( s, (size>>1)+1, val );
238
3.65k
}
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: slicetype-cl.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: opencl.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: slicetype-cl.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
886
{
248
886
    int size = 0;
249
    /* Faster than (val <= 0 ? -val*2+1 : val*2) */
250
    /* 4 instructions on x86, 3 on ARM */
251
886
    int tmp = 1 - val*2;
252
886
    if( tmp < 0 ) tmp = val*2;
253
886
    val = tmp;
254
255
886
    if( tmp >= 0x100 )
256
0
    {
257
0
        size = 16;
258
0
        tmp >>= 8;
259
0
    }
260
886
    size += x264_ue_size_tab[tmp];
261
886
    bs_write( s, size, val );
262
886
}
Unexecuted instantiation: bitstream.c:bs_write_se
encoder.c:bs_write_se
Line
Count
Source
247
394
{
248
394
    int size = 0;
249
    /* Faster than (val <= 0 ? -val*2+1 : val*2) */
250
    /* 4 instructions on x86, 3 on ARM */
251
394
    int tmp = 1 - val*2;
252
394
    if( tmp < 0 ) tmp = val*2;
253
394
    val = tmp;
254
255
394
    if( tmp >= 0x100 )
256
0
    {
257
0
        size = 16;
258
0
        tmp >>= 8;
259
0
    }
260
394
    size += x264_ue_size_tab[tmp];
261
394
    bs_write( s, size, val );
262
394
}
Unexecuted instantiation: lookahead.c:bs_write_se
Unexecuted instantiation: threadpool.c:bs_write_se
Unexecuted instantiation: opencl.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
set.c:bs_write_se
Line
Count
Source
247
492
{
248
492
    int size = 0;
249
    /* Faster than (val <= 0 ? -val*2+1 : val*2) */
250
    /* 4 instructions on x86, 3 on ARM */
251
492
    int tmp = 1 - val*2;
252
492
    if( tmp < 0 ) tmp = val*2;
253
492
    val = tmp;
254
255
492
    if( tmp >= 0x100 )
256
0
    {
257
0
        size = 16;
258
0
        tmp >>= 8;
259
0
    }
260
492
    size += x264_ue_size_tab[tmp];
261
492
    bs_write( s, size, val );
262
492
}
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: slicetype-cl.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: opencl.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: slicetype-cl.c:bs_write_te
Unexecuted instantiation: rectangle.c:bs_write_te
271
272
static inline void bs_rbsp_trailing( bs_t *s )
273
492
{
274
492
    bs_write1( s, 1 );
275
492
    bs_write( s, s->i_left&7, 0  );
276
492
}
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: opencl.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
set.c:bs_rbsp_trailing
Line
Count
Source
273
492
{
274
492
    bs_write1( s, 1 );
275
492
    bs_write( s, s->i_left&7, 0  );
276
492
}
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: slicetype-cl.c:bs_rbsp_trailing
Unexecuted instantiation: rectangle.c:bs_rbsp_trailing
277
278
static ALWAYS_INLINE int bs_size_ue( unsigned int val )
279
154k
{
280
154k
    return x264_ue_size_tab[val+1];
281
154k
}
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: opencl.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
analyse.c:bs_size_ue
Line
Count
Source
279
154k
{
280
154k
    return x264_ue_size_tab[val+1];
281
154k
}
Unexecuted instantiation: me.c:bs_size_ue
Unexecuted instantiation: ratecontrol.c:bs_size_ue
Unexecuted instantiation: cavlc.c:bs_size_ue
Unexecuted instantiation: slicetype-cl.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
29.4k
{
285
29.4k
    if( val < 255 )
286
28.2k
        return x264_ue_size_tab[val+1];
287
1.13k
    else
288
1.13k
        return x264_ue_size_tab[(val+1)>>8] + 16;
289
29.4k
}
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: opencl.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
analyse.c:bs_size_ue_big
Line
Count
Source
284
29.4k
{
285
29.4k
    if( val < 255 )
286
28.2k
        return x264_ue_size_tab[val+1];
287
1.13k
    else
288
1.13k
        return x264_ue_size_tab[(val+1)>>8] + 16;
289
29.4k
}
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: slicetype-cl.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: opencl.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: slicetype-cl.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
1.07M
{
303
1.07M
    if( x == 1 )
304
537k
        return 1;
305
537k
    else //if( x > 1 )
306
537k
        return x264_ue_size_tab[val+1];
307
1.07M
}
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: opencl.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
analyse.c:bs_size_te
Line
Count
Source
302
1.07M
{
303
1.07M
    if( x == 1 )
304
537k
        return 1;
305
537k
    else //if( x > 1 )
306
537k
        return x264_ue_size_tab[val+1];
307
1.07M
}
Unexecuted instantiation: me.c:bs_size_te
Unexecuted instantiation: ratecontrol.c:bs_size_te
Unexecuted instantiation: cavlc.c:bs_size_te
Unexecuted instantiation: slicetype-cl.c:bs_size_te
Unexecuted instantiation: rectangle.c:bs_size_te
308
309
#endif