Coverage Report

Created: 2023-03-26 06:11

/src/vlc/include/vlc_block_helper.h
Line
Count
Source (jump to first uncovered line)
1
/*****************************************************************************
2
 * vlc_block_helper.h: Helper functions for data blocks management.
3
 *****************************************************************************
4
 * Copyright (C) 2003-2017 VLC authors and VideoLAN
5
 *
6
 * Authors: Gildas Bazin <gbazin@netcourrier.com>
7
 *
8
 * This program is free software; you can redistribute it and/or modify it
9
 * under the terms of the GNU Lesser General Public License as published by
10
 * the Free Software Foundation; either version 2.1 of the License, or
11
 * (at your option) any later version.
12
 *
13
 * This program is distributed in the hope that it will be useful,
14
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
 * GNU Lesser General Public License for more details.
17
 *
18
 * You should have received a copy of the GNU Lesser General Public License
19
 * along with this program; if not, write to the Free Software Foundation,
20
 * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
21
 *****************************************************************************/
22
23
#ifndef VLC_BLOCK_HELPER_H
24
#define VLC_BLOCK_HELPER_H 1
25
26
#include <vlc_block.h>
27
28
typedef struct block_bytestream_t
29
{
30
    block_t *p_chain;  /**< byte stream head block */
31
    block_t **pp_last; /**< tail ppointer for appends */
32
    block_t *p_block;  /**< byte stream read pointer block */
33
    size_t   i_block_offset; /**< byte stream read pointer offset within block */
34
    size_t   i_base_offset; /**< block base offset (previous blocks total size) */
35
    size_t   i_total;  /**< total bytes over all linked blocks */
36
} block_bytestream_t;
37
38
/*****************************************************************************
39
 * block_bytestream_t management
40
 *****************************************************************************/
41
static inline void block_BytestreamInit( block_bytestream_t *p_bytestream )
42
23
{
43
23
    p_bytestream->p_chain = p_bytestream->p_block = NULL;
44
23
    p_bytestream->pp_last = &p_bytestream->p_chain;
45
23
    p_bytestream->i_block_offset = 0;
46
23
    p_bytestream->i_base_offset = 0;
47
23
    p_bytestream->i_total = 0;
48
23
}
a52.c:block_BytestreamInit
Line
Count
Source
42
3
{
43
3
    p_bytestream->p_chain = p_bytestream->p_block = NULL;
44
3
    p_bytestream->pp_last = &p_bytestream->p_chain;
45
3
    p_bytestream->i_block_offset = 0;
46
3
    p_bytestream->i_base_offset = 0;
47
3
    p_bytestream->i_total = 0;
48
3
}
dts.c:block_BytestreamInit
Line
Count
Source
42
13
{
43
13
    p_bytestream->p_chain = p_bytestream->p_block = NULL;
44
13
    p_bytestream->pp_last = &p_bytestream->p_chain;
45
13
    p_bytestream->i_block_offset = 0;
46
13
    p_bytestream->i_base_offset = 0;
47
13
    p_bytestream->i_total = 0;
48
13
}
flac.c:block_BytestreamInit
Line
Count
Source
42
5
{
43
5
    p_bytestream->p_chain = p_bytestream->p_block = NULL;
44
5
    p_bytestream->pp_last = &p_bytestream->p_chain;
45
5
    p_bytestream->i_block_offset = 0;
46
5
    p_bytestream->i_base_offset = 0;
47
5
    p_bytestream->i_total = 0;
48
5
}
Unexecuted instantiation: h264.c:block_BytestreamInit
Unexecuted instantiation: hevc.c:block_BytestreamInit
mlp.c:block_BytestreamInit
Line
Count
Source
42
2
{
43
2
    p_bytestream->p_chain = p_bytestream->p_block = NULL;
44
2
    p_bytestream->pp_last = &p_bytestream->p_chain;
45
2
    p_bytestream->i_block_offset = 0;
46
2
    p_bytestream->i_base_offset = 0;
47
2
    p_bytestream->i_total = 0;
48
2
}
Unexecuted instantiation: mpeg4audio.c:block_BytestreamInit
Unexecuted instantiation: mpeg4video.c:block_BytestreamInit
Unexecuted instantiation: mpegaudio.c:block_BytestreamInit
Unexecuted instantiation: mpegvideo.c:block_BytestreamInit
Unexecuted instantiation: vc1.c:block_BytestreamInit
49
50
static inline void block_BytestreamRelease( block_bytestream_t *p_bytestream )
51
23
{
52
23
    block_ChainRelease( p_bytestream->p_chain );
53
23
}
a52.c:block_BytestreamRelease
Line
Count
Source
51
3
{
52
3
    block_ChainRelease( p_bytestream->p_chain );
53
3
}
dts.c:block_BytestreamRelease
Line
Count
Source
51
13
{
52
13
    block_ChainRelease( p_bytestream->p_chain );
53
13
}
flac.c:block_BytestreamRelease
Line
Count
Source
51
5
{
52
5
    block_ChainRelease( p_bytestream->p_chain );
53
5
}
Unexecuted instantiation: h264.c:block_BytestreamRelease
Unexecuted instantiation: hevc.c:block_BytestreamRelease
mlp.c:block_BytestreamRelease
Line
Count
Source
51
2
{
52
2
    block_ChainRelease( p_bytestream->p_chain );
53
2
}
Unexecuted instantiation: mpeg4audio.c:block_BytestreamRelease
Unexecuted instantiation: mpeg4video.c:block_BytestreamRelease
Unexecuted instantiation: mpegaudio.c:block_BytestreamRelease
Unexecuted instantiation: mpegvideo.c:block_BytestreamRelease
Unexecuted instantiation: vc1.c:block_BytestreamRelease
54
55
/**
56
 * It flush all data (read and unread) from a block_bytestream_t.
57
 */
58
static inline void block_BytestreamEmpty( block_bytestream_t *p_bytestream )
59
0
{
60
0
    block_BytestreamRelease( p_bytestream );
61
0
    block_BytestreamInit( p_bytestream );
62
0
}
Unexecuted instantiation: a52.c:block_BytestreamEmpty
Unexecuted instantiation: dts.c:block_BytestreamEmpty
Unexecuted instantiation: flac.c:block_BytestreamEmpty
Unexecuted instantiation: h264.c:block_BytestreamEmpty
Unexecuted instantiation: hevc.c:block_BytestreamEmpty
Unexecuted instantiation: mlp.c:block_BytestreamEmpty
Unexecuted instantiation: mpeg4audio.c:block_BytestreamEmpty
Unexecuted instantiation: mpeg4video.c:block_BytestreamEmpty
Unexecuted instantiation: mpegaudio.c:block_BytestreamEmpty
Unexecuted instantiation: mpegvideo.c:block_BytestreamEmpty
Unexecuted instantiation: vc1.c:block_BytestreamEmpty
63
64
/**
65
 * It flushes all already read data from a block_bytestream_t.
66
 */
67
static inline void block_BytestreamFlush( block_bytestream_t *p_bytestream )
68
61.4k
{
69
61.4k
    block_t *block = p_bytestream->p_chain;
70
71
61.9k
    while( block != p_bytestream->p_block )
72
476
    {
73
476
        block_t *p_next = block->p_next;
74
75
476
        p_bytestream->i_total -= block->i_buffer;
76
476
        p_bytestream->i_base_offset -= block->i_buffer;
77
476
        block_Release( block );
78
476
        block = p_next;
79
476
    }
80
81
61.4k
    while( block != NULL && block->i_buffer == p_bytestream->i_block_offset )
82
1
    {
83
1
        block_t *p_next = block->p_next;
84
85
1
        p_bytestream->i_total -= block->i_buffer;
86
1
        block_Release( block );
87
1
        block = p_next;
88
1
        p_bytestream->i_block_offset = 0;
89
1
    }
90
91
61.4k
    p_bytestream->p_chain = p_bytestream->p_block = block;
92
61.4k
    if( p_bytestream->p_chain == NULL )
93
2
        p_bytestream->pp_last = &p_bytestream->p_chain;
94
61.4k
}
a52.c:block_BytestreamFlush
Line
Count
Source
68
37
{
69
37
    block_t *block = p_bytestream->p_chain;
70
71
73
    while( block != p_bytestream->p_block )
72
36
    {
73
36
        block_t *p_next = block->p_next;
74
75
36
        p_bytestream->i_total -= block->i_buffer;
76
36
        p_bytestream->i_base_offset -= block->i_buffer;
77
36
        block_Release( block );
78
36
        block = p_next;
79
36
    }
80
81
37
    while( block != NULL && block->i_buffer == p_bytestream->i_block_offset )
82
0
    {
83
0
        block_t *p_next = block->p_next;
84
85
0
        p_bytestream->i_total -= block->i_buffer;
86
0
        block_Release( block );
87
0
        block = p_next;
88
0
        p_bytestream->i_block_offset = 0;
89
0
    }
90
91
37
    p_bytestream->p_chain = p_bytestream->p_block = block;
92
37
    if( p_bytestream->p_chain == NULL )
93
0
        p_bytestream->pp_last = &p_bytestream->p_chain;
94
37
}
dts.c:block_BytestreamFlush
Line
Count
Source
68
10
{
69
10
    block_t *block = p_bytestream->p_chain;
70
71
184
    while( block != p_bytestream->p_block )
72
174
    {
73
174
        block_t *p_next = block->p_next;
74
75
174
        p_bytestream->i_total -= block->i_buffer;
76
174
        p_bytestream->i_base_offset -= block->i_buffer;
77
174
        block_Release( block );
78
174
        block = p_next;
79
174
    }
80
81
10
    while( block != NULL && block->i_buffer == p_bytestream->i_block_offset )
82
0
    {
83
0
        block_t *p_next = block->p_next;
84
85
0
        p_bytestream->i_total -= block->i_buffer;
86
0
        block_Release( block );
87
0
        block = p_next;
88
0
        p_bytestream->i_block_offset = 0;
89
0
    }
90
91
10
    p_bytestream->p_chain = p_bytestream->p_block = block;
92
10
    if( p_bytestream->p_chain == NULL )
93
1
        p_bytestream->pp_last = &p_bytestream->p_chain;
94
10
}
flac.c:block_BytestreamFlush
Line
Count
Source
68
61.3k
{
69
61.3k
    block_t *block = p_bytestream->p_chain;
70
71
61.5k
    while( block != p_bytestream->p_block )
72
134
    {
73
134
        block_t *p_next = block->p_next;
74
75
134
        p_bytestream->i_total -= block->i_buffer;
76
134
        p_bytestream->i_base_offset -= block->i_buffer;
77
134
        block_Release( block );
78
134
        block = p_next;
79
134
    }
80
81
61.3k
    while( block != NULL && block->i_buffer == p_bytestream->i_block_offset )
82
1
    {
83
1
        block_t *p_next = block->p_next;
84
85
1
        p_bytestream->i_total -= block->i_buffer;
86
1
        block_Release( block );
87
1
        block = p_next;
88
1
        p_bytestream->i_block_offset = 0;
89
1
    }
90
91
61.3k
    p_bytestream->p_chain = p_bytestream->p_block = block;
92
61.3k
    if( p_bytestream->p_chain == NULL )
93
1
        p_bytestream->pp_last = &p_bytestream->p_chain;
94
61.3k
}
Unexecuted instantiation: h264.c:block_BytestreamFlush
Unexecuted instantiation: hevc.c:block_BytestreamFlush
mlp.c:block_BytestreamFlush
Line
Count
Source
68
5
{
69
5
    block_t *block = p_bytestream->p_chain;
70
71
137
    while( block != p_bytestream->p_block )
72
132
    {
73
132
        block_t *p_next = block->p_next;
74
75
132
        p_bytestream->i_total -= block->i_buffer;
76
132
        p_bytestream->i_base_offset -= block->i_buffer;
77
132
        block_Release( block );
78
132
        block = p_next;
79
132
    }
80
81
5
    while( block != NULL && block->i_buffer == p_bytestream->i_block_offset )
82
0
    {
83
0
        block_t *p_next = block->p_next;
84
85
0
        p_bytestream->i_total -= block->i_buffer;
86
0
        block_Release( block );
87
0
        block = p_next;
88
0
        p_bytestream->i_block_offset = 0;
89
0
    }
90
91
5
    p_bytestream->p_chain = p_bytestream->p_block = block;
92
5
    if( p_bytestream->p_chain == NULL )
93
0
        p_bytestream->pp_last = &p_bytestream->p_chain;
94
5
}
Unexecuted instantiation: mpeg4audio.c:block_BytestreamFlush
Unexecuted instantiation: mpeg4video.c:block_BytestreamFlush
Unexecuted instantiation: mpegaudio.c:block_BytestreamFlush
Unexecuted instantiation: mpegvideo.c:block_BytestreamFlush
Unexecuted instantiation: vc1.c:block_BytestreamFlush
95
96
static inline void block_BytestreamPush( block_bytestream_t *p_bytestream,
97
                                         block_t *p_block )
98
2.49k
{
99
2.49k
    block_ChainLastAppend( &p_bytestream->pp_last, p_block );
100
2.49k
    if( !p_bytestream->p_block ) p_bytestream->p_block = p_block;
101
4.99k
    for( ; p_block; p_block = p_block->p_next )
102
2.49k
        p_bytestream->i_total += p_block->i_buffer;
103
2.49k
}
a52.c:block_BytestreamPush
Line
Count
Source
98
1.70k
{
99
1.70k
    block_ChainLastAppend( &p_bytestream->pp_last, p_block );
100
1.70k
    if( !p_bytestream->p_block ) p_bytestream->p_block = p_block;
101
3.40k
    for( ; p_block; p_block = p_block->p_next )
102
1.70k
        p_bytestream->i_total += p_block->i_buffer;
103
1.70k
}
dts.c:block_BytestreamPush
Line
Count
Source
98
473
{
99
473
    block_ChainLastAppend( &p_bytestream->pp_last, p_block );
100
473
    if( !p_bytestream->p_block ) p_bytestream->p_block = p_block;
101
946
    for( ; p_block; p_block = p_block->p_next )
102
473
        p_bytestream->i_total += p_block->i_buffer;
103
473
}
flac.c:block_BytestreamPush
Line
Count
Source
98
180
{
99
180
    block_ChainLastAppend( &p_bytestream->pp_last, p_block );
100
180
    if( !p_bytestream->p_block ) p_bytestream->p_block = p_block;
101
360
    for( ; p_block; p_block = p_block->p_next )
102
180
        p_bytestream->i_total += p_block->i_buffer;
103
180
}
Unexecuted instantiation: h264.c:block_BytestreamPush
Unexecuted instantiation: hevc.c:block_BytestreamPush
mlp.c:block_BytestreamPush
Line
Count
Source
98
140
{
99
140
    block_ChainLastAppend( &p_bytestream->pp_last, p_block );
100
140
    if( !p_bytestream->p_block ) p_bytestream->p_block = p_block;
101
280
    for( ; p_block; p_block = p_block->p_next )
102
140
        p_bytestream->i_total += p_block->i_buffer;
103
140
}
Unexecuted instantiation: mpeg4audio.c:block_BytestreamPush
Unexecuted instantiation: mpeg4video.c:block_BytestreamPush
Unexecuted instantiation: mpegaudio.c:block_BytestreamPush
Unexecuted instantiation: mpegvideo.c:block_BytestreamPush
Unexecuted instantiation: vc1.c:block_BytestreamPush
104
105
static inline size_t block_BytestreamRemaining( const block_bytestream_t *p_bytestream )
106
17.3M
{
107
17.3M
    return ( p_bytestream->i_total > p_bytestream->i_base_offset + p_bytestream->i_block_offset ) ?
108
17.3M
             p_bytestream->i_total - p_bytestream->i_base_offset - p_bytestream->i_block_offset : 0;
109
17.3M
}
a52.c:block_BytestreamRemaining
Line
Count
Source
106
1.21M
{
107
1.21M
    return ( p_bytestream->i_total > p_bytestream->i_base_offset + p_bytestream->i_block_offset ) ?
108
1.21M
             p_bytestream->i_total - p_bytestream->i_base_offset - p_bytestream->i_block_offset : 0;
109
1.21M
}
dts.c:block_BytestreamRemaining
Line
Count
Source
106
10.4M
{
107
10.4M
    return ( p_bytestream->i_total > p_bytestream->i_base_offset + p_bytestream->i_block_offset ) ?
108
10.4M
             p_bytestream->i_total - p_bytestream->i_base_offset - p_bytestream->i_block_offset : 0;
109
10.4M
}
flac.c:block_BytestreamRemaining
Line
Count
Source
106
5.37M
{
107
5.37M
    return ( p_bytestream->i_total > p_bytestream->i_base_offset + p_bytestream->i_block_offset ) ?
108
5.37M
             p_bytestream->i_total - p_bytestream->i_base_offset - p_bytestream->i_block_offset : 0;
109
5.37M
}
Unexecuted instantiation: h264.c:block_BytestreamRemaining
Unexecuted instantiation: hevc.c:block_BytestreamRemaining
mlp.c:block_BytestreamRemaining
Line
Count
Source
106
392k
{
107
392k
    return ( p_bytestream->i_total > p_bytestream->i_base_offset + p_bytestream->i_block_offset ) ?
108
392k
             p_bytestream->i_total - p_bytestream->i_base_offset - p_bytestream->i_block_offset : 0;
109
392k
}
Unexecuted instantiation: mpeg4audio.c:block_BytestreamRemaining
Unexecuted instantiation: mpeg4video.c:block_BytestreamRemaining
Unexecuted instantiation: mpegaudio.c:block_BytestreamRemaining
Unexecuted instantiation: mpegvideo.c:block_BytestreamRemaining
Unexecuted instantiation: vc1.c:block_BytestreamRemaining
110
111
VLC_USED
112
static inline block_t *block_BytestreamPop( block_bytestream_t *p_bytestream )
113
12
{
114
12
    block_t *p_block;
115
116
12
    block_BytestreamFlush( p_bytestream );
117
118
12
    p_block = p_bytestream->p_block;
119
12
    if( unlikely( p_block == NULL ) )
120
0
    {
121
0
        return NULL;
122
0
    }
123
12
    else if( !p_block->p_next )
124
11
    {
125
11
        p_block->p_buffer += p_bytestream->i_block_offset;
126
11
        p_block->i_buffer -= p_bytestream->i_block_offset;
127
11
        p_bytestream->i_block_offset = 0;
128
11
        p_bytestream->i_total = 0;
129
11
        p_bytestream->p_chain = p_bytestream->p_block = NULL;
130
11
        p_bytestream->pp_last = &p_bytestream->p_chain;
131
11
        return p_block;
132
11
    }
133
134
3
    while( p_block->p_next && p_block->p_next->p_next )
135
2
        p_block = p_block->p_next;
136
137
1
    block_t *p_block_old = p_block;
138
1
    p_block = p_block->p_next;
139
1
    p_block_old->p_next = NULL;
140
1
    p_bytestream->pp_last = &p_block_old->p_next;
141
1
    if( p_block )
142
1
        p_bytestream->i_total -= p_block->i_buffer;
143
144
1
    return p_block;
145
12
}
Unexecuted instantiation: a52.c:block_BytestreamPop
dts.c:block_BytestreamPop
Line
Count
Source
113
3
{
114
3
    block_t *p_block;
115
116
3
    block_BytestreamFlush( p_bytestream );
117
118
3
    p_block = p_bytestream->p_block;
119
3
    if( unlikely( p_block == NULL ) )
120
0
    {
121
0
        return NULL;
122
0
    }
123
3
    else if( !p_block->p_next )
124
2
    {
125
2
        p_block->p_buffer += p_bytestream->i_block_offset;
126
2
        p_block->i_buffer -= p_bytestream->i_block_offset;
127
2
        p_bytestream->i_block_offset = 0;
128
2
        p_bytestream->i_total = 0;
129
2
        p_bytestream->p_chain = p_bytestream->p_block = NULL;
130
2
        p_bytestream->pp_last = &p_bytestream->p_chain;
131
2
        return p_block;
132
2
    }
133
134
3
    while( p_block->p_next && p_block->p_next->p_next )
135
2
        p_block = p_block->p_next;
136
137
1
    block_t *p_block_old = p_block;
138
1
    p_block = p_block->p_next;
139
1
    p_block_old->p_next = NULL;
140
1
    p_bytestream->pp_last = &p_block_old->p_next;
141
1
    if( p_block )
142
1
        p_bytestream->i_total -= p_block->i_buffer;
143
144
1
    return p_block;
145
3
}
flac.c:block_BytestreamPop
Line
Count
Source
113
8
{
114
8
    block_t *p_block;
115
116
8
    block_BytestreamFlush( p_bytestream );
117
118
8
    p_block = p_bytestream->p_block;
119
8
    if( unlikely( p_block == NULL ) )
120
0
    {
121
0
        return NULL;
122
0
    }
123
8
    else if( !p_block->p_next )
124
8
    {
125
8
        p_block->p_buffer += p_bytestream->i_block_offset;
126
8
        p_block->i_buffer -= p_bytestream->i_block_offset;
127
8
        p_bytestream->i_block_offset = 0;
128
8
        p_bytestream->i_total = 0;
129
8
        p_bytestream->p_chain = p_bytestream->p_block = NULL;
130
8
        p_bytestream->pp_last = &p_bytestream->p_chain;
131
8
        return p_block;
132
8
    }
133
134
0
    while( p_block->p_next && p_block->p_next->p_next )
135
0
        p_block = p_block->p_next;
136
137
0
    block_t *p_block_old = p_block;
138
0
    p_block = p_block->p_next;
139
0
    p_block_old->p_next = NULL;
140
0
    p_bytestream->pp_last = &p_block_old->p_next;
141
0
    if( p_block )
142
0
        p_bytestream->i_total -= p_block->i_buffer;
143
144
0
    return p_block;
145
8
}
Unexecuted instantiation: h264.c:block_BytestreamPop
Unexecuted instantiation: hevc.c:block_BytestreamPop
mlp.c:block_BytestreamPop
Line
Count
Source
113
1
{
114
1
    block_t *p_block;
115
116
1
    block_BytestreamFlush( p_bytestream );
117
118
1
    p_block = p_bytestream->p_block;
119
1
    if( unlikely( p_block == NULL ) )
120
0
    {
121
0
        return NULL;
122
0
    }
123
1
    else if( !p_block->p_next )
124
1
    {
125
1
        p_block->p_buffer += p_bytestream->i_block_offset;
126
1
        p_block->i_buffer -= p_bytestream->i_block_offset;
127
1
        p_bytestream->i_block_offset = 0;
128
1
        p_bytestream->i_total = 0;
129
1
        p_bytestream->p_chain = p_bytestream->p_block = NULL;
130
1
        p_bytestream->pp_last = &p_bytestream->p_chain;
131
1
        return p_block;
132
1
    }
133
134
0
    while( p_block->p_next && p_block->p_next->p_next )
135
0
        p_block = p_block->p_next;
136
137
0
    block_t *p_block_old = p_block;
138
0
    p_block = p_block->p_next;
139
0
    p_block_old->p_next = NULL;
140
0
    p_bytestream->pp_last = &p_block_old->p_next;
141
0
    if( p_block )
142
0
        p_bytestream->i_total -= p_block->i_buffer;
143
144
0
    return p_block;
145
1
}
Unexecuted instantiation: mpeg4audio.c:block_BytestreamPop
Unexecuted instantiation: mpeg4video.c:block_BytestreamPop
Unexecuted instantiation: mpegaudio.c:block_BytestreamPop
Unexecuted instantiation: mpegvideo.c:block_BytestreamPop
Unexecuted instantiation: vc1.c:block_BytestreamPop
146
147
static inline int block_WaitBytes( block_bytestream_t *p_bytestream,
148
                                   size_t i_data )
149
48.8k
{
150
48.8k
    if( block_BytestreamRemaining( p_bytestream ) >= i_data )
151
48.8k
        return VLC_SUCCESS;
152
5
    return VLC_EGENERIC;
153
48.8k
}
a52.c:block_WaitBytes
Line
Count
Source
149
1.66k
{
150
1.66k
    if( block_BytestreamRemaining( p_bytestream ) >= i_data )
151
1.66k
        return VLC_SUCCESS;
152
0
    return VLC_EGENERIC;
153
1.66k
}
dts.c:block_WaitBytes
Line
Count
Source
149
11
{
150
11
    if( block_BytestreamRemaining( p_bytestream ) >= i_data )
151
7
        return VLC_SUCCESS;
152
4
    return VLC_EGENERIC;
153
11
}
Unexecuted instantiation: flac.c:block_WaitBytes
Unexecuted instantiation: h264.c:block_WaitBytes
Unexecuted instantiation: hevc.c:block_WaitBytes
mlp.c:block_WaitBytes
Line
Count
Source
149
47.1k
{
150
47.1k
    if( block_BytestreamRemaining( p_bytestream ) >= i_data )
151
47.1k
        return VLC_SUCCESS;
152
1
    return VLC_EGENERIC;
153
47.1k
}
Unexecuted instantiation: mpeg4audio.c:block_WaitBytes
Unexecuted instantiation: mpeg4video.c:block_WaitBytes
Unexecuted instantiation: mpegaudio.c:block_WaitBytes
Unexecuted instantiation: mpegvideo.c:block_WaitBytes
Unexecuted instantiation: vc1.c:block_WaitBytes
154
155
static inline int block_PeekBytes( block_bytestream_t *p_bytestream,
156
                                   uint8_t *p_data, size_t i_data )
157
5.80M
{
158
5.80M
    if( block_BytestreamRemaining( p_bytestream ) < i_data )
159
81
        return VLC_EGENERIC;
160
161
    /* Copy the data */
162
5.80M
    size_t i_offset = p_bytestream->i_block_offset;
163
5.80M
    size_t i_size = i_data;
164
5.80M
    for( block_t *p_block = p_bytestream->p_block;
165
5.81M
         p_block != NULL; p_block = p_block->p_next )
166
5.81M
    {
167
5.81M
        size_t i_copy = __MIN( i_size, p_block->i_buffer - i_offset );
168
5.81M
        i_size -= i_copy;
169
170
5.81M
        if( i_copy )
171
5.81M
        {
172
5.81M
            memcpy( p_data, p_block->p_buffer + i_offset, i_copy );
173
5.81M
            p_data += i_copy;
174
5.81M
        }
175
176
5.81M
        i_offset = 0;
177
178
5.81M
        if( !i_size ) break;
179
5.81M
    }
180
181
5.80M
    return VLC_SUCCESS;
182
5.80M
}
a52.c:block_PeekBytes
Line
Count
Source
157
604k
{
158
604k
    if( block_BytestreamRemaining( p_bytestream ) < i_data )
159
37
        return VLC_EGENERIC;
160
161
    /* Copy the data */
162
604k
    size_t i_offset = p_bytestream->i_block_offset;
163
604k
    size_t i_size = i_data;
164
604k
    for( block_t *p_block = p_bytestream->p_block;
165
605k
         p_block != NULL; p_block = p_block->p_next )
166
605k
    {
167
605k
        size_t i_copy = __MIN( i_size, p_block->i_buffer - i_offset );
168
605k
        i_size -= i_copy;
169
170
605k
        if( i_copy )
171
605k
        {
172
605k
            memcpy( p_data, p_block->p_buffer + i_offset, i_copy );
173
605k
            p_data += i_copy;
174
605k
        }
175
176
605k
        i_offset = 0;
177
178
605k
        if( !i_size ) break;
179
605k
    }
180
181
604k
    return VLC_SUCCESS;
182
604k
}
dts.c:block_PeekBytes
Line
Count
Source
157
4.99M
{
158
4.99M
    if( block_BytestreamRemaining( p_bytestream ) < i_data )
159
40
        return VLC_EGENERIC;
160
161
    /* Copy the data */
162
4.99M
    size_t i_offset = p_bytestream->i_block_offset;
163
4.99M
    size_t i_size = i_data;
164
4.99M
    for( block_t *p_block = p_bytestream->p_block;
165
4.99M
         p_block != NULL; p_block = p_block->p_next )
166
4.99M
    {
167
4.99M
        size_t i_copy = __MIN( i_size, p_block->i_buffer - i_offset );
168
4.99M
        i_size -= i_copy;
169
170
4.99M
        if( i_copy )
171
4.99M
        {
172
4.99M
            memcpy( p_data, p_block->p_buffer + i_offset, i_copy );
173
4.99M
            p_data += i_copy;
174
4.99M
        }
175
176
4.99M
        i_offset = 0;
177
178
4.99M
        if( !i_size ) break;
179
4.99M
    }
180
181
4.99M
    return VLC_SUCCESS;
182
4.99M
}
flac.c:block_PeekBytes
Line
Count
Source
157
33.6k
{
158
33.6k
    if( block_BytestreamRemaining( p_bytestream ) < i_data )
159
0
        return VLC_EGENERIC;
160
161
    /* Copy the data */
162
33.6k
    size_t i_offset = p_bytestream->i_block_offset;
163
33.6k
    size_t i_size = i_data;
164
33.6k
    for( block_t *p_block = p_bytestream->p_block;
165
33.6k
         p_block != NULL; p_block = p_block->p_next )
166
33.6k
    {
167
33.6k
        size_t i_copy = __MIN( i_size, p_block->i_buffer - i_offset );
168
33.6k
        i_size -= i_copy;
169
170
33.6k
        if( i_copy )
171
33.6k
        {
172
33.6k
            memcpy( p_data, p_block->p_buffer + i_offset, i_copy );
173
33.6k
            p_data += i_copy;
174
33.6k
        }
175
176
33.6k
        i_offset = 0;
177
178
33.6k
        if( !i_size ) break;
179
33.6k
    }
180
181
33.6k
    return VLC_SUCCESS;
182
33.6k
}
Unexecuted instantiation: h264.c:block_PeekBytes
Unexecuted instantiation: hevc.c:block_PeekBytes
mlp.c:block_PeekBytes
Line
Count
Source
157
172k
{
158
172k
    if( block_BytestreamRemaining( p_bytestream ) < i_data )
159
4
        return VLC_EGENERIC;
160
161
    /* Copy the data */
162
172k
    size_t i_offset = p_bytestream->i_block_offset;
163
172k
    size_t i_size = i_data;
164
172k
    for( block_t *p_block = p_bytestream->p_block;
165
175k
         p_block != NULL; p_block = p_block->p_next )
166
175k
    {
167
175k
        size_t i_copy = __MIN( i_size, p_block->i_buffer - i_offset );
168
175k
        i_size -= i_copy;
169
170
175k
        if( i_copy )
171
175k
        {
172
175k
            memcpy( p_data, p_block->p_buffer + i_offset, i_copy );
173
175k
            p_data += i_copy;
174
175k
        }
175
176
175k
        i_offset = 0;
177
178
175k
        if( !i_size ) break;
179
175k
    }
180
181
172k
    return VLC_SUCCESS;
182
172k
}
Unexecuted instantiation: mpeg4audio.c:block_PeekBytes
Unexecuted instantiation: mpeg4video.c:block_PeekBytes
Unexecuted instantiation: mpegaudio.c:block_PeekBytes
Unexecuted instantiation: mpegvideo.c:block_PeekBytes
Unexecuted instantiation: vc1.c:block_PeekBytes
183
184
static inline int block_GetBytes( block_bytestream_t *p_bytestream,
185
                                  uint8_t *p_data, size_t i_data )
186
5.06M
{
187
5.06M
    if( block_BytestreamRemaining( p_bytestream ) < i_data )
188
118
        return VLC_EGENERIC;
189
190
    /* Copy the data */
191
5.06M
    size_t i_offset = p_bytestream->i_block_offset;
192
5.06M
    size_t i_size = i_data;
193
5.06M
    size_t i_copy = 0;
194
5.06M
    block_t *p_block;
195
5.06M
    for( p_block = p_bytestream->p_block;
196
5.06M
         p_block != NULL; p_block = p_block->p_next )
197
5.06M
    {
198
5.06M
        i_copy = __MIN( i_size, p_block->i_buffer - i_offset );
199
5.06M
        i_size -= i_copy;
200
201
5.06M
        if( i_copy && p_data != NULL )
202
48.9k
        {
203
48.9k
            memcpy( p_data, p_block->p_buffer + i_offset, i_copy );
204
48.9k
            p_data += i_copy;
205
48.9k
        }
206
207
5.06M
        if( i_size == 0 )
208
5.06M
            break;
209
210
1.28k
        p_bytestream->i_base_offset += p_block->i_buffer;
211
1.28k
        i_offset = 0;
212
1.28k
    }
213
214
5.06M
    p_bytestream->p_block = p_block;
215
5.06M
    p_bytestream->i_block_offset = i_offset + i_copy;
216
217
5.06M
    return VLC_SUCCESS;
218
5.06M
}
a52.c:block_GetBytes
Line
Count
Source
186
602k
{
187
602k
    if( block_BytestreamRemaining( p_bytestream ) < i_data )
188
2
        return VLC_EGENERIC;
189
190
    /* Copy the data */
191
602k
    size_t i_offset = p_bytestream->i_block_offset;
192
602k
    size_t i_size = i_data;
193
602k
    size_t i_copy = 0;
194
602k
    block_t *p_block;
195
602k
    for( p_block = p_bytestream->p_block;
196
603k
         p_block != NULL; p_block = p_block->p_next )
197
603k
    {
198
603k
        i_copy = __MIN( i_size, p_block->i_buffer - i_offset );
199
603k
        i_size -= i_copy;
200
201
603k
        if( i_copy && p_data != NULL )
202
1.68k
        {
203
1.68k
            memcpy( p_data, p_block->p_buffer + i_offset, i_copy );
204
1.68k
            p_data += i_copy;
205
1.68k
        }
206
207
603k
        if( i_size == 0 )
208
602k
            break;
209
210
618
        p_bytestream->i_base_offset += p_block->i_buffer;
211
618
        i_offset = 0;
212
618
    }
213
214
602k
    p_bytestream->p_block = p_block;
215
602k
    p_bytestream->i_block_offset = i_offset + i_copy;
216
217
602k
    return VLC_SUCCESS;
218
602k
}
dts.c:block_GetBytes
Line
Count
Source
186
4.27M
{
187
4.27M
    if( block_BytestreamRemaining( p_bytestream ) < i_data )
188
116
        return VLC_EGENERIC;
189
190
    /* Copy the data */
191
4.27M
    size_t i_offset = p_bytestream->i_block_offset;
192
4.27M
    size_t i_size = i_data;
193
4.27M
    size_t i_copy = 0;
194
4.27M
    block_t *p_block;
195
4.27M
    for( p_block = p_bytestream->p_block;
196
4.27M
         p_block != NULL; p_block = p_block->p_next )
197
4.27M
    {
198
4.27M
        i_copy = __MIN( i_size, p_block->i_buffer - i_offset );
199
4.27M
        i_size -= i_copy;
200
201
4.27M
        if( i_copy && p_data != NULL )
202
49
        {
203
49
            memcpy( p_data, p_block->p_buffer + i_offset, i_copy );
204
49
            p_data += i_copy;
205
49
        }
206
207
4.27M
        if( i_size == 0 )
208
4.27M
            break;
209
210
392
        p_bytestream->i_base_offset += p_block->i_buffer;
211
392
        i_offset = 0;
212
392
    }
213
214
4.27M
    p_bytestream->p_block = p_block;
215
4.27M
    p_bytestream->i_block_offset = i_offset + i_copy;
216
217
4.27M
    return VLC_SUCCESS;
218
4.27M
}
flac.c:block_GetBytes
Line
Count
Source
186
67.2k
{
187
67.2k
    if( block_BytestreamRemaining( p_bytestream ) < i_data )
188
0
        return VLC_EGENERIC;
189
190
    /* Copy the data */
191
67.2k
    size_t i_offset = p_bytestream->i_block_offset;
192
67.2k
    size_t i_size = i_data;
193
67.2k
    size_t i_copy = 0;
194
67.2k
    block_t *p_block;
195
67.2k
    for( p_block = p_bytestream->p_block;
196
67.3k
         p_block != NULL; p_block = p_block->p_next )
197
67.3k
    {
198
67.3k
        i_copy = __MIN( i_size, p_block->i_buffer - i_offset );
199
67.3k
        i_size -= i_copy;
200
201
67.3k
        if( i_copy && p_data != NULL )
202
0
        {
203
0
            memcpy( p_data, p_block->p_buffer + i_offset, i_copy );
204
0
            p_data += i_copy;
205
0
        }
206
207
67.3k
        if( i_size == 0 )
208
67.2k
            break;
209
210
134
        p_bytestream->i_base_offset += p_block->i_buffer;
211
134
        i_offset = 0;
212
134
    }
213
214
67.2k
    p_bytestream->p_block = p_block;
215
67.2k
    p_bytestream->i_block_offset = i_offset + i_copy;
216
217
67.2k
    return VLC_SUCCESS;
218
67.2k
}
Unexecuted instantiation: h264.c:block_GetBytes
Unexecuted instantiation: hevc.c:block_GetBytes
mlp.c:block_GetBytes
Line
Count
Source
186
120k
{
187
120k
    if( block_BytestreamRemaining( p_bytestream ) < i_data )
188
0
        return VLC_EGENERIC;
189
190
    /* Copy the data */
191
120k
    size_t i_offset = p_bytestream->i_block_offset;
192
120k
    size_t i_size = i_data;
193
120k
    size_t i_copy = 0;
194
120k
    block_t *p_block;
195
120k
    for( p_block = p_bytestream->p_block;
196
120k
         p_block != NULL; p_block = p_block->p_next )
197
120k
    {
198
120k
        i_copy = __MIN( i_size, p_block->i_buffer - i_offset );
199
120k
        i_size -= i_copy;
200
201
120k
        if( i_copy && p_data != NULL )
202
47.2k
        {
203
47.2k
            memcpy( p_data, p_block->p_buffer + i_offset, i_copy );
204
47.2k
            p_data += i_copy;
205
47.2k
        }
206
207
120k
        if( i_size == 0 )
208
120k
            break;
209
210
136
        p_bytestream->i_base_offset += p_block->i_buffer;
211
136
        i_offset = 0;
212
136
    }
213
214
120k
    p_bytestream->p_block = p_block;
215
120k
    p_bytestream->i_block_offset = i_offset + i_copy;
216
217
120k
    return VLC_SUCCESS;
218
120k
}
Unexecuted instantiation: mpeg4audio.c:block_GetBytes
Unexecuted instantiation: mpeg4video.c:block_GetBytes
Unexecuted instantiation: mpegaudio.c:block_GetBytes
Unexecuted instantiation: mpegvideo.c:block_GetBytes
Unexecuted instantiation: vc1.c:block_GetBytes
219
220
static inline int block_SkipBytes( block_bytestream_t *p_bytestream,
221
                                   size_t i_data )
222
63.0k
{
223
63.0k
    return block_GetBytes( p_bytestream, NULL, i_data );
224
63.0k
}
a52.c:block_SkipBytes
Line
Count
Source
222
176
{
223
176
    return block_GetBytes( p_bytestream, NULL, i_data );
224
176
}
dts.c:block_SkipBytes
Line
Count
Source
222
1.52k
{
223
1.52k
    return block_GetBytes( p_bytestream, NULL, i_data );
224
1.52k
}
flac.c:block_SkipBytes
Line
Count
Source
222
61.3k
{
223
61.3k
    return block_GetBytes( p_bytestream, NULL, i_data );
224
61.3k
}
Unexecuted instantiation: h264.c:block_SkipBytes
Unexecuted instantiation: hevc.c:block_SkipBytes
Unexecuted instantiation: mlp.c:block_SkipBytes
Unexecuted instantiation: mpeg4audio.c:block_SkipBytes
Unexecuted instantiation: mpeg4video.c:block_SkipBytes
Unexecuted instantiation: mpegaudio.c:block_SkipBytes
Unexecuted instantiation: mpegvideo.c:block_SkipBytes
Unexecuted instantiation: vc1.c:block_SkipBytes
225
226
static inline int block_SkipByte( block_bytestream_t *p_bytestream )
227
4.95M
{
228
4.95M
    return block_GetBytes( p_bytestream, NULL, 1 );
229
4.95M
}
a52.c:block_SkipByte
Line
Count
Source
227
600k
{
228
600k
    return block_GetBytes( p_bytestream, NULL, 1 );
229
600k
}
dts.c:block_SkipByte
Line
Count
Source
227
4.27M
{
228
4.27M
    return block_GetBytes( p_bytestream, NULL, 1 );
229
4.27M
}
flac.c:block_SkipByte
Line
Count
Source
227
5.86k
{
228
5.86k
    return block_GetBytes( p_bytestream, NULL, 1 );
229
5.86k
}
Unexecuted instantiation: h264.c:block_SkipByte
Unexecuted instantiation: hevc.c:block_SkipByte
mlp.c:block_SkipByte
Line
Count
Source
227
73.5k
{
228
73.5k
    return block_GetBytes( p_bytestream, NULL, 1 );
229
73.5k
}
Unexecuted instantiation: mpeg4audio.c:block_SkipByte
Unexecuted instantiation: mpeg4video.c:block_SkipByte
Unexecuted instantiation: mpegaudio.c:block_SkipByte
Unexecuted instantiation: mpegvideo.c:block_SkipByte
Unexecuted instantiation: vc1.c:block_SkipByte
230
231
static inline int block_PeekOffsetBytes( block_bytestream_t *p_bytestream,
232
    size_t i_peek_offset, uint8_t *p_data, size_t i_data )
233
6.47M
{
234
6.47M
    const size_t i_remain = block_BytestreamRemaining( p_bytestream );
235
6.47M
    if( i_remain < i_data + i_peek_offset )
236
530
        return VLC_EGENERIC;
237
238
    /* Find the right place */
239
6.47M
    size_t i_offset = p_bytestream->i_block_offset;
240
6.47M
    size_t i_size = i_peek_offset;
241
6.47M
    size_t i_copy = 0;
242
6.47M
    block_t *p_block;
243
6.47M
    for( p_block = p_bytestream->p_block;
244
15.3M
         p_block != NULL; p_block = p_block->p_next )
245
15.3M
    {
246
15.3M
        i_copy = __MIN( i_size, p_block->i_buffer - i_offset );
247
15.3M
        i_size -= i_copy;
248
249
15.3M
        if( !i_size ) break;
250
251
8.89M
        i_offset = 0;
252
8.89M
    }
253
254
    /* Copy the data */
255
6.47M
    i_offset += i_copy;
256
6.47M
    i_size = i_data;
257
6.48M
    for( ; p_block != NULL; p_block = p_block->p_next )
258
6.48M
    {
259
6.48M
        i_copy = __MIN( i_size, p_block->i_buffer - i_offset );
260
6.48M
        i_size -= i_copy;
261
262
6.48M
        if( i_copy )
263
6.48M
        {
264
6.48M
            memcpy( p_data, p_block->p_buffer + i_offset, i_copy );
265
6.48M
            p_data += i_copy;
266
6.48M
        }
267
268
6.48M
        i_offset = 0;
269
270
6.48M
        if( !i_size ) break;
271
6.48M
    }
272
273
6.47M
    return VLC_SUCCESS;
274
6.47M
}
a52.c:block_PeekOffsetBytes
Line
Count
Source
233
1.96k
{
234
1.96k
    const size_t i_remain = block_BytestreamRemaining( p_bytestream );
235
1.96k
    if( i_remain < i_data + i_peek_offset )
236
9
        return VLC_EGENERIC;
237
238
    /* Find the right place */
239
1.95k
    size_t i_offset = p_bytestream->i_block_offset;
240
1.95k
    size_t i_size = i_peek_offset;
241
1.95k
    size_t i_copy = 0;
242
1.95k
    block_t *p_block;
243
1.95k
    for( p_block = p_bytestream->p_block;
244
2.06k
         p_block != NULL; p_block = p_block->p_next )
245
2.06k
    {
246
2.06k
        i_copy = __MIN( i_size, p_block->i_buffer - i_offset );
247
2.06k
        i_size -= i_copy;
248
249
2.06k
        if( !i_size ) break;
250
251
110
        i_offset = 0;
252
110
    }
253
254
    /* Copy the data */
255
1.95k
    i_offset += i_copy;
256
1.95k
    i_size = i_data;
257
1.96k
    for( ; p_block != NULL; p_block = p_block->p_next )
258
1.96k
    {
259
1.96k
        i_copy = __MIN( i_size, p_block->i_buffer - i_offset );
260
1.96k
        i_size -= i_copy;
261
262
1.96k
        if( i_copy )
263
1.96k
        {
264
1.96k
            memcpy( p_data, p_block->p_buffer + i_offset, i_copy );
265
1.96k
            p_data += i_copy;
266
1.96k
        }
267
268
1.96k
        i_offset = 0;
269
270
1.96k
        if( !i_size ) break;
271
1.96k
    }
272
273
1.95k
    return VLC_SUCCESS;
274
1.96k
}
dts.c:block_PeekOffsetBytes
Line
Count
Source
233
1.15M
{
234
1.15M
    const size_t i_remain = block_BytestreamRemaining( p_bytestream );
235
1.15M
    if( i_remain < i_data + i_peek_offset )
236
336
        return VLC_EGENERIC;
237
238
    /* Find the right place */
239
1.15M
    size_t i_offset = p_bytestream->i_block_offset;
240
1.15M
    size_t i_size = i_peek_offset;
241
1.15M
    size_t i_copy = 0;
242
1.15M
    block_t *p_block;
243
1.15M
    for( p_block = p_bytestream->p_block;
244
9.84M
         p_block != NULL; p_block = p_block->p_next )
245
9.84M
    {
246
9.84M
        i_copy = __MIN( i_size, p_block->i_buffer - i_offset );
247
9.84M
        i_size -= i_copy;
248
249
9.84M
        if( !i_size ) break;
250
251
8.69M
        i_offset = 0;
252
8.69M
    }
253
254
    /* Copy the data */
255
1.15M
    i_offset += i_copy;
256
1.15M
    i_size = i_data;
257
1.15M
    for( ; p_block != NULL; p_block = p_block->p_next )
258
1.15M
    {
259
1.15M
        i_copy = __MIN( i_size, p_block->i_buffer - i_offset );
260
1.15M
        i_size -= i_copy;
261
262
1.15M
        if( i_copy )
263
1.15M
        {
264
1.15M
            memcpy( p_data, p_block->p_buffer + i_offset, i_copy );
265
1.15M
            p_data += i_copy;
266
1.15M
        }
267
268
1.15M
        i_offset = 0;
269
270
1.15M
        if( !i_size ) break;
271
1.15M
    }
272
273
1.15M
    return VLC_SUCCESS;
274
1.15M
}
flac.c:block_PeekOffsetBytes
Line
Count
Source
233
5.26M
{
234
5.26M
    const size_t i_remain = block_BytestreamRemaining( p_bytestream );
235
5.26M
    if( i_remain < i_data + i_peek_offset )
236
47
        return VLC_EGENERIC;
237
238
    /* Find the right place */
239
5.26M
    size_t i_offset = p_bytestream->i_block_offset;
240
5.26M
    size_t i_size = i_peek_offset;
241
5.26M
    size_t i_copy = 0;
242
5.26M
    block_t *p_block;
243
5.26M
    for( p_block = p_bytestream->p_block;
244
5.47M
         p_block != NULL; p_block = p_block->p_next )
245
5.47M
    {
246
5.47M
        i_copy = __MIN( i_size, p_block->i_buffer - i_offset );
247
5.47M
        i_size -= i_copy;
248
249
5.47M
        if( !i_size ) break;
250
251
202k
        i_offset = 0;
252
202k
    }
253
254
    /* Copy the data */
255
5.26M
    i_offset += i_copy;
256
5.26M
    i_size = i_data;
257
5.27M
    for( ; p_block != NULL; p_block = p_block->p_next )
258
5.27M
    {
259
5.27M
        i_copy = __MIN( i_size, p_block->i_buffer - i_offset );
260
5.27M
        i_size -= i_copy;
261
262
5.27M
        if( i_copy )
263
5.27M
        {
264
5.27M
            memcpy( p_data, p_block->p_buffer + i_offset, i_copy );
265
5.27M
            p_data += i_copy;
266
5.27M
        }
267
268
5.27M
        i_offset = 0;
269
270
5.27M
        if( !i_size ) break;
271
5.27M
    }
272
273
5.26M
    return VLC_SUCCESS;
274
5.26M
}
Unexecuted instantiation: h264.c:block_PeekOffsetBytes
Unexecuted instantiation: hevc.c:block_PeekOffsetBytes
mlp.c:block_PeekOffsetBytes
Line
Count
Source
233
51.9k
{
234
51.9k
    const size_t i_remain = block_BytestreamRemaining( p_bytestream );
235
51.9k
    if( i_remain < i_data + i_peek_offset )
236
138
        return VLC_EGENERIC;
237
238
    /* Find the right place */
239
51.8k
    size_t i_offset = p_bytestream->i_block_offset;
240
51.8k
    size_t i_size = i_peek_offset;
241
51.8k
    size_t i_copy = 0;
242
51.8k
    block_t *p_block;
243
51.8k
    for( p_block = p_bytestream->p_block;
244
52.2k
         p_block != NULL; p_block = p_block->p_next )
245
52.2k
    {
246
52.2k
        i_copy = __MIN( i_size, p_block->i_buffer - i_offset );
247
52.2k
        i_size -= i_copy;
248
249
52.2k
        if( !i_size ) break;
250
251
432
        i_offset = 0;
252
432
    }
253
254
    /* Copy the data */
255
51.8k
    i_offset += i_copy;
256
51.8k
    i_size = i_data;
257
52.9k
    for( ; p_block != NULL; p_block = p_block->p_next )
258
52.9k
    {
259
52.9k
        i_copy = __MIN( i_size, p_block->i_buffer - i_offset );
260
52.9k
        i_size -= i_copy;
261
262
52.9k
        if( i_copy )
263
52.9k
        {
264
52.9k
            memcpy( p_data, p_block->p_buffer + i_offset, i_copy );
265
52.9k
            p_data += i_copy;
266
52.9k
        }
267
268
52.9k
        i_offset = 0;
269
270
52.9k
        if( !i_size ) break;
271
52.9k
    }
272
273
51.8k
    return VLC_SUCCESS;
274
51.9k
}
Unexecuted instantiation: mpeg4audio.c:block_PeekOffsetBytes
Unexecuted instantiation: mpeg4video.c:block_PeekOffsetBytes
Unexecuted instantiation: mpegaudio.c:block_PeekOffsetBytes
Unexecuted instantiation: mpegvideo.c:block_PeekOffsetBytes
Unexecuted instantiation: vc1.c:block_PeekOffsetBytes
275
276
typedef const uint8_t * (*block_startcode_helper_t)( const uint8_t *, const uint8_t * );
277
typedef bool (*block_startcode_matcher_t)( uint8_t, size_t, const uint8_t * );
278
279
static inline int block_FindStartcodeFromOffset(
280
    block_bytestream_t *p_bytestream, size_t *pi_offset,
281
    const uint8_t *p_startcode, int i_startcode_length,
282
    block_startcode_helper_t p_startcode_helper,
283
    block_startcode_matcher_t p_startcode_matcher )
284
2.88M
{
285
2.88M
    block_t *p_block, *p_block_backup = 0;
286
2.88M
    ssize_t i_size = 0;
287
2.88M
    size_t i_offset, i_offset_backup = 0;
288
2.88M
    int i_caller_offset_backup = 0, i_match;
289
290
    /* Find the right place */
291
2.88M
    i_size = *pi_offset + p_bytestream->i_block_offset;
292
2.88M
    for( p_block = p_bytestream->p_block;
293
3.00M
         p_block != NULL; p_block = p_block->p_next )
294
3.00M
    {
295
3.00M
        i_size -= p_block->i_buffer;
296
3.00M
        if( i_size < 0 ) break;
297
3.00M
    }
298
299
2.88M
    if( unlikely( i_size >= 0 ) )
300
1
    {
301
        /* Not enough data, bail out */
302
1
        return VLC_EGENERIC;
303
1
    }
304
305
    /* Begin the search.
306
     * We first look for an occurrence of the 1st startcode byte and
307
     * if found, we do a more thorough check. */
308
2.88M
    i_size += p_block->i_buffer;
309
2.88M
    *pi_offset -= i_size;
310
2.88M
    i_match = 0;
311
2.88M
    for( ; p_block != NULL; p_block = p_block->p_next )
312
2.88M
    {
313
2.88M
        for( i_offset = i_size; i_offset < p_block->i_buffer; i_offset++ )
314
2.88M
        {
315
            /* Use optimized helper when possible */
316
2.88M
            if( p_startcode_helper && !i_match &&
317
2.88M
               (p_block->i_buffer - i_offset) > ((size_t)i_startcode_length - 1) )
318
2.88M
            {
319
2.88M
                const uint8_t *p_res = p_startcode_helper( &p_block->p_buffer[i_offset],
320
2.88M
                                                           &p_block->p_buffer[p_block->i_buffer] );
321
2.88M
                if( p_res )
322
2.88M
                {
323
2.88M
                    *pi_offset += i_offset + (p_res - &p_block->p_buffer[i_offset]);
324
2.88M
                    return VLC_SUCCESS;
325
2.88M
                }
326
                /* Then parsing boundary with legacy code */
327
1.04k
                i_offset = p_block->i_buffer - (i_startcode_length - 1);
328
1.04k
            }
329
330
1.43k
            bool b_matched = ( p_startcode_matcher )
331
1.43k
                           ? p_startcode_matcher( p_block->p_buffer[i_offset], i_match, p_startcode )
332
1.43k
                           : p_block->p_buffer[i_offset] == p_startcode[i_match];
333
1.43k
            if( b_matched )
334
198
            {
335
198
                if( i_match == 0 )
336
104
                {
337
104
                    p_block_backup = p_block;
338
104
                    i_offset_backup = i_offset;
339
104
                    i_caller_offset_backup = *pi_offset;
340
104
                }
341
342
198
                if( i_match + 1 == i_startcode_length )
343
94
                {
344
                    /* We have it */
345
94
                    *pi_offset += i_offset - i_match;
346
94
                    return VLC_SUCCESS;
347
94
                }
348
349
104
                i_match++;
350
104
            }
351
1.23k
            else if ( i_match > 0 )
352
5
            {
353
                /* False positive */
354
5
                p_block = p_block_backup;
355
5
                i_offset = i_offset_backup;
356
5
                *pi_offset = i_caller_offset_backup;
357
5
                i_match = 0;
358
5
            }
359
360
1.43k
        }
361
1.33k
        i_size = 0;
362
1.33k
        *pi_offset += i_offset;
363
1.33k
    }
364
365
131
    *pi_offset -= i_match;
366
131
    return VLC_EGENERIC;
367
2.88M
}
Unexecuted instantiation: a52.c:block_FindStartcodeFromOffset
Unexecuted instantiation: dts.c:block_FindStartcodeFromOffset
flac.c:block_FindStartcodeFromOffset
Line
Count
Source
284
2.88M
{
285
2.88M
    block_t *p_block, *p_block_backup = 0;
286
2.88M
    ssize_t i_size = 0;
287
2.88M
    size_t i_offset, i_offset_backup = 0;
288
2.88M
    int i_caller_offset_backup = 0, i_match;
289
290
    /* Find the right place */
291
2.88M
    i_size = *pi_offset + p_bytestream->i_block_offset;
292
2.88M
    for( p_block = p_bytestream->p_block;
293
3.00M
         p_block != NULL; p_block = p_block->p_next )
294
3.00M
    {
295
3.00M
        i_size -= p_block->i_buffer;
296
3.00M
        if( i_size < 0 ) break;
297
3.00M
    }
298
299
2.88M
    if( unlikely( i_size >= 0 ) )
300
1
    {
301
        /* Not enough data, bail out */
302
1
        return VLC_EGENERIC;
303
1
    }
304
305
    /* Begin the search.
306
     * We first look for an occurrence of the 1st startcode byte and
307
     * if found, we do a more thorough check. */
308
2.88M
    i_size += p_block->i_buffer;
309
2.88M
    *pi_offset -= i_size;
310
2.88M
    i_match = 0;
311
2.88M
    for( ; p_block != NULL; p_block = p_block->p_next )
312
2.88M
    {
313
2.88M
        for( i_offset = i_size; i_offset < p_block->i_buffer; i_offset++ )
314
2.88M
        {
315
            /* Use optimized helper when possible */
316
2.88M
            if( p_startcode_helper && !i_match &&
317
2.88M
               (p_block->i_buffer - i_offset) > ((size_t)i_startcode_length - 1) )
318
2.88M
            {
319
2.88M
                const uint8_t *p_res = p_startcode_helper( &p_block->p_buffer[i_offset],
320
2.88M
                                                           &p_block->p_buffer[p_block->i_buffer] );
321
2.88M
                if( p_res )
322
2.88M
                {
323
2.88M
                    *pi_offset += i_offset + (p_res - &p_block->p_buffer[i_offset]);
324
2.88M
                    return VLC_SUCCESS;
325
2.88M
                }
326
                /* Then parsing boundary with legacy code */
327
1.04k
                i_offset = p_block->i_buffer - (i_startcode_length - 1);
328
1.04k
            }
329
330
1.43k
            bool b_matched = ( p_startcode_matcher )
331
1.43k
                           ? p_startcode_matcher( p_block->p_buffer[i_offset], i_match, p_startcode )
332
1.43k
                           : p_block->p_buffer[i_offset] == p_startcode[i_match];
333
1.43k
            if( b_matched )
334
198
            {
335
198
                if( i_match == 0 )
336
104
                {
337
104
                    p_block_backup = p_block;
338
104
                    i_offset_backup = i_offset;
339
104
                    i_caller_offset_backup = *pi_offset;
340
104
                }
341
342
198
                if( i_match + 1 == i_startcode_length )
343
94
                {
344
                    /* We have it */
345
94
                    *pi_offset += i_offset - i_match;
346
94
                    return VLC_SUCCESS;
347
94
                }
348
349
104
                i_match++;
350
104
            }
351
1.23k
            else if ( i_match > 0 )
352
5
            {
353
                /* False positive */
354
5
                p_block = p_block_backup;
355
5
                i_offset = i_offset_backup;
356
5
                *pi_offset = i_caller_offset_backup;
357
5
                i_match = 0;
358
5
            }
359
360
1.43k
        }
361
1.33k
        i_size = 0;
362
1.33k
        *pi_offset += i_offset;
363
1.33k
    }
364
365
131
    *pi_offset -= i_match;
366
131
    return VLC_EGENERIC;
367
2.88M
}
Unexecuted instantiation: h264.c:block_FindStartcodeFromOffset
Unexecuted instantiation: hevc.c:block_FindStartcodeFromOffset
Unexecuted instantiation: mlp.c:block_FindStartcodeFromOffset
Unexecuted instantiation: mpeg4audio.c:block_FindStartcodeFromOffset
Unexecuted instantiation: mpeg4video.c:block_FindStartcodeFromOffset
Unexecuted instantiation: mpegaudio.c:block_FindStartcodeFromOffset
Unexecuted instantiation: mpegvideo.c:block_FindStartcodeFromOffset
Unexecuted instantiation: vc1.c:block_FindStartcodeFromOffset
368
369
#endif /* VLC_BLOCK_HELPER_H */