Coverage Report

Created: 2026-10-28 06:14

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
180
#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
180
{
88
180
    int offset = ((intptr_t)p_data & 3);
89
180
    s->p       = s->p_start = (uint8_t*)p_data - offset;
90
180
    s->p_end   = (uint8_t*)p_data + i_data;
91
180
    s->i_left  = (WORD_SIZE - offset)*8;
92
180
    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
180
    else
98
180
        s->cur_bits = 0;
99
180
}
Unexecuted instantiation: bitstream.c:bs_init
encoder.c:bs_init
Line
Count
Source
87
180
{
88
180
    int offset = ((intptr_t)p_data & 3);
89
180
    s->p       = s->p_start = (uint8_t*)p_data - offset;
90
180
    s->p_end   = (uint8_t*)p_data + i_data;
91
180
    s->i_left  = (WORD_SIZE - offset)*8;
92
180
    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
180
    else
98
180
        s->cur_bits = 0;
99
180
}
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
47.2k
{
102
47.2k
    return( 8 * (s->p - s->p_start) + (WORD_SIZE*8) - s->i_left );
103
47.2k
}
Unexecuted instantiation: bitstream.c:bs_pos
encoder.c:bs_pos
Line
Count
Source
101
47.2k
{
102
47.2k
    return( 8 * (s->p - s->p_start) + (WORD_SIZE*8) - s->i_left );
103
47.2k
}
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
720
{
108
720
    M32( s->p ) = endian_fix32( s->cur_bits << (s->i_left&31) );
109
720
    s->p += WORD_SIZE - (s->i_left >> 3);
110
720
    s->i_left = WORD_SIZE*8;
111
720
}
Unexecuted instantiation: bitstream.c:bs_flush
encoder.c:bs_flush
Line
Count
Source
107
180
{
108
180
    M32( s->p ) = endian_fix32( s->cur_bits << (s->i_left&31) );
109
180
    s->p += WORD_SIZE - (s->i_left >> 3);
110
180
    s->i_left = WORD_SIZE*8;
111
180
}
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
540
{
108
540
    M32( s->p ) = endian_fix32( s->cur_bits << (s->i_left&31) );
109
540
    s->p += WORD_SIZE - (s->i_left >> 3);
110
540
    s->i_left = WORD_SIZE*8;
111
540
}
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
720
{
115
720
    int offset = ((intptr_t)s->p & 3);
116
720
    if( offset )
117
471
    {
118
471
        s->p       = (uint8_t*)s->p - offset;
119
471
        s->i_left  = (WORD_SIZE - offset)*8;
120
471
        s->cur_bits = endian_fix32( M32(s->p) );
121
471
        s->cur_bits >>= (4-offset)*8;
122
471
    }
123
720
}
Unexecuted instantiation: bitstream.c:bs_realign
encoder.c:bs_realign
Line
Count
Source
114
180
{
115
180
    int offset = ((intptr_t)s->p & 3);
116
180
    if( offset )
117
148
    {
118
148
        s->p       = (uint8_t*)s->p - offset;
119
148
        s->i_left  = (WORD_SIZE - offset)*8;
120
148
        s->cur_bits = endian_fix32( M32(s->p) );
121
148
        s->cur_bits >>= (4-offset)*8;
122
148
    }
123
180
}
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
540
{
115
540
    int offset = ((intptr_t)s->p & 3);
116
540
    if( offset )
117
323
    {
118
323
        s->p       = (uint8_t*)s->p - offset;
119
323
        s->i_left  = (WORD_SIZE - offset)*8;
120
323
        s->cur_bits = endian_fix32( M32(s->p) );
121
323
        s->cur_bits >>= (4-offset)*8;
122
323
    }
123
540
}
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
122k
{
127
122k
    if( WORD_SIZE == 8 )
128
122k
    {
129
122k
        s->cur_bits = (s->cur_bits << i_count) | i_bits;
130
122k
        s->i_left -= i_count;
131
122k
        if( s->i_left <= 32 )
132
28.5k
        {
133
#if WORDS_BIGENDIAN
134
            M32( s->p ) = s->cur_bits >> (32 - s->i_left);
135
#else
136
28.5k
            M32( s->p ) = endian_fix( s->cur_bits << s->i_left );
137
28.5k
#endif
138
28.5k
            s->i_left += 32;
139
28.5k
            s->p += 4;
140
28.5k
        }
141
122k
    }
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
122k
}
Unexecuted instantiation: bitstream.c:bs_write
encoder.c:bs_write
Line
Count
Source
126
2.72k
{
127
2.72k
    if( WORD_SIZE == 8 )
128
2.72k
    {
129
2.72k
        s->cur_bits = (s->cur_bits << i_count) | i_bits;
130
2.72k
        s->i_left -= i_count;
131
2.72k
        if( s->i_left <= 32 )
132
157
        {
133
#if WORDS_BIGENDIAN
134
            M32( s->p ) = s->cur_bits >> (32 - s->i_left);
135
#else
136
157
            M32( s->p ) = endian_fix( s->cur_bits << s->i_left );
137
157
#endif
138
157
            s->i_left += 32;
139
157
            s->p += 4;
140
157
        }
141
2.72k
    }
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.72k
}
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
120k
{
127
120k
    if( WORD_SIZE == 8 )
128
120k
    {
129
120k
        s->cur_bits = (s->cur_bits << i_count) | i_bits;
130
120k
        s->i_left -= i_count;
131
120k
        if( s->i_left <= 32 )
132
28.3k
        {
133
#if WORDS_BIGENDIAN
134
            M32( s->p ) = s->cur_bits >> (32 - s->i_left);
135
#else
136
28.3k
            M32( s->p ) = endian_fix( s->cur_bits << s->i_left );
137
28.3k
#endif
138
28.3k
            s->i_left += 32;
139
28.3k
            s->p += 4;
140
28.3k
        }
141
120k
    }
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
120k
}
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
360
{
165
360
    bs_write( s, 16, i_bits >> 16 );
166
360
    bs_write( s, 16, i_bits );
167
360
}
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
360
{
165
360
    bs_write( s, 16, i_bits >> 16 );
166
360
    bs_write( s, 16, i_bits );
167
360
}
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
6.04k
{
171
6.04k
    s->cur_bits <<= 1;
172
6.04k
    s->cur_bits |= i_bit;
173
6.04k
    s->i_left--;
174
6.04k
    if( s->i_left == WORD_SIZE*8-32 )
175
141
    {
176
141
        M32( s->p ) = endian_fix32( s->cur_bits );
177
141
        s->p += 4;
178
141
        s->i_left = WORD_SIZE*8;
179
141
    }
180
6.04k
}
Unexecuted instantiation: bitstream.c:bs_write1
encoder.c:bs_write1
Line
Count
Source
170
360
{
171
360
    s->cur_bits <<= 1;
172
360
    s->cur_bits |= i_bit;
173
360
    s->i_left--;
174
360
    if( s->i_left == WORD_SIZE*8-32 )
175
12
    {
176
12
        M32( s->p ) = endian_fix32( s->cur_bits );
177
12
        s->p += 4;
178
12
        s->i_left = WORD_SIZE*8;
179
12
    }
180
360
}
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.68k
{
171
5.68k
    s->cur_bits <<= 1;
172
5.68k
    s->cur_bits |= i_bit;
173
5.68k
    s->i_left--;
174
5.68k
    if( s->i_left == WORD_SIZE*8-32 )
175
129
    {
176
129
        M32( s->p ) = endian_fix32( s->cur_bits );
177
129
        s->p += 4;
178
129
        s->i_left = WORD_SIZE*8;
179
129
    }
180
5.68k
}
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
180
{
189
180
    bs_write( s, s->i_left&7, (1 << (s->i_left&7)) - 1 );
190
180
    bs_flush( s );
191
180
}
Unexecuted instantiation: bitstream.c:bs_align_1
encoder.c:bs_align_1
Line
Count
Source
188
180
{
189
180
    bs_write( s, s->i_left&7, (1 << (s->i_left&7)) - 1 );
190
180
    bs_flush( s );
191
180
}
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.87k
{
223
4.87k
    int size = 0;
224
4.87k
    int tmp = ++val;
225
4.87k
    if( tmp >= 0x10000 )
226
0
    {
227
0
        size = 32;
228
0
        tmp >>= 16;
229
0
    }
230
4.87k
    if( tmp >= 0x100 )
231
0
    {
232
0
        size += 16;
233
0
        tmp >>= 8;
234
0
    }
235
4.87k
    size += x264_ue_size_tab[tmp];
236
4.87k
    bs_write( s, size>>1, 0 );
237
4.87k
    bs_write( s, (size>>1)+1, val );
238
4.87k
}
Unexecuted instantiation: bitstream.c:bs_write_ue_big
encoder.c:bs_write_ue_big
Line
Count
Source
222
900
{
223
900
    int size = 0;
224
900
    int tmp = ++val;
225
900
    if( tmp >= 0x10000 )
226
0
    {
227
0
        size = 32;
228
0
        tmp >>= 16;
229
0
    }
230
900
    if( tmp >= 0x100 )
231
0
    {
232
0
        size += 16;
233
0
        tmp >>= 8;
234
0
    }
235
900
    size += x264_ue_size_tab[tmp];
236
900
    bs_write( s, size>>1, 0 );
237
900
    bs_write( s, (size>>1)+1, val );
238
900
}
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.97k
{
223
3.97k
    int size = 0;
224
3.97k
    int tmp = ++val;
225
3.97k
    if( tmp >= 0x10000 )
226
0
    {
227
0
        size = 32;
228
0
        tmp >>= 16;
229
0
    }
230
3.97k
    if( tmp >= 0x100 )
231
0
    {
232
0
        size += 16;
233
0
        tmp >>= 8;
234
0
    }
235
3.97k
    size += x264_ue_size_tab[tmp];
236
3.97k
    bs_write( s, size>>1, 0 );
237
3.97k
    bs_write( s, (size>>1)+1, val );
238
3.97k
}
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
974
{
248
974
    int size = 0;
249
    /* Faster than (val <= 0 ? -val*2+1 : val*2) */
250
    /* 4 instructions on x86, 3 on ARM */
251
974
    int tmp = 1 - val*2;
252
974
    if( tmp < 0 ) tmp = val*2;
253
974
    val = tmp;
254
255
974
    if( tmp >= 0x100 )
256
0
    {
257
0
        size = 16;
258
0
        tmp >>= 8;
259
0
    }
260
974
    size += x264_ue_size_tab[tmp];
261
974
    bs_write( s, size, val );
262
974
}
Unexecuted instantiation: bitstream.c:bs_write_se
encoder.c:bs_write_se
Line
Count
Source
247
434
{
248
434
    int size = 0;
249
    /* Faster than (val <= 0 ? -val*2+1 : val*2) */
250
    /* 4 instructions on x86, 3 on ARM */
251
434
    int tmp = 1 - val*2;
252
434
    if( tmp < 0 ) tmp = val*2;
253
434
    val = tmp;
254
255
434
    if( tmp >= 0x100 )
256
0
    {
257
0
        size = 16;
258
0
        tmp >>= 8;
259
0
    }
260
434
    size += x264_ue_size_tab[tmp];
261
434
    bs_write( s, size, val );
262
434
}
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
540
{
248
540
    int size = 0;
249
    /* Faster than (val <= 0 ? -val*2+1 : val*2) */
250
    /* 4 instructions on x86, 3 on ARM */
251
540
    int tmp = 1 - val*2;
252
540
    if( tmp < 0 ) tmp = val*2;
253
540
    val = tmp;
254
255
540
    if( tmp >= 0x100 )
256
0
    {
257
0
        size = 16;
258
0
        tmp >>= 8;
259
0
    }
260
540
    size += x264_ue_size_tab[tmp];
261
540
    bs_write( s, size, val );
262
540
}
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
540
{
274
540
    bs_write1( s, 1 );
275
540
    bs_write( s, s->i_left&7, 0  );
276
540
}
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
540
{
274
540
    bs_write1( s, 1 );
275
540
    bs_write( s, s->i_left&7, 0  );
276
540
}
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
166k
{
280
166k
    return x264_ue_size_tab[val+1];
281
166k
}
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
166k
{
280
166k
    return x264_ue_size_tab[val+1];
281
166k
}
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.8k
{
285
31.8k
    if( val < 255 )
286
30.4k
        return x264_ue_size_tab[val+1];
287
1.40k
    else
288
1.40k
        return x264_ue_size_tab[(val+1)>>8] + 16;
289
31.8k
}
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.8k
{
285
31.8k
    if( val < 255 )
286
30.4k
        return x264_ue_size_tab[val+1];
287
1.40k
    else
288
1.40k
        return x264_ue_size_tab[(val+1)>>8] + 16;
289
31.8k
}
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.18M
{
303
1.18M
    if( x == 1 )
304
593k
        return 1;
305
593k
    else //if( x > 1 )
306
593k
        return x264_ue_size_tab[val+1];
307
1.18M
}
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.18M
{
303
1.18M
    if( x == 1 )
304
593k
        return 1;
305
593k
    else //if( x > 1 )
306
593k
        return x264_ue_size_tab[val+1];
307
1.18M
}
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