Coverage Report

Created: 2026-05-16 06:41

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
169
#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
169
{
88
169
    int offset = ((intptr_t)p_data & 3);
89
169
    s->p       = s->p_start = (uint8_t*)p_data - offset;
90
169
    s->p_end   = (uint8_t*)p_data + i_data;
91
169
    s->i_left  = (WORD_SIZE - offset)*8;
92
169
    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
169
    else
98
169
        s->cur_bits = 0;
99
169
}
Unexecuted instantiation: bitstream.c:bs_init
encoder.c:bs_init
Line
Count
Source
87
169
{
88
169
    int offset = ((intptr_t)p_data & 3);
89
169
    s->p       = s->p_start = (uint8_t*)p_data - offset;
90
169
    s->p_end   = (uint8_t*)p_data + i_data;
91
169
    s->i_left  = (WORD_SIZE - offset)*8;
92
169
    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
169
    else
98
169
        s->cur_bits = 0;
99
169
}
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
44.4k
{
102
44.4k
    return( 8 * (s->p - s->p_start) + (WORD_SIZE*8) - s->i_left );
103
44.4k
}
Unexecuted instantiation: bitstream.c:bs_pos
encoder.c:bs_pos
Line
Count
Source
101
44.4k
{
102
44.4k
    return( 8 * (s->p - s->p_start) + (WORD_SIZE*8) - s->i_left );
103
44.4k
}
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
676
{
108
676
    M32( s->p ) = endian_fix32( s->cur_bits << (s->i_left&31) );
109
676
    s->p += WORD_SIZE - (s->i_left >> 3);
110
676
    s->i_left = WORD_SIZE*8;
111
676
}
Unexecuted instantiation: bitstream.c:bs_flush
encoder.c:bs_flush
Line
Count
Source
107
169
{
108
169
    M32( s->p ) = endian_fix32( s->cur_bits << (s->i_left&31) );
109
169
    s->p += WORD_SIZE - (s->i_left >> 3);
110
169
    s->i_left = WORD_SIZE*8;
111
169
}
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
507
{
108
507
    M32( s->p ) = endian_fix32( s->cur_bits << (s->i_left&31) );
109
507
    s->p += WORD_SIZE - (s->i_left >> 3);
110
507
    s->i_left = WORD_SIZE*8;
111
507
}
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
676
{
115
676
    int offset = ((intptr_t)s->p & 3);
116
676
    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
676
}
Unexecuted instantiation: bitstream.c:bs_realign
encoder.c:bs_realign
Line
Count
Source
114
169
{
115
169
    int offset = ((intptr_t)s->p & 3);
116
169
    if( offset )
117
132
    {
118
132
        s->p       = (uint8_t*)s->p - offset;
119
132
        s->i_left  = (WORD_SIZE - offset)*8;
120
132
        s->cur_bits = endian_fix32( M32(s->p) );
121
132
        s->cur_bits >>= (4-offset)*8;
122
132
    }
123
169
}
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
507
{
115
507
    int offset = ((intptr_t)s->p & 3);
116
507
    if( offset )
117
271
    {
118
271
        s->p       = (uint8_t*)s->p - offset;
119
271
        s->i_left  = (WORD_SIZE - offset)*8;
120
271
        s->cur_bits = endian_fix32( M32(s->p) );
121
271
        s->cur_bits >>= (4-offset)*8;
122
271
    }
123
507
}
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
114k
{
127
114k
    if( WORD_SIZE == 8 )
128
114k
    {
129
114k
        s->cur_bits = (s->cur_bits << i_count) | i_bits;
130
114k
        s->i_left -= i_count;
131
114k
        if( s->i_left <= 32 )
132
26.6k
        {
133
#if WORDS_BIGENDIAN
134
            M32( s->p ) = s->cur_bits >> (32 - s->i_left);
135
#else
136
26.6k
            M32( s->p ) = endian_fix( s->cur_bits << s->i_left );
137
26.6k
#endif
138
26.6k
            s->i_left += 32;
139
26.6k
            s->p += 4;
140
26.6k
        }
141
114k
    }
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
114k
}
Unexecuted instantiation: bitstream.c:bs_write
encoder.c:bs_write
Line
Count
Source
126
2.54k
{
127
2.54k
    if( WORD_SIZE == 8 )
128
2.54k
    {
129
2.54k
        s->cur_bits = (s->cur_bits << i_count) | i_bits;
130
2.54k
        s->i_left -= i_count;
131
2.54k
        if( s->i_left <= 32 )
132
151
        {
133
#if WORDS_BIGENDIAN
134
            M32( s->p ) = s->cur_bits >> (32 - s->i_left);
135
#else
136
151
            M32( s->p ) = endian_fix( s->cur_bits << s->i_left );
137
151
#endif
138
151
            s->i_left += 32;
139
151
            s->p += 4;
140
151
        }
141
2.54k
    }
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.54k
}
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
112k
{
127
112k
    if( WORD_SIZE == 8 )
128
112k
    {
129
112k
        s->cur_bits = (s->cur_bits << i_count) | i_bits;
130
112k
        s->i_left -= i_count;
131
112k
        if( s->i_left <= 32 )
132
26.4k
        {
133
#if WORDS_BIGENDIAN
134
            M32( s->p ) = s->cur_bits >> (32 - s->i_left);
135
#else
136
26.4k
            M32( s->p ) = endian_fix( s->cur_bits << s->i_left );
137
26.4k
#endif
138
26.4k
            s->i_left += 32;
139
26.4k
            s->p += 4;
140
26.4k
        }
141
112k
    }
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
112k
}
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
338
{
165
338
    bs_write( s, 16, i_bits >> 16 );
166
338
    bs_write( s, 16, i_bits );
167
338
}
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
338
{
165
338
    bs_write( s, 16, i_bits >> 16 );
166
338
    bs_write( s, 16, i_bits );
167
338
}
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.34k
{
171
5.34k
    s->cur_bits <<= 1;
172
5.34k
    s->cur_bits |= i_bit;
173
5.34k
    s->i_left--;
174
5.34k
    if( s->i_left == WORD_SIZE*8-32 )
175
176
    {
176
176
        M32( s->p ) = endian_fix32( s->cur_bits );
177
176
        s->p += 4;
178
176
        s->i_left = WORD_SIZE*8;
179
176
    }
180
5.34k
}
Unexecuted instantiation: bitstream.c:bs_write1
encoder.c:bs_write1
Line
Count
Source
170
338
{
171
338
    s->cur_bits <<= 1;
172
338
    s->cur_bits |= i_bit;
173
338
    s->i_left--;
174
338
    if( s->i_left == WORD_SIZE*8-32 )
175
23
    {
176
23
        M32( s->p ) = endian_fix32( s->cur_bits );
177
23
        s->p += 4;
178
23
        s->i_left = WORD_SIZE*8;
179
23
    }
180
338
}
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
5.00k
{
171
5.00k
    s->cur_bits <<= 1;
172
5.00k
    s->cur_bits |= i_bit;
173
5.00k
    s->i_left--;
174
5.00k
    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
5.00k
}
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
169
{
189
169
    bs_write( s, s->i_left&7, (1 << (s->i_left&7)) - 1 );
190
169
    bs_flush( s );
191
169
}
Unexecuted instantiation: bitstream.c:bs_align_1
encoder.c:bs_align_1
Line
Count
Source
188
169
{
189
169
    bs_write( s, s->i_left&7, (1 << (s->i_left&7)) - 1 );
190
169
    bs_flush( s );
191
169
}
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.59k
{
223
4.59k
    int size = 0;
224
4.59k
    int tmp = ++val;
225
4.59k
    if( tmp >= 0x10000 )
226
0
    {
227
0
        size = 32;
228
0
        tmp >>= 16;
229
0
    }
230
4.59k
    if( tmp >= 0x100 )
231
0
    {
232
0
        size += 16;
233
0
        tmp >>= 8;
234
0
    }
235
4.59k
    size += x264_ue_size_tab[tmp];
236
4.59k
    bs_write( s, size>>1, 0 );
237
4.59k
    bs_write( s, (size>>1)+1, val );
238
4.59k
}
Unexecuted instantiation: bitstream.c:bs_write_ue_big
encoder.c:bs_write_ue_big
Line
Count
Source
222
845
{
223
845
    int size = 0;
224
845
    int tmp = ++val;
225
845
    if( tmp >= 0x10000 )
226
0
    {
227
0
        size = 32;
228
0
        tmp >>= 16;
229
0
    }
230
845
    if( tmp >= 0x100 )
231
0
    {
232
0
        size += 16;
233
0
        tmp >>= 8;
234
0
    }
235
845
    size += x264_ue_size_tab[tmp];
236
845
    bs_write( s, size>>1, 0 );
237
845
    bs_write( s, (size>>1)+1, val );
238
845
}
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.75k
{
223
3.75k
    int size = 0;
224
3.75k
    int tmp = ++val;
225
3.75k
    if( tmp >= 0x10000 )
226
0
    {
227
0
        size = 32;
228
0
        tmp >>= 16;
229
0
    }
230
3.75k
    if( tmp >= 0x100 )
231
0
    {
232
0
        size += 16;
233
0
        tmp >>= 8;
234
0
    }
235
3.75k
    size += x264_ue_size_tab[tmp];
236
3.75k
    bs_write( s, size>>1, 0 );
237
3.75k
    bs_write( s, (size>>1)+1, val );
238
3.75k
}
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
908
{
248
908
    int size = 0;
249
    /* Faster than (val <= 0 ? -val*2+1 : val*2) */
250
    /* 4 instructions on x86, 3 on ARM */
251
908
    int tmp = 1 - val*2;
252
908
    if( tmp < 0 ) tmp = val*2;
253
908
    val = tmp;
254
255
908
    if( tmp >= 0x100 )
256
0
    {
257
0
        size = 16;
258
0
        tmp >>= 8;
259
0
    }
260
908
    size += x264_ue_size_tab[tmp];
261
908
    bs_write( s, size, val );
262
908
}
Unexecuted instantiation: bitstream.c:bs_write_se
encoder.c:bs_write_se
Line
Count
Source
247
401
{
248
401
    int size = 0;
249
    /* Faster than (val <= 0 ? -val*2+1 : val*2) */
250
    /* 4 instructions on x86, 3 on ARM */
251
401
    int tmp = 1 - val*2;
252
401
    if( tmp < 0 ) tmp = val*2;
253
401
    val = tmp;
254
255
401
    if( tmp >= 0x100 )
256
0
    {
257
0
        size = 16;
258
0
        tmp >>= 8;
259
0
    }
260
401
    size += x264_ue_size_tab[tmp];
261
401
    bs_write( s, size, val );
262
401
}
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
507
{
248
507
    int size = 0;
249
    /* Faster than (val <= 0 ? -val*2+1 : val*2) */
250
    /* 4 instructions on x86, 3 on ARM */
251
507
    int tmp = 1 - val*2;
252
507
    if( tmp < 0 ) tmp = val*2;
253
507
    val = tmp;
254
255
507
    if( tmp >= 0x100 )
256
0
    {
257
0
        size = 16;
258
0
        tmp >>= 8;
259
0
    }
260
507
    size += x264_ue_size_tab[tmp];
261
507
    bs_write( s, size, val );
262
507
}
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
507
{
274
507
    bs_write1( s, 1 );
275
507
    bs_write( s, s->i_left&7, 0  );
276
507
}
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
507
{
274
507
    bs_write1( s, 1 );
275
507
    bs_write( s, s->i_left&7, 0  );
276
507
}
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
156k
{
280
156k
    return x264_ue_size_tab[val+1];
281
156k
}
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
156k
{
280
156k
    return x264_ue_size_tab[val+1];
281
156k
}
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
31.6k
{
285
31.6k
    if( val < 255 )
286
30.4k
        return x264_ue_size_tab[val+1];
287
1.13k
    else
288
1.13k
        return x264_ue_size_tab[(val+1)>>8] + 16;
289
31.6k
}
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
31.6k
{
285
31.6k
    if( val < 255 )
286
30.4k
        return x264_ue_size_tab[val+1];
287
1.13k
    else
288
1.13k
        return x264_ue_size_tab[(val+1)>>8] + 16;
289
31.6k
}
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.08M
{
303
1.08M
    if( x == 1 )
304
542k
        return 1;
305
542k
    else //if( x > 1 )
306
542k
        return x264_ue_size_tab[val+1];
307
1.08M
}
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.08M
{
303
1.08M
    if( x == 1 )
304
542k
        return 1;
305
542k
    else //if( x > 1 )
306
542k
        return x264_ue_size_tab[val+1];
307
1.08M
}
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