ffmpeg / libavformat / avformat.h @ e9b78eeb
History | View | Annotate | Download (20.1 KB)
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_H
|
22 |
#define AVFORMAT_H
|
23 |
|
24 |
#ifdef __cplusplus
|
25 |
extern "C" { |
26 |
#endif
|
27 |
|
28 |
#define LIBAVFORMAT_VERSION_INT ((51<<16)+(8<<8)+0) |
29 |
#define LIBAVFORMAT_VERSION 51.8.0 |
30 |
#define LIBAVFORMAT_BUILD LIBAVFORMAT_VERSION_INT
|
31 |
|
32 |
#define LIBAVFORMAT_IDENT "Lavf" AV_STRINGIFY(LIBAVFORMAT_VERSION) |
33 |
|
34 |
#include <time.h> |
35 |
#include <stdio.h> /* FILE */ |
36 |
#include "avcodec.h" |
37 |
|
38 |
#include "avio.h" |
39 |
|
40 |
/* packet functions */
|
41 |
|
42 |
typedef struct AVPacket { |
43 |
int64_t pts; ///< presentation time stamp in time_base units
|
44 |
int64_t dts; ///< decompression time stamp in time_base units
|
45 |
uint8_t *data; |
46 |
int size;
|
47 |
int stream_index;
|
48 |
int flags;
|
49 |
int duration; ///< presentation duration in time_base units (0 if not available) |
50 |
void (*destruct)(struct AVPacket *); |
51 |
void *priv;
|
52 |
int64_t pos; ///< byte position in stream, -1 if unknown
|
53 |
} AVPacket; |
54 |
#define PKT_FLAG_KEY 0x0001 |
55 |
|
56 |
void av_destruct_packet_nofree(AVPacket *pkt);
|
57 |
void av_destruct_packet(AVPacket *pkt);
|
58 |
|
59 |
/* initialize optional fields of a packet */
|
60 |
static inline void av_init_packet(AVPacket *pkt) |
61 |
{ |
62 |
pkt->pts = AV_NOPTS_VALUE; |
63 |
pkt->dts = AV_NOPTS_VALUE; |
64 |
pkt->pos = -1;
|
65 |
pkt->duration = 0;
|
66 |
pkt->flags = 0;
|
67 |
pkt->stream_index = 0;
|
68 |
pkt->destruct= av_destruct_packet_nofree; |
69 |
} |
70 |
|
71 |
int av_new_packet(AVPacket *pkt, int size); |
72 |
int av_get_packet(ByteIOContext *s, AVPacket *pkt, int size); |
73 |
int av_dup_packet(AVPacket *pkt);
|
74 |
|
75 |
/**
|
76 |
* Free a packet
|
77 |
*
|
78 |
* @param pkt packet to free
|
79 |
*/
|
80 |
static inline void av_free_packet(AVPacket *pkt) |
81 |
{ |
82 |
if (pkt && pkt->destruct) {
|
83 |
pkt->destruct(pkt); |
84 |
} |
85 |
} |
86 |
|
87 |
/*************************************************/
|
88 |
/* fractional numbers for exact pts handling */
|
89 |
|
90 |
/* the exact value of the fractional number is: 'val + num / den'. num
|
91 |
is assumed to be such as 0 <= num < den */
|
92 |
typedef struct AVFrac { |
93 |
int64_t val, num, den; |
94 |
} AVFrac attribute_deprecated; |
95 |
|
96 |
/*************************************************/
|
97 |
/* input/output formats */
|
98 |
|
99 |
struct AVCodecTag;
|
100 |
|
101 |
struct AVFormatContext;
|
102 |
|
103 |
/* this structure contains the data a format has to probe a file */
|
104 |
typedef struct AVProbeData { |
105 |
const char *filename; |
106 |
unsigned char *buf; |
107 |
int buf_size;
|
108 |
} AVProbeData; |
109 |
|
110 |
#define AVPROBE_SCORE_MAX 100 ///< max score, half of that is used for file extension based detection |
111 |
|
112 |
typedef struct AVFormatParameters { |
113 |
AVRational time_base; |
114 |
int sample_rate;
|
115 |
int channels;
|
116 |
int width;
|
117 |
int height;
|
118 |
enum PixelFormat pix_fmt;
|
119 |
int channel; /* used to select dv channel */ |
120 |
const char *device; /* video, audio or DV device */ |
121 |
const char *standard; /* tv standard, NTSC, PAL, SECAM */ |
122 |
int mpeg2ts_raw:1; /* force raw MPEG2 transport stream output, if possible */ |
123 |
int mpeg2ts_compute_pcr:1; /* compute exact PCR for each transport |
124 |
stream packet (only meaningful if
|
125 |
mpeg2ts_raw is TRUE */
|
126 |
int initial_pause:1; /* do not begin to play the stream |
127 |
immediately (RTSP only) */
|
128 |
int prealloced_context:1; |
129 |
enum CodecID video_codec_id;
|
130 |
enum CodecID audio_codec_id;
|
131 |
} AVFormatParameters; |
132 |
|
133 |
//! demuxer will use url_fopen, no opened file should be provided by the caller
|
134 |
#define AVFMT_NOFILE 0x0001 |
135 |
#define AVFMT_NEEDNUMBER 0x0002 /* needs '%d' in filename */ |
136 |
#define AVFMT_SHOW_IDS 0x0008 /* show format stream IDs numbers */ |
137 |
#define AVFMT_RAWPICTURE 0x0020 /* format wants AVPicture structure for |
138 |
raw picture data */
|
139 |
#define AVFMT_GLOBALHEADER 0x0040 /* format wants global header */ |
140 |
#define AVFMT_NOTIMESTAMPS 0x0080 /* format doesnt need / has any timestamps */ |
141 |
#define AVFMT_GENERIC_INDEX 0x0100 /* use generic index building code */ |
142 |
|
143 |
typedef struct AVOutputFormat { |
144 |
const char *name; |
145 |
const char *long_name; |
146 |
const char *mime_type; |
147 |
const char *extensions; /* comma separated extensions */ |
148 |
/* size of private data so that it can be allocated in the wrapper */
|
149 |
int priv_data_size;
|
150 |
/* output support */
|
151 |
enum CodecID audio_codec; /* default audio codec */ |
152 |
enum CodecID video_codec; /* default video codec */ |
153 |
int (*write_header)(struct AVFormatContext *); |
154 |
int (*write_packet)(struct AVFormatContext *, AVPacket *pkt); |
155 |
int (*write_trailer)(struct AVFormatContext *); |
156 |
/* can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, AVFMT_GLOBALHEADER */
|
157 |
int flags;
|
158 |
/* currently only used to set pixel format if not YUV420P */
|
159 |
int (*set_parameters)(struct AVFormatContext *, AVFormatParameters *); |
160 |
int (*interleave_packet)(struct AVFormatContext *, AVPacket *out, AVPacket *in, int flush); |
161 |
|
162 |
/**
|
163 |
* list of supported codec_id-codec_tag pairs, ordered by "better choice first"
|
164 |
* the arrays are all CODEC_ID_NONE terminated
|
165 |
*/
|
166 |
const struct AVCodecTag **codec_tag; |
167 |
|
168 |
/* private fields */
|
169 |
struct AVOutputFormat *next;
|
170 |
} AVOutputFormat; |
171 |
|
172 |
typedef struct AVInputFormat { |
173 |
const char *name; |
174 |
const char *long_name; |
175 |
/* size of private data so that it can be allocated in the wrapper */
|
176 |
int priv_data_size;
|
177 |
/* tell if a given file has a chance of being parsing by this format */
|
178 |
int (*read_probe)(AVProbeData *);
|
179 |
/* read the format header and initialize the AVFormatContext
|
180 |
structure. Return 0 if OK. 'ap' if non NULL contains
|
181 |
additionnal paramters. Only used in raw format right
|
182 |
now. 'av_new_stream' should be called to create new streams. */
|
183 |
int (*read_header)(struct AVFormatContext *, |
184 |
AVFormatParameters *ap); |
185 |
/* read one packet and put it in 'pkt'. pts and flags are also
|
186 |
set. 'av_new_stream' can be called only if the flag
|
187 |
AVFMTCTX_NOHEADER is used. */
|
188 |
int (*read_packet)(struct AVFormatContext *, AVPacket *pkt); |
189 |
/* close the stream. The AVFormatContext and AVStreams are not
|
190 |
freed by this function */
|
191 |
int (*read_close)(struct AVFormatContext *); |
192 |
/**
|
193 |
* seek to a given timestamp relative to the frames in
|
194 |
* stream component stream_index
|
195 |
* @param stream_index must not be -1
|
196 |
* @param flags selects which direction should be preferred if no exact
|
197 |
* match is available
|
198 |
*/
|
199 |
int (*read_seek)(struct AVFormatContext *, |
200 |
int stream_index, int64_t timestamp, int flags); |
201 |
/**
|
202 |
* gets the next timestamp in AV_TIME_BASE units.
|
203 |
*/
|
204 |
int64_t (*read_timestamp)(struct AVFormatContext *s, int stream_index, |
205 |
int64_t *pos, int64_t pos_limit); |
206 |
/* can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER */
|
207 |
int flags;
|
208 |
/* if extensions are defined, then no probe is done. You should
|
209 |
usually not use extension format guessing because it is not
|
210 |
reliable enough */
|
211 |
const char *extensions; |
212 |
/* general purpose read only value that the format can use */
|
213 |
int value;
|
214 |
|
215 |
/* start/resume playing - only meaningful if using a network based format
|
216 |
(RTSP) */
|
217 |
int (*read_play)(struct AVFormatContext *); |
218 |
|
219 |
/* pause playing - only meaningful if using a network based format
|
220 |
(RTSP) */
|
221 |
int (*read_pause)(struct AVFormatContext *); |
222 |
|
223 |
const struct AVCodecTag **codec_tag; |
224 |
|
225 |
/* private fields */
|
226 |
struct AVInputFormat *next;
|
227 |
} AVInputFormat; |
228 |
|
229 |
typedef struct AVIndexEntry { |
230 |
int64_t pos; |
231 |
int64_t timestamp; |
232 |
#define AVINDEX_KEYFRAME 0x0001 |
233 |
int flags:2; |
234 |
int size:30; //yeah trying to keep the size of this small to reduce memory requirements (its 24 vs 32 byte due to possible 8byte align) |
235 |
int min_distance; /* min distance between this and the previous keyframe, used to avoid unneeded searching */ |
236 |
} AVIndexEntry; |
237 |
|
238 |
typedef struct AVStream { |
239 |
int index; /* stream index in AVFormatContext */ |
240 |
int id; /* format specific stream id */ |
241 |
AVCodecContext *codec; /* codec context */
|
242 |
/**
|
243 |
* real base frame rate of the stream.
|
244 |
* this is the lowest framerate with which all timestamps can be
|
245 |
* represented accurately (its the least common multiple of all
|
246 |
* framerates in the stream), Note, this value is just a guess!
|
247 |
* for example if the timebase is 1/90000 and all frames have either
|
248 |
* approximately 3600 or 1800 timer ticks then r_frame_rate will be 50/1
|
249 |
*/
|
250 |
AVRational r_frame_rate; |
251 |
void *priv_data;
|
252 |
/* internal data used in av_find_stream_info() */
|
253 |
int64_t codec_info_duration; |
254 |
int codec_info_nb_frames;
|
255 |
/* encoding: PTS generation when outputing stream */
|
256 |
AVFrac pts; |
257 |
|
258 |
/**
|
259 |
* this is the fundamental unit of time (in seconds) in terms
|
260 |
* of which frame timestamps are represented. for fixed-fps content,
|
261 |
* timebase should be 1/framerate and timestamp increments should be
|
262 |
* identically 1.
|
263 |
*/
|
264 |
AVRational time_base; |
265 |
int pts_wrap_bits; /* number of bits in pts (used for wrapping control) */ |
266 |
/* ffmpeg.c private use */
|
267 |
int stream_copy; /* if TRUE, just copy stream */ |
268 |
enum AVDiscard discard; ///< selects which packets can be discarded at will and dont need to be demuxed |
269 |
//FIXME move stuff to a flags field?
|
270 |
/* quality, as it has been removed from AVCodecContext and put in AVVideoFrame
|
271 |
* MN:dunno if thats the right place, for it */
|
272 |
float quality;
|
273 |
/* decoding: position of the first frame of the component, in
|
274 |
AV_TIME_BASE fractional seconds. */
|
275 |
int64_t start_time; |
276 |
/* decoding: duration of the stream, in AV_TIME_BASE fractional
|
277 |
seconds. */
|
278 |
int64_t duration; |
279 |
|
280 |
char language[4]; /* ISO 639 3-letter language code (empty string if undefined) */ |
281 |
|
282 |
/* av_read_frame() support */
|
283 |
int need_parsing; ///< 1->full parsing needed, 2->only parse headers dont repack |
284 |
struct AVCodecParserContext *parser;
|
285 |
|
286 |
int64_t cur_dts; |
287 |
int last_IP_duration;
|
288 |
int64_t last_IP_pts; |
289 |
/* av_seek_frame() support */
|
290 |
AVIndexEntry *index_entries; /* only used if the format does not
|
291 |
support seeking natively */
|
292 |
int nb_index_entries;
|
293 |
unsigned int index_entries_allocated_size; |
294 |
|
295 |
int64_t nb_frames; ///< number of frames in this stream if known or 0
|
296 |
|
297 |
#define MAX_REORDER_DELAY 4 |
298 |
int64_t pts_buffer[MAX_REORDER_DELAY+1];
|
299 |
} AVStream; |
300 |
|
301 |
#define AVFMTCTX_NOHEADER 0x0001 /* signal that no header is present |
302 |
(streams are added dynamically) */
|
303 |
|
304 |
#define MAX_STREAMS 20 |
305 |
|
306 |
/* format I/O context */
|
307 |
typedef struct AVFormatContext { |
308 |
const AVClass *av_class; /* set by av_alloc_format_context */ |
309 |
/* can only be iformat or oformat, not both at the same time */
|
310 |
struct AVInputFormat *iformat;
|
311 |
struct AVOutputFormat *oformat;
|
312 |
void *priv_data;
|
313 |
ByteIOContext pb; |
314 |
unsigned int nb_streams; |
315 |
AVStream *streams[MAX_STREAMS]; |
316 |
char filename[1024]; /* input or output filename */ |
317 |
/* stream info */
|
318 |
int64_t timestamp; |
319 |
char title[512]; |
320 |
char author[512]; |
321 |
char copyright[512]; |
322 |
char comment[512]; |
323 |
char album[512]; |
324 |
int year; /* ID3 year, 0 if none */ |
325 |
int track; /* track number, 0 if none */ |
326 |
char genre[32]; /* ID3 genre */ |
327 |
|
328 |
int ctx_flags; /* format specific flags, see AVFMTCTX_xx */ |
329 |
/* private data for pts handling (do not modify directly) */
|
330 |
/* This buffer is only needed when packets were already buffered but
|
331 |
not decoded, for example to get the codec parameters in mpeg
|
332 |
streams */
|
333 |
struct AVPacketList *packet_buffer;
|
334 |
|
335 |
/* decoding: position of the first frame of the component, in
|
336 |
AV_TIME_BASE fractional seconds. NEVER set this value directly:
|
337 |
it is deduced from the AVStream values. */
|
338 |
int64_t start_time; |
339 |
/* decoding: duration of the stream, in AV_TIME_BASE fractional
|
340 |
seconds. NEVER set this value directly: it is deduced from the
|
341 |
AVStream values. */
|
342 |
int64_t duration; |
343 |
/* decoding: total file size. 0 if unknown */
|
344 |
int64_t file_size; |
345 |
/* decoding: total stream bitrate in bit/s, 0 if not
|
346 |
available. Never set it directly if the file_size and the
|
347 |
duration are known as ffmpeg can compute it automatically. */
|
348 |
int bit_rate;
|
349 |
|
350 |
/* av_read_frame() support */
|
351 |
AVStream *cur_st; |
352 |
const uint8_t *cur_ptr;
|
353 |
int cur_len;
|
354 |
AVPacket cur_pkt; |
355 |
|
356 |
/* av_seek_frame() support */
|
357 |
int64_t data_offset; /* offset of the first packet */
|
358 |
int index_built;
|
359 |
|
360 |
int mux_rate;
|
361 |
int packet_size;
|
362 |
int preload;
|
363 |
int max_delay;
|
364 |
|
365 |
#define AVFMT_NOOUTPUTLOOP -1 |
366 |
#define AVFMT_INFINITEOUTPUTLOOP 0 |
367 |
/* number of times to loop output in formats that support it */
|
368 |
int loop_output;
|
369 |
|
370 |
int flags;
|
371 |
#define AVFMT_FLAG_GENPTS 0x0001 ///< generate pts if missing even if it requires parsing future frames |
372 |
#define AVFMT_FLAG_IGNIDX 0x0002 ///< ignore index |
373 |
|
374 |
int loop_input;
|
375 |
/* decoding: size of data to probe; encoding unused */
|
376 |
unsigned int probesize; |
377 |
|
378 |
/**
|
379 |
* maximum duration in AV_TIME_BASE units over which the input should be analyzed in av_find_stream_info()
|
380 |
*/
|
381 |
int max_analyze_duration;
|
382 |
} AVFormatContext; |
383 |
|
384 |
typedef struct AVPacketList { |
385 |
AVPacket pkt; |
386 |
struct AVPacketList *next;
|
387 |
} AVPacketList; |
388 |
|
389 |
extern AVInputFormat *first_iformat;
|
390 |
extern AVOutputFormat *first_oformat;
|
391 |
|
392 |
enum CodecID av_guess_image2_codec(const char *filename); |
393 |
|
394 |
/* XXX: use automatic init with either ELF sections or C file parser */
|
395 |
/* modules */
|
396 |
|
397 |
#include "rtp.h" |
398 |
|
399 |
#include "rtsp.h" |
400 |
|
401 |
/* utils.c */
|
402 |
void av_register_input_format(AVInputFormat *format);
|
403 |
void av_register_output_format(AVOutputFormat *format);
|
404 |
AVOutputFormat *guess_stream_format(const char *short_name, |
405 |
const char *filename, const char *mime_type); |
406 |
AVOutputFormat *guess_format(const char *short_name, |
407 |
const char *filename, const char *mime_type); |
408 |
enum CodecID av_guess_codec(AVOutputFormat *fmt, const char *short_name, |
409 |
const char *filename, const char *mime_type, enum CodecType type); |
410 |
|
411 |
void av_hex_dump(FILE *f, uint8_t *buf, int size); |
412 |
void av_pkt_dump(FILE *f, AVPacket *pkt, int dump_payload); |
413 |
|
414 |
void av_register_all(void); |
415 |
|
416 |
/* codec tag <-> codec id */
|
417 |
enum CodecID av_codec_get_id(const struct AVCodecTag **tags, unsigned int tag); |
418 |
unsigned int av_codec_get_tag(const struct AVCodecTag **tags, enum CodecID id); |
419 |
|
420 |
/* media file input */
|
421 |
AVInputFormat *av_find_input_format(const char *short_name); |
422 |
AVInputFormat *av_probe_input_format(AVProbeData *pd, int is_opened);
|
423 |
int av_open_input_stream(AVFormatContext **ic_ptr,
|
424 |
ByteIOContext *pb, const char *filename, |
425 |
AVInputFormat *fmt, AVFormatParameters *ap); |
426 |
int av_open_input_file(AVFormatContext **ic_ptr, const char *filename, |
427 |
AVInputFormat *fmt, |
428 |
int buf_size,
|
429 |
AVFormatParameters *ap); |
430 |
/* no av_open for output, so applications will need this: */
|
431 |
AVFormatContext *av_alloc_format_context(void);
|
432 |
|
433 |
#define AVERROR_UNKNOWN (-1) /* unknown error */ |
434 |
#define AVERROR_IO (-2) /* i/o error */ |
435 |
#define AVERROR_NUMEXPECTED (-3) /* number syntax expected in filename */ |
436 |
#define AVERROR_INVALIDDATA (-4) /* invalid data found */ |
437 |
#define AVERROR_NOMEM (-5) /* not enough memory */ |
438 |
#define AVERROR_NOFMT (-6) /* unknown format */ |
439 |
#define AVERROR_NOTSUPP (-7) /* operation not supported */ |
440 |
|
441 |
int av_find_stream_info(AVFormatContext *ic);
|
442 |
int av_read_packet(AVFormatContext *s, AVPacket *pkt);
|
443 |
int av_read_frame(AVFormatContext *s, AVPacket *pkt);
|
444 |
int av_seek_frame(AVFormatContext *s, int stream_index, int64_t timestamp, int flags); |
445 |
int av_read_play(AVFormatContext *s);
|
446 |
int av_read_pause(AVFormatContext *s);
|
447 |
void av_close_input_file(AVFormatContext *s);
|
448 |
AVStream *av_new_stream(AVFormatContext *s, int id);
|
449 |
void av_set_pts_info(AVStream *s, int pts_wrap_bits, |
450 |
int pts_num, int pts_den); |
451 |
|
452 |
#define AVSEEK_FLAG_BACKWARD 1 ///< seek backward |
453 |
#define AVSEEK_FLAG_BYTE 2 ///< seeking based on position in bytes |
454 |
#define AVSEEK_FLAG_ANY 4 ///< seek to any frame, even non keyframes |
455 |
|
456 |
int av_find_default_stream_index(AVFormatContext *s);
|
457 |
int av_index_search_timestamp(AVStream *st, int64_t timestamp, int flags); |
458 |
int av_add_index_entry(AVStream *st,
|
459 |
int64_t pos, int64_t timestamp, int size, int distance, int flags); |
460 |
int av_seek_frame_binary(AVFormatContext *s, int stream_index, int64_t target_ts, int flags); |
461 |
void av_update_cur_dts(AVFormatContext *s, AVStream *ref_st, int64_t timestamp);
|
462 |
int64_t av_gen_search(AVFormatContext *s, int stream_index, int64_t target_ts, int64_t pos_min, int64_t pos_max, int64_t pos_limit, int64_t ts_min, int64_t ts_max, int flags, int64_t *ts_ret, int64_t (*read_timestamp)(struct AVFormatContext *, int , int64_t *, int64_t )); |
463 |
|
464 |
/* media file output */
|
465 |
int av_set_parameters(AVFormatContext *s, AVFormatParameters *ap);
|
466 |
int av_write_header(AVFormatContext *s);
|
467 |
int av_write_frame(AVFormatContext *s, AVPacket *pkt);
|
468 |
int av_interleaved_write_frame(AVFormatContext *s, AVPacket *pkt);
|
469 |
int av_interleave_packet_per_dts(AVFormatContext *s, AVPacket *out, AVPacket *pkt, int flush); |
470 |
|
471 |
int av_write_trailer(AVFormatContext *s);
|
472 |
|
473 |
void dump_format(AVFormatContext *ic,
|
474 |
int index,
|
475 |
const char *url, |
476 |
int is_output);
|
477 |
int parse_image_size(int *width_ptr, int *height_ptr, const char *str); |
478 |
int parse_frame_rate(int *frame_rate, int *frame_rate_base, const char *arg); |
479 |
int64_t parse_date(const char *datestr, int duration); |
480 |
|
481 |
int64_t av_gettime(void);
|
482 |
|
483 |
/* ffm specific for ffserver */
|
484 |
#define FFM_PACKET_SIZE 4096 |
485 |
offset_t ffm_read_write_index(int fd);
|
486 |
void ffm_write_write_index(int fd, offset_t pos); |
487 |
void ffm_set_write_index(AVFormatContext *s, offset_t pos, offset_t file_size);
|
488 |
|
489 |
int find_info_tag(char *arg, int arg_size, const char *tag1, const char *info); |
490 |
|
491 |
int av_get_frame_filename(char *buf, int buf_size, |
492 |
const char *path, int number); |
493 |
int av_filename_number_test(const char *filename); |
494 |
|
495 |
/* grab specific */
|
496 |
int video_grab_init(void); |
497 |
int audio_init(void); |
498 |
|
499 |
/* DV1394 */
|
500 |
int dv1394_init(void); |
501 |
int dc1394_init(void); |
502 |
|
503 |
#ifdef HAVE_AV_CONFIG_H
|
504 |
|
505 |
#include "os_support.h" |
506 |
|
507 |
int strstart(const char *str, const char *val, const char **ptr); |
508 |
int stristart(const char *str, const char *val, const char **ptr); |
509 |
void pstrcpy(char *buf, int buf_size, const char *str); |
510 |
char *pstrcat(char *buf, int buf_size, const char *s); |
511 |
|
512 |
void __dynarray_add(unsigned long **tab_ptr, int *nb_ptr, unsigned long elem); |
513 |
|
514 |
#ifdef __GNUC__
|
515 |
#define dynarray_add(tab, nb_ptr, elem)\
|
516 |
do {\
|
517 |
typeof(tab) _tab = (tab);\ |
518 |
typeof(elem) _elem = (elem);\ |
519 |
(void)sizeof(**_tab == _elem); /* check that types are compatible */\ |
520 |
__dynarray_add((unsigned long **)_tab, nb_ptr, (unsigned long)_elem);\ |
521 |
} while(0) |
522 |
#else
|
523 |
#define dynarray_add(tab, nb_ptr, elem)\
|
524 |
do {\
|
525 |
__dynarray_add((unsigned long **)(tab), nb_ptr, (unsigned long)(elem));\ |
526 |
} while(0) |
527 |
#endif
|
528 |
|
529 |
time_t mktimegm(struct tm *tm);
|
530 |
struct tm *brktimegm(time_t secs, struct tm *tm); |
531 |
const char *small_strptime(const char *p, const char *fmt, |
532 |
struct tm *dt);
|
533 |
|
534 |
struct in_addr;
|
535 |
int resolve_host(struct in_addr *sin_addr, const char *hostname); |
536 |
|
537 |
void url_split(char *proto, int proto_size, |
538 |
char *authorization, int authorization_size, |
539 |
char *hostname, int hostname_size, |
540 |
int *port_ptr,
|
541 |
char *path, int path_size, |
542 |
const char *url); |
543 |
|
544 |
int match_ext(const char *filename, const char *extensions); |
545 |
|
546 |
#endif /* HAVE_AV_CONFIG_H */ |
547 |
|
548 |
#ifdef __cplusplus
|
549 |
} |
550 |
#endif
|
551 |
|
552 |
#endif /* AVFORMAT_H */ |
553 |
|