Coverage Report

Created: 2026-09-01 06:57

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
166
#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
166
{
88
166
    int offset = ((intptr_t)p_data & 3);
89
166
    s->p       = s->p_start = (uint8_t*)p_data - offset;
90
166
    s->p_end   = (uint8_t*)p_data + i_data;
91
166
    s->i_left  = (WORD_SIZE - offset)*8;
92
166
    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
166
    else
98
166
        s->cur_bits = 0;
99
166
}
Unexecuted instantiation: bitstream.c:bs_init
encoder.c:bs_init
Line
Count
Source
87
166
{
88
166
    int offset = ((intptr_t)p_data & 3);
89
166
    s->p       = s->p_start = (uint8_t*)p_data - offset;
90
166
    s->p_end   = (uint8_t*)p_data + i_data;
91
166
    s->i_left  = (WORD_SIZE - offset)*8;
92
166
    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
166
    else
98
166
        s->cur_bits = 0;
99
166
}
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
42.1k
{
102
42.1k
    return( 8 * (s->p - s->p_start) + (WORD_SIZE*8) - s->i_left );
103
42.1k
}
Unexecuted instantiation: bitstream.c:bs_pos
encoder.c:bs_pos
Line
Count
Source
101
42.1k
{
102
42.1k
    return( 8 * (s->p - s->p_start) + (WORD_SIZE*8) - s->i_left );
103
42.1k
}
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
664
{
108
664
    M32( s->p ) = endian_fix32( s->cur_bits << (s->i_left&31) );
109
664
    s->p += WORD_SIZE - (s->i_left >> 3);
110
664
    s->i_left = WORD_SIZE*8;
111
664
}
Unexecuted instantiation: bitstream.c:bs_flush
encoder.c:bs_flush
Line
Count
Source
107
166
{
108
166
    M32( s->p ) = endian_fix32( s->cur_bits << (s->i_left&31) );
109
166
    s->p += WORD_SIZE - (s->i_left >> 3);
110
166
    s->i_left = WORD_SIZE*8;
111
166
}
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
498
{
108
498
    M32( s->p ) = endian_fix32( s->cur_bits << (s->i_left&31) );
109
498
    s->p += WORD_SIZE - (s->i_left >> 3);
110
498
    s->i_left = WORD_SIZE*8;
111
498
}
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
664
{
115
664
    int offset = ((intptr_t)s->p & 3);
116
664
    if( offset )
117
429
    {
118
429
        s->p       = (uint8_t*)s->p - offset;
119
429
        s->i_left  = (WORD_SIZE - offset)*8;
120
429
        s->cur_bits = endian_fix32( M32(s->p) );
121
429
        s->cur_bits >>= (4-offset)*8;
122
429
    }
123
664
}
Unexecuted instantiation: bitstream.c:bs_realign
encoder.c:bs_realign
Line
Count
Source
114
166
{
115
166
    int offset = ((intptr_t)s->p & 3);
116
166
    if( offset )
117
133
    {
118
133
        s->p       = (uint8_t*)s->p - offset;
119
133
        s->i_left  = (WORD_SIZE - offset)*8;
120
133
        s->cur_bits = endian_fix32( M32(s->p) );
121
133
        s->cur_bits >>= (4-offset)*8;
122
133
    }
123
166
}
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
498
{
115
498
    int offset = ((intptr_t)s->p & 3);
116
498
    if( offset )
117
296
    {
118
296
        s->p       = (uint8_t*)s->p - offset;
119
296
        s->i_left  = (WORD_SIZE - offset)*8;
120
296
        s->cur_bits = endian_fix32( M32(s->p) );
121
296
        s->cur_bits >>= (4-offset)*8;
122
296
    }
123
498
}
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
113k
{
127
113k
    if( WORD_SIZE == 8 )
128
113k
    {
129
113k
        s->cur_bits = (s->cur_bits << i_count) | i_bits;
130
113k
        s->i_left -= i_count;
131
113k
        if( s->i_left <= 32 )
132
26.2k
        {
133
#if WORDS_BIGENDIAN
134
            M32( s->p ) = s->cur_bits >> (32 - s->i_left);
135
#else
136
26.2k
            M32( s->p ) = endian_fix( s->cur_bits << s->i_left );
137
26.2k
#endif
138
26.2k
            s->i_left += 32;
139
26.2k
            s->p += 4;
140
26.2k
        }
141
113k
    }
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
113k
}
Unexecuted instantiation: bitstream.c:bs_write
encoder.c:bs_write
Line
Count
Source
126
2.50k
{
127
2.50k
    if( WORD_SIZE == 8 )
128
2.50k
    {
129
2.50k
        s->cur_bits = (s->cur_bits << i_count) | i_bits;
130
2.50k
        s->i_left -= i_count;
131
2.50k
        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.50k
    }
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.50k
}
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
110k
{
127
110k
    if( WORD_SIZE == 8 )
128
110k
    {
129
110k
        s->cur_bits = (s->cur_bits << i_count) | i_bits;
130
110k
        s->i_left -= i_count;
131
110k
        if( s->i_left <= 32 )
132
26.1k
        {
133
#if WORDS_BIGENDIAN
134
            M32( s->p ) = s->cur_bits >> (32 - s->i_left);
135
#else
136
26.1k
            M32( s->p ) = endian_fix( s->cur_bits << s->i_left );
137
26.1k
#endif
138
26.1k
            s->i_left += 32;
139
26.1k
            s->p += 4;
140
26.1k
        }
141
110k
    }
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
110k
}
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
332
{
165
332
    bs_write( s, 16, i_bits >> 16 );
166
332
    bs_write( s, 16, i_bits );
167
332
}
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
332
{
165
332
    bs_write( s, 16, i_bits >> 16 );
166
332
    bs_write( s, 16, i_bits );
167
332
}
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.57k
{
171
5.57k
    s->cur_bits <<= 1;
172
5.57k
    s->cur_bits |= i_bit;
173
5.57k
    s->i_left--;
174
5.57k
    if( s->i_left == WORD_SIZE*8-32 )
175
134
    {
176
134
        M32( s->p ) = endian_fix32( s->cur_bits );
177
134
        s->p += 4;
178
134
        s->i_left = WORD_SIZE*8;
179
134
    }
180
5.57k
}
Unexecuted instantiation: bitstream.c:bs_write1
encoder.c:bs_write1
Line
Count
Source
170
332
{
171
332
    s->cur_bits <<= 1;
172
332
    s->cur_bits |= i_bit;
173
332
    s->i_left--;
174
332
    if( s->i_left == WORD_SIZE*8-32 )
175
8
    {
176
8
        M32( s->p ) = endian_fix32( s->cur_bits );
177
8
        s->p += 4;
178
8
        s->i_left = WORD_SIZE*8;
179
8
    }
180
332
}
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.24k
{
171
5.24k
    s->cur_bits <<= 1;
172
5.24k
    s->cur_bits |= i_bit;
173
5.24k
    s->i_left--;
174
5.24k
    if( s->i_left == WORD_SIZE*8-32 )
175
126
    {
176
126
        M32( s->p ) = endian_fix32( s->cur_bits );
177
126
        s->p += 4;
178
126
        s->i_left = WORD_SIZE*8;
179
126
    }
180
5.24k
}
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
166
{
189
166
    bs_write( s, s->i_left&7, (1 << (s->i_left&7)) - 1 );
190
166
    bs_flush( s );
191
166
}
Unexecuted instantiation: bitstream.c:bs_align_1
encoder.c:bs_align_1
Line
Count
Source
188
166
{
189
166
    bs_write( s, s->i_left&7, (1 << (s->i_left&7)) - 1 );
190
166
    bs_flush( s );
191
166
}
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.49k
{
223
4.49k
    int size = 0;
224
4.49k
    int tmp = ++val;
225
4.49k
    if( tmp >= 0x10000 )
226
0
    {
227
0
        size = 32;
228
0
        tmp >>= 16;
229
0
    }
230
4.49k
    if( tmp >= 0x100 )
231
0
    {
232
0
        size += 16;
233
0
        tmp >>= 8;
234
0
    }
235
4.49k
    size += x264_ue_size_tab[tmp];
236
4.49k
    bs_write( s, size>>1, 0 );
237
4.49k
    bs_write( s, (size>>1)+1, val );
238
4.49k
}
Unexecuted instantiation: bitstream.c:bs_write_ue_big
encoder.c:bs_write_ue_big
Line
Count
Source
222
830
{
223
830
    int size = 0;
224
830
    int tmp = ++val;
225
830
    if( tmp >= 0x10000 )
226
0
    {
227
0
        size = 32;
228
0
        tmp >>= 16;
229
0
    }
230
830
    if( tmp >= 0x100 )
231
0
    {
232
0
        size += 16;
233
0
        tmp >>= 8;
234
0
    }
235
830
    size += x264_ue_size_tab[tmp];
236
830
    bs_write( s, size>>1, 0 );
237
830
    bs_write( s, (size>>1)+1, val );
238
830
}
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.66k
{
223
3.66k
    int size = 0;
224
3.66k
    int tmp = ++val;
225
3.66k
    if( tmp >= 0x10000 )
226
0
    {
227
0
        size = 32;
228
0
        tmp >>= 16;
229
0
    }
230
3.66k
    if( tmp >= 0x100 )
231
0
    {
232
0
        size += 16;
233
0
        tmp >>= 8;
234
0
    }
235
3.66k
    size += x264_ue_size_tab[tmp];
236
3.66k
    bs_write( s, size>>1, 0 );
237
3.66k
    bs_write( s, (size>>1)+1, val );
238
3.66k
}
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
896
{
248
896
    int size = 0;
249
    /* Faster than (val <= 0 ? -val*2+1 : val*2) */
250
    /* 4 instructions on x86, 3 on ARM */
251
896
    int tmp = 1 - val*2;
252
896
    if( tmp < 0 ) tmp = val*2;
253
896
    val = tmp;
254
255
896
    if( tmp >= 0x100 )
256
0
    {
257
0
        size = 16;
258
0
        tmp >>= 8;
259
0
    }
260
896
    size += x264_ue_size_tab[tmp];
261
896
    bs_write( s, size, val );
262
896
}
Unexecuted instantiation: bitstream.c:bs_write_se
encoder.c:bs_write_se
Line
Count
Source
247
398
{
248
398
    int size = 0;
249
    /* Faster than (val <= 0 ? -val*2+1 : val*2) */
250
    /* 4 instructions on x86, 3 on ARM */
251
398
    int tmp = 1 - val*2;
252
398
    if( tmp < 0 ) tmp = val*2;
253
398
    val = tmp;
254
255
398
    if( tmp >= 0x100 )
256
0
    {
257
0
        size = 16;
258
0
        tmp >>= 8;
259
0
    }
260
398
    size += x264_ue_size_tab[tmp];
261
398
    bs_write( s, size, val );
262
398
}
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
498
{
248
498
    int size = 0;
249
    /* Faster than (val <= 0 ? -val*2+1 : val*2) */
250
    /* 4 instructions on x86, 3 on ARM */
251
498
    int tmp = 1 - val*2;
252
498
    if( tmp < 0 ) tmp = val*2;
253
498
    val = tmp;
254
255
498
    if( tmp >= 0x100 )
256
0
    {
257
0
        size = 16;
258
0
        tmp >>= 8;
259
0
    }
260
498
    size += x264_ue_size_tab[tmp];
261
498
    bs_write( s, size, val );
262
498
}
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
498
{
274
498
    bs_write1( s, 1 );
275
498
    bs_write( s, s->i_left&7, 0  );
276
498
}
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
498
{
274
498
    bs_write1( s, 1 );
275
498
    bs_write( s, s->i_left&7, 0  );
276
498
}
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
147k
{
280
147k
    return x264_ue_size_tab[val+1];
281
147k
}
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
147k
{
280
147k
    return x264_ue_size_tab[val+1];
281
147k
}
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.9k
{
285
29.9k
    if( val < 255 )
286
28.7k
        return x264_ue_size_tab[val+1];
287
1.26k
    else
288
1.26k
        return x264_ue_size_tab[(val+1)>>8] + 16;
289
29.9k
}
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.9k
{
285
29.9k
    if( val < 255 )
286
28.7k
        return x264_ue_size_tab[val+1];
287
1.26k
    else
288
1.26k
        return x264_ue_size_tab[(val+1)>>8] + 16;
289
29.9k
}
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