1 /*
2 * Various utility demuxing functions
3 * Copyright (c) 2000, 2001, 2002 Fabrice Bellard
4 *
5 * This file is part of FFmpeg.
6 *
7 * FFmpeg is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
11 *
12 * FFmpeg is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with FFmpeg; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 */
21
23
31
33 {
35 }
36
38 {
40 }
41
43 int64_t start, int64_t end, const char *title)
44 {
48
52 }
53
54 if (!
s->nb_chapters) {
57 for (
unsigned i = 0;
i <
s->nb_chapters;
i++)
58 if (
s->chapters[
i]->id ==
id)
59 chapter =
s->chapters[
i];
60 if (!chapter)
62 }
63
64 if (!chapter) {
66 if (!chapter)
72 }
73 }
77 chapter->
start = start;
79
80 return chapter;
81 }
82
84 {
87 for (
unsigned i = 0;
i <
s->nb_streams;
i++) {
90 }
91 }
92
94 {
97 for (
unsigned i = 0;
i <
s->nb_streams;
i++)
100 if (
s->streams[
i]->attached_pic.size <= 0) {
102 "Attached picture on stream %d has invalid size, "
104 continue;
105 }
106
108 &
s->streams[
i]->attached_pic,
112 }
113 return 0;
114 }
115
118 {
122
126 if (buf) {
133 } else {
137 }
140
143
144 return 0;
146 if (!st0)
149 }
150
154 {
160
161 #if FF_API_OLD_CHANNEL_LAYOUT
165 flags |= AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT;
166 }
167 if (channel_layout) {
169 flags |= AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT;
170 }
172 #endif
176 }
180 }
185 #if FF_API_OLD_CHANNEL_LAYOUT
189 if (channel_layout)
190 bytestream_put_le64(&
data, channel_layout);
192 #endif
198 }
199 return 0;
200 }
201
203 {
204 if (
s->iformat->read_play)
205 return s->iformat->read_play(
s);
209 }
210
212 {
213 if (
s->iformat->read_pause)
214 return s->iformat->read_pause(
s);
218 }
219
221 {
222 static const uint8_t avci100_1080p_extradata[] = {
223 // SPS
224 0x00, 0x00, 0x00, 0x01, 0x67, 0x7a, 0x10, 0x29,
225 0xb6, 0xd4, 0x20, 0x22, 0x33, 0x19, 0xc6, 0x63,
226 0x23, 0x21, 0x01, 0x11, 0x98, 0xce, 0x33, 0x19,
227 0x18, 0x21, 0x02, 0x56, 0xb9, 0x3d, 0x7d, 0x7e,
228 0x4f, 0xe3, 0x3f, 0x11, 0xf1, 0x9e, 0x08, 0xb8,
229 0x8c, 0x54, 0x43, 0xc0, 0x78, 0x02, 0x27, 0xe2,
230 0x70, 0x1e, 0x30, 0x10, 0x10, 0x14, 0x00, 0x00,
231 0x03, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0xca,
232 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
233 // PPS
234 0x00, 0x00, 0x00, 0x01, 0x68, 0xce, 0x33, 0x48,
235 0xd0
236 };
237 static const uint8_t avci100_1080i_extradata[] = {
238 // SPS
239 0x00, 0x00, 0x00, 0x01, 0x67, 0x7a, 0x10, 0x29,
240 0xb6, 0xd4, 0x20, 0x22, 0x33, 0x19, 0xc6, 0x63,
241 0x23, 0x21, 0x01, 0x11, 0x98, 0xce, 0x33, 0x19,
242 0x18, 0x21, 0x03, 0x3a, 0x46, 0x65, 0x6a, 0x65,
243 0x24, 0xad, 0xe9, 0x12, 0x32, 0x14, 0x1a, 0x26,
244 0x34, 0xad, 0xa4, 0x41, 0x82, 0x23, 0x01, 0x50,
245 0x2b, 0x1a, 0x24, 0x69, 0x48, 0x30, 0x40, 0x2e,
246 0x11, 0x12, 0x08, 0xc6, 0x8c, 0x04, 0x41, 0x28,
247 0x4c, 0x34, 0xf0, 0x1e, 0x01, 0x13, 0xf2, 0xe0,
248 0x3c, 0x60, 0x20, 0x20, 0x28, 0x00, 0x00, 0x03,
249 0x00, 0x08, 0x00, 0x00, 0x03, 0x01, 0x94, 0x20,
250 // PPS
251 0x00, 0x00, 0x00, 0x01, 0x68, 0xce, 0x33, 0x48,
252 0xd0
253 };
254 static const uint8_t avci50_1080p_extradata[] = {
255 // SPS
256 0x00, 0x00, 0x00, 0x01, 0x67, 0x6e, 0x10, 0x28,
257 0xa6, 0xd4, 0x20, 0x32, 0x33, 0x0c, 0x71, 0x18,
258 0x88, 0x62, 0x10, 0x19, 0x19, 0x86, 0x38, 0x8c,
259 0x44, 0x30, 0x21, 0x02, 0x56, 0x4e, 0x6f, 0x37,
260 0xcd, 0xf9, 0xbf, 0x81, 0x6b, 0xf3, 0x7c, 0xde,
261 0x6e, 0x6c, 0xd3, 0x3c, 0x05, 0xa0, 0x22, 0x7e,
262 0x5f, 0xfc, 0x00, 0x0c, 0x00, 0x13, 0x8c, 0x04,
263 0x04, 0x05, 0x00, 0x00, 0x03, 0x00, 0x01, 0x00,
264 0x00, 0x03, 0x00, 0x32, 0x84, 0x00, 0x00, 0x00,
265 // PPS
266 0x00, 0x00, 0x00, 0x01, 0x68, 0xee, 0x31, 0x12,
267 0x11
268 };
269 static const uint8_t avci50_1080i_extradata[] = {
270 // SPS
271 0x00, 0x00, 0x00, 0x01, 0x67, 0x6e, 0x10, 0x28,
272 0xa6, 0xd4, 0x20, 0x32, 0x33, 0x0c, 0x71, 0x18,
273 0x88, 0x62, 0x10, 0x19, 0x19, 0x86, 0x38, 0x8c,
274 0x44, 0x30, 0x21, 0x02, 0x56, 0x4e, 0x6e, 0x61,
275 0x87, 0x3e, 0x73, 0x4d, 0x98, 0x0c, 0x03, 0x06,
276 0x9c, 0x0b, 0x73, 0xe6, 0xc0, 0xb5, 0x18, 0x63,
277 0x0d, 0x39, 0xe0, 0x5b, 0x02, 0xd4, 0xc6, 0x19,
278 0x1a, 0x79, 0x8c, 0x32, 0x34, 0x24, 0xf0, 0x16,
279 0x81, 0x13, 0xf7, 0xff, 0x80, 0x02, 0x00, 0x01,
280 0xf1, 0x80, 0x80, 0x80, 0xa0, 0x00, 0x00, 0x03,
281 0x00, 0x20, 0x00, 0x00, 0x06, 0x50, 0x80, 0x00,
282 // PPS
283 0x00, 0x00, 0x00, 0x01, 0x68, 0xee, 0x31, 0x12,
284 0x11
285 };
286 static const uint8_t avci100_720p_extradata[] = {
287 // SPS
288 0x00, 0x00, 0x00, 0x01, 0x67, 0x7a, 0x10, 0x29,
289 0xb6, 0xd4, 0x20, 0x2a, 0x33, 0x1d, 0xc7, 0x62,
290 0xa1, 0x08, 0x40, 0x54, 0x66, 0x3b, 0x8e, 0xc5,
291 0x42, 0x02, 0x10, 0x25, 0x64, 0x2c, 0x89, 0xe8,
292 0x85, 0xe4, 0x21, 0x4b, 0x90, 0x83, 0x06, 0x95,
293 0xd1, 0x06, 0x46, 0x97, 0x20, 0xc8, 0xd7, 0x43,
294 0x08, 0x11, 0xc2, 0x1e, 0x4c, 0x91, 0x0f, 0x01,
295 0x40, 0x16, 0xec, 0x07, 0x8c, 0x04, 0x04, 0x05,
296 0x00, 0x00, 0x03, 0x00, 0x01, 0x00, 0x00, 0x03,
297 0x00, 0x64, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00,
298 // PPS
299 0x00, 0x00, 0x00, 0x01, 0x68, 0xce, 0x31, 0x12,
300 0x11
301 };
302 static const uint8_t avci50_720p_extradata[] = {
303 // SPS
304 0x00, 0x00, 0x00, 0x01, 0x67, 0x6e, 0x10, 0x20,
305 0xa6, 0xd4, 0x20, 0x32, 0x33, 0x0c, 0x71, 0x18,
306 0x88, 0x62, 0x10, 0x19, 0x19, 0x86, 0x38, 0x8c,
307 0x44, 0x30, 0x21, 0x02, 0x56, 0x4e, 0x6f, 0x37,
308 0xcd, 0xf9, 0xbf, 0x81, 0x6b, 0xf3, 0x7c, 0xde,
309 0x6e, 0x6c, 0xd3, 0x3c, 0x0f, 0x01, 0x6e, 0xff,
310 0xc0, 0x00, 0xc0, 0x01, 0x38, 0xc0, 0x40, 0x40,
311 0x50, 0x00, 0x00, 0x03, 0x00, 0x10, 0x00, 0x00,
312 0x06, 0x48, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
313 // PPS
314 0x00, 0x00, 0x00, 0x01, 0x68, 0xee, 0x31, 0x12,
315 0x11
316 };
317
320
323 data = avci100_1080p_extradata;
324 size =
sizeof(avci100_1080p_extradata);
325 } else {
326 data = avci100_1080i_extradata;
327 size =
sizeof(avci100_1080i_extradata);
328 }
331 data = avci50_1080p_extradata;
332 size =
sizeof(avci50_1080p_extradata);
333 } else {
334 data = avci50_1080i_extradata;
335 size =
sizeof(avci50_1080i_extradata);
336 }
338 data = avci100_720p_extradata;
339 size =
sizeof(avci100_720p_extradata);
341 data = avci50_720p_extradata;
342 size =
sizeof(avci50_720p_extradata);
343 }
344
346 return 0;
347
351
352 return 0;
353 }
354
356 {
366 }
367
369 }
370
372 {
373 for (
unsigned i = 0;
i <
s->nb_streams;
i++)
374 if (
s->streams[
i]->id ==
id)
376 return -1;
377 }