OLD | NEW |
| (Empty) |
1 /* | |
2 * copyright (c) 2001 Fabrice Bellard | |
3 * | |
4 * This file is part of FFmpeg. | |
5 * | |
6 * FFmpeg is free software; you can redistribute it and/or | |
7 * modify it under the terms of the GNU Lesser General Public | |
8 * License as published by the Free Software Foundation; either | |
9 * version 2.1 of the License, or (at your option) any later version. | |
10 * | |
11 * FFmpeg is distributed in the hope that it will be useful, | |
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
14 * Lesser General Public License for more details. | |
15 * | |
16 * You should have received a copy of the GNU Lesser General Public | |
17 * License along with FFmpeg; if not, write to the Free Software | |
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |
19 */ | |
20 | |
21 #ifndef AVFORMAT_AVFORMAT_H | |
22 #define AVFORMAT_AVFORMAT_H | |
23 | |
24 #define LIBAVFORMAT_VERSION_MAJOR 52 | |
25 #define LIBAVFORMAT_VERSION_MINOR 32 | |
26 #define LIBAVFORMAT_VERSION_MICRO 0 | |
27 | |
28 #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ | |
29 LIBAVFORMAT_VERSION_MINOR, \ | |
30 LIBAVFORMAT_VERSION_MICRO) | |
31 #define LIBAVFORMAT_VERSION AV_VERSION(LIBAVFORMAT_VERSION_MAJOR, \ | |
32 LIBAVFORMAT_VERSION_MINOR, \ | |
33 LIBAVFORMAT_VERSION_MICRO) | |
34 #define LIBAVFORMAT_BUILD LIBAVFORMAT_VERSION_INT | |
35 | |
36 #define LIBAVFORMAT_IDENT "Lavf" AV_STRINGIFY(LIBAVFORMAT_VERSION) | |
37 | |
38 /** | |
39 * Returns the LIBAVFORMAT_VERSION_INT constant. | |
40 */ | |
41 unsigned avformat_version(void); | |
42 | |
43 #include <time.h> | |
44 #include <stdio.h> /* FILE */ | |
45 #include "libavcodec/avcodec.h" | |
46 | |
47 #include "avio.h" | |
48 | |
49 struct AVFormatContext; | |
50 | |
51 | |
52 /* | |
53 * Public Metadata API. | |
54 * The metadata API allows libavformat to export metadata tags to a client | |
55 * application using a sequence of key/value pairs. | |
56 * Important concepts to keep in mind: | |
57 * 1. Keys are unique; there can never be 2 tags with the same key. This is | |
58 * also meant semantically, i.e., a demuxer should not knowingly produce | |
59 * several keys that are literally different but semantically identical. | |
60 * E.g., key=Author5, key=Author6. In this example, all authors must be | |
61 * placed in the same tag. | |
62 * 2. Metadata is flat, not hierarchical; there are no subtags. If you | |
63 * want to store, e.g., the email address of the child of producer Alice | |
64 * and actor Bob, that could have key=alice_and_bobs_childs_email_address. | |
65 * 3. A tag whose value is localized for a particular language is appended | |
66 * with a dash character ('-') and the ISO 639-2/B 3-letter language code. | |
67 * For example: Author-ger=Michael, Author-eng=Mike | |
68 * The original/default language is in the unqualified "Author" tag. | |
69 * A demuxer should set a default if it sets any translated tag. | |
70 */ | |
71 | |
72 #define AV_METADATA_MATCH_CASE 1 | |
73 #define AV_METADATA_IGNORE_SUFFIX 2 | |
74 | |
75 typedef struct { | |
76 char *key; | |
77 char *value; | |
78 }AVMetadataTag; | |
79 | |
80 typedef struct AVMetadata AVMetadata; | |
81 typedef struct AVMetadataConv AVMetadataConv; | |
82 | |
83 /** | |
84 * Gets a metadata element with matching key. | |
85 * @param prev Set to the previous matching element to find the next. | |
86 * @param flags Allows case as well as suffix-insensitive comparisons. | |
87 * @return Found tag or NULL, changing key or value leads to undefined behavior. | |
88 */ | |
89 AVMetadataTag * | |
90 av_metadata_get(AVMetadata *m, const char *key, const AVMetadataTag *prev, int f
lags); | |
91 | |
92 /** | |
93 * Sets the given tag in m, overwriting an existing tag. | |
94 * @param key tag key to add to m (will be av_strduped) | |
95 * @param value tag value to add to m (will be av_strduped) | |
96 * @return >= 0 on success otherwise an error code <0 | |
97 */ | |
98 int av_metadata_set(AVMetadata **pm, const char *key, const char *value); | |
99 | |
100 /** | |
101 * Convert all the metadata sets from ctx according to the source and | |
102 * destination conversion tables. | |
103 * @param d_conv destination tags format conversion table | |
104 * @param s_conv source tags format conversion table | |
105 */ | |
106 void av_metadata_conv(struct AVFormatContext *ctx,const AVMetadataConv *d_conv, | |
107 const AVMetadataConv *s_conv); | |
108 | |
109 /** | |
110 * Frees all the memory allocated for an AVMetadata struct. | |
111 */ | |
112 void av_metadata_free(AVMetadata **m); | |
113 | |
114 | |
115 /* packet functions */ | |
116 | |
117 | |
118 /** | |
119 * Allocate and read the payload of a packet and initialize its fields with | |
120 * default values. | |
121 * | |
122 * @param pkt packet | |
123 * @param size desired payload size | |
124 * @return >0 (read size) if OK, AVERROR_xxx otherwise | |
125 */ | |
126 int av_get_packet(ByteIOContext *s, AVPacket *pkt, int size); | |
127 | |
128 | |
129 /*************************************************/ | |
130 /* fractional numbers for exact pts handling */ | |
131 | |
132 /** | |
133 * The exact value of the fractional number is: 'val + num / den'. | |
134 * num is assumed to be 0 <= num < den. | |
135 */ | |
136 typedef struct AVFrac { | |
137 int64_t val, num, den; | |
138 } AVFrac; | |
139 | |
140 /*************************************************/ | |
141 /* input/output formats */ | |
142 | |
143 struct AVCodecTag; | |
144 | |
145 /** This structure contains the data a format has to probe a file. */ | |
146 typedef struct AVProbeData { | |
147 const char *filename; | |
148 unsigned char *buf; | |
149 int buf_size; | |
150 } AVProbeData; | |
151 | |
152 #define AVPROBE_SCORE_MAX 100 ///< maximum score, half of that is
used for file-extension-based detection | |
153 #define AVPROBE_PADDING_SIZE 32 ///< extra allocated bytes at the en
d of the probe buffer | |
154 | |
155 typedef struct AVFormatParameters { | |
156 AVRational time_base; | |
157 int sample_rate; | |
158 int channels; | |
159 int width; | |
160 int height; | |
161 enum PixelFormat pix_fmt; | |
162 int channel; /**< Used to select DV channel. */ | |
163 const char *standard; /**< TV standard, NTSC, PAL, SECAM */ | |
164 unsigned int mpeg2ts_raw:1; /**< Force raw MPEG-2 transport stream output,
if possible. */ | |
165 unsigned int mpeg2ts_compute_pcr:1; /**< Compute exact PCR for each transpor
t | |
166 stream packet (only meaningful if | |
167 mpeg2ts_raw is TRUE). */ | |
168 unsigned int initial_pause:1; /**< Do not begin to play the stream | |
169 immediately (RTSP only). */ | |
170 unsigned int prealloced_context:1; | |
171 #if LIBAVFORMAT_VERSION_INT < (53<<16) | |
172 enum CodecID video_codec_id; | |
173 enum CodecID audio_codec_id; | |
174 #endif | |
175 } AVFormatParameters; | |
176 | |
177 //! Demuxer will use url_fopen, no opened file should be provided by the caller. | |
178 #define AVFMT_NOFILE 0x0001 | |
179 #define AVFMT_NEEDNUMBER 0x0002 /**< Needs '%d' in filename. */ | |
180 #define AVFMT_SHOW_IDS 0x0008 /**< Show format stream IDs numbers. */ | |
181 #define AVFMT_RAWPICTURE 0x0020 /**< Format wants AVPicture structure for | |
182 raw picture data. */ | |
183 #define AVFMT_GLOBALHEADER 0x0040 /**< Format wants global header. */ | |
184 #define AVFMT_NOTIMESTAMPS 0x0080 /**< Format does not need / have any timestam
ps. */ | |
185 #define AVFMT_GENERIC_INDEX 0x0100 /**< Use generic index building code. */ | |
186 #define AVFMT_TS_DISCONT 0x0200 /**< Format allows timestamp discontinuities.
*/ | |
187 #define AVFMT_VARIABLE_FPS 0x0400 /**< Format allows variable fps. */ | |
188 | |
189 typedef struct AVOutputFormat { | |
190 const char *name; | |
191 /** | |
192 * Descriptive name for the format, meant to be more human-readable | |
193 * than \p name. You \e should use the NULL_IF_CONFIG_SMALL() macro | |
194 * to define it. | |
195 */ | |
196 const char *long_name; | |
197 const char *mime_type; | |
198 const char *extensions; /**< comma-separated filename extensions */ | |
199 /** size of private data so that it can be allocated in the wrapper */ | |
200 int priv_data_size; | |
201 /* output support */ | |
202 enum CodecID audio_codec; /**< default audio codec */ | |
203 enum CodecID video_codec; /**< default video codec */ | |
204 int (*write_header)(struct AVFormatContext *); | |
205 int (*write_packet)(struct AVFormatContext *, AVPacket *pkt); | |
206 int (*write_trailer)(struct AVFormatContext *); | |
207 /** can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, AVFMT_GLOBALHEADER */ | |
208 int flags; | |
209 /** Currently only used to set pixel format if not YUV420P. */ | |
210 int (*set_parameters)(struct AVFormatContext *, AVFormatParameters *); | |
211 int (*interleave_packet)(struct AVFormatContext *, AVPacket *out, | |
212 AVPacket *in, int flush); | |
213 | |
214 /** | |
215 * List of supported codec_id-codec_tag pairs, ordered by "better | |
216 * choice first". The arrays are all terminated by CODEC_ID_NONE. | |
217 */ | |
218 const struct AVCodecTag * const *codec_tag; | |
219 | |
220 enum CodecID subtitle_codec; /**< default subtitle codec */ | |
221 | |
222 const AVMetadataConv *metadata_conv; | |
223 | |
224 /* private fields */ | |
225 struct AVOutputFormat *next; | |
226 } AVOutputFormat; | |
227 | |
228 typedef struct AVInputFormat { | |
229 const char *name; | |
230 /** | |
231 * Descriptive name for the format, meant to be more human-readable | |
232 * than \p name. You \e should use the NULL_IF_CONFIG_SMALL() macro | |
233 * to define it. | |
234 */ | |
235 const char *long_name; | |
236 /** Size of private data so that it can be allocated in the wrapper. */ | |
237 int priv_data_size; | |
238 /** | |
239 * Tell if a given file has a chance of being parsed as this format. | |
240 * The buffer provided is guaranteed to be AVPROBE_PADDING_SIZE bytes | |
241 * big so you do not have to check for that unless you need more. | |
242 */ | |
243 int (*read_probe)(AVProbeData *); | |
244 /** Read the format header and initialize the AVFormatContext | |
245 structure. Return 0 if OK. 'ap' if non-NULL contains | |
246 additional parameters. Only used in raw format right | |
247 now. 'av_new_stream' should be called to create new streams. */ | |
248 int (*read_header)(struct AVFormatContext *, | |
249 AVFormatParameters *ap); | |
250 /** Read one packet and put it in 'pkt'. pts and flags are also | |
251 set. 'av_new_stream' can be called only if the flag | |
252 AVFMTCTX_NOHEADER is used. | |
253 @return 0 on success, < 0 on error. | |
254 When returning an error, pkt must not have been allocated | |
255 or must be freed before returning */ | |
256 int (*read_packet)(struct AVFormatContext *, AVPacket *pkt); | |
257 /** Close the stream. The AVFormatContext and AVStreams are not | |
258 freed by this function */ | |
259 int (*read_close)(struct AVFormatContext *); | |
260 | |
261 #if LIBAVFORMAT_VERSION_MAJOR < 53 | |
262 /** | |
263 * Seek to a given timestamp relative to the frames in | |
264 * stream component stream_index. | |
265 * @param stream_index Must not be -1. | |
266 * @param flags Selects which direction should be preferred if no exact | |
267 * match is available. | |
268 * @return >= 0 on success (but not necessarily the new offset) | |
269 */ | |
270 int (*read_seek)(struct AVFormatContext *, | |
271 int stream_index, int64_t timestamp, int flags); | |
272 #endif | |
273 /** | |
274 * Gets the next timestamp in stream[stream_index].time_base units. | |
275 * @return the timestamp or AV_NOPTS_VALUE if an error occurred | |
276 */ | |
277 int64_t (*read_timestamp)(struct AVFormatContext *s, int stream_index, | |
278 int64_t *pos, int64_t pos_limit); | |
279 /** Can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER. */ | |
280 int flags; | |
281 /** If extensions are defined, then no probe is done. You should | |
282 usually not use extension format guessing because it is not | |
283 reliable enough */ | |
284 const char *extensions; | |
285 /** General purpose read-only value that the format can use. */ | |
286 int value; | |
287 | |
288 /** Start/resume playing - only meaningful if using a network-based format | |
289 (RTSP). */ | |
290 int (*read_play)(struct AVFormatContext *); | |
291 | |
292 /** Pause playing - only meaningful if using a network-based format | |
293 (RTSP). */ | |
294 int (*read_pause)(struct AVFormatContext *); | |
295 | |
296 const struct AVCodecTag * const *codec_tag; | |
297 | |
298 /** | |
299 * Seek to timestamp ts. | |
300 * Seeking will be done so that the point from which all active streams | |
301 * can be presented successfully will be closest to ts and within min/max_ts
. | |
302 * Active streams are all streams that have AVStream.discard < AVDISCARD_ALL
. | |
303 */ | |
304 int (*read_seek2)(struct AVFormatContext *s, int stream_index, int64_t min_t
s, int64_t ts, int64_t max_ts, int flags); | |
305 | |
306 const AVMetadataConv *metadata_conv; | |
307 | |
308 /* private fields */ | |
309 struct AVInputFormat *next; | |
310 } AVInputFormat; | |
311 | |
312 enum AVStreamParseType { | |
313 AVSTREAM_PARSE_NONE, | |
314 AVSTREAM_PARSE_FULL, /**< full parsing and repack */ | |
315 AVSTREAM_PARSE_HEADERS, /**< Only parse headers, do not repack. */ | |
316 AVSTREAM_PARSE_TIMESTAMPS, /**< full parsing and interpolation of timestamps
for frames not starting on a packet boundary */ | |
317 }; | |
318 | |
319 typedef struct AVIndexEntry { | |
320 int64_t pos; | |
321 int64_t timestamp; | |
322 #define AVINDEX_KEYFRAME 0x0001 | |
323 int flags:2; | |
324 int size:30; //Yeah, trying to keep the size of this small to reduce memory
requirements (it is 24 vs. 32 bytes due to possible 8-byte alignment). | |
325 int min_distance; /**< Minimum distance between this and the previou
s keyframe, used to avoid unneeded searching. */ | |
326 } AVIndexEntry; | |
327 | |
328 #define AV_DISPOSITION_DEFAULT 0x0001 | |
329 #define AV_DISPOSITION_DUB 0x0002 | |
330 #define AV_DISPOSITION_ORIGINAL 0x0004 | |
331 #define AV_DISPOSITION_COMMENT 0x0008 | |
332 #define AV_DISPOSITION_LYRICS 0x0010 | |
333 #define AV_DISPOSITION_KARAOKE 0x0020 | |
334 | |
335 /** | |
336 * Stream structure. | |
337 * New fields can be added to the end with minor version bumps. | |
338 * Removal, reordering and changes to existing fields require a major | |
339 * version bump. | |
340 * sizeof(AVStream) must not be used outside libav*. | |
341 */ | |
342 typedef struct AVStream { | |
343 int index; /**< stream index in AVFormatContext */ | |
344 int id; /**< format-specific stream ID */ | |
345 AVCodecContext *codec; /**< codec context */ | |
346 /** | |
347 * Real base framerate of the stream. | |
348 * This is the lowest framerate with which all timestamps can be | |
349 * represented accurately (it is the least common multiple of all | |
350 * framerates in the stream). Note, this value is just a guess! | |
351 * For example, if the time base is 1/90000 and all frames have either | |
352 * approximately 3600 or 1800 timer ticks, then r_frame_rate will be 50/1. | |
353 */ | |
354 AVRational r_frame_rate; | |
355 void *priv_data; | |
356 | |
357 /* internal data used in av_find_stream_info() */ | |
358 int64_t first_dts; | |
359 /** encoding: pts generation when outputting stream */ | |
360 struct AVFrac pts; | |
361 | |
362 /** | |
363 * This is the fundamental unit of time (in seconds) in terms | |
364 * of which frame timestamps are represented. For fixed-fps content, | |
365 * time base should be 1/framerate and timestamp increments should be 1. | |
366 */ | |
367 AVRational time_base; | |
368 int pts_wrap_bits; /**< number of bits in pts (used for wrapping control) */ | |
369 /* ffmpeg.c private use */ | |
370 int stream_copy; /**< If set, just copy stream. */ | |
371 enum AVDiscard discard; ///< Selects which packets can be discarded at will
and do not need to be demuxed. | |
372 //FIXME move stuff to a flags field? | |
373 /** Quality, as it has been removed from AVCodecContext and put in AVVideoFr
ame. | |
374 * MN: dunno if that is the right place for it */ | |
375 float quality; | |
376 /** | |
377 * Decoding: pts of the first frame of the stream, in stream time base. | |
378 * Only set this if you are absolutely 100% sure that the value you set | |
379 * it to really is the pts of the first frame. | |
380 * This may be undefined (AV_NOPTS_VALUE). | |
381 * @note The ASF header does NOT contain a correct start_time the ASF | |
382 * demuxer must NOT set this. | |
383 */ | |
384 int64_t start_time; | |
385 /** | |
386 * Decoding: duration of the stream, in stream time base. | |
387 * If a source file does not specify a duration, but does specify | |
388 * a bitrate, this value will be estimated from bitrate and file size. | |
389 */ | |
390 int64_t duration; | |
391 | |
392 #if LIBAVFORMAT_VERSION_INT < (53<<16) | |
393 char language[4]; /** ISO 639-2/B 3-letter language code (empty string if un
defined) */ | |
394 #endif | |
395 | |
396 /* av_read_frame() support */ | |
397 enum AVStreamParseType need_parsing; | |
398 struct AVCodecParserContext *parser; | |
399 | |
400 int64_t cur_dts; | |
401 int last_IP_duration; | |
402 int64_t last_IP_pts; | |
403 /* av_seek_frame() support */ | |
404 AVIndexEntry *index_entries; /**< Only used if the format does not | |
405 support seeking natively. */ | |
406 int nb_index_entries; | |
407 unsigned int index_entries_allocated_size; | |
408 | |
409 int64_t nb_frames; ///< number of frames in this stream if k
nown or 0 | |
410 | |
411 #if LIBAVFORMAT_VERSION_INT < (53<<16) | |
412 int64_t unused[4+1]; | |
413 | |
414 char *filename; /**< source filename of the stream */ | |
415 #endif | |
416 | |
417 int disposition; /**< AV_DISPOSITION_* bit field */ | |
418 | |
419 AVProbeData probe_data; | |
420 #define MAX_REORDER_DELAY 16 | |
421 int64_t pts_buffer[MAX_REORDER_DELAY+1]; | |
422 | |
423 /** | |
424 * sample aspect ratio (0 if unknown) | |
425 * - encoding: Set by user. | |
426 * - decoding: Set by libavformat. | |
427 */ | |
428 AVRational sample_aspect_ratio; | |
429 | |
430 AVMetadata *metadata; | |
431 | |
432 /* av_read_frame() support */ | |
433 const uint8_t *cur_ptr; | |
434 int cur_len; | |
435 AVPacket cur_pkt; | |
436 | |
437 // Timestamp generation support: | |
438 /** | |
439 * Timestamp corresponding to the last dts sync point. | |
440 * | |
441 * Initialized when AVCodecParserContext.dts_sync_point >= 0 and | |
442 * a DTS is received from the underlying container. Otherwise set to | |
443 * AV_NOPTS_VALUE by default. | |
444 */ | |
445 int64_t reference_dts; | |
446 } AVStream; | |
447 | |
448 #define AV_PROGRAM_RUNNING 1 | |
449 | |
450 /** | |
451 * New fields can be added to the end with minor version bumps. | |
452 * Removal, reordering and changes to existing fields require a major | |
453 * version bump. | |
454 * sizeof(AVProgram) must not be used outside libav*. | |
455 */ | |
456 typedef struct AVProgram { | |
457 int id; | |
458 #if LIBAVFORMAT_VERSION_INT < (53<<16) | |
459 char *provider_name; ///< network name for DVB streams | |
460 char *name; ///< service name for DVB streams | |
461 #endif | |
462 int flags; | |
463 enum AVDiscard discard; ///< selects which program to discard and whi
ch to feed to the caller | |
464 unsigned int *stream_index; | |
465 unsigned int nb_stream_indexes; | |
466 AVMetadata *metadata; | |
467 } AVProgram; | |
468 | |
469 #define AVFMTCTX_NOHEADER 0x0001 /**< signal that no header is present | |
470 (streams are added dynamically) */ | |
471 | |
472 typedef struct AVChapter { | |
473 int id; ///< unique ID to identify the chapter | |
474 AVRational time_base; ///< time base in which the start/end timestamps are
specified | |
475 int64_t start, end; ///< chapter start/end time in time_base units | |
476 #if LIBAVFORMAT_VERSION_INT < (53<<16) | |
477 char *title; ///< chapter title | |
478 #endif | |
479 AVMetadata *metadata; | |
480 } AVChapter; | |
481 | |
482 #define MAX_STREAMS 20 | |
483 | |
484 /** | |
485 * Format I/O context. | |
486 * New fields can be added to the end with minor version bumps. | |
487 * Removal, reordering and changes to existing fields require a major | |
488 * version bump. | |
489 * sizeof(AVFormatContext) must not be used outside libav*. | |
490 */ | |
491 typedef struct AVFormatContext { | |
492 const AVClass *av_class; /**< Set by avformat_alloc_context. */ | |
493 /* Can only be iformat or oformat, not both at the same time. */ | |
494 struct AVInputFormat *iformat; | |
495 struct AVOutputFormat *oformat; | |
496 void *priv_data; | |
497 ByteIOContext *pb; | |
498 unsigned int nb_streams; | |
499 AVStream *streams[MAX_STREAMS]; | |
500 char filename[1024]; /**< input or output filename */ | |
501 /* stream info */ | |
502 int64_t timestamp; | |
503 #if LIBAVFORMAT_VERSION_INT < (53<<16) | |
504 char title[512]; | |
505 char author[512]; | |
506 char copyright[512]; | |
507 char comment[512]; | |
508 char album[512]; | |
509 int year; /**< ID3 year, 0 if none */ | |
510 int track; /**< track number, 0 if none */ | |
511 char genre[32]; /**< ID3 genre */ | |
512 #endif | |
513 | |
514 int ctx_flags; /**< Format-specific flags, see AVFMTCTX_xx */ | |
515 /* private data for pts handling (do not modify directly). */ | |
516 /** This buffer is only needed when packets were already buffered but | |
517 not decoded, for example to get the codec parameters in MPEG | |
518 streams. */ | |
519 struct AVPacketList *packet_buffer; | |
520 | |
521 /** Decoding: position of the first frame of the component, in | |
522 AV_TIME_BASE fractional seconds. NEVER set this value directly: | |
523 It is deduced from the AVStream values. */ | |
524 int64_t start_time; | |
525 /** Decoding: duration of the stream, in AV_TIME_BASE fractional | |
526 seconds. NEVER set this value directly: it is deduced from the | |
527 AVStream values. */ | |
528 int64_t duration; | |
529 /** decoding: total file size, 0 if unknown */ | |
530 int64_t file_size; | |
531 /** Decoding: total stream bitrate in bit/s, 0 if not | |
532 available. Never set it directly if the file_size and the | |
533 duration are known as FFmpeg can compute it automatically. */ | |
534 int bit_rate; | |
535 | |
536 /* av_read_frame() support */ | |
537 AVStream *cur_st; | |
538 #if LIBAVFORMAT_VERSION_INT < (53<<16) | |
539 const uint8_t *cur_ptr_deprecated; | |
540 int cur_len_deprecated; | |
541 AVPacket cur_pkt_deprecated; | |
542 #endif | |
543 | |
544 /* av_seek_frame() support */ | |
545 int64_t data_offset; /** offset of the first packet */ | |
546 int index_built; | |
547 | |
548 int mux_rate; | |
549 int packet_size; | |
550 int preload; | |
551 int max_delay; | |
552 | |
553 #define AVFMT_NOOUTPUTLOOP -1 | |
554 #define AVFMT_INFINITEOUTPUTLOOP 0 | |
555 /** number of times to loop output in formats that support it */ | |
556 int loop_output; | |
557 | |
558 int flags; | |
559 #define AVFMT_FLAG_GENPTS 0x0001 ///< Generate missing pts even if it requ
ires parsing future frames. | |
560 #define AVFMT_FLAG_IGNIDX 0x0002 ///< Ignore index. | |
561 #define AVFMT_FLAG_NONBLOCK 0x0004 ///< Do not block when reading packets fr
om input. | |
562 | |
563 int loop_input; | |
564 /** decoding: size of data to probe; encoding: unused. */ | |
565 unsigned int probesize; | |
566 | |
567 /** | |
568 * Maximum time (in AV_TIME_BASE units) during which the input should | |
569 * be analyzed in av_find_stream_info(). | |
570 */ | |
571 int max_analyze_duration; | |
572 | |
573 const uint8_t *key; | |
574 int keylen; | |
575 | |
576 unsigned int nb_programs; | |
577 AVProgram **programs; | |
578 | |
579 /** | |
580 * Forced video codec_id. | |
581 * Demuxing: Set by user. | |
582 */ | |
583 enum CodecID video_codec_id; | |
584 /** | |
585 * Forced audio codec_id. | |
586 * Demuxing: Set by user. | |
587 */ | |
588 enum CodecID audio_codec_id; | |
589 /** | |
590 * Forced subtitle codec_id. | |
591 * Demuxing: Set by user. | |
592 */ | |
593 enum CodecID subtitle_codec_id; | |
594 | |
595 /** | |
596 * Maximum amount of memory in bytes to use for the index of each stream. | |
597 * If the index exceeds this size, entries will be discarded as | |
598 * needed to maintain a smaller size. This can lead to slower or less | |
599 * accurate seeking (depends on demuxer). | |
600 * Demuxers for which a full in-memory index is mandatory will ignore | |
601 * this. | |
602 * muxing : unused | |
603 * demuxing: set by user | |
604 */ | |
605 unsigned int max_index_size; | |
606 | |
607 /** | |
608 * Maximum amount of memory in bytes to use for buffering frames | |
609 * obtained from realtime capture devices. | |
610 */ | |
611 unsigned int max_picture_buffer; | |
612 | |
613 unsigned int nb_chapters; | |
614 AVChapter **chapters; | |
615 | |
616 /** | |
617 * Flags to enable debugging. | |
618 */ | |
619 int debug; | |
620 #define FF_FDEBUG_TS 0x0001 | |
621 | |
622 /** | |
623 * Raw packets from the demuxer, prior to parsing and decoding. | |
624 * This buffer is used for buffering packets until the codec can | |
625 * be identified, as parsing cannot be done without knowing the | |
626 * codec. | |
627 */ | |
628 struct AVPacketList *raw_packet_buffer; | |
629 struct AVPacketList *raw_packet_buffer_end; | |
630 | |
631 struct AVPacketList *packet_buffer_end; | |
632 | |
633 AVMetadata *metadata; | |
634 } AVFormatContext; | |
635 | |
636 typedef struct AVPacketList { | |
637 AVPacket pkt; | |
638 struct AVPacketList *next; | |
639 } AVPacketList; | |
640 | |
641 #if LIBAVFORMAT_VERSION_INT < (53<<16) | |
642 extern AVInputFormat *first_iformat; | |
643 extern AVOutputFormat *first_oformat; | |
644 #endif | |
645 | |
646 /** | |
647 * If f is NULL, returns the first registered input format, | |
648 * if f is non-NULL, returns the next registered input format after f | |
649 * or NULL if f is the last one. | |
650 */ | |
651 AVInputFormat *av_iformat_next(AVInputFormat *f); | |
652 | |
653 /** | |
654 * If f is NULL, returns the first registered output format, | |
655 * if f is non-NULL, returns the next registered output format after f | |
656 * or NULL if f is the last one. | |
657 */ | |
658 AVOutputFormat *av_oformat_next(AVOutputFormat *f); | |
659 | |
660 enum CodecID av_guess_image2_codec(const char *filename); | |
661 | |
662 /* XXX: Use automatic init with either ELF sections or C file parser */ | |
663 /* modules. */ | |
664 | |
665 /* utils.c */ | |
666 void av_register_input_format(AVInputFormat *format); | |
667 void av_register_output_format(AVOutputFormat *format); | |
668 AVOutputFormat *guess_stream_format(const char *short_name, | |
669 const char *filename, | |
670 const char *mime_type); | |
671 AVOutputFormat *guess_format(const char *short_name, | |
672 const char *filename, | |
673 const char *mime_type); | |
674 | |
675 /** | |
676 * Guesses the codec ID based upon muxer and filename. | |
677 */ | |
678 enum CodecID av_guess_codec(AVOutputFormat *fmt, const char *short_name, | |
679 const char *filename, const char *mime_type, | |
680 enum CodecType type); | |
681 | |
682 /** | |
683 * Send a nice hexadecimal dump of a buffer to the specified file stream. | |
684 * | |
685 * @param f The file stream pointer where the dump should be sent to. | |
686 * @param buf buffer | |
687 * @param size buffer size | |
688 * | |
689 * @see av_hex_dump_log, av_pkt_dump, av_pkt_dump_log | |
690 */ | |
691 void av_hex_dump(FILE *f, uint8_t *buf, int size); | |
692 | |
693 /** | |
694 * Send a nice hexadecimal dump of a buffer to the log. | |
695 * | |
696 * @param avcl A pointer to an arbitrary struct of which the first field is a | |
697 * pointer to an AVClass struct. | |
698 * @param level The importance level of the message, lower values signifying | |
699 * higher importance. | |
700 * @param buf buffer | |
701 * @param size buffer size | |
702 * | |
703 * @see av_hex_dump, av_pkt_dump, av_pkt_dump_log | |
704 */ | |
705 void av_hex_dump_log(void *avcl, int level, uint8_t *buf, int size); | |
706 | |
707 /** | |
708 * Send a nice dump of a packet to the specified file stream. | |
709 * | |
710 * @param f The file stream pointer where the dump should be sent to. | |
711 * @param pkt packet to dump | |
712 * @param dump_payload True if the payload must be displayed, too. | |
713 */ | |
714 void av_pkt_dump(FILE *f, AVPacket *pkt, int dump_payload); | |
715 | |
716 /** | |
717 * Send a nice dump of a packet to the log. | |
718 * | |
719 * @param avcl A pointer to an arbitrary struct of which the first field is a | |
720 * pointer to an AVClass struct. | |
721 * @param level The importance level of the message, lower values signifying | |
722 * higher importance. | |
723 * @param pkt packet to dump | |
724 * @param dump_payload True if the payload must be displayed, too. | |
725 */ | |
726 void av_pkt_dump_log(void *avcl, int level, AVPacket *pkt, int dump_payload); | |
727 | |
728 /** | |
729 * Initialize libavformat and register all the muxers, demuxers and | |
730 * protocols. If you do not call this function, then you can select | |
731 * exactly which formats you want to support. | |
732 * | |
733 * @see av_register_input_format() | |
734 * @see av_register_output_format() | |
735 * @see av_register_protocol() | |
736 */ | |
737 void av_register_all(void); | |
738 | |
739 /** codec tag <-> codec id */ | |
740 enum CodecID av_codec_get_id(const struct AVCodecTag * const *tags, unsigned int
tag); | |
741 unsigned int av_codec_get_tag(const struct AVCodecTag * const *tags, enum CodecI
D id); | |
742 | |
743 /* media file input */ | |
744 | |
745 /** | |
746 * Finds AVInputFormat based on the short name of the input format. | |
747 */ | |
748 AVInputFormat *av_find_input_format(const char *short_name); | |
749 | |
750 /** | |
751 * Guess file format. | |
752 * | |
753 * @param is_opened Whether the file is already opened; determines whether | |
754 * demuxers with or without AVFMT_NOFILE are probed. | |
755 */ | |
756 AVInputFormat *av_probe_input_format(AVProbeData *pd, int is_opened); | |
757 | |
758 /** | |
759 * Allocates all the structures needed to read an input stream. | |
760 * This does not open the needed codecs for decoding the stream[s]. | |
761 */ | |
762 int av_open_input_stream(AVFormatContext **ic_ptr, | |
763 ByteIOContext *pb, const char *filename, | |
764 AVInputFormat *fmt, AVFormatParameters *ap); | |
765 | |
766 /** | |
767 * Open a media file as input. The codecs are not opened. Only the file | |
768 * header (if present) is read. | |
769 * | |
770 * @param ic_ptr The opened media file handle is put here. | |
771 * @param filename filename to open | |
772 * @param fmt If non-NULL, force the file format to use. | |
773 * @param buf_size optional buffer size (zero if default is OK) | |
774 * @param ap Additional parameters needed when opening the file | |
775 * (NULL if default). | |
776 * @return 0 if OK, AVERROR_xxx otherwise | |
777 */ | |
778 int av_open_input_file(AVFormatContext **ic_ptr, const char *filename, | |
779 AVInputFormat *fmt, | |
780 int buf_size, | |
781 AVFormatParameters *ap); | |
782 | |
783 #if LIBAVFORMAT_VERSION_MAJOR < 53 | |
784 /** | |
785 * @deprecated Use avformat_alloc_context() instead. | |
786 */ | |
787 attribute_deprecated AVFormatContext *av_alloc_format_context(void); | |
788 #endif | |
789 | |
790 /** | |
791 * Allocate an AVFormatContext. | |
792 * Can be freed with av_free() but do not forget to free everything you | |
793 * explicitly allocated as well! | |
794 */ | |
795 AVFormatContext *avformat_alloc_context(void); | |
796 | |
797 /** | |
798 * Read packets of a media file to get stream information. This | |
799 * is useful for file formats with no headers such as MPEG. This | |
800 * function also computes the real framerate in case of MPEG-2 repeat | |
801 * frame mode. | |
802 * The logical file position is not changed by this function; | |
803 * examined packets may be buffered for later processing. | |
804 * | |
805 * @param ic media file handle | |
806 * @return >=0 if OK, AVERROR_xxx on error | |
807 * @todo Let the user decide somehow what information is needed so that | |
808 * we do not waste time getting stuff the user does not need. | |
809 */ | |
810 int av_find_stream_info(AVFormatContext *ic); | |
811 | |
812 /** | |
813 * Read a transport packet from a media file. | |
814 * | |
815 * This function is obsolete and should never be used. | |
816 * Use av_read_frame() instead. | |
817 * | |
818 * @param s media file handle | |
819 * @param pkt is filled | |
820 * @return 0 if OK, AVERROR_xxx on error | |
821 */ | |
822 int av_read_packet(AVFormatContext *s, AVPacket *pkt); | |
823 | |
824 /** | |
825 * Return the next frame of a stream. | |
826 * | |
827 * The returned packet is valid | |
828 * until the next av_read_frame() or until av_close_input_file() and | |
829 * must be freed with av_free_packet. For video, the packet contains | |
830 * exactly one frame. For audio, it contains an integer number of | |
831 * frames if each frame has a known fixed size (e.g. PCM or ADPCM | |
832 * data). If the audio frames have a variable size (e.g. MPEG audio), | |
833 * then it contains one frame. | |
834 * | |
835 * pkt->pts, pkt->dts and pkt->duration are always set to correct | |
836 * values in AVStream.time_base units (and guessed if the format cannot | |
837 * provide them). pkt->pts can be AV_NOPTS_VALUE if the video format | |
838 * has B-frames, so it is better to rely on pkt->dts if you do not | |
839 * decompress the payload. | |
840 * | |
841 * @return 0 if OK, < 0 on error or end of file | |
842 */ | |
843 int av_read_frame(AVFormatContext *s, AVPacket *pkt); | |
844 | |
845 /** | |
846 * Seek to the keyframe at timestamp. | |
847 * 'timestamp' in 'stream_index'. | |
848 * @param stream_index If stream_index is (-1), a default | |
849 * stream is selected, and timestamp is automatically converted | |
850 * from AV_TIME_BASE units to the stream specific time_base. | |
851 * @param timestamp Timestamp in AVStream.time_base units | |
852 * or, if no stream is specified, in AV_TIME_BASE units. | |
853 * @param flags flags which select direction and seeking mode | |
854 * @return >= 0 on success | |
855 */ | |
856 int av_seek_frame(AVFormatContext *s, int stream_index, int64_t timestamp, | |
857 int flags); | |
858 | |
859 /** | |
860 * Seek to timestamp ts. | |
861 * Seeking will be done so that the point from which all active streams | |
862 * can be presented successfully will be closest to ts and within min/max_ts. | |
863 * Active streams are all streams that have AVStream.discard < AVDISCARD_ALL. | |
864 * | |
865 * If flags contain AVSEEK_FLAG_BYTE, then all timestamps are in bytes and | |
866 * are the file position (this may not be supported by all demuxers). | |
867 * If flags contain AVSEEK_FLAG_FRAME, then all timestamps are in frames | |
868 * in the stream with stream_index (this may not be supported by all demuxers). | |
869 * Otherwise all timestamps are in units of the stream selected by stream_index | |
870 * or if stream_index is -1, in AV_TIME_BASE units. | |
871 * If flags contain AVSEEK_FLAG_ANY, then non-keyframes are treated as | |
872 * keyframes (this may not be supported by all demuxers). | |
873 * | |
874 * @param stream_index index of the stream which is used as time base reference | |
875 * @param min_ts smallest acceptable timestamp | |
876 * @param ts target timestamp | |
877 * @param max_ts largest acceptable timestamp | |
878 * @param flags flags | |
879 * @returns >=0 on success, error code otherwise | |
880 * | |
881 * @NOTE This is part of the new seek API which is still under construction. | |
882 * Thus do not use this yet. It may change at any time, do not expect | |
883 * ABI compatibility yet! | |
884 */ | |
885 int avformat_seek_file(AVFormatContext *s, int stream_index, int64_t min_ts, int
64_t ts, int64_t max_ts, int flags); | |
886 | |
887 /** | |
888 * Start playing a network-based stream (e.g. RTSP stream) at the | |
889 * current position. | |
890 */ | |
891 int av_read_play(AVFormatContext *s); | |
892 | |
893 /** | |
894 * Pause a network-based stream (e.g. RTSP stream). | |
895 * | |
896 * Use av_read_play() to resume it. | |
897 */ | |
898 int av_read_pause(AVFormatContext *s); | |
899 | |
900 /** | |
901 * Free a AVFormatContext allocated by av_open_input_stream. | |
902 * @param s context to free | |
903 */ | |
904 void av_close_input_stream(AVFormatContext *s); | |
905 | |
906 /** | |
907 * Close a media file (but not its codecs). | |
908 * | |
909 * @param s media file handle | |
910 */ | |
911 void av_close_input_file(AVFormatContext *s); | |
912 | |
913 /** | |
914 * Add a new stream to a media file. | |
915 * | |
916 * Can only be called in the read_header() function. If the flag | |
917 * AVFMTCTX_NOHEADER is in the format context, then new streams | |
918 * can be added in read_packet too. | |
919 * | |
920 * @param s media file handle | |
921 * @param id file-format-dependent stream ID | |
922 */ | |
923 AVStream *av_new_stream(AVFormatContext *s, int id); | |
924 AVProgram *av_new_program(AVFormatContext *s, int id); | |
925 | |
926 /** | |
927 * Add a new chapter. | |
928 * This function is NOT part of the public API | |
929 * and should ONLY be used by demuxers. | |
930 * | |
931 * @param s media file handle | |
932 * @param id unique ID for this chapter | |
933 * @param start chapter start time in time_base units | |
934 * @param end chapter end time in time_base units | |
935 * @param title chapter title | |
936 * | |
937 * @return AVChapter or NULL on error | |
938 */ | |
939 AVChapter *ff_new_chapter(AVFormatContext *s, int id, AVRational time_base, | |
940 int64_t start, int64_t end, const char *title); | |
941 | |
942 /** | |
943 * Set the pts for a given stream. | |
944 * | |
945 * @param s stream | |
946 * @param pts_wrap_bits number of bits effectively used by the pts | |
947 * (used for wrap control, 33 is the value for MPEG) | |
948 * @param pts_num numerator to convert to seconds (MPEG: 1) | |
949 * @param pts_den denominator to convert to seconds (MPEG: 90000) | |
950 */ | |
951 void av_set_pts_info(AVStream *s, int pts_wrap_bits, | |
952 int pts_num, int pts_den); | |
953 | |
954 #define AVSEEK_FLAG_BACKWARD 1 ///< seek backward | |
955 #define AVSEEK_FLAG_BYTE 2 ///< seeking based on position in bytes | |
956 #define AVSEEK_FLAG_ANY 4 ///< seek to any frame, even non-keyframes | |
957 | |
958 int av_find_default_stream_index(AVFormatContext *s); | |
959 | |
960 /** | |
961 * Gets the index for a specific timestamp. | |
962 * @param flags if AVSEEK_FLAG_BACKWARD then the returned index will correspond | |
963 * to the timestamp which is <= the requested one, if backward | |
964 * is 0, then it will be >= | |
965 * if AVSEEK_FLAG_ANY seek to any frame, only keyframes otherwise | |
966 * @return < 0 if no such timestamp could be found | |
967 */ | |
968 int av_index_search_timestamp(AVStream *st, int64_t timestamp, int flags); | |
969 | |
970 /** | |
971 * Ensures the index uses less memory than the maximum specified in | |
972 * AVFormatContext.max_index_size by discarding entries if it grows | |
973 * too large. | |
974 * This function is not part of the public API and should only be called | |
975 * by demuxers. | |
976 */ | |
977 void ff_reduce_index(AVFormatContext *s, int stream_index); | |
978 | |
979 /** | |
980 * Add an index entry into a sorted list. Update the entry if the list | |
981 * already contains it. | |
982 * | |
983 * @param timestamp timestamp in the time base of the given stream | |
984 */ | |
985 int av_add_index_entry(AVStream *st, int64_t pos, int64_t timestamp, | |
986 int size, int distance, int flags); | |
987 | |
988 /** | |
989 * Does a binary search using av_index_search_timestamp() and | |
990 * AVCodec.read_timestamp(). | |
991 * This is not supposed to be called directly by a user application, | |
992 * but by demuxers. | |
993 * @param target_ts target timestamp in the time base of the given stream | |
994 * @param stream_index stream number | |
995 */ | |
996 int av_seek_frame_binary(AVFormatContext *s, int stream_index, | |
997 int64_t target_ts, int flags); | |
998 | |
999 /** | |
1000 * Updates cur_dts of all streams based on the given timestamp and AVStream. | |
1001 * | |
1002 * Stream ref_st unchanged, others set cur_dts in their native time base. | |
1003 * Only needed for timestamp wrapping or if (dts not set and pts!=dts). | |
1004 * @param timestamp new dts expressed in time_base of param ref_st | |
1005 * @param ref_st reference stream giving time_base of param timestamp | |
1006 */ | |
1007 void av_update_cur_dts(AVFormatContext *s, AVStream *ref_st, int64_t timestamp); | |
1008 | |
1009 /** | |
1010 * Does a binary search using read_timestamp(). | |
1011 * This is not supposed to be called directly by a user application, | |
1012 * but by demuxers. | |
1013 * @param target_ts target timestamp in the time base of the given stream | |
1014 * @param stream_index stream number | |
1015 */ | |
1016 int64_t av_gen_search(AVFormatContext *s, int stream_index, | |
1017 int64_t target_ts, int64_t pos_min, | |
1018 int64_t pos_max, int64_t pos_limit, | |
1019 int64_t ts_min, int64_t ts_max, | |
1020 int flags, int64_t *ts_ret, | |
1021 int64_t (*read_timestamp)(struct AVFormatContext *, int ,
int64_t *, int64_t )); | |
1022 | |
1023 /** media file output */ | |
1024 int av_set_parameters(AVFormatContext *s, AVFormatParameters *ap); | |
1025 | |
1026 /** | |
1027 * Allocate the stream private data and write the stream header to an | |
1028 * output media file. | |
1029 * | |
1030 * @param s media file handle | |
1031 * @return 0 if OK, AVERROR_xxx on error | |
1032 */ | |
1033 int av_write_header(AVFormatContext *s); | |
1034 | |
1035 /** | |
1036 * Write a packet to an output media file. | |
1037 * | |
1038 * The packet shall contain one audio or video frame. | |
1039 * The packet must be correctly interleaved according to the container | |
1040 * specification, if not then av_interleaved_write_frame must be used. | |
1041 * | |
1042 * @param s media file handle | |
1043 * @param pkt The packet, which contains the stream_index, buf/buf_size, | |
1044 dts/pts, ... | |
1045 * @return < 0 on error, = 0 if OK, 1 if end of stream wanted | |
1046 */ | |
1047 int av_write_frame(AVFormatContext *s, AVPacket *pkt); | |
1048 | |
1049 /** | |
1050 * Writes a packet to an output media file ensuring correct interleaving. | |
1051 * | |
1052 * The packet must contain one audio or video frame. | |
1053 * If the packets are already correctly interleaved, the application should | |
1054 * call av_write_frame() instead as it is slightly faster. It is also important | |
1055 * to keep in mind that completely non-interleaved input will need huge amounts | |
1056 * of memory to interleave with this, so it is preferable to interleave at the | |
1057 * demuxer level. | |
1058 * | |
1059 * @param s media file handle | |
1060 * @param pkt The packet, which contains the stream_index, buf/buf_size, | |
1061 dts/pts, ... | |
1062 * @return < 0 on error, = 0 if OK, 1 if end of stream wanted | |
1063 */ | |
1064 int av_interleaved_write_frame(AVFormatContext *s, AVPacket *pkt); | |
1065 | |
1066 /** | |
1067 * Interleave a packet per dts in an output media file. | |
1068 * | |
1069 * Packets with pkt->destruct == av_destruct_packet will be freed inside this | |
1070 * function, so they cannot be used after it. Note that calling av_free_packet() | |
1071 * on them is still safe. | |
1072 * | |
1073 * @param s media file handle | |
1074 * @param out the interleaved packet will be output here | |
1075 * @param in the input packet | |
1076 * @param flush 1 if no further packets are available as input and all | |
1077 * remaining packets should be output | |
1078 * @return 1 if a packet was output, 0 if no packet could be output, | |
1079 * < 0 if an error occurred | |
1080 */ | |
1081 int av_interleave_packet_per_dts(AVFormatContext *s, AVPacket *out, | |
1082 AVPacket *pkt, int flush); | |
1083 | |
1084 /** | |
1085 * @brief Write the stream trailer to an output media file and | |
1086 * free the file private data. | |
1087 * | |
1088 * May only be called after a successful call to av_write_header. | |
1089 * | |
1090 * @param s media file handle | |
1091 * @return 0 if OK, AVERROR_xxx on error | |
1092 */ | |
1093 int av_write_trailer(AVFormatContext *s); | |
1094 | |
1095 void dump_format(AVFormatContext *ic, | |
1096 int index, | |
1097 const char *url, | |
1098 int is_output); | |
1099 | |
1100 #if LIBAVFORMAT_VERSION_MAJOR < 53 | |
1101 /** | |
1102 * Parses width and height out of string str. | |
1103 * @deprecated Use av_parse_video_frame_size instead. | |
1104 */ | |
1105 attribute_deprecated int parse_image_size(int *width_ptr, int *height_ptr, | |
1106 const char *str); | |
1107 | |
1108 /** | |
1109 * Converts framerate from a string to a fraction. | |
1110 * @deprecated Use av_parse_video_frame_rate instead. | |
1111 */ | |
1112 attribute_deprecated int parse_frame_rate(int *frame_rate, int *frame_rate_base, | |
1113 const char *arg); | |
1114 #endif | |
1115 | |
1116 /** | |
1117 * Parses \p datestr and returns a corresponding number of microseconds. | |
1118 * @param datestr String representing a date or a duration. | |
1119 * - If a date the syntax is: | |
1120 * @code | |
1121 * [{YYYY-MM-DD|YYYYMMDD}]{T| }{HH[:MM[:SS[.m...]]][Z]|HH[MM[SS[.m...]]][Z]} | |
1122 * @endcode | |
1123 * Time is local time unless Z is appended, in which case it is | |
1124 * interpreted as UTC. | |
1125 * If the year-month-day part is not specified it takes the current | |
1126 * year-month-day. | |
1127 * Returns the number of microseconds since 1st of January, 1970 up to | |
1128 * the time of the parsed date or INT64_MIN if \p datestr cannot be | |
1129 * successfully parsed. | |
1130 * - If a duration the syntax is: | |
1131 * @code | |
1132 * [-]HH[:MM[:SS[.m...]]] | |
1133 * [-]S+[.m...] | |
1134 * @endcode | |
1135 * Returns the number of microseconds contained in a time interval | |
1136 * with the specified duration or INT64_MIN if \p datestr cannot be | |
1137 * successfully parsed. | |
1138 * @param duration Flag which tells how to interpret \p datestr, if | |
1139 * not zero \p datestr is interpreted as a duration, otherwise as a | |
1140 * date. | |
1141 */ | |
1142 int64_t parse_date(const char *datestr, int duration); | |
1143 | |
1144 /** Gets the current time in microseconds. */ | |
1145 int64_t av_gettime(void); | |
1146 | |
1147 /* ffm-specific for ffserver */ | |
1148 #define FFM_PACKET_SIZE 4096 | |
1149 int64_t ffm_read_write_index(int fd); | |
1150 int ffm_write_write_index(int fd, int64_t pos); | |
1151 void ffm_set_write_index(AVFormatContext *s, int64_t pos, int64_t file_size); | |
1152 | |
1153 /** | |
1154 * Attempts to find a specific tag in a URL. | |
1155 * | |
1156 * syntax: '?tag1=val1&tag2=val2...'. Little URL decoding is done. | |
1157 * Return 1 if found. | |
1158 */ | |
1159 int find_info_tag(char *arg, int arg_size, const char *tag1, const char *info); | |
1160 | |
1161 /** | |
1162 * Returns in 'buf' the path with '%d' replaced by a number. | |
1163 * | |
1164 * Also handles the '%0nd' format where 'n' is the total number | |
1165 * of digits and '%%'. | |
1166 * | |
1167 * @param buf destination buffer | |
1168 * @param buf_size destination buffer size | |
1169 * @param path numbered sequence string | |
1170 * @param number frame number | |
1171 * @return 0 if OK, -1 on format error | |
1172 */ | |
1173 int av_get_frame_filename(char *buf, int buf_size, | |
1174 const char *path, int number); | |
1175 | |
1176 /** | |
1177 * Check whether filename actually is a numbered sequence generator. | |
1178 * | |
1179 * @param filename possible numbered sequence string | |
1180 * @return 1 if a valid numbered sequence string, 0 otherwise | |
1181 */ | |
1182 int av_filename_number_test(const char *filename); | |
1183 | |
1184 /** | |
1185 * Generate an SDP for an RTP session. | |
1186 * | |
1187 * @param ac array of AVFormatContexts describing the RTP streams. If the | |
1188 * array is composed by only one context, such context can contain | |
1189 * multiple AVStreams (one AVStream per RTP stream). Otherwise, | |
1190 * all the contexts in the array (an AVCodecContext per RTP stream) | |
1191 * must contain only one AVStream. | |
1192 * @param n_files number of AVCodecContexts contained in ac | |
1193 * @param buff buffer where the SDP will be stored (must be allocated by | |
1194 * the caller) | |
1195 * @param size the size of the buffer | |
1196 * @return 0 if OK, AVERROR_xxx on error | |
1197 */ | |
1198 int avf_sdp_create(AVFormatContext *ac[], int n_files, char *buff, int size); | |
1199 | |
1200 #ifdef HAVE_AV_CONFIG_H | |
1201 | |
1202 void ff_dynarray_add(intptr_t **tab_ptr, int *nb_ptr, intptr_t elem); | |
1203 | |
1204 #ifdef __GNUC__ | |
1205 #define dynarray_add(tab, nb_ptr, elem)\ | |
1206 do {\ | |
1207 __typeof__(tab) _tab = (tab);\ | |
1208 __typeof__(elem) _elem = (elem);\ | |
1209 (void)sizeof(**_tab == _elem); /* check that types are compatible */\ | |
1210 ff_dynarray_add((intptr_t **)_tab, nb_ptr, (intptr_t)_elem);\ | |
1211 } while(0) | |
1212 #else | |
1213 #define dynarray_add(tab, nb_ptr, elem)\ | |
1214 do {\ | |
1215 ff_dynarray_add((intptr_t **)(tab), nb_ptr, (intptr_t)(elem));\ | |
1216 } while(0) | |
1217 #endif | |
1218 | |
1219 time_t mktimegm(struct tm *tm); | |
1220 struct tm *brktimegm(time_t secs, struct tm *tm); | |
1221 const char *small_strptime(const char *p, const char *fmt, | |
1222 struct tm *dt); | |
1223 | |
1224 struct in_addr; | |
1225 int resolve_host(struct in_addr *sin_addr, const char *hostname); | |
1226 | |
1227 void url_split(char *proto, int proto_size, | |
1228 char *authorization, int authorization_size, | |
1229 char *hostname, int hostname_size, | |
1230 int *port_ptr, | |
1231 char *path, int path_size, | |
1232 const char *url); | |
1233 | |
1234 int match_ext(const char *filename, const char *extensions); | |
1235 | |
1236 #endif /* HAVE_AV_CONFIG_H */ | |
1237 | |
1238 #endif /* AVFORMAT_AVFORMAT_H */ | |
OLD | NEW |