/src/vlc/modules/packetizer/packetizer_helper.h
Line | Count | Source |
1 | | /***************************************************************************** |
2 | | * packetizer_helper.h: Packetizer helpers |
3 | | ***************************************************************************** |
4 | | * Copyright (C) 2009 Laurent Aimar |
5 | | * |
6 | | * Authors: Laurent Aimar <fenrir _AT_ videolan _DOT_ org> |
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_PACKETIZER_HELPER_H_ |
24 | | #define VLC_PACKETIZER_HELPER_H_ |
25 | | |
26 | | #include <vlc_block.h> |
27 | | |
28 | | enum |
29 | | { |
30 | | STATE_NOSYNC, |
31 | | STATE_SYNC, |
32 | | STATE_HEADER, |
33 | | STATE_NEXT_SYNC, |
34 | | STATE_GET_DATA, |
35 | | STATE_SEND_DATA, |
36 | | STATE_CUSTOM_FIRST, |
37 | | }; |
38 | | |
39 | | typedef void (*packetizer_reset_t)( void *p_private, bool b_flush ); |
40 | | typedef block_t *(*packetizer_parse_t)( void *p_private, bool *pb_ts_used, block_t * ); |
41 | | typedef block_t *(*packetizer_drain_t)( void *p_private ); |
42 | | typedef int (*packetizer_validate_t)( void *p_private, block_t * ); |
43 | | |
44 | | typedef struct |
45 | | { |
46 | | int i_state; |
47 | | block_bytestream_t bytestream; |
48 | | size_t i_offset; |
49 | | |
50 | | int i_startcode; |
51 | | const uint8_t *p_startcode; |
52 | | block_startcode_helper_t pf_startcode_helper; |
53 | | |
54 | | int i_au_prepend; |
55 | | const uint8_t *p_au_prepend; |
56 | | |
57 | | unsigned i_au_min_size; |
58 | | |
59 | | void *p_private; |
60 | | packetizer_reset_t pf_reset; |
61 | | packetizer_parse_t pf_parse; |
62 | | packetizer_validate_t pf_validate; |
63 | | packetizer_drain_t pf_drain; |
64 | | |
65 | | } packetizer_t; |
66 | | |
67 | | static inline void packetizer_Init( packetizer_t *p_pack, |
68 | | const uint8_t *p_startcode, int i_startcode, |
69 | | block_startcode_helper_t pf_start_helper, |
70 | | const uint8_t *p_au_prepend, int i_au_prepend, |
71 | | unsigned i_au_min_size, |
72 | | packetizer_reset_t pf_reset, |
73 | | packetizer_parse_t pf_parse, |
74 | | packetizer_validate_t pf_validate, |
75 | | packetizer_drain_t pf_drain, |
76 | | void *p_private ) |
77 | 108k | { |
78 | 108k | p_pack->i_state = STATE_NOSYNC; |
79 | 108k | block_BytestreamInit( &p_pack->bytestream ); |
80 | 108k | p_pack->i_offset = 0; |
81 | | |
82 | 108k | p_pack->i_au_prepend = i_au_prepend; |
83 | 108k | p_pack->p_au_prepend = p_au_prepend; |
84 | 108k | p_pack->i_au_min_size = i_au_min_size; |
85 | | |
86 | 108k | p_pack->i_startcode = i_startcode; |
87 | 108k | p_pack->p_startcode = p_startcode; |
88 | 108k | p_pack->pf_startcode_helper = pf_start_helper; |
89 | 108k | p_pack->pf_reset = pf_reset; |
90 | 108k | p_pack->pf_parse = pf_parse; |
91 | 108k | p_pack->pf_validate = pf_validate; |
92 | 108k | p_pack->pf_drain = pf_drain; |
93 | 108k | p_pack->p_private = p_private; |
94 | 108k | } Unexecuted instantiation: a52.c:packetizer_Init Unexecuted instantiation: dts.c:packetizer_Init Unexecuted instantiation: flac.c:packetizer_Init Line | Count | Source | 77 | 45.7k | { | 78 | 45.7k | p_pack->i_state = STATE_NOSYNC; | 79 | 45.7k | block_BytestreamInit( &p_pack->bytestream ); | 80 | 45.7k | p_pack->i_offset = 0; | 81 | | | 82 | 45.7k | p_pack->i_au_prepend = i_au_prepend; | 83 | 45.7k | p_pack->p_au_prepend = p_au_prepend; | 84 | 45.7k | p_pack->i_au_min_size = i_au_min_size; | 85 | | | 86 | 45.7k | p_pack->i_startcode = i_startcode; | 87 | 45.7k | p_pack->p_startcode = p_startcode; | 88 | 45.7k | p_pack->pf_startcode_helper = pf_start_helper; | 89 | 45.7k | p_pack->pf_reset = pf_reset; | 90 | 45.7k | p_pack->pf_parse = pf_parse; | 91 | 45.7k | p_pack->pf_validate = pf_validate; | 92 | 45.7k | p_pack->pf_drain = pf_drain; | 93 | 45.7k | p_pack->p_private = p_private; | 94 | 45.7k | } |
Line | Count | Source | 77 | 22.4k | { | 78 | 22.4k | p_pack->i_state = STATE_NOSYNC; | 79 | 22.4k | block_BytestreamInit( &p_pack->bytestream ); | 80 | 22.4k | p_pack->i_offset = 0; | 81 | | | 82 | 22.4k | p_pack->i_au_prepend = i_au_prepend; | 83 | 22.4k | p_pack->p_au_prepend = p_au_prepend; | 84 | 22.4k | p_pack->i_au_min_size = i_au_min_size; | 85 | | | 86 | 22.4k | p_pack->i_startcode = i_startcode; | 87 | 22.4k | p_pack->p_startcode = p_startcode; | 88 | 22.4k | p_pack->pf_startcode_helper = pf_start_helper; | 89 | 22.4k | p_pack->pf_reset = pf_reset; | 90 | 22.4k | p_pack->pf_parse = pf_parse; | 91 | 22.4k | p_pack->pf_validate = pf_validate; | 92 | 22.4k | p_pack->pf_drain = pf_drain; | 93 | 22.4k | p_pack->p_private = p_private; | 94 | 22.4k | } |
Unexecuted instantiation: mlp.c:packetizer_Init Unexecuted instantiation: mpeg4audio.c:packetizer_Init mpeg4video.c:packetizer_Init Line | Count | Source | 77 | 5.78k | { | 78 | 5.78k | p_pack->i_state = STATE_NOSYNC; | 79 | 5.78k | block_BytestreamInit( &p_pack->bytestream ); | 80 | 5.78k | p_pack->i_offset = 0; | 81 | | | 82 | 5.78k | p_pack->i_au_prepend = i_au_prepend; | 83 | 5.78k | p_pack->p_au_prepend = p_au_prepend; | 84 | 5.78k | p_pack->i_au_min_size = i_au_min_size; | 85 | | | 86 | 5.78k | p_pack->i_startcode = i_startcode; | 87 | 5.78k | p_pack->p_startcode = p_startcode; | 88 | 5.78k | p_pack->pf_startcode_helper = pf_start_helper; | 89 | 5.78k | p_pack->pf_reset = pf_reset; | 90 | 5.78k | p_pack->pf_parse = pf_parse; | 91 | 5.78k | p_pack->pf_validate = pf_validate; | 92 | 5.78k | p_pack->pf_drain = pf_drain; | 93 | 5.78k | p_pack->p_private = p_private; | 94 | 5.78k | } |
Unexecuted instantiation: mpegaudio.c:packetizer_Init mpegvideo.c:packetizer_Init Line | Count | Source | 77 | 33.5k | { | 78 | 33.5k | p_pack->i_state = STATE_NOSYNC; | 79 | 33.5k | block_BytestreamInit( &p_pack->bytestream ); | 80 | 33.5k | p_pack->i_offset = 0; | 81 | | | 82 | 33.5k | p_pack->i_au_prepend = i_au_prepend; | 83 | 33.5k | p_pack->p_au_prepend = p_au_prepend; | 84 | 33.5k | p_pack->i_au_min_size = i_au_min_size; | 85 | | | 86 | 33.5k | p_pack->i_startcode = i_startcode; | 87 | 33.5k | p_pack->p_startcode = p_startcode; | 88 | 33.5k | p_pack->pf_startcode_helper = pf_start_helper; | 89 | 33.5k | p_pack->pf_reset = pf_reset; | 90 | 33.5k | p_pack->pf_parse = pf_parse; | 91 | 33.5k | p_pack->pf_validate = pf_validate; | 92 | 33.5k | p_pack->pf_drain = pf_drain; | 93 | 33.5k | p_pack->p_private = p_private; | 94 | 33.5k | } |
Line | Count | Source | 77 | 730 | { | 78 | 730 | p_pack->i_state = STATE_NOSYNC; | 79 | 730 | block_BytestreamInit( &p_pack->bytestream ); | 80 | 730 | p_pack->i_offset = 0; | 81 | | | 82 | 730 | p_pack->i_au_prepend = i_au_prepend; | 83 | 730 | p_pack->p_au_prepend = p_au_prepend; | 84 | 730 | p_pack->i_au_min_size = i_au_min_size; | 85 | | | 86 | 730 | p_pack->i_startcode = i_startcode; | 87 | 730 | p_pack->p_startcode = p_startcode; | 88 | 730 | p_pack->pf_startcode_helper = pf_start_helper; | 89 | 730 | p_pack->pf_reset = pf_reset; | 90 | 730 | p_pack->pf_parse = pf_parse; | 91 | 730 | p_pack->pf_validate = pf_validate; | 92 | 730 | p_pack->pf_drain = pf_drain; | 93 | 730 | p_pack->p_private = p_private; | 94 | 730 | } |
Line | Count | Source | 77 | 380 | { | 78 | 380 | p_pack->i_state = STATE_NOSYNC; | 79 | 380 | block_BytestreamInit( &p_pack->bytestream ); | 80 | 380 | p_pack->i_offset = 0; | 81 | | | 82 | 380 | p_pack->i_au_prepend = i_au_prepend; | 83 | 380 | p_pack->p_au_prepend = p_au_prepend; | 84 | 380 | p_pack->i_au_min_size = i_au_min_size; | 85 | | | 86 | 380 | p_pack->i_startcode = i_startcode; | 87 | 380 | p_pack->p_startcode = p_startcode; | 88 | 380 | p_pack->pf_startcode_helper = pf_start_helper; | 89 | 380 | p_pack->pf_reset = pf_reset; | 90 | 380 | p_pack->pf_parse = pf_parse; | 91 | 380 | p_pack->pf_validate = pf_validate; | 92 | 380 | p_pack->pf_drain = pf_drain; | 93 | 380 | p_pack->p_private = p_private; | 94 | 380 | } |
|
95 | | |
96 | | static inline void packetizer_Clean( packetizer_t *p_pack ) |
97 | 108k | { |
98 | 108k | block_BytestreamRelease( &p_pack->bytestream ); |
99 | 108k | } Unexecuted instantiation: a52.c:packetizer_Clean Unexecuted instantiation: dts.c:packetizer_Clean Unexecuted instantiation: flac.c:packetizer_Clean Line | Count | Source | 97 | 45.7k | { | 98 | 45.7k | block_BytestreamRelease( &p_pack->bytestream ); | 99 | 45.7k | } |
Line | Count | Source | 97 | 22.4k | { | 98 | 22.4k | block_BytestreamRelease( &p_pack->bytestream ); | 99 | 22.4k | } |
Unexecuted instantiation: mlp.c:packetizer_Clean Unexecuted instantiation: mpeg4audio.c:packetizer_Clean mpeg4video.c:packetizer_Clean Line | Count | Source | 97 | 5.78k | { | 98 | 5.78k | block_BytestreamRelease( &p_pack->bytestream ); | 99 | 5.78k | } |
Unexecuted instantiation: mpegaudio.c:packetizer_Clean mpegvideo.c:packetizer_Clean Line | Count | Source | 97 | 33.5k | { | 98 | 33.5k | block_BytestreamRelease( &p_pack->bytestream ); | 99 | 33.5k | } |
Line | Count | Source | 97 | 730 | { | 98 | 730 | block_BytestreamRelease( &p_pack->bytestream ); | 99 | 730 | } |
Line | Count | Source | 97 | 380 | { | 98 | 380 | block_BytestreamRelease( &p_pack->bytestream ); | 99 | 380 | } |
|
100 | | |
101 | | static inline void packetizer_Flush( packetizer_t *p_pack ) |
102 | 0 | { |
103 | 0 | p_pack->i_state = STATE_NOSYNC; |
104 | 0 | block_BytestreamEmpty( &p_pack->bytestream ); |
105 | 0 | p_pack->i_offset = 0; |
106 | 0 | p_pack->pf_reset( p_pack->p_private, true ); |
107 | 0 | } Unexecuted instantiation: a52.c:packetizer_Flush Unexecuted instantiation: dts.c:packetizer_Flush Unexecuted instantiation: flac.c:packetizer_Flush Unexecuted instantiation: h264.c:packetizer_Flush Unexecuted instantiation: hevc.c:packetizer_Flush Unexecuted instantiation: mlp.c:packetizer_Flush Unexecuted instantiation: mpeg4audio.c:packetizer_Flush Unexecuted instantiation: mpeg4video.c:packetizer_Flush Unexecuted instantiation: mpegaudio.c:packetizer_Flush Unexecuted instantiation: mpegvideo.c:packetizer_Flush Unexecuted instantiation: vc1.c:packetizer_Flush Unexecuted instantiation: mjpeg.c:packetizer_Flush |
108 | | |
109 | | static block_t *packetizer_PacketizeBlock( packetizer_t *p_pack, block_t **pp_block ) |
110 | 6.61M | { |
111 | 6.61M | block_t *p_block = ( pp_block ) ? *pp_block : NULL; |
112 | | |
113 | 6.61M | if( p_block == NULL && p_pack->bytestream.p_block == NULL ) |
114 | 111k | return NULL; |
115 | | |
116 | 6.50M | if( p_block && unlikely( p_block->i_flags&(BLOCK_FLAG_DISCONTINUITY|BLOCK_FLAG_CORRUPTED) ) ) |
117 | 228k | { |
118 | 228k | block_t *p_drained = packetizer_PacketizeBlock( p_pack, NULL ); |
119 | 228k | if( p_drained ) |
120 | 16.3k | return p_drained; |
121 | | |
122 | 211k | p_pack->i_state = STATE_NOSYNC; |
123 | 211k | block_BytestreamEmpty( &p_pack->bytestream ); |
124 | 211k | p_pack->i_offset = 0; |
125 | 211k | p_pack->pf_reset( p_pack->p_private, false ); |
126 | 211k | } |
127 | | |
128 | 6.48M | if( p_block ) |
129 | 6.21M | block_BytestreamPush( &p_pack->bytestream, p_block ); |
130 | | |
131 | 6.48M | for( ;; ) |
132 | 71.4M | { |
133 | 71.4M | bool b_used_ts; |
134 | 71.4M | block_t *p_pic; |
135 | | |
136 | 71.4M | switch( p_pack->i_state ) |
137 | 71.4M | { |
138 | 68.7M | case STATE_NOSYNC: |
139 | | /* Find a startcode */ |
140 | 68.7M | if( !block_FindStartcodeFromOffset( &p_pack->bytestream, &p_pack->i_offset, |
141 | 68.7M | p_pack->p_startcode, p_pack->i_startcode, |
142 | 68.7M | p_pack->pf_startcode_helper, NULL ) ) |
143 | 68.3M | p_pack->i_state = STATE_NEXT_SYNC; |
144 | | |
145 | 68.7M | if( p_pack->i_offset ) |
146 | 305k | { |
147 | 305k | block_SkipBytes( &p_pack->bytestream, p_pack->i_offset ); |
148 | 305k | p_pack->i_offset = 0; |
149 | 305k | block_BytestreamFlush( &p_pack->bytestream ); |
150 | 305k | } |
151 | | |
152 | 68.7M | if( p_pack->i_state != STATE_NEXT_SYNC ) |
153 | 416k | return NULL; /* Need more data */ |
154 | | |
155 | 68.3M | p_pack->i_offset = 1; /* To find next startcode */ |
156 | | /* fallthrough */ |
157 | | |
158 | 71.0M | case STATE_NEXT_SYNC: |
159 | | /* Find the next startcode */ |
160 | 71.0M | if( block_FindStartcodeFromOffset( &p_pack->bytestream, &p_pack->i_offset, |
161 | 71.0M | p_pack->p_startcode, p_pack->i_startcode, |
162 | 71.0M | p_pack->pf_startcode_helper, NULL ) ) |
163 | 2.90M | { |
164 | 2.90M | if( pp_block /* not flushing */ || !p_pack->bytestream.p_chain ) |
165 | 2.67M | return NULL; /* Need more data */ |
166 | | |
167 | | /* When flushing and we don't find a startcode, suppose that |
168 | | * the data extend up to the end */ |
169 | 232k | p_pack->i_offset = block_BytestreamRemaining(&p_pack->bytestream); |
170 | 232k | if( p_pack->i_offset == 0 ) |
171 | 0 | return NULL; |
172 | | |
173 | 232k | if( p_pack->i_offset <= (size_t)p_pack->i_startcode && |
174 | 3.10k | (p_pack->bytestream.p_block->i_flags & BLOCK_FLAG_AU_END) == 0 ) |
175 | 3.10k | return NULL; |
176 | 232k | } |
177 | | |
178 | 68.3M | block_BytestreamFlush( &p_pack->bytestream ); |
179 | | |
180 | | /* Get the new fragment and set the pts/dts */ |
181 | 68.3M | block_t *p_block_bytestream = p_pack->bytestream.p_block; |
182 | | |
183 | 68.3M | p_pic = block_Alloc( p_pack->i_offset + p_pack->i_au_prepend ); |
184 | 68.3M | if( p_pic == NULL ) |
185 | 0 | { |
186 | 0 | p_pack->i_state = STATE_NOSYNC; |
187 | 0 | return NULL; |
188 | 0 | } |
189 | 68.3M | p_pic->i_pts = p_block_bytestream->i_pts; |
190 | 68.3M | p_pic->i_dts = p_block_bytestream->i_dts; |
191 | | |
192 | | /* Do not wait for next sync code if notified block ends AU */ |
193 | 68.3M | if( (p_block_bytestream->i_flags & BLOCK_FLAG_AU_END) && |
194 | 0 | p_block_bytestream->i_buffer == p_pack->i_offset ) |
195 | 0 | { |
196 | 0 | p_pic->i_flags |= BLOCK_FLAG_AU_END; |
197 | 0 | } |
198 | | |
199 | 68.3M | block_GetBytes( &p_pack->bytestream, &p_pic->p_buffer[p_pack->i_au_prepend], |
200 | 68.3M | p_pic->i_buffer - p_pack->i_au_prepend ); |
201 | 68.3M | if( p_pack->i_au_prepend > 0 ) |
202 | 65.8M | memcpy( p_pic->p_buffer, p_pack->p_au_prepend, p_pack->i_au_prepend ); |
203 | | |
204 | 68.3M | p_pack->i_offset = 0; |
205 | | |
206 | | /* Parse the NAL */ |
207 | 68.3M | if( p_pic->i_buffer < p_pack->i_au_min_size ) |
208 | 807k | { |
209 | 807k | block_Release( p_pic ); |
210 | 807k | p_pic = NULL; |
211 | 807k | } |
212 | 67.5M | else |
213 | 67.5M | { |
214 | 67.5M | p_pic = p_pack->pf_parse( p_pack->p_private, &b_used_ts, p_pic ); |
215 | 67.5M | if( b_used_ts ) |
216 | 31.9M | { |
217 | 31.9M | p_block_bytestream->i_dts = VLC_TICK_INVALID; |
218 | 31.9M | p_block_bytestream->i_pts = VLC_TICK_INVALID; |
219 | 31.9M | } |
220 | 67.5M | } |
221 | | |
222 | 68.3M | if( !p_pic ) |
223 | 64.9M | { |
224 | 64.9M | p_pack->i_state = STATE_NOSYNC; |
225 | 64.9M | break; |
226 | 64.9M | } |
227 | 3.42M | if( p_pack->pf_validate( p_pack->p_private, p_pic ) ) |
228 | 28.9k | { |
229 | 28.9k | p_pack->i_state = STATE_NOSYNC; |
230 | 28.9k | block_Release( p_pic ); |
231 | 28.9k | break; |
232 | 28.9k | } |
233 | | |
234 | | /* So p_block doesn't get re-added several times */ |
235 | 3.39M | if( pp_block ) |
236 | 3.37M | *pp_block = block_BytestreamPop( &p_pack->bytestream ); |
237 | | |
238 | 3.39M | p_pack->i_state = STATE_NOSYNC; |
239 | | |
240 | 3.39M | return p_pic; |
241 | 71.4M | } |
242 | 71.4M | } |
243 | 6.48M | } Unexecuted instantiation: a52.c:packetizer_PacketizeBlock Unexecuted instantiation: dts.c:packetizer_PacketizeBlock Unexecuted instantiation: flac.c:packetizer_PacketizeBlock h264.c:packetizer_PacketizeBlock Line | Count | Source | 110 | 1.36M | { | 111 | 1.36M | block_t *p_block = ( pp_block ) ? *pp_block : NULL; | 112 | | | 113 | 1.36M | if( p_block == NULL && p_pack->bytestream.p_block == NULL ) | 114 | 71.9k | return NULL; | 115 | | | 116 | 1.29M | if( p_block && unlikely( p_block->i_flags&(BLOCK_FLAG_DISCONTINUITY|BLOCK_FLAG_CORRUPTED) ) ) | 117 | 171k | { | 118 | 171k | block_t *p_drained = packetizer_PacketizeBlock( p_pack, NULL ); | 119 | 171k | if( p_drained ) | 120 | 15.9k | return p_drained; | 121 | | | 122 | 155k | p_pack->i_state = STATE_NOSYNC; | 123 | 155k | block_BytestreamEmpty( &p_pack->bytestream ); | 124 | 155k | p_pack->i_offset = 0; | 125 | 155k | p_pack->pf_reset( p_pack->p_private, false ); | 126 | 155k | } | 127 | | | 128 | 1.27M | if( p_block ) | 129 | 1.09M | block_BytestreamPush( &p_pack->bytestream, p_block ); | 130 | | | 131 | 1.27M | for( ;; ) | 132 | 4.37M | { | 133 | 4.37M | bool b_used_ts; | 134 | 4.37M | block_t *p_pic; | 135 | | | 136 | 4.37M | switch( p_pack->i_state ) | 137 | 4.37M | { | 138 | 3.90M | case STATE_NOSYNC: | 139 | | /* Find a startcode */ | 140 | 3.90M | if( !block_FindStartcodeFromOffset( &p_pack->bytestream, &p_pack->i_offset, | 141 | 3.90M | p_pack->p_startcode, p_pack->i_startcode, | 142 | 3.90M | p_pack->pf_startcode_helper, NULL ) ) | 143 | 3.68M | p_pack->i_state = STATE_NEXT_SYNC; | 144 | | | 145 | 3.90M | if( p_pack->i_offset ) | 146 | 133k | { | 147 | 133k | block_SkipBytes( &p_pack->bytestream, p_pack->i_offset ); | 148 | 133k | p_pack->i_offset = 0; | 149 | 133k | block_BytestreamFlush( &p_pack->bytestream ); | 150 | 133k | } | 151 | | | 152 | 3.90M | if( p_pack->i_state != STATE_NEXT_SYNC ) | 153 | 222k | return NULL; /* Need more data */ | 154 | | | 155 | 3.68M | p_pack->i_offset = 1; /* To find next startcode */ | 156 | | /* fallthrough */ | 157 | | | 158 | 4.15M | case STATE_NEXT_SYNC: | 159 | | /* Find the next startcode */ | 160 | 4.15M | if( block_FindStartcodeFromOffset( &p_pack->bytestream, &p_pack->i_offset, | 161 | 4.15M | p_pack->p_startcode, p_pack->i_startcode, | 162 | 4.15M | p_pack->pf_startcode_helper, NULL ) ) | 163 | 622k | { | 164 | 622k | if( pp_block /* not flushing */ || !p_pack->bytestream.p_chain ) | 165 | 472k | return NULL; /* Need more data */ | 166 | | | 167 | | /* When flushing and we don't find a startcode, suppose that | 168 | | * the data extend up to the end */ | 169 | 150k | p_pack->i_offset = block_BytestreamRemaining(&p_pack->bytestream); | 170 | 150k | if( p_pack->i_offset == 0 ) | 171 | 0 | return NULL; | 172 | | | 173 | 150k | if( p_pack->i_offset <= (size_t)p_pack->i_startcode && | 174 | 1.48k | (p_pack->bytestream.p_block->i_flags & BLOCK_FLAG_AU_END) == 0 ) | 175 | 1.48k | return NULL; | 176 | 150k | } | 177 | | | 178 | 3.68M | block_BytestreamFlush( &p_pack->bytestream ); | 179 | | | 180 | | /* Get the new fragment and set the pts/dts */ | 181 | 3.68M | block_t *p_block_bytestream = p_pack->bytestream.p_block; | 182 | | | 183 | 3.68M | p_pic = block_Alloc( p_pack->i_offset + p_pack->i_au_prepend ); | 184 | 3.68M | if( p_pic == NULL ) | 185 | 0 | { | 186 | 0 | p_pack->i_state = STATE_NOSYNC; | 187 | 0 | return NULL; | 188 | 0 | } | 189 | 3.68M | p_pic->i_pts = p_block_bytestream->i_pts; | 190 | 3.68M | p_pic->i_dts = p_block_bytestream->i_dts; | 191 | | | 192 | | /* Do not wait for next sync code if notified block ends AU */ | 193 | 3.68M | if( (p_block_bytestream->i_flags & BLOCK_FLAG_AU_END) && | 194 | 0 | p_block_bytestream->i_buffer == p_pack->i_offset ) | 195 | 0 | { | 196 | 0 | p_pic->i_flags |= BLOCK_FLAG_AU_END; | 197 | 0 | } | 198 | | | 199 | 3.68M | block_GetBytes( &p_pack->bytestream, &p_pic->p_buffer[p_pack->i_au_prepend], | 200 | 3.68M | p_pic->i_buffer - p_pack->i_au_prepend ); | 201 | 3.68M | if( p_pack->i_au_prepend > 0 ) | 202 | 3.68M | memcpy( p_pic->p_buffer, p_pack->p_au_prepend, p_pack->i_au_prepend ); | 203 | | | 204 | 3.68M | p_pack->i_offset = 0; | 205 | | | 206 | | /* Parse the NAL */ | 207 | 3.68M | if( p_pic->i_buffer < p_pack->i_au_min_size ) | 208 | 17.0k | { | 209 | 17.0k | block_Release( p_pic ); | 210 | 17.0k | p_pic = NULL; | 211 | 17.0k | } | 212 | 3.66M | else | 213 | 3.66M | { | 214 | 3.66M | p_pic = p_pack->pf_parse( p_pack->p_private, &b_used_ts, p_pic ); | 215 | 3.66M | if( b_used_ts ) | 216 | 2.17M | { | 217 | 2.17M | p_block_bytestream->i_dts = VLC_TICK_INVALID; | 218 | 2.17M | p_block_bytestream->i_pts = VLC_TICK_INVALID; | 219 | 2.17M | } | 220 | 3.66M | } | 221 | | | 222 | 3.68M | if( !p_pic ) | 223 | 3.10M | { | 224 | 3.10M | p_pack->i_state = STATE_NOSYNC; | 225 | 3.10M | break; | 226 | 3.10M | } | 227 | 581k | if( p_pack->pf_validate( p_pack->p_private, p_pic ) ) | 228 | 0 | { | 229 | 0 | p_pack->i_state = STATE_NOSYNC; | 230 | 0 | block_Release( p_pic ); | 231 | 0 | break; | 232 | 0 | } | 233 | | | 234 | | /* So p_block doesn't get re-added several times */ | 235 | 581k | if( pp_block ) | 236 | 561k | *pp_block = block_BytestreamPop( &p_pack->bytestream ); | 237 | | | 238 | 581k | p_pack->i_state = STATE_NOSYNC; | 239 | | | 240 | 581k | return p_pic; | 241 | 4.37M | } | 242 | 4.37M | } | 243 | 1.27M | } |
hevc.c:packetizer_PacketizeBlock Line | Count | Source | 110 | 4.29M | { | 111 | 4.29M | block_t *p_block = ( pp_block ) ? *pp_block : NULL; | 112 | | | 113 | 4.29M | if( p_block == NULL && p_pack->bytestream.p_block == NULL ) | 114 | 2.33k | return NULL; | 115 | | | 116 | 4.29M | if( p_block && unlikely( p_block->i_flags&(BLOCK_FLAG_DISCONTINUITY|BLOCK_FLAG_CORRUPTED) ) ) | 117 | 350 | { | 118 | 350 | block_t *p_drained = packetizer_PacketizeBlock( p_pack, NULL ); | 119 | 350 | if( p_drained ) | 120 | 0 | return p_drained; | 121 | | | 122 | 350 | p_pack->i_state = STATE_NOSYNC; | 123 | 350 | block_BytestreamEmpty( &p_pack->bytestream ); | 124 | 350 | p_pack->i_offset = 0; | 125 | 350 | p_pack->pf_reset( p_pack->p_private, false ); | 126 | 350 | } | 127 | | | 128 | 4.29M | if( p_block ) | 129 | 4.26M | block_BytestreamPush( &p_pack->bytestream, p_block ); | 130 | | | 131 | 4.29M | for( ;; ) | 132 | 63.8M | { | 133 | 63.8M | bool b_used_ts; | 134 | 63.8M | block_t *p_pic; | 135 | | | 136 | 63.8M | switch( p_pack->i_state ) | 137 | 63.8M | { | 138 | 62.2M | case STATE_NOSYNC: | 139 | | /* Find a startcode */ | 140 | 62.2M | if( !block_FindStartcodeFromOffset( &p_pack->bytestream, &p_pack->i_offset, | 141 | 62.2M | p_pack->p_startcode, p_pack->i_startcode, | 142 | 62.2M | p_pack->pf_startcode_helper, NULL ) ) | 143 | 62.1M | p_pack->i_state = STATE_NEXT_SYNC; | 144 | | | 145 | 62.2M | if( p_pack->i_offset ) | 146 | 43.1k | { | 147 | 43.1k | block_SkipBytes( &p_pack->bytestream, p_pack->i_offset ); | 148 | 43.1k | p_pack->i_offset = 0; | 149 | 43.1k | block_BytestreamFlush( &p_pack->bytestream ); | 150 | 43.1k | } | 151 | | | 152 | 62.2M | if( p_pack->i_state != STATE_NEXT_SYNC ) | 153 | 50.5k | return NULL; /* Need more data */ | 154 | | | 155 | 62.1M | p_pack->i_offset = 1; /* To find next startcode */ | 156 | | /* fallthrough */ | 157 | | | 158 | 63.7M | case STATE_NEXT_SYNC: | 159 | | /* Find the next startcode */ | 160 | 63.7M | if( block_FindStartcodeFromOffset( &p_pack->bytestream, &p_pack->i_offset, | 161 | 63.7M | p_pack->p_startcode, p_pack->i_startcode, | 162 | 63.7M | p_pack->pf_startcode_helper, NULL ) ) | 163 | 1.59M | { | 164 | 1.59M | if( pp_block /* not flushing */ || !p_pack->bytestream.p_chain ) | 165 | 1.57M | return NULL; /* Need more data */ | 166 | | | 167 | | /* When flushing and we don't find a startcode, suppose that | 168 | | * the data extend up to the end */ | 169 | 24.1k | p_pack->i_offset = block_BytestreamRemaining(&p_pack->bytestream); | 170 | 24.1k | if( p_pack->i_offset == 0 ) | 171 | 0 | return NULL; | 172 | | | 173 | 24.1k | if( p_pack->i_offset <= (size_t)p_pack->i_startcode && | 174 | 663 | (p_pack->bytestream.p_block->i_flags & BLOCK_FLAG_AU_END) == 0 ) | 175 | 663 | return NULL; | 176 | 24.1k | } | 177 | | | 178 | 62.1M | block_BytestreamFlush( &p_pack->bytestream ); | 179 | | | 180 | | /* Get the new fragment and set the pts/dts */ | 181 | 62.1M | block_t *p_block_bytestream = p_pack->bytestream.p_block; | 182 | | | 183 | 62.1M | p_pic = block_Alloc( p_pack->i_offset + p_pack->i_au_prepend ); | 184 | 62.1M | if( p_pic == NULL ) | 185 | 0 | { | 186 | 0 | p_pack->i_state = STATE_NOSYNC; | 187 | 0 | return NULL; | 188 | 0 | } | 189 | 62.1M | p_pic->i_pts = p_block_bytestream->i_pts; | 190 | 62.1M | p_pic->i_dts = p_block_bytestream->i_dts; | 191 | | | 192 | | /* Do not wait for next sync code if notified block ends AU */ | 193 | 62.1M | if( (p_block_bytestream->i_flags & BLOCK_FLAG_AU_END) && | 194 | 0 | p_block_bytestream->i_buffer == p_pack->i_offset ) | 195 | 0 | { | 196 | 0 | p_pic->i_flags |= BLOCK_FLAG_AU_END; | 197 | 0 | } | 198 | | | 199 | 62.1M | block_GetBytes( &p_pack->bytestream, &p_pic->p_buffer[p_pack->i_au_prepend], | 200 | 62.1M | p_pic->i_buffer - p_pack->i_au_prepend ); | 201 | 62.1M | if( p_pack->i_au_prepend > 0 ) | 202 | 62.1M | memcpy( p_pic->p_buffer, p_pack->p_au_prepend, p_pack->i_au_prepend ); | 203 | | | 204 | 62.1M | p_pack->i_offset = 0; | 205 | | | 206 | | /* Parse the NAL */ | 207 | 62.1M | if( p_pic->i_buffer < p_pack->i_au_min_size ) | 208 | 766k | { | 209 | 766k | block_Release( p_pic ); | 210 | 766k | p_pic = NULL; | 211 | 766k | } | 212 | 61.4M | else | 213 | 61.4M | { | 214 | 61.4M | p_pic = p_pack->pf_parse( p_pack->p_private, &b_used_ts, p_pic ); | 215 | 61.4M | if( b_used_ts ) | 216 | 29.6M | { | 217 | 29.6M | p_block_bytestream->i_dts = VLC_TICK_INVALID; | 218 | 29.6M | p_block_bytestream->i_pts = VLC_TICK_INVALID; | 219 | 29.6M | } | 220 | 61.4M | } | 221 | | | 222 | 62.1M | if( !p_pic ) | 223 | 59.5M | { | 224 | 59.5M | p_pack->i_state = STATE_NOSYNC; | 225 | 59.5M | break; | 226 | 59.5M | } | 227 | 2.66M | if( p_pack->pf_validate( p_pack->p_private, p_pic ) ) | 228 | 0 | { | 229 | 0 | p_pack->i_state = STATE_NOSYNC; | 230 | 0 | block_Release( p_pic ); | 231 | 0 | break; | 232 | 0 | } | 233 | | | 234 | | /* So p_block doesn't get re-added several times */ | 235 | 2.66M | if( pp_block ) | 236 | 2.66M | *pp_block = block_BytestreamPop( &p_pack->bytestream ); | 237 | | | 238 | 2.66M | p_pack->i_state = STATE_NOSYNC; | 239 | | | 240 | 2.66M | return p_pic; | 241 | 63.8M | } | 242 | 63.8M | } | 243 | 4.29M | } |
Unexecuted instantiation: mlp.c:packetizer_PacketizeBlock Unexecuted instantiation: mpeg4audio.c:packetizer_PacketizeBlock mpeg4video.c:packetizer_PacketizeBlock Line | Count | Source | 110 | 146k | { | 111 | 146k | block_t *p_block = ( pp_block ) ? *pp_block : NULL; | 112 | | | 113 | 146k | if( p_block == NULL && p_pack->bytestream.p_block == NULL ) | 114 | 5.99k | return NULL; | 115 | | | 116 | 140k | if( p_block && unlikely( p_block->i_flags&(BLOCK_FLAG_DISCONTINUITY|BLOCK_FLAG_CORRUPTED) ) ) | 117 | 26.0k | { | 118 | 26.0k | block_t *p_drained = packetizer_PacketizeBlock( p_pack, NULL ); | 119 | 26.0k | if( p_drained ) | 120 | 277 | return p_drained; | 121 | | | 122 | 25.7k | p_pack->i_state = STATE_NOSYNC; | 123 | 25.7k | block_BytestreamEmpty( &p_pack->bytestream ); | 124 | 25.7k | p_pack->i_offset = 0; | 125 | 25.7k | p_pack->pf_reset( p_pack->p_private, false ); | 126 | 25.7k | } | 127 | | | 128 | 139k | if( p_block ) | 129 | 113k | block_BytestreamPush( &p_pack->bytestream, p_block ); | 130 | | | 131 | 139k | for( ;; ) | 132 | 545k | { | 133 | 545k | bool b_used_ts; | 134 | 545k | block_t *p_pic; | 135 | | | 136 | 545k | switch( p_pack->i_state ) | 137 | 545k | { | 138 | 452k | case STATE_NOSYNC: | 139 | | /* Find a startcode */ | 140 | 452k | if( !block_FindStartcodeFromOffset( &p_pack->bytestream, &p_pack->i_offset, | 141 | 452k | p_pack->p_startcode, p_pack->i_startcode, | 142 | 452k | p_pack->pf_startcode_helper, NULL ) ) | 143 | 411k | p_pack->i_state = STATE_NEXT_SYNC; | 144 | | | 145 | 452k | if( p_pack->i_offset ) | 146 | 38.3k | { | 147 | 38.3k | block_SkipBytes( &p_pack->bytestream, p_pack->i_offset ); | 148 | 38.3k | p_pack->i_offset = 0; | 149 | 38.3k | block_BytestreamFlush( &p_pack->bytestream ); | 150 | 38.3k | } | 151 | | | 152 | 452k | if( p_pack->i_state != STATE_NEXT_SYNC ) | 153 | 41.5k | return NULL; /* Need more data */ | 154 | | | 155 | 411k | p_pack->i_offset = 1; /* To find next startcode */ | 156 | | /* fallthrough */ | 157 | | | 158 | 504k | case STATE_NEXT_SYNC: | 159 | | /* Find the next startcode */ | 160 | 504k | if( block_FindStartcodeFromOffset( &p_pack->bytestream, &p_pack->i_offset, | 161 | 504k | p_pack->p_startcode, p_pack->i_startcode, | 162 | 504k | p_pack->pf_startcode_helper, NULL ) ) | 163 | 117k | { | 164 | 117k | if( pp_block /* not flushing */ || !p_pack->bytestream.p_chain ) | 165 | 92.9k | return NULL; /* Need more data */ | 166 | | | 167 | | /* When flushing and we don't find a startcode, suppose that | 168 | | * the data extend up to the end */ | 169 | 25.0k | p_pack->i_offset = block_BytestreamRemaining(&p_pack->bytestream); | 170 | 25.0k | if( p_pack->i_offset == 0 ) | 171 | 0 | return NULL; | 172 | | | 173 | 25.0k | if( p_pack->i_offset <= (size_t)p_pack->i_startcode && | 174 | 431 | (p_pack->bytestream.p_block->i_flags & BLOCK_FLAG_AU_END) == 0 ) | 175 | 431 | return NULL; | 176 | 25.0k | } | 177 | | | 178 | 410k | block_BytestreamFlush( &p_pack->bytestream ); | 179 | | | 180 | | /* Get the new fragment and set the pts/dts */ | 181 | 410k | block_t *p_block_bytestream = p_pack->bytestream.p_block; | 182 | | | 183 | 410k | p_pic = block_Alloc( p_pack->i_offset + p_pack->i_au_prepend ); | 184 | 410k | if( p_pic == NULL ) | 185 | 0 | { | 186 | 0 | p_pack->i_state = STATE_NOSYNC; | 187 | 0 | return NULL; | 188 | 0 | } | 189 | 410k | p_pic->i_pts = p_block_bytestream->i_pts; | 190 | 410k | p_pic->i_dts = p_block_bytestream->i_dts; | 191 | | | 192 | | /* Do not wait for next sync code if notified block ends AU */ | 193 | 410k | if( (p_block_bytestream->i_flags & BLOCK_FLAG_AU_END) && | 194 | 0 | p_block_bytestream->i_buffer == p_pack->i_offset ) | 195 | 0 | { | 196 | 0 | p_pic->i_flags |= BLOCK_FLAG_AU_END; | 197 | 0 | } | 198 | | | 199 | 410k | block_GetBytes( &p_pack->bytestream, &p_pic->p_buffer[p_pack->i_au_prepend], | 200 | 410k | p_pic->i_buffer - p_pack->i_au_prepend ); | 201 | 410k | if( p_pack->i_au_prepend > 0 ) | 202 | 0 | memcpy( p_pic->p_buffer, p_pack->p_au_prepend, p_pack->i_au_prepend ); | 203 | | | 204 | 410k | p_pack->i_offset = 0; | 205 | | | 206 | | /* Parse the NAL */ | 207 | 410k | if( p_pic->i_buffer < p_pack->i_au_min_size ) | 208 | 5.09k | { | 209 | 5.09k | block_Release( p_pic ); | 210 | 5.09k | p_pic = NULL; | 211 | 5.09k | } | 212 | 405k | else | 213 | 405k | { | 214 | 405k | p_pic = p_pack->pf_parse( p_pack->p_private, &b_used_ts, p_pic ); | 215 | 405k | if( b_used_ts ) | 216 | 1.34k | { | 217 | 1.34k | p_block_bytestream->i_dts = VLC_TICK_INVALID; | 218 | 1.34k | p_block_bytestream->i_pts = VLC_TICK_INVALID; | 219 | 1.34k | } | 220 | 405k | } | 221 | | | 222 | 410k | if( !p_pic ) | 223 | 405k | { | 224 | 405k | p_pack->i_state = STATE_NOSYNC; | 225 | 405k | break; | 226 | 405k | } | 227 | 5.12k | if( p_pack->pf_validate( p_pack->p_private, p_pic ) ) | 228 | 348 | { | 229 | 348 | p_pack->i_state = STATE_NOSYNC; | 230 | 348 | block_Release( p_pic ); | 231 | 348 | break; | 232 | 348 | } | 233 | | | 234 | | /* So p_block doesn't get re-added several times */ | 235 | 4.77k | if( pp_block ) | 236 | 4.28k | *pp_block = block_BytestreamPop( &p_pack->bytestream ); | 237 | | | 238 | 4.77k | p_pack->i_state = STATE_NOSYNC; | 239 | | | 240 | 4.77k | return p_pic; | 241 | 545k | } | 242 | 545k | } | 243 | 139k | } |
Unexecuted instantiation: mpegaudio.c:packetizer_PacketizeBlock mpegvideo.c:packetizer_PacketizeBlock Line | Count | Source | 110 | 752k | { | 111 | 752k | block_t *p_block = ( pp_block ) ? *pp_block : NULL; | 112 | | | 113 | 752k | if( p_block == NULL && p_pack->bytestream.p_block == NULL ) | 114 | 30.9k | return NULL; | 115 | | | 116 | 721k | if( p_block && unlikely( p_block->i_flags&(BLOCK_FLAG_DISCONTINUITY|BLOCK_FLAG_CORRUPTED) ) ) | 117 | 30.4k | { | 118 | 30.4k | block_t *p_drained = packetizer_PacketizeBlock( p_pack, NULL ); | 119 | 30.4k | if( p_drained ) | 120 | 73 | return p_drained; | 121 | | | 122 | 30.3k | p_pack->i_state = STATE_NOSYNC; | 123 | 30.3k | block_BytestreamEmpty( &p_pack->bytestream ); | 124 | 30.3k | p_pack->i_offset = 0; | 125 | 30.3k | p_pack->pf_reset( p_pack->p_private, false ); | 126 | 30.3k | } | 127 | | | 128 | 721k | if( p_block ) | 129 | 687k | block_BytestreamPush( &p_pack->bytestream, p_block ); | 130 | | | 131 | 721k | for( ;; ) | 132 | 2.54M | { | 133 | 2.54M | bool b_used_ts; | 134 | 2.54M | block_t *p_pic; | 135 | | | 136 | 2.54M | switch( p_pack->i_state ) | 137 | 2.54M | { | 138 | 2.03M | case STATE_NOSYNC: | 139 | | /* Find a startcode */ | 140 | 2.03M | if( !block_FindStartcodeFromOffset( &p_pack->bytestream, &p_pack->i_offset, | 141 | 2.03M | p_pack->p_startcode, p_pack->i_startcode, | 142 | 2.03M | p_pack->pf_startcode_helper, NULL ) ) | 143 | 1.95M | p_pack->i_state = STATE_NEXT_SYNC; | 144 | | | 145 | 2.03M | if( p_pack->i_offset ) | 146 | 64.6k | { | 147 | 64.6k | block_SkipBytes( &p_pack->bytestream, p_pack->i_offset ); | 148 | 64.6k | p_pack->i_offset = 0; | 149 | 64.6k | block_BytestreamFlush( &p_pack->bytestream ); | 150 | 64.6k | } | 151 | | | 152 | 2.03M | if( p_pack->i_state != STATE_NEXT_SYNC ) | 153 | 73.9k | return NULL; /* Need more data */ | 154 | | | 155 | 1.95M | p_pack->i_offset = 1; /* To find next startcode */ | 156 | | /* fallthrough */ | 157 | | | 158 | 2.46M | case STATE_NEXT_SYNC: | 159 | | /* Find the next startcode */ | 160 | 2.46M | if( block_FindStartcodeFromOffset( &p_pack->bytestream, &p_pack->i_offset, | 161 | 2.46M | p_pack->p_startcode, p_pack->i_startcode, | 162 | 2.46M | p_pack->pf_startcode_helper, NULL ) ) | 163 | 541k | { | 164 | 541k | if( pp_block /* not flushing */ || !p_pack->bytestream.p_chain ) | 165 | 509k | return NULL; /* Need more data */ | 166 | | | 167 | | /* When flushing and we don't find a startcode, suppose that | 168 | | * the data extend up to the end */ | 169 | 32.2k | p_pack->i_offset = block_BytestreamRemaining(&p_pack->bytestream); | 170 | 32.2k | if( p_pack->i_offset == 0 ) | 171 | 0 | return NULL; | 172 | | | 173 | 32.2k | if( p_pack->i_offset <= (size_t)p_pack->i_startcode && | 174 | 513 | (p_pack->bytestream.p_block->i_flags & BLOCK_FLAG_AU_END) == 0 ) | 175 | 513 | return NULL; | 176 | 32.2k | } | 177 | | | 178 | 1.95M | block_BytestreamFlush( &p_pack->bytestream ); | 179 | | | 180 | | /* Get the new fragment and set the pts/dts */ | 181 | 1.95M | block_t *p_block_bytestream = p_pack->bytestream.p_block; | 182 | | | 183 | 1.95M | p_pic = block_Alloc( p_pack->i_offset + p_pack->i_au_prepend ); | 184 | 1.95M | if( p_pic == NULL ) | 185 | 0 | { | 186 | 0 | p_pack->i_state = STATE_NOSYNC; | 187 | 0 | return NULL; | 188 | 0 | } | 189 | 1.95M | p_pic->i_pts = p_block_bytestream->i_pts; | 190 | 1.95M | p_pic->i_dts = p_block_bytestream->i_dts; | 191 | | | 192 | | /* Do not wait for next sync code if notified block ends AU */ | 193 | 1.95M | if( (p_block_bytestream->i_flags & BLOCK_FLAG_AU_END) && | 194 | 0 | p_block_bytestream->i_buffer == p_pack->i_offset ) | 195 | 0 | { | 196 | 0 | p_pic->i_flags |= BLOCK_FLAG_AU_END; | 197 | 0 | } | 198 | | | 199 | 1.95M | block_GetBytes( &p_pack->bytestream, &p_pic->p_buffer[p_pack->i_au_prepend], | 200 | 1.95M | p_pic->i_buffer - p_pack->i_au_prepend ); | 201 | 1.95M | if( p_pack->i_au_prepend > 0 ) | 202 | 0 | memcpy( p_pic->p_buffer, p_pack->p_au_prepend, p_pack->i_au_prepend ); | 203 | | | 204 | 1.95M | p_pack->i_offset = 0; | 205 | | | 206 | | /* Parse the NAL */ | 207 | 1.95M | if( p_pic->i_buffer < p_pack->i_au_min_size ) | 208 | 14.1k | { | 209 | 14.1k | block_Release( p_pic ); | 210 | 14.1k | p_pic = NULL; | 211 | 14.1k | } | 212 | 1.94M | else | 213 | 1.94M | { | 214 | 1.94M | p_pic = p_pack->pf_parse( p_pack->p_private, &b_used_ts, p_pic ); | 215 | 1.94M | if( b_used_ts ) | 216 | 51.5k | { | 217 | 51.5k | p_block_bytestream->i_dts = VLC_TICK_INVALID; | 218 | 51.5k | p_block_bytestream->i_pts = VLC_TICK_INVALID; | 219 | 51.5k | } | 220 | 1.94M | } | 221 | | | 222 | 1.95M | if( !p_pic ) | 223 | 1.79M | { | 224 | 1.79M | p_pack->i_state = STATE_NOSYNC; | 225 | 1.79M | break; | 226 | 1.79M | } | 227 | 166k | if( p_pack->pf_validate( p_pack->p_private, p_pic ) ) | 228 | 28.6k | { | 229 | 28.6k | p_pack->i_state = STATE_NOSYNC; | 230 | 28.6k | block_Release( p_pic ); | 231 | 28.6k | break; | 232 | 28.6k | } | 233 | | | 234 | | /* So p_block doesn't get re-added several times */ | 235 | 137k | if( pp_block ) | 236 | 137k | *pp_block = block_BytestreamPop( &p_pack->bytestream ); | 237 | | | 238 | 137k | p_pack->i_state = STATE_NOSYNC; | 239 | | | 240 | 137k | return p_pic; | 241 | 2.54M | } | 242 | 2.54M | } | 243 | 721k | } |
vc1.c:packetizer_PacketizeBlock Line | Count | Source | 110 | 2.71k | { | 111 | 2.71k | block_t *p_block = ( pp_block ) ? *pp_block : NULL; | 112 | | | 113 | 2.71k | if( p_block == NULL && p_pack->bytestream.p_block == NULL ) | 114 | 6 | return NULL; | 115 | | | 116 | 2.70k | if( p_block && unlikely( p_block->i_flags&(BLOCK_FLAG_DISCONTINUITY|BLOCK_FLAG_CORRUPTED) ) ) | 117 | 3 | { | 118 | 3 | block_t *p_drained = packetizer_PacketizeBlock( p_pack, NULL ); | 119 | 3 | if( p_drained ) | 120 | 0 | return p_drained; | 121 | | | 122 | 3 | p_pack->i_state = STATE_NOSYNC; | 123 | 3 | block_BytestreamEmpty( &p_pack->bytestream ); | 124 | 3 | p_pack->i_offset = 0; | 125 | 3 | p_pack->pf_reset( p_pack->p_private, false ); | 126 | 3 | } | 127 | | | 128 | 2.70k | if( p_block ) | 129 | 2.04k | block_BytestreamPush( &p_pack->bytestream, p_block ); | 130 | | | 131 | 2.70k | for( ;; ) | 132 | 116k | { | 133 | 116k | bool b_used_ts; | 134 | 116k | block_t *p_pic; | 135 | | | 136 | 116k | switch( p_pack->i_state ) | 137 | 116k | { | 138 | 114k | case STATE_NOSYNC: | 139 | | /* Find a startcode */ | 140 | 114k | if( !block_FindStartcodeFromOffset( &p_pack->bytestream, &p_pack->i_offset, | 141 | 114k | p_pack->p_startcode, p_pack->i_startcode, | 142 | 114k | p_pack->pf_startcode_helper, NULL ) ) | 143 | 114k | p_pack->i_state = STATE_NEXT_SYNC; | 144 | | | 145 | 114k | if( p_pack->i_offset ) | 146 | 97 | { | 147 | 97 | block_SkipBytes( &p_pack->bytestream, p_pack->i_offset ); | 148 | 97 | p_pack->i_offset = 0; | 149 | 97 | block_BytestreamFlush( &p_pack->bytestream ); | 150 | 97 | } | 151 | | | 152 | 114k | if( p_pack->i_state != STATE_NEXT_SYNC ) | 153 | 670 | return NULL; /* Need more data */ | 154 | | | 155 | 114k | p_pack->i_offset = 1; /* To find next startcode */ | 156 | | /* fallthrough */ | 157 | | | 158 | 115k | case STATE_NEXT_SYNC: | 159 | | /* Find the next startcode */ | 160 | 115k | if( block_FindStartcodeFromOffset( &p_pack->bytestream, &p_pack->i_offset, | 161 | 115k | p_pack->p_startcode, p_pack->i_startcode, | 162 | 115k | p_pack->pf_startcode_helper, NULL ) ) | 163 | 2.29k | { | 164 | 2.29k | if( pp_block /* not flushing */ || !p_pack->bytestream.p_chain ) | 165 | 1.66k | return NULL; /* Need more data */ | 166 | | | 167 | | /* When flushing and we don't find a startcode, suppose that | 168 | | * the data extend up to the end */ | 169 | 633 | p_pack->i_offset = block_BytestreamRemaining(&p_pack->bytestream); | 170 | 633 | if( p_pack->i_offset == 0 ) | 171 | 0 | return NULL; | 172 | | | 173 | 633 | if( p_pack->i_offset <= (size_t)p_pack->i_startcode && | 174 | 11 | (p_pack->bytestream.p_block->i_flags & BLOCK_FLAG_AU_END) == 0 ) | 175 | 11 | return NULL; | 176 | 633 | } | 177 | | | 178 | 114k | block_BytestreamFlush( &p_pack->bytestream ); | 179 | | | 180 | | /* Get the new fragment and set the pts/dts */ | 181 | 114k | block_t *p_block_bytestream = p_pack->bytestream.p_block; | 182 | | | 183 | 114k | p_pic = block_Alloc( p_pack->i_offset + p_pack->i_au_prepend ); | 184 | 114k | if( p_pic == NULL ) | 185 | 0 | { | 186 | 0 | p_pack->i_state = STATE_NOSYNC; | 187 | 0 | return NULL; | 188 | 0 | } | 189 | 114k | p_pic->i_pts = p_block_bytestream->i_pts; | 190 | 114k | p_pic->i_dts = p_block_bytestream->i_dts; | 191 | | | 192 | | /* Do not wait for next sync code if notified block ends AU */ | 193 | 114k | if( (p_block_bytestream->i_flags & BLOCK_FLAG_AU_END) && | 194 | 0 | p_block_bytestream->i_buffer == p_pack->i_offset ) | 195 | 0 | { | 196 | 0 | p_pic->i_flags |= BLOCK_FLAG_AU_END; | 197 | 0 | } | 198 | | | 199 | 114k | block_GetBytes( &p_pack->bytestream, &p_pic->p_buffer[p_pack->i_au_prepend], | 200 | 114k | p_pic->i_buffer - p_pack->i_au_prepend ); | 201 | 114k | if( p_pack->i_au_prepend > 0 ) | 202 | 0 | memcpy( p_pic->p_buffer, p_pack->p_au_prepend, p_pack->i_au_prepend ); | 203 | | | 204 | 114k | p_pack->i_offset = 0; | 205 | | | 206 | | /* Parse the NAL */ | 207 | 114k | if( p_pic->i_buffer < p_pack->i_au_min_size ) | 208 | 762 | { | 209 | 762 | block_Release( p_pic ); | 210 | 762 | p_pic = NULL; | 211 | 762 | } | 212 | 113k | else | 213 | 113k | { | 214 | 113k | p_pic = p_pack->pf_parse( p_pack->p_private, &b_used_ts, p_pic ); | 215 | 113k | if( b_used_ts ) | 216 | 5.08k | { | 217 | 5.08k | p_block_bytestream->i_dts = VLC_TICK_INVALID; | 218 | 5.08k | p_block_bytestream->i_pts = VLC_TICK_INVALID; | 219 | 5.08k | } | 220 | 113k | } | 221 | | | 222 | 114k | if( !p_pic ) | 223 | 113k | { | 224 | 113k | p_pack->i_state = STATE_NOSYNC; | 225 | 113k | break; | 226 | 113k | } | 227 | 360 | if( p_pack->pf_validate( p_pack->p_private, p_pic ) ) | 228 | 0 | { | 229 | 0 | p_pack->i_state = STATE_NOSYNC; | 230 | 0 | block_Release( p_pic ); | 231 | 0 | break; | 232 | 0 | } | 233 | | | 234 | | /* So p_block doesn't get re-added several times */ | 235 | 360 | if( pp_block ) | 236 | 335 | *pp_block = block_BytestreamPop( &p_pack->bytestream ); | 237 | | | 238 | 360 | p_pack->i_state = STATE_NOSYNC; | 239 | | | 240 | 360 | return p_pic; | 241 | 116k | } | 242 | 116k | } | 243 | 2.70k | } |
mjpeg.c:packetizer_PacketizeBlock Line | Count | Source | 110 | 53.3k | { | 111 | 53.3k | block_t *p_block = ( pp_block ) ? *pp_block : NULL; | 112 | | | 113 | 53.3k | if( p_block == NULL && p_pack->bytestream.p_block == NULL ) | 114 | 129 | return NULL; | 115 | | | 116 | 53.2k | if( p_block && unlikely( p_block->i_flags&(BLOCK_FLAG_DISCONTINUITY|BLOCK_FLAG_CORRUPTED) ) ) | 117 | 132 | { | 118 | 132 | block_t *p_drained = packetizer_PacketizeBlock( p_pack, NULL ); | 119 | 132 | if( p_drained ) | 120 | 38 | return p_drained; | 121 | | | 122 | 94 | p_pack->i_state = STATE_NOSYNC; | 123 | 94 | block_BytestreamEmpty( &p_pack->bytestream ); | 124 | 94 | p_pack->i_offset = 0; | 125 | 94 | p_pack->pf_reset( p_pack->p_private, false ); | 126 | 94 | } | 127 | | | 128 | 53.1k | if( p_block ) | 129 | 52.6k | block_BytestreamPush( &p_pack->bytestream, p_block ); | 130 | | | 131 | 53.1k | for( ;; ) | 132 | 57.2k | { | 133 | 57.2k | bool b_used_ts; | 134 | 57.2k | block_t *p_pic; | 135 | | | 136 | 57.2k | switch( p_pack->i_state ) | 137 | 57.2k | { | 138 | 31.7k | case STATE_NOSYNC: | 139 | | /* Find a startcode */ | 140 | 31.7k | if( !block_FindStartcodeFromOffset( &p_pack->bytestream, &p_pack->i_offset, | 141 | 31.7k | p_pack->p_startcode, p_pack->i_startcode, | 142 | 31.7k | p_pack->pf_startcode_helper, NULL ) ) | 143 | 5.07k | p_pack->i_state = STATE_NEXT_SYNC; | 144 | | | 145 | 31.7k | if( p_pack->i_offset ) | 146 | 25.2k | { | 147 | 25.2k | block_SkipBytes( &p_pack->bytestream, p_pack->i_offset ); | 148 | 25.2k | p_pack->i_offset = 0; | 149 | 25.2k | block_BytestreamFlush( &p_pack->bytestream ); | 150 | 25.2k | } | 151 | | | 152 | 31.7k | if( p_pack->i_state != STATE_NEXT_SYNC ) | 153 | 26.7k | return NULL; /* Need more data */ | 154 | | | 155 | 5.07k | p_pack->i_offset = 1; /* To find next startcode */ | 156 | | /* fallthrough */ | 157 | | | 158 | 30.5k | case STATE_NEXT_SYNC: | 159 | | /* Find the next startcode */ | 160 | 30.5k | if( block_FindStartcodeFromOffset( &p_pack->bytestream, &p_pack->i_offset, | 161 | 30.5k | p_pack->p_startcode, p_pack->i_startcode, | 162 | 30.5k | p_pack->pf_startcode_helper, NULL ) ) | 163 | 25.8k | { | 164 | 25.8k | if( pp_block /* not flushing */ || !p_pack->bytestream.p_chain ) | 165 | 25.5k | return NULL; /* Need more data */ | 166 | | | 167 | | /* When flushing and we don't find a startcode, suppose that | 168 | | * the data extend up to the end */ | 169 | 315 | p_pack->i_offset = block_BytestreamRemaining(&p_pack->bytestream); | 170 | 315 | if( p_pack->i_offset == 0 ) | 171 | 0 | return NULL; | 172 | | | 173 | 315 | if( p_pack->i_offset <= (size_t)p_pack->i_startcode && | 174 | 2 | (p_pack->bytestream.p_block->i_flags & BLOCK_FLAG_AU_END) == 0 ) | 175 | 2 | return NULL; | 176 | 315 | } | 177 | | | 178 | 5.06k | block_BytestreamFlush( &p_pack->bytestream ); | 179 | | | 180 | | /* Get the new fragment and set the pts/dts */ | 181 | 5.06k | block_t *p_block_bytestream = p_pack->bytestream.p_block; | 182 | | | 183 | 5.06k | p_pic = block_Alloc( p_pack->i_offset + p_pack->i_au_prepend ); | 184 | 5.06k | if( p_pic == NULL ) | 185 | 0 | { | 186 | 0 | p_pack->i_state = STATE_NOSYNC; | 187 | 0 | return NULL; | 188 | 0 | } | 189 | 5.06k | p_pic->i_pts = p_block_bytestream->i_pts; | 190 | 5.06k | p_pic->i_dts = p_block_bytestream->i_dts; | 191 | | | 192 | | /* Do not wait for next sync code if notified block ends AU */ | 193 | 5.06k | if( (p_block_bytestream->i_flags & BLOCK_FLAG_AU_END) && | 194 | 0 | p_block_bytestream->i_buffer == p_pack->i_offset ) | 195 | 0 | { | 196 | 0 | p_pic->i_flags |= BLOCK_FLAG_AU_END; | 197 | 0 | } | 198 | | | 199 | 5.06k | block_GetBytes( &p_pack->bytestream, &p_pic->p_buffer[p_pack->i_au_prepend], | 200 | 5.06k | p_pic->i_buffer - p_pack->i_au_prepend ); | 201 | 5.06k | if( p_pack->i_au_prepend > 0 ) | 202 | 0 | memcpy( p_pic->p_buffer, p_pack->p_au_prepend, p_pack->i_au_prepend ); | 203 | | | 204 | 5.06k | p_pack->i_offset = 0; | 205 | | | 206 | | /* Parse the NAL */ | 207 | 5.06k | if( p_pic->i_buffer < p_pack->i_au_min_size ) | 208 | 4.10k | { | 209 | 4.10k | block_Release( p_pic ); | 210 | 4.10k | p_pic = NULL; | 211 | 4.10k | } | 212 | 964 | else | 213 | 964 | { | 214 | 964 | p_pic = p_pack->pf_parse( p_pack->p_private, &b_used_ts, p_pic ); | 215 | 964 | if( b_used_ts ) | 216 | 964 | { | 217 | 964 | p_block_bytestream->i_dts = VLC_TICK_INVALID; | 218 | 964 | p_block_bytestream->i_pts = VLC_TICK_INVALID; | 219 | 964 | } | 220 | 964 | } | 221 | | | 222 | 5.06k | if( !p_pic ) | 223 | 4.10k | { | 224 | 4.10k | p_pack->i_state = STATE_NOSYNC; | 225 | 4.10k | break; | 226 | 4.10k | } | 227 | 964 | if( p_pack->pf_validate( p_pack->p_private, p_pic ) ) | 228 | 0 | { | 229 | 0 | p_pack->i_state = STATE_NOSYNC; | 230 | 0 | block_Release( p_pic ); | 231 | 0 | break; | 232 | 0 | } | 233 | | | 234 | | /* So p_block doesn't get re-added several times */ | 235 | 964 | if( pp_block ) | 236 | 788 | *pp_block = block_BytestreamPop( &p_pack->bytestream ); | 237 | | | 238 | 964 | p_pack->i_state = STATE_NOSYNC; | 239 | | | 240 | 964 | return p_pic; | 241 | 57.2k | } | 242 | 57.2k | } | 243 | 53.1k | } |
|
244 | | |
245 | | static block_t *packetizer_Packetize( packetizer_t *p_pack, block_t **pp_block ) |
246 | 6.38M | { |
247 | 6.38M | block_t *p_out = packetizer_PacketizeBlock( p_pack, pp_block ); |
248 | 6.38M | if( p_out ) |
249 | 3.39M | return p_out; |
250 | | /* handle caller drain */ |
251 | 2.99M | if( pp_block == NULL && p_pack->pf_drain ) |
252 | 145k | { |
253 | 145k | p_out = p_pack->pf_drain( p_pack->p_private ); |
254 | 145k | if( p_out && p_pack->pf_validate( p_pack->p_private, p_out ) ) |
255 | 2.56k | { |
256 | 2.56k | block_Release( p_out ); |
257 | 2.56k | p_out = NULL; |
258 | 2.56k | } |
259 | 145k | } |
260 | 2.99M | return p_out; |
261 | 6.38M | } Unexecuted instantiation: a52.c:packetizer_Packetize Unexecuted instantiation: dts.c:packetizer_Packetize Unexecuted instantiation: flac.c:packetizer_Packetize h264.c:packetizer_Packetize Line | Count | Source | 246 | 1.19M | { | 247 | 1.19M | block_t *p_out = packetizer_PacketizeBlock( p_pack, pp_block ); | 248 | 1.19M | if( p_out ) | 249 | 581k | return p_out; | 250 | | /* handle caller drain */ | 251 | 612k | if( pp_block == NULL && p_pack->pf_drain ) | 252 | 81.0k | { | 253 | 81.0k | p_out = p_pack->pf_drain( p_pack->p_private ); | 254 | 81.0k | if( p_out && p_pack->pf_validate( p_pack->p_private, p_out ) ) | 255 | 0 | { | 256 | 0 | block_Release( p_out ); | 257 | | p_out = NULL; | 258 | 0 | } | 259 | 81.0k | } | 260 | 612k | return p_out; | 261 | 1.19M | } |
hevc.c:packetizer_Packetize Line | Count | Source | 246 | 4.29M | { | 247 | 4.29M | block_t *p_out = packetizer_PacketizeBlock( p_pack, pp_block ); | 248 | 4.29M | if( p_out ) | 249 | 2.66M | return p_out; | 250 | | /* handle caller drain */ | 251 | 1.62M | if( pp_block == NULL && p_pack->pf_drain ) | 252 | 29.1k | { | 253 | 29.1k | p_out = p_pack->pf_drain( p_pack->p_private ); | 254 | 29.1k | if( p_out && p_pack->pf_validate( p_pack->p_private, p_out ) ) | 255 | 0 | { | 256 | 0 | block_Release( p_out ); | 257 | | p_out = NULL; | 258 | 0 | } | 259 | 29.1k | } | 260 | 1.62M | return p_out; | 261 | 4.29M | } |
Unexecuted instantiation: mlp.c:packetizer_Packetize Unexecuted instantiation: mpeg4audio.c:packetizer_Packetize mpeg4video.c:packetizer_Packetize Line | Count | Source | 246 | 119k | { | 247 | 119k | block_t *p_out = packetizer_PacketizeBlock( p_pack, pp_block ); | 248 | 119k | if( p_out ) | 249 | 4.77k | return p_out; | 250 | | /* handle caller drain */ | 251 | 115k | if( pp_block == NULL && p_pack->pf_drain ) | 252 | 0 | { | 253 | 0 | p_out = p_pack->pf_drain( p_pack->p_private ); | 254 | 0 | if( p_out && p_pack->pf_validate( p_pack->p_private, p_out ) ) | 255 | 0 | { | 256 | 0 | block_Release( p_out ); | 257 | | p_out = NULL; | 258 | 0 | } | 259 | 0 | } | 260 | 115k | return p_out; | 261 | 119k | } |
Unexecuted instantiation: mpegaudio.c:packetizer_Packetize mpegvideo.c:packetizer_Packetize Line | Count | Source | 246 | 722k | { | 247 | 722k | block_t *p_out = packetizer_PacketizeBlock( p_pack, pp_block ); | 248 | 722k | if( p_out ) | 249 | 137k | return p_out; | 250 | | /* handle caller drain */ | 251 | 584k | if( pp_block == NULL && p_pack->pf_drain ) | 252 | 34.6k | { | 253 | 34.6k | p_out = p_pack->pf_drain( p_pack->p_private ); | 254 | 34.6k | if( p_out && p_pack->pf_validate( p_pack->p_private, p_out ) ) | 255 | 2.56k | { | 256 | 2.56k | block_Release( p_out ); | 257 | | p_out = NULL; | 258 | 2.56k | } | 259 | 34.6k | } | 260 | 584k | return p_out; | 261 | 722k | } |
vc1.c:packetizer_Packetize Line | Count | Source | 246 | 2.70k | { | 247 | 2.70k | block_t *p_out = packetizer_PacketizeBlock( p_pack, pp_block ); | 248 | 2.70k | if( p_out ) | 249 | 360 | return p_out; | 250 | | /* handle caller drain */ | 251 | 2.34k | if( pp_block == NULL && p_pack->pf_drain ) | 252 | 639 | { | 253 | 639 | p_out = p_pack->pf_drain( p_pack->p_private ); | 254 | 639 | if( p_out && p_pack->pf_validate( p_pack->p_private, p_out ) ) | 255 | 0 | { | 256 | 0 | block_Release( p_out ); | 257 | | p_out = NULL; | 258 | 0 | } | 259 | 639 | } | 260 | 2.34k | return p_out; | 261 | 2.70k | } |
mjpeg.c:packetizer_Packetize Line | Count | Source | 246 | 53.2k | { | 247 | 53.2k | block_t *p_out = packetizer_PacketizeBlock( p_pack, pp_block ); | 248 | 53.2k | if( p_out ) | 249 | 964 | return p_out; | 250 | | /* handle caller drain */ | 251 | 52.2k | if( pp_block == NULL && p_pack->pf_drain ) | 252 | 0 | { | 253 | 0 | p_out = p_pack->pf_drain( p_pack->p_private ); | 254 | 0 | if( p_out && p_pack->pf_validate( p_pack->p_private, p_out ) ) | 255 | 0 | { | 256 | 0 | block_Release( p_out ); | 257 | | p_out = NULL; | 258 | 0 | } | 259 | 0 | } | 260 | 52.2k | return p_out; | 261 | 53.2k | } |
|
262 | | |
263 | | static inline void packetizer_Header( packetizer_t *p_pack, |
264 | | const uint8_t *p_header, int i_header ) |
265 | 31.5k | { |
266 | 31.5k | block_t *p_init = block_Alloc( i_header ); |
267 | 31.5k | if( !p_init ) |
268 | 0 | return; |
269 | | |
270 | 31.5k | memcpy( p_init->p_buffer, p_header, i_header ); |
271 | | |
272 | 31.5k | block_t *p_pic; |
273 | 31.6k | while( ( p_pic = packetizer_Packetize( p_pack, &p_init ) ) ) |
274 | 28 | block_Release( p_pic ); /* Should not happen (only sequence header) */ |
275 | 31.6k | while( ( p_pic = packetizer_Packetize( p_pack, NULL ) ) ) |
276 | 51 | block_Release( p_pic ); |
277 | | |
278 | 31.5k | p_pack->i_state = STATE_NOSYNC; |
279 | 31.5k | block_BytestreamEmpty( &p_pack->bytestream ); |
280 | 31.5k | p_pack->i_offset = 0; |
281 | 31.5k | } Unexecuted instantiation: a52.c:packetizer_Header Unexecuted instantiation: dts.c:packetizer_Header Unexecuted instantiation: flac.c:packetizer_Header Line | Count | Source | 265 | 26.0k | { | 266 | 26.0k | block_t *p_init = block_Alloc( i_header ); | 267 | 26.0k | if( !p_init ) | 268 | 0 | return; | 269 | | | 270 | 26.0k | memcpy( p_init->p_buffer, p_header, i_header ); | 271 | | | 272 | 26.0k | block_t *p_pic; | 273 | 26.0k | while( ( p_pic = packetizer_Packetize( p_pack, &p_init ) ) ) | 274 | 0 | block_Release( p_pic ); /* Should not happen (only sequence header) */ | 275 | 26.0k | while( ( p_pic = packetizer_Packetize( p_pack, NULL ) ) ) | 276 | 0 | block_Release( p_pic ); | 277 | | | 278 | 26.0k | p_pack->i_state = STATE_NOSYNC; | 279 | 26.0k | block_BytestreamEmpty( &p_pack->bytestream ); | 280 | 26.0k | p_pack->i_offset = 0; | 281 | 26.0k | } |
Line | Count | Source | 265 | 5.47k | { | 266 | 5.47k | block_t *p_init = block_Alloc( i_header ); | 267 | 5.47k | if( !p_init ) | 268 | 0 | return; | 269 | | | 270 | 5.47k | memcpy( p_init->p_buffer, p_header, i_header ); | 271 | | | 272 | 5.47k | block_t *p_pic; | 273 | 5.50k | while( ( p_pic = packetizer_Packetize( p_pack, &p_init ) ) ) | 274 | 28 | block_Release( p_pic ); /* Should not happen (only sequence header) */ | 275 | 5.52k | while( ( p_pic = packetizer_Packetize( p_pack, NULL ) ) ) | 276 | 51 | block_Release( p_pic ); | 277 | | | 278 | 5.47k | p_pack->i_state = STATE_NOSYNC; | 279 | 5.47k | block_BytestreamEmpty( &p_pack->bytestream ); | 280 | 5.47k | p_pack->i_offset = 0; | 281 | 5.47k | } |
Unexecuted instantiation: mlp.c:packetizer_Header Unexecuted instantiation: mpeg4audio.c:packetizer_Header Unexecuted instantiation: mpeg4video.c:packetizer_Header Unexecuted instantiation: mpegaudio.c:packetizer_Header Unexecuted instantiation: mpegvideo.c:packetizer_Header Line | Count | Source | 265 | 31 | { | 266 | 31 | block_t *p_init = block_Alloc( i_header ); | 267 | 31 | if( !p_init ) | 268 | 0 | return; | 269 | | | 270 | 31 | memcpy( p_init->p_buffer, p_header, i_header ); | 271 | | | 272 | 31 | block_t *p_pic; | 273 | 31 | while( ( p_pic = packetizer_Packetize( p_pack, &p_init ) ) ) | 274 | 0 | block_Release( p_pic ); /* Should not happen (only sequence header) */ | 275 | 31 | while( ( p_pic = packetizer_Packetize( p_pack, NULL ) ) ) | 276 | 0 | block_Release( p_pic ); | 277 | | | 278 | 31 | p_pack->i_state = STATE_NOSYNC; | 279 | 31 | block_BytestreamEmpty( &p_pack->bytestream ); | 280 | 31 | p_pack->i_offset = 0; | 281 | 31 | } |
Unexecuted instantiation: mjpeg.c:packetizer_Header |
282 | | |
283 | | #endif |
284 | | |