avformat.h 42.0 KB
Newer Older
1 2 3
/*
 * copyright (c) 2001 Fabrice Bellard
 *
4 5 6
 * This file is part of FFmpeg.
 *
 * FFmpeg is free software; you can redistribute it and/or
7 8
 * modify it under the terms of the GNU Lesser General Public
 * 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 13 14 15 16
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * 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 19 20
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 */

21 22
#ifndef AVFORMAT_AVFORMAT_H
#define AVFORMAT_AVFORMAT_H
F
Fabrice Bellard 已提交
23

24
#define LIBAVFORMAT_VERSION_MAJOR 52
B
Baptiste Coudurier 已提交
25
#define LIBAVFORMAT_VERSION_MINOR 23
26
#define LIBAVFORMAT_VERSION_MICRO  1
27

28 29 30 31 32 33
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
                                               LIBAVFORMAT_VERSION_MINOR, \
                                               LIBAVFORMAT_VERSION_MICRO)
#define LIBAVFORMAT_VERSION     AV_VERSION(LIBAVFORMAT_VERSION_MAJOR,   \
                                           LIBAVFORMAT_VERSION_MINOR,   \
                                           LIBAVFORMAT_VERSION_MICRO)
M
Michael Niedermayer 已提交
34
#define LIBAVFORMAT_BUILD       LIBAVFORMAT_VERSION_INT
A
Alex Beregszaszi 已提交
35

M
Michael Niedermayer 已提交
36
#define LIBAVFORMAT_IDENT       "Lavf" AV_STRINGIFY(LIBAVFORMAT_VERSION)
37

S
Stefano Sabatini 已提交
38 39 40 41 42
/**
 * Returns the LIBAVFORMAT_VERSION_INT constant.
 */
unsigned avformat_version(void);

43
#include <time.h>
Z
Zdenek Kabelac 已提交
44
#include <stdio.h>  /* FILE */
45
#include "libavcodec/avcodec.h"
F
Fabrice Bellard 已提交
46 47 48

#include "avio.h"

49 50

/*
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
 * Public Metadata API.
 * The metadata API allows libavformat to export metadata tags to a client
 * application using a sequence of key/value pairs.
 * Important concepts to keep in mind:
 * 1. Keys are unique; there can never be 2 tags with the same key. This is
 *    also meant semantically, i.e., a demuxer should not knowingly produce
 *    several keys that are literally different but semantically identical.
 *    E.g., key=Author5, key=Author6. In this example, all authors must be
 *    placed in the same tag.
 * 2. Metadata is flat, not hierarchical; there are no subtags. If you
 *    want to store, e.g., the email address of the child of producer Alice
 *    and actor Bob, that could have key=alice_and_bobs_childs_email_address.
 * 3. A tag whose value is localized for a particular language is appended
 *    with a dash character ('-') and the ISO 639 3-letter language code.
 *    For example: Author-ger=Michael, Author-eng=Mike
 *    The original/default language is in the unqualified "Author" tag.
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
 *    A demuxer should set a default if it sets any translated tag.
 */

#define AV_METADATA_IGNORE_CASE     1
#define AV_METADATA_IGNORE_SUFFIX   2

typedef struct {
    char *key;
    char *value;
}AVMetaDataTag;

struct AVMetaData;

/**
 * gets a metadata element with matching key.
 * @param prev set to the previous matching element to find the next.
 * @param flags allows case as well as suffix insensitive comparissions.
 * @return found tag or NULL, changing key or value leads to undefined behavior.
 */
AVMetaDataTag *
av_metadata_get(struct AVMetaData *m, const char *key, const AVMetaDataTag *prev, int flags);

/**
 * sets the given tag in m, overwriting an existing tag.
 * @param tag tag to add to m, key and value will be av_strduped.
 * @return >= 0 if success otherwise error code that is <0.
 */
int av_metadata_set(struct AVMetaData **m, AVMetaDataTag tag);


F
Fabrice Bellard 已提交
97 98 99
/* packet functions */

typedef struct AVPacket {
M
Michael Niedermayer 已提交
100
    /**
D
Diego Biurrun 已提交
101
     * Presentation timestamp in time_base units.
M
Michael Niedermayer 已提交
102 103 104
     * This is the time at which the decompressed packet will be presented
     * to the user.
     * Can be AV_NOPTS_VALUE if it is not stored in the file.
D
Diego Biurrun 已提交
105
     * pts MUST be larger or equal to dts as presentation cannot happen before
M
Michael Niedermayer 已提交
106 107 108 109 110 111
     * decompression, unless one wants to view hex dumps. Some formats misuse
     * the terms dts and pts/cts to mean something different, these timestamps
     * must be converted to true pts/dts before they are stored in AVPacket.
     */
    int64_t pts;
    /**
D
Diego Biurrun 已提交
112
     * Decompression timestamp in time_base units.
M
Michael Niedermayer 已提交
113 114 115 116
     * This is the time at which the packet is decompressed.
     * Can be AV_NOPTS_VALUE if it is not stored in the file.
     */
    int64_t dts;
117
    uint8_t *data;
118 119 120
    int   size;
    int   stream_index;
    int   flags;
121 122 123 124 125
    /**
     * Duration of this packet in time_base units, 0 if unknown.
     * Equals next_pts - this_pts in presentation order.
     */
    int   duration;
126 127
    void  (*destruct)(struct AVPacket *);
    void  *priv;
M
Michael Niedermayer 已提交
128
    int64_t pos;                            ///< byte position in stream, -1 if unknown
129 130

    /**
D
Diego Biurrun 已提交
131
     * Time difference in stream time base units from the pts of this
132
     * packet to the point at which the output from the decoder has converged
D
Diego Biurrun 已提交
133 134 135 136
     * independent from the availability of previous frames. That is, the
     * frames are virtually identical no matter if decoding started from
     * the very first frame or from this keyframe.
     * Is AV_NOPTS_VALUE if unknown.
137
     * This field is not the display duration of the current packet.
138 139 140
     *
     * The purpose of this field is to allow seeking in streams that have no
     * keyframes in the conventional sense. It corresponds to the
D
Diego Biurrun 已提交
141
     * recovery point SEI in H.264 and match_time_delta in NUT. It is also
142 143 144 145
     * essential for some types of subtitle streams to ensure that all
     * subtitles are correctly displayed after seeking.
     */
    int64_t convergence_duration;
146
} AVPacket;
147 148
#define PKT_FLAG_KEY   0x0001

M
Michael Niedermayer 已提交
149
void av_destruct_packet_nofree(AVPacket *pkt);
150 151 152 153

/**
 * Default packet destructor.
 */
154
void av_destruct_packet(AVPacket *pkt);
M
Michael Niedermayer 已提交
155

R
Ramiro Polla 已提交
156
/**
D
Diego Biurrun 已提交
157
 * Initialize optional fields of a packet with default values.
R
Ramiro Polla 已提交
158 159 160
 *
 * @param pkt packet
 */
R
Ramiro Polla 已提交
161
void av_init_packet(AVPacket *pkt);
F
Fabrice Bellard 已提交
162

163
/**
D
Diego Biurrun 已提交
164 165
 * Allocate the payload of a packet and initialize its fields with
 * default values.
166 167 168
 *
 * @param pkt packet
 * @param size wanted payload size
D
Diego Biurrun 已提交
169
 * @return 0 if OK, AVERROR_xxx otherwise
170
 */
F
Fabrice Bellard 已提交
171
int av_new_packet(AVPacket *pkt, int size);
172 173

/**
D
Diego Biurrun 已提交
174 175
 * Allocate and read the payload of a packet and initialize its fields with
 * default values.
176 177
 *
 * @param pkt packet
D
Diego Biurrun 已提交
178 179
 * @param size desired payload size
 * @return >0 (read size) if OK, AVERROR_xxx otherwise
180
 */
M
Michael Niedermayer 已提交
181
int av_get_packet(ByteIOContext *s, AVPacket *pkt, int size);
182

183 184
/**
 * @warning This is a hack - the packet memory allocation stuff is broken. The
D
Diego Biurrun 已提交
185
 * packet is allocated if it was not really allocated.
186
 */
187
int av_dup_packet(AVPacket *pkt);
188 189

/**
D
Diego Biurrun 已提交
190
 * Free a packet.
191 192 193 194 195
 *
 * @param pkt packet to free
 */
static inline void av_free_packet(AVPacket *pkt)
{
196
    if (pkt && pkt->destruct) {
197
        pkt->destruct(pkt);
198
    }
199
}
F
Fabrice Bellard 已提交
200

F
Fabrice Bellard 已提交
201 202 203
/*************************************************/
/* fractional numbers for exact pts handling */

204
/**
D
Diego Biurrun 已提交
205 206 207
 * The exact value of the fractional number is: 'val + num / den'.
 * num is assumed to be 0 <= num < den.
 * @deprecated Use AVRational instead.
208
*/
F
Fabrice Bellard 已提交
209
typedef struct AVFrac {
210
    int64_t val, num, den;
M
Michael Niedermayer 已提交
211
} AVFrac attribute_deprecated;
F
Fabrice Bellard 已提交
212

F
Fabrice Bellard 已提交
213
/*************************************************/
214
/* input/output formats */
F
Fabrice Bellard 已提交
215

216 217
struct AVCodecTag;

F
Fabrice Bellard 已提交
218
struct AVFormatContext;
219

D
Diego Biurrun 已提交
220
/** This structure contains the data a format has to probe a file. */
221
typedef struct AVProbeData {
222
    const char *filename;
223 224 225 226
    unsigned char *buf;
    int buf_size;
} AVProbeData;

D
Diego Biurrun 已提交
227
#define AVPROBE_SCORE_MAX 100               ///< Maximum score, half of that is used for file-extension-based detection.
228
#define AVPROBE_PADDING_SIZE 32             ///< extra allocated bytes at the end of the probe buffer
F
Fabrice Bellard 已提交
229 230

typedef struct AVFormatParameters {
231
    AVRational time_base;
F
Fabrice Bellard 已提交
232 233 234 235
    int sample_rate;
    int channels;
    int width;
    int height;
236
    enum PixelFormat pix_fmt;
D
Diego Biurrun 已提交
237 238 239 240
    int channel; /**< Used to select DV channel. */
    const char *standard; /**< TV standard, NTSC, PAL, SECAM */
    unsigned int mpeg2ts_raw:1;  /**< Force raw MPEG-2 transport stream output, if possible. */
    unsigned int mpeg2ts_compute_pcr:1; /**< Compute exact PCR for each transport
241
                                            stream packet (only meaningful if
D
Diego Biurrun 已提交
242 243 244
                                            mpeg2ts_raw is TRUE). */
    unsigned int initial_pause:1;       /**< Do not begin to play the stream
                                            immediately (RTSP only). */
245
    unsigned int prealloced_context:1;
246
#if LIBAVFORMAT_VERSION_INT < (53<<16)
247 248
    enum CodecID video_codec_id;
    enum CodecID audio_codec_id;
249
#endif
F
Fabrice Bellard 已提交
250 251
} AVFormatParameters;

D
Diego Biurrun 已提交
252
//! Demuxer will use url_fopen, no opened file should be provided by the caller.
253
#define AVFMT_NOFILE        0x0001
D
Diego Biurrun 已提交
254 255 256 257 258 259 260 261
#define AVFMT_NEEDNUMBER    0x0002 /**< Needs '%d' in filename. */
#define AVFMT_SHOW_IDS      0x0008 /**< Show format stream IDs numbers. */
#define AVFMT_RAWPICTURE    0x0020 /**< Format wants AVPicture structure for
                                      raw picture data. */
#define AVFMT_GLOBALHEADER  0x0040 /**< Format wants global header. */
#define AVFMT_NOTIMESTAMPS  0x0080 /**< Format does not need / have any timestamps. */
#define AVFMT_GENERIC_INDEX 0x0100 /**< Use generic index building code. */
#define AVFMT_TS_DISCONT    0x0200 /**< Format allows timestamp discontinuities. */
262 263

typedef struct AVOutputFormat {
F
Fabrice Bellard 已提交
264
    const char *name;
265 266 267 268 269
    /**
     * Descriptive name for the format, meant to be more human-readable
     * than \p name. You \e should use the NULL_IF_CONFIG_SMALL() macro
     * to define it.
     */
F
Fabrice Bellard 已提交
270 271
    const char *long_name;
    const char *mime_type;
D
Diego Biurrun 已提交
272 273
    const char *extensions; /**< comma-separated filename extensions */
    /** Size of private data so that it can be allocated in the wrapper. */
274
    int priv_data_size;
F
Fabrice Bellard 已提交
275
    /* output support */
276 277
    enum CodecID audio_codec; /**< default audio codec */
    enum CodecID video_codec; /**< default video codec */
F
Fabrice Bellard 已提交
278
    int (*write_header)(struct AVFormatContext *);
279
    int (*write_packet)(struct AVFormatContext *, AVPacket *pkt);
F
Fabrice Bellard 已提交
280
    int (*write_trailer)(struct AVFormatContext *);
281
    /** can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, AVFMT_GLOBALHEADER */
282
    int flags;
D
Diego Biurrun 已提交
283
    /** Currently only used to set pixel format if not YUV420P. */
284
    int (*set_parameters)(struct AVFormatContext *, AVFormatParameters *);
285 286
    int (*interleave_packet)(struct AVFormatContext *, AVPacket *out,
                             AVPacket *in, int flush);
287 288

    /**
289 290
     * List of supported codec_id-codec_tag pairs, ordered by "better
     * choice first". The arrays are all CODEC_ID_NONE terminated.
291
     */
292
    const struct AVCodecTag * const *codec_tag;
293

294 295
    enum CodecID subtitle_codec; /**< default subtitle codec */

296 297 298
    /* private fields */
    struct AVOutputFormat *next;
} AVOutputFormat;
F
Fabrice Bellard 已提交
299

300 301
typedef struct AVInputFormat {
    const char *name;
302 303 304 305 306
    /**
     * Descriptive name for the format, meant to be more human-readable
     * than \p name. You \e should use the NULL_IF_CONFIG_SMALL() macro
     * to define it.
     */
307
    const char *long_name;
D
Diego Biurrun 已提交
308
    /** Size of private data so that it can be allocated in the wrapper. */
309
    int priv_data_size;
310
    /**
D
Diego Biurrun 已提交
311 312 313
     * Tell if a given file has a chance of being parsed by this format.
     * The buffer provided is guaranteed to be AVPROBE_PADDING_SIZE bytes
     * big so you do not have to check for that unless you need more.
314
     */
315
    int (*read_probe)(AVProbeData *);
D
Diego Biurrun 已提交
316 317 318
    /** Read the format header and initialize the AVFormatContext
       structure. Return 0 if OK. 'ap' if non-NULL contains
       additional parameters. Only used in raw format right
319
       now. 'av_new_stream' should be called to create new streams.  */
F
Fabrice Bellard 已提交
320 321
    int (*read_header)(struct AVFormatContext *,
                       AVFormatParameters *ap);
D
Diego Biurrun 已提交
322
    /** Read one packet and put it in 'pkt'. pts and flags are also
323
       set. 'av_new_stream' can be called only if the flag
324
       AVFMTCTX_NOHEADER is used. */
F
Fabrice Bellard 已提交
325
    int (*read_packet)(struct AVFormatContext *, AVPacket *pkt);
D
Diego Biurrun 已提交
326
    /** Close the stream. The AVFormatContext and AVStreams are not
F
Fabrice Bellard 已提交
327 328
       freed by this function */
    int (*read_close)(struct AVFormatContext *);
329
    /**
D
Diego Biurrun 已提交
330 331
     * Seek to a given timestamp relative to the frames in
     * stream component stream_index.
332
     * @param stream_index must not be -1
333
     * @param flags selects which direction should be preferred if no exact
334
     *              match is available
335
     * @return >= 0 on success (but not necessarily the new offset)
336
     */
337
    int (*read_seek)(struct AVFormatContext *,
338
                     int stream_index, int64_t timestamp, int flags);
339
    /**
D
Diego Biurrun 已提交
340
     * Gets the next timestamp in stream[stream_index].time_base units.
D
Diego Biurrun 已提交
341
     * @return the timestamp or AV_NOPTS_VALUE if an error occurred
342 343 344
     */
    int64_t (*read_timestamp)(struct AVFormatContext *s, int stream_index,
                              int64_t *pos, int64_t pos_limit);
D
Diego Biurrun 已提交
345
    /** Can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER. */
F
Fabrice Bellard 已提交
346
    int flags;
D
Diego Biurrun 已提交
347
    /** If extensions are defined, then no probe is done. You should
348 349 350
       usually not use extension format guessing because it is not
       reliable enough */
    const char *extensions;
D
Diego Biurrun 已提交
351
    /** General purpose read-only value that the format can use. */
352
    int value;
353

D
Diego Biurrun 已提交
354 355
    /** Start/resume playing - only meaningful if using a network-based format
       (RTSP). */
356 357
    int (*read_play)(struct AVFormatContext *);

D
Diego Biurrun 已提交
358 359
    /** Pause playing - only meaningful if using a network-based format
       (RTSP). */
360 361
    int (*read_pause)(struct AVFormatContext *);

362
    const struct AVCodecTag * const *codec_tag;
363

364 365 366
    /* private fields */
    struct AVInputFormat *next;
} AVInputFormat;
F
Fabrice Bellard 已提交
367

A
Aurelien Jacobs 已提交
368 369 370
enum AVStreamParseType {
    AVSTREAM_PARSE_NONE,
    AVSTREAM_PARSE_FULL,       /**< full parsing and repack */
D
Diego Biurrun 已提交
371
    AVSTREAM_PARSE_HEADERS,    /**< Only parse headers, do not repack. */
372
    AVSTREAM_PARSE_TIMESTAMPS, /**< full parsing and interpolation of timestamps for frames not starting on a packet boundary */
A
Aurelien Jacobs 已提交
373 374
};

375 376 377 378
typedef struct AVIndexEntry {
    int64_t pos;
    int64_t timestamp;
#define AVINDEX_KEYFRAME 0x0001
M
Michael Niedermayer 已提交
379
    int flags:2;
D
Diego Biurrun 已提交
380 381
    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).
    int min_distance;         /**< Minimum distance between this and the previous keyframe, used to avoid unneeded searching. */
382 383
} AVIndexEntry;

384 385 386 387 388 389 390
#define AV_DISPOSITION_DEFAULT   0x0001
#define AV_DISPOSITION_DUB       0x0002
#define AV_DISPOSITION_ORIGINAL  0x0004
#define AV_DISPOSITION_COMMENT   0x0008
#define AV_DISPOSITION_LYRICS    0x0010
#define AV_DISPOSITION_KARAOKE   0x0020

391 392 393
/**
 * Stream structure.
 * New fields can be added to the end with minor version bumps.
D
Diego Biurrun 已提交
394
 * Removal, reordering and changes to existing fields require a major
395
 * version bump.
D
Diego Biurrun 已提交
396
 * sizeof(AVStream) must not be used outside libav*.
397
 */
F
Fabrice Bellard 已提交
398
typedef struct AVStream {
399
    int index;    /**< stream index in AVFormatContext */
D
Diego Biurrun 已提交
400
    int id;       /**< format-specific stream ID */
401
    AVCodecContext *codec; /**< codec context */
402
    /**
D
Diego Biurrun 已提交
403 404
     * Real base frame rate of the stream.
     * This is the lowest frame rate with which all timestamps can be
R
Typos  
Ramiro Polla 已提交
405
     * represented accurately (it is the least common multiple of all
D
Diego Biurrun 已提交
406 407 408
     * frame rates in the stream). Note, this value is just a guess!
     * For example if the time base is 1/90000 and all frames have either
     * approximately 3600 or 1800 timer ticks, then r_frame_rate will be 50/1.
409 410
     */
    AVRational r_frame_rate;
F
Fabrice Bellard 已提交
411
    void *priv_data;
412

413
    /* internal data used in av_find_stream_info() */
414
    int64_t first_dts;
D
Diego Biurrun 已提交
415
    /** encoding: pts generation when outputting stream */
416
    struct AVFrac pts;
417 418

    /**
D
Diego Biurrun 已提交
419 420
     * This is the fundamental unit of time (in seconds) in terms
     * of which frame timestamps are represented. For fixed-fps content,
D
Diego Biurrun 已提交
421
     * time base should be 1/frame rate and timestamp increments should be 1.
422
     */
423
    AVRational time_base;
424
    int pts_wrap_bits; /**< number of bits in pts (used for wrapping control) */
F
Fabrice Bellard 已提交
425
    /* ffmpeg.c private use */
D
Diego Biurrun 已提交
426 427
    int stream_copy; /**< If set, just copy stream. */
    enum AVDiscard discard; ///< Selects which packets can be discarded at will and do not need to be demuxed.
428
    //FIXME move stuff to a flags field?
D
Diego Biurrun 已提交
429
    /** Quality, as it has been removed from AVCodecContext and put in AVVideoFrame.
D
Diego Biurrun 已提交
430
     * MN: dunno if that is the right place for it */
431
    float quality;
432
    /**
D
Diego Biurrun 已提交
433 434 435
     * Decoding: pts of the first frame of the stream, in stream time base.
     * Only set this if you are absolutely 100% sure that the value you set
     * it to really is the pts of the first frame.
436
     * This may be undefined (AV_NOPTS_VALUE).
D
Diego Biurrun 已提交
437 438
     * @note The ASF header does NOT contain a correct start_time the ASF
     * demuxer must NOT set this.
439
     */
440
    int64_t start_time;
441
    /**
D
Diego Biurrun 已提交
442
     * Decoding: duration of the stream, in stream time base.
443
     * If a source file does not specify a duration, but does specify
D
Diego Biurrun 已提交
444
     * a bitrate, this value will be estimated from bitrate and file size.
445
     */
446
    int64_t duration;
447

448
    char language[4]; /** ISO 639 3-letter language code (empty string if undefined) */
449

450
    /* av_read_frame() support */
A
Aurelien Jacobs 已提交
451
    enum AVStreamParseType need_parsing;
452
    struct AVCodecParserContext *parser;
453

454
    int64_t cur_dts;
M
Michael Niedermayer 已提交
455 456
    int last_IP_duration;
    int64_t last_IP_pts;
457
    /* av_seek_frame() support */
D
Diego Biurrun 已提交
458 459
    AVIndexEntry *index_entries; /**< Only used if the format does not
                                    support seeking natively. */
460
    int nb_index_entries;
M
Måns Rullgård 已提交
461
    unsigned int index_entries_allocated_size;
462

463
    int64_t nb_frames;                 ///< number of frames in this stream if known or 0
464

465 466 467
#if LIBAVFORMAT_VERSION_INT < (53<<16)
    int64_t unused[4+1];
#endif
468 469

    char *filename; /**< source filename of the stream */
470

D
Diego Biurrun 已提交
471
    int disposition; /**< AV_DISPOSITION_* bit field */
472 473

    AVProbeData probe_data;
474 475
#define MAX_REORDER_DELAY 16
    int64_t pts_buffer[MAX_REORDER_DELAY+1];
476 477 478 479 480 481 482

    /**
     * sample aspect ratio (0 if unknown)
     * - encoding: Set by user.
     * - decoding: Set by libavformat.
     */
    AVRational sample_aspect_ratio;
F
Fabrice Bellard 已提交
483 484
} AVStream;

485 486
#define AV_PROGRAM_RUNNING 1

487 488
/**
 * New fields can be added to the end with minor version bumps.
D
Diego Biurrun 已提交
489
 * Removal, reordering and changes to existing fields require a major
490
 * version bump.
D
Diego Biurrun 已提交
491
 * sizeof(AVProgram) must not be used outside libav*.
492
 */
493 494
typedef struct AVProgram {
    int            id;
D
Diego Biurrun 已提交
495 496
    char           *provider_name; ///< network name for DVB streams
    char           *name;          ///< service name for DVB streams
497 498
    int            flags;
    enum AVDiscard discard;        ///< selects which program to discard and which to feed to the caller
499 500
    unsigned int   *stream_index;
    unsigned int   nb_stream_indexes;
501 502
} AVProgram;

503
#define AVFMTCTX_NOHEADER      0x0001 /**< signal that no header is present
504 505
                                         (streams are added dynamically) */

506
typedef struct AVChapter {
D
Diego Biurrun 已提交
507 508
    int id;                 ///< unique ID to identify the chapter
    AVRational time_base;   ///< time base in which the start/end timestamps are specified
M
Michael Niedermayer 已提交
509
    int64_t start, end;     ///< chapter start/end time in time_base units
M
Michael Niedermayer 已提交
510
    char *title;            ///< chapter title
511 512
} AVChapter;

F
Fabrice Bellard 已提交
513 514
#define MAX_STREAMS 20

515
/**
D
Diego Biurrun 已提交
516
 * Format I/O context.
517
 * New fields can be added to the end with minor version bumps.
D
Diego Biurrun 已提交
518
 * Removal, reordering and changes to existing fields require a major
519
 * version bump.
D
Diego Biurrun 已提交
520
 * sizeof(AVFormatContext) must not be used outside libav*.
521
 */
F
Fabrice Bellard 已提交
522
typedef struct AVFormatContext {
D
Diego Biurrun 已提交
523 524
    const AVClass *av_class; /**< Set by av_alloc_format_context. */
    /* Can only be iformat or oformat, not both at the same time. */
525 526
    struct AVInputFormat *iformat;
    struct AVOutputFormat *oformat;
F
Fabrice Bellard 已提交
527
    void *priv_data;
528
    ByteIOContext *pb;
529
    unsigned int nb_streams;
F
Fabrice Bellard 已提交
530
    AVStream *streams[MAX_STREAMS];
531
    char filename[1024]; /**< input or output filename */
F
Fabrice Bellard 已提交
532
    /* stream info */
533
    int64_t timestamp;
F
Fabrice Bellard 已提交
534 535 536 537
    char title[512];
    char author[512];
    char copyright[512];
    char comment[512];
538
    char album[512];
539 540 541
    int year;  /**< ID3 year, 0 if none */
    int track; /**< track number, 0 if none */
    char genre[32]; /**< ID3 genre */
542

D
Diego Biurrun 已提交
543 544
    int ctx_flags; /**< Format-specific flags, see AVFMTCTX_xx */
    /* private data for pts handling (do not modify directly). */
545
    /** This buffer is only needed when packets were already buffered but
D
Diego Biurrun 已提交
546 547
       not decoded, for example to get the codec parameters in MPEG
       streams. */
548 549
    struct AVPacketList *packet_buffer;

D
Diego Biurrun 已提交
550
    /** Decoding: position of the first frame of the component, in
551
       AV_TIME_BASE fractional seconds. NEVER set this value directly:
D
Diego Biurrun 已提交
552
       It is deduced from the AVStream values.  */
553
    int64_t start_time;
D
Diego Biurrun 已提交
554
    /** Decoding: duration of the stream, in AV_TIME_BASE fractional
555 556 557
       seconds. NEVER set this value directly: it is deduced from the
       AVStream values.  */
    int64_t duration;
D
Diego Biurrun 已提交
558
    /** decoding: total file size, 0 if unknown */
559
    int64_t file_size;
D
Diego Biurrun 已提交
560
    /** Decoding: total stream bitrate in bit/s, 0 if not
561 562 563
       available. Never set it directly if the file_size and the
       duration are known as ffmpeg can compute it automatically. */
    int bit_rate;
564 565 566 567 568 569 570 571

    /* av_read_frame() support */
    AVStream *cur_st;
    const uint8_t *cur_ptr;
    int cur_len;
    AVPacket cur_pkt;

    /* av_seek_frame() support */
572
    int64_t data_offset; /** offset of the first packet */
573
    int index_built;
574

575 576
    int mux_rate;
    int packet_size;
577 578
    int preload;
    int max_delay;
579

580 581
#define AVFMT_NOOUTPUTLOOP -1
#define AVFMT_INFINITEOUTPUTLOOP 0
582
    /** number of times to loop output in formats that support it */
583
    int loop_output;
584

585
    int flags;
D
Diego Biurrun 已提交
586 587 588
#define AVFMT_FLAG_GENPTS       0x0001 ///< Generate pts if missing even if it requires parsing future frames.
#define AVFMT_FLAG_IGNIDX       0x0002 ///< Ignore index.
#define AVFMT_FLAG_NONBLOCK     0x0004 ///< Do not block when reading packets from input.
589 590

    int loop_input;
D
Diego Biurrun 已提交
591
    /** Decoding: size of data to probe; encoding: unused. */
592
    unsigned int probesize;
593 594

    /**
D
Diego Biurrun 已提交
595 596
     * Maximum time (in AV_TIME_BASE units) during which the input should
     * be analyzed in av_find_stream_info().
597 598
     */
    int max_analyze_duration;
599 600 601

    const uint8_t *key;
    int keylen;
602 603 604

    unsigned int nb_programs;
    AVProgram **programs;
M
Michael Niedermayer 已提交
605 606 607

    /**
     * Forced video codec_id.
D
Diego Biurrun 已提交
608
     * Demuxing: Set by user.
M
Michael Niedermayer 已提交
609 610 611 612
     */
    enum CodecID video_codec_id;
    /**
     * Forced audio codec_id.
D
Diego Biurrun 已提交
613
     * Demuxing: Set by user.
M
Michael Niedermayer 已提交
614 615 616 617
     */
    enum CodecID audio_codec_id;
    /**
     * Forced subtitle codec_id.
D
Diego Biurrun 已提交
618
     * Demuxing: Set by user.
M
Michael Niedermayer 已提交
619 620
     */
    enum CodecID subtitle_codec_id;
621 622 623

    /**
     * Maximum amount of memory in bytes to use per stream for the index.
D
Diego Biurrun 已提交
624
     * If the needed index exceeds this size, entries will be discarded as
625 626
     * needed to maintain a smaller size. This can lead to slower or less
     * accurate seeking (depends on demuxer).
D
Diego Biurrun 已提交
627
     * Demuxers for which a full in-memory index is mandatory will ignore
628 629 630 631 632
     * this.
     * muxing  : unused
     * demuxing: set by user
     */
    unsigned int max_index_size;
633 634

    /**
R
Ramiro Polla 已提交
635
     * Maximum amount of memory in bytes to use for buffering frames
D
Diego Biurrun 已提交
636
     * obtained from realtime capture devices.
637 638
     */
    unsigned int max_picture_buffer;
639

640
    unsigned int nb_chapters;
641
    AVChapter **chapters;
642 643

    /**
D
Diego Biurrun 已提交
644
     * Flags to enable debugging.
645 646 647
     */
    int debug;
#define FF_FDEBUG_TS        0x0001
648 649

    /**
D
Diego Biurrun 已提交
650
     * Raw packets from the demuxer, prior to parsing and decoding.
651 652 653 654 655
     * This buffer is used for buffering packets until the codec can
     * be identified, as parsing cannot be done without knowing the
     * codec.
     */
    struct AVPacketList *raw_packet_buffer;
656 657 658
    struct AVPacketList *raw_packet_buffer_end;

    struct AVPacketList *packet_buffer_end;
M
Michael Niedermayer 已提交
659 660

    struct AVMetaData *meta_data;
F
Fabrice Bellard 已提交
661 662 663 664 665 666 667
} AVFormatContext;

typedef struct AVPacketList {
    AVPacket pkt;
    struct AVPacketList *next;
} AVPacketList;

668
#if LIBAVFORMAT_VERSION_INT < (53<<16)
669 670
extern AVInputFormat *first_iformat;
extern AVOutputFormat *first_oformat;
671 672 673 674
#endif

AVInputFormat  *av_iformat_next(AVInputFormat  *f);
AVOutputFormat *av_oformat_next(AVOutputFormat *f);
F
Fabrice Bellard 已提交
675

676
enum CodecID av_guess_image2_codec(const char *filename);
677

678 679
/* XXX: use automatic init with either ELF sections or C file parser */
/* modules */
F
Fabrice Bellard 已提交
680

681 682 683
/* utils.c */
void av_register_input_format(AVInputFormat *format);
void av_register_output_format(AVOutputFormat *format);
684
AVOutputFormat *guess_stream_format(const char *short_name,
685 686
                                    const char *filename,
                                    const char *mime_type);
687
AVOutputFormat *guess_format(const char *short_name,
688 689
                             const char *filename,
                             const char *mime_type);
690 691

/**
D
Diego Biurrun 已提交
692
 * Guesses the codec ID based upon muxer and filename.
693
 */
694
enum CodecID av_guess_codec(AVOutputFormat *fmt, const char *short_name,
695 696
                            const char *filename, const char *mime_type,
                            enum CodecType type);
F
Fabrice Bellard 已提交
697

698
/**
699 700 701
 * Send a nice hexadecimal dump of a buffer to the specified file stream.
 *
 * @param f The file stream pointer where the dump should be sent to.
702 703
 * @param buf buffer
 * @param size buffer size
704 705
 *
 * @see av_hex_dump_log, av_pkt_dump, av_pkt_dump_log
706
 */
707
void av_hex_dump(FILE *f, uint8_t *buf, int size);
708 709

/**
710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726
 * Send a nice hexadecimal dump of a buffer to the log.
 *
 * @param avcl A pointer to an arbitrary struct of which the first field is a
 * pointer to an AVClass struct.
 * @param level The importance level of the message, lower values signifying
 * higher importance.
 * @param buf buffer
 * @param size buffer size
 *
 * @see av_hex_dump, av_pkt_dump, av_pkt_dump_log
 */
void av_hex_dump_log(void *avcl, int level, uint8_t *buf, int size);

/**
 * Send a nice dump of a packet to the specified file stream.
 *
 * @param f The file stream pointer where the dump should be sent to.
727
 * @param pkt packet to dump
D
Diego Biurrun 已提交
728
 * @param dump_payload True if the payload must be displayed, too.
729
 */
730
void av_pkt_dump(FILE *f, AVPacket *pkt, int dump_payload);
F
Fabrice Bellard 已提交
731

732 733 734 735 736 737 738 739
/**
 * Send a nice dump of a packet to the log.
 *
 * @param avcl A pointer to an arbitrary struct of which the first field is a
 * pointer to an AVClass struct.
 * @param level The importance level of the message, lower values signifying
 * higher importance.
 * @param pkt packet to dump
D
Diego Biurrun 已提交
740
 * @param dump_payload True if the payload must be displayed, too.
741 742 743
 */
void av_pkt_dump_log(void *avcl, int level, AVPacket *pkt, int dump_payload);

F
Fabrice Bellard 已提交
744
void av_register_all(void);
F
Fabrice Bellard 已提交
745

746
/** codec tag <-> codec id */
747 748
enum CodecID av_codec_get_id(const struct AVCodecTag * const *tags, unsigned int tag);
unsigned int av_codec_get_tag(const struct AVCodecTag * const *tags, enum CodecID id);
749

750
/* media file input */
751 752

/**
D
Diego Biurrun 已提交
753
 * Finds AVInputFormat based on the short name of the input format.
754
 */
755
AVInputFormat *av_find_input_format(const char *short_name);
756 757 758 759

/**
 * Guess file format.
 *
D
Diego Biurrun 已提交
760 761
 * @param is_opened Whether the file is already opened; determines whether
 *                  demuxers with or without AVFMT_NOFILE are probed.
762
 */
F
Fabrice Bellard 已提交
763
AVInputFormat *av_probe_input_format(AVProbeData *pd, int is_opened);
764 765 766 767 768

/**
 * Allocates all the structures needed to read an input stream.
 *        This does not open the needed codecs for decoding the stream[s].
 */
769 770
int av_open_input_stream(AVFormatContext **ic_ptr,
                         ByteIOContext *pb, const char *filename,
771
                         AVInputFormat *fmt, AVFormatParameters *ap);
772 773

/**
R
Typos  
Ramiro Polla 已提交
774
 * Open a media file as input. The codecs are not opened. Only the file
775 776
 * header (if present) is read.
 *
D
Diego Biurrun 已提交
777 778 779
 * @param ic_ptr The opened media file handle is put here.
 * @param filename filename to open
 * @param fmt If non-NULL, force the file format to use.
780
 * @param buf_size optional buffer size (zero if default is OK)
781 782
 * @param ap Additional parameters needed when opening the file
 *           (NULL if default).
D
Diego Biurrun 已提交
783
 * @return 0 if OK, AVERROR_xxx otherwise
784
 */
785
int av_open_input_file(AVFormatContext **ic_ptr, const char *filename,
786 787 788
                       AVInputFormat *fmt,
                       int buf_size,
                       AVFormatParameters *ap);
789 790
/**
 * Allocate an AVFormatContext.
D
Diego Biurrun 已提交
791
 * Can be freed with av_free() but do not forget to free everything you
792 793
 * explicitly allocated as well!
 */
794
AVFormatContext *av_alloc_format_context(void);
795

796 797 798
/**
 * Read packets of a media file to get stream information. This
 * is useful for file formats with no headers such as MPEG. This
D
Diego Biurrun 已提交
799
 * function also computes the real frame rate in case of MPEG-2 repeat
800 801 802 803 804
 * frame mode.
 * The logical file position is not changed by this function;
 * examined packets may be buffered for later processing.
 *
 * @param ic media file handle
D
Diego Biurrun 已提交
805 806 807
 * @return >=0 if OK, AVERROR_xxx on error
 * @todo Let the user decide somehow what information is needed so that
 *       we do not waste time getting stuff the user does not need.
808
 */
809
int av_find_stream_info(AVFormatContext *ic);
810 811 812 813

/**
 * Read a transport packet from a media file.
 *
R
Typos  
Ramiro Polla 已提交
814
 * This function is obsolete and should never be used.
815 816 817 818
 * Use av_read_frame() instead.
 *
 * @param s media file handle
 * @param pkt is filled
D
Diego Biurrun 已提交
819
 * @return 0 if OK, AVERROR_xxx on error
820
 */
F
Fabrice Bellard 已提交
821
int av_read_packet(AVFormatContext *s, AVPacket *pkt);
822 823 824 825 826 827 828 829 830 831 832 833 834

/**
 * Return the next frame of a stream.
 *
 * The returned packet is valid
 * until the next av_read_frame() or until av_close_input_file() and
 * must be freed with av_free_packet. For video, the packet contains
 * exactly one frame. For audio, it contains an integer number of
 * frames if each frame has a known fixed size (e.g. PCM or ADPCM
 * data). If the audio frames have a variable size (e.g. MPEG audio),
 * then it contains one frame.
 *
 * pkt->pts, pkt->dts and pkt->duration are always set to correct
835
 * values in AVStream.timebase units (and guessed if the format cannot
D
Diego Biurrun 已提交
836 837
 * provide them). pkt->pts can be AV_NOPTS_VALUE if the video format
 * has B-frames, so it is better to rely on pkt->dts if you do not
838 839
 * decompress the payload.
 *
D
Diego Biurrun 已提交
840
 * @return 0 if OK, < 0 on error or end of file
841
 */
842
int av_read_frame(AVFormatContext *s, AVPacket *pkt);
843 844 845 846 847 848 849

/**
 * Seek to the key frame at timestamp.
 * 'timestamp' in 'stream_index'.
 * @param stream_index If stream_index is (-1), a default
 * stream is selected, and timestamp is automatically converted
 * from AV_TIME_BASE units to the stream specific time_base.
D
Diego Biurrun 已提交
850 851
 * @param timestamp Timestamp in AVStream.time_base units
 *        or, if no stream is specified, in AV_TIME_BASE units.
852 853 854
 * @param flags flags which select direction and seeking mode
 * @return >= 0 on success
 */
855 856
int av_seek_frame(AVFormatContext *s, int stream_index, int64_t timestamp,
                  int flags);
857 858

/**
D
Diego Biurrun 已提交
859 860
 * Start playing a network based stream (e.g. RTSP stream) at the
 * current position.
861
 */
862
int av_read_play(AVFormatContext *s);
863 864 865 866 867 868

/**
 * Pause a network based stream (e.g. RTSP stream).
 *
 * Use av_read_play() to resume it.
 */
869
int av_read_pause(AVFormatContext *s);
870

871 872 873 874 875 876
/**
 * Free a AVFormatContext allocated by av_open_input_stream.
 * @param s context to free
 */
void av_close_input_stream(AVFormatContext *s);

877 878 879 880 881
/**
 * Close a media file (but not its codecs).
 *
 * @param s media file handle
 */
F
Fabrice Bellard 已提交
882
void av_close_input_file(AVFormatContext *s);
883 884 885 886 887 888 889 890 891

/**
 * Add a new stream to a media file.
 *
 * Can only be called in the read_header() function. If the flag
 * AVFMTCTX_NOHEADER is in the format context, then new streams
 * can be added in read_packet too.
 *
 * @param s media file handle
D
Diego Biurrun 已提交
892
 * @param id file-format-dependent stream ID
893
 */
894
AVStream *av_new_stream(AVFormatContext *s, int id);
895
AVProgram *av_new_program(AVFormatContext *s, int id);
896

897 898 899
/**
 * Add a new chapter.
 * This function is NOT part of the public API
D
Diego Biurrun 已提交
900
 * and should ONLY be used by demuxers.
901 902
 *
 * @param s media file handle
D
Diego Biurrun 已提交
903
 * @param id unique ID for this chapter
904 905
 * @param start chapter start time in time_base units
 * @param end chapter end time in time_base units
906
 * @param title chapter title
907
 *
D
Diego Biurrun 已提交
908
 * @return AVChapter or NULL on error
909
 */
910 911
AVChapter *ff_new_chapter(AVFormatContext *s, int id, AVRational time_base,
                          int64_t start, int64_t end, const char *title);
912

913 914 915 916 917 918 919 920 921
/**
 * Set the pts for a given stream.
 *
 * @param s stream
 * @param pts_wrap_bits number of bits effectively used by the pts
 *        (used for wrap control, 33 is the value for MPEG)
 * @param pts_num numerator to convert to seconds (MPEG: 1)
 * @param pts_den denominator to convert to seconds (MPEG: 90000)
 */
922
void av_set_pts_info(AVStream *s, int pts_wrap_bits,
F
Fabrice Bellard 已提交
923
                     int pts_num, int pts_den);
F
Fabrice Bellard 已提交
924

925 926
#define AVSEEK_FLAG_BACKWARD 1 ///< seek backward
#define AVSEEK_FLAG_BYTE     2 ///< seeking based on position in bytes
D
Diego Biurrun 已提交
927
#define AVSEEK_FLAG_ANY      4 ///< seek to any frame, even non-keyframes
928

929
int av_find_default_stream_index(AVFormatContext *s);
930 931 932

/**
 * Gets the index for a specific timestamp.
D
Diego Biurrun 已提交
933 934 935
 * @param flags if AVSEEK_FLAG_BACKWARD then the returned index will correspond
 *                 to the timestamp which is <= the requested one, if backward
 *                 is 0, then it will be >=
936 937 938
 *              if AVSEEK_FLAG_ANY seek to any frame, only keyframes otherwise
 * @return < 0 if no such timestamp could be found
 */
939
int av_index_search_timestamp(AVStream *st, int64_t timestamp, int flags);
940

941 942 943 944 945 946 947 948 949
/**
 * Ensures the index uses less memory than the maximum specified in
 * AVFormatContext.max_index_size, by discarding entries if it grows
 * too large.
 * This function is not part of the public API and should only be called
 * by demuxers.
 */
void ff_reduce_index(AVFormatContext *s, int stream_index);

950
/**
D
Diego Biurrun 已提交
951 952
 * Add an index entry into a sorted list. Update the entry if the list
 * already contains it.
953
 *
D
Diego Biurrun 已提交
954
 * @param timestamp timestamp in the time base of the given stream
955
 */
956 957
int av_add_index_entry(AVStream *st, int64_t pos, int64_t timestamp,
                       int size, int distance, int flags);
958 959

/**
960 961 962 963
 * Does a binary search using av_index_search_timestamp() and
 * AVCodec.read_timestamp().
 * This is not supposed to be called directly by a user application,
 * but by demuxers.
964 965 966
 * @param target_ts target timestamp in the time base of the given stream
 * @param stream_index stream number
 */
967 968
int av_seek_frame_binary(AVFormatContext *s, int stream_index,
                         int64_t target_ts, int flags);
969 970

/**
D
Diego Biurrun 已提交
971
 * Updates cur_dts of all streams based on the given timestamp and AVStream.
972
 *
D
Diego Biurrun 已提交
973 974
 * Stream ref_st unchanged, others set cur_dts in their native time base.
 * Only needed for timestamp wrapping or if (dts not set and pts!=dts).
975 976 977
 * @param timestamp new dts expressed in time_base of param ref_st
 * @param ref_st reference stream giving time_base of param timestamp
 */
978
void av_update_cur_dts(AVFormatContext *s, AVStream *ref_st, int64_t timestamp);
979 980 981

/**
 * Does a binary search using read_timestamp().
982 983
 * This is not supposed to be called directly by a user application,
 * but by demuxers.
984 985 986
 * @param target_ts target timestamp in the time base of the given stream
 * @param stream_index stream number
 */
987 988 989 990 991 992
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 ));
993

994
/** media file output */
995
int av_set_parameters(AVFormatContext *s, AVFormatParameters *ap);
996 997

/**
D
Diego Biurrun 已提交
998 999
 * Allocate the stream private data and write the stream header to an
 * output media file.
1000 1001
 *
 * @param s media file handle
D
Diego Biurrun 已提交
1002
 * @return 0 if OK, AVERROR_xxx on error
1003
 */
1004
int av_write_header(AVFormatContext *s);
1005 1006 1007 1008 1009

/**
 * Write a packet to an output media file.
 *
 * The packet shall contain one audio or video frame.
1010 1011
 * The packet must be correctly interleaved according to the container
 * specification, if not then av_interleaved_write_frame must be used.
1012 1013
 *
 * @param s media file handle
1014 1015
 * @param pkt The packet, which contains the stream_index, buf/buf_size,
              dts/pts, ...
D
Diego Biurrun 已提交
1016
 * @return < 0 on error, = 0 if OK, 1 if end of stream wanted
1017
 */
1018
int av_write_frame(AVFormatContext *s, AVPacket *pkt);
1019 1020 1021 1022 1023 1024

/**
 * Writes a packet to an output media file ensuring correct interleaving.
 *
 * The packet must contain one audio or video frame.
 * If the packets are already correctly interleaved the application should
D
Diego Biurrun 已提交
1025 1026 1027 1028
 * call av_write_frame() instead as it is slightly faster. It is also important
 * to keep in mind that completely non-interleaved input will need huge amounts
 * of memory to interleave with this, so it is preferable to interleave at the
 * demuxer level.
1029 1030
 *
 * @param s media file handle
1031 1032
 * @param pkt The packet, which contains the stream_index, buf/buf_size,
              dts/pts, ...
D
Diego Biurrun 已提交
1033
 * @return < 0 on error, = 0 if OK, 1 if end of stream wanted
1034
 */
1035
int av_interleaved_write_frame(AVFormatContext *s, AVPacket *pkt);
1036 1037

/**
D
Diego Biurrun 已提交
1038
 * Interleave a packet per dts in an output media file.
1039
 *
1040 1041 1042
 * Packets with pkt->destruct == av_destruct_packet will be freed inside this
 * function, so they cannot be used after it, note calling av_free_packet()
 * on them is still safe.
1043 1044 1045 1046 1047 1048 1049
 *
 * @param s media file handle
 * @param out the interleaved packet will be output here
 * @param in the input packet
 * @param flush 1 if no further packets are available as input and all
 *              remaining packets should be output
 * @return 1 if a packet was output, 0 if no packet could be output,
D
Diego Biurrun 已提交
1050
 *         < 0 if an error occurred
1051
 */
1052 1053
int av_interleave_packet_per_dts(AVFormatContext *s, AVPacket *out,
                                 AVPacket *pkt, int flush);
1054

1055 1056 1057 1058
/**
 * @brief Write the stream trailer to an output media file and
 *        free the file private data.
 *
1059 1060
 * May only be called after a successful call to av_write_header.
 *
1061
 * @param s media file handle
D
Diego Biurrun 已提交
1062
 * @return 0 if OK, AVERROR_xxx on error
1063
 */
1064
int av_write_trailer(AVFormatContext *s);
F
Fabrice Bellard 已提交
1065 1066

void dump_format(AVFormatContext *ic,
1067
                 int index,
F
Fabrice Bellard 已提交
1068 1069
                 const char *url,
                 int is_output);
1070

1071
#if LIBAVFORMAT_VERSION_MAJOR < 53
1072
/**
D
Diego Biurrun 已提交
1073
 * Parses width and height out of string str.
1074
 * @deprecated Use av_parse_video_frame_size instead.
1075
 */
1076 1077
attribute_deprecated int parse_image_size(int *width_ptr, int *height_ptr,
                                          const char *str);
1078 1079 1080

/**
 * Converts frame rate from string to a fraction.
1081
 * @deprecated Use av_parse_video_frame_rate instead.
1082
 */
1083 1084
attribute_deprecated int parse_frame_rate(int *frame_rate, int *frame_rate_base,
                                          const char *arg);
1085
#endif
1086 1087

/**
1088 1089 1090
 * Parses \p datestr and returns a corresponding number of microseconds.
 * @param datestr String representing a date or a duration.
 * - If a date the syntax is:
1091 1092 1093
 * @code
 *  [{YYYY-MM-DD|YYYYMMDD}]{T| }{HH[:MM[:SS[.m...]]][Z]|HH[MM[SS[.m...]]][Z]}
 * @endcode
D
Diego Biurrun 已提交
1094
 * Time is local time unless Z is appended, in which case it is
1095
 * interpreted as UTC.
D
Diego Biurrun 已提交
1096
 * If the year-month-day part is not specified it takes the current
1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107
 * year-month-day.
 * Returns the number of microseconds since 1st of January, 1970 up to
 * the time of the parsed date or INT64_MIN if \p datestr cannot be
 * successfully parsed.
 * - If a duration the syntax is:
 * @code
 *  [-]HH[:MM[:SS[.m...]]]
 *  [-]S+[.m...]
 * @endcode
 * Returns the number of microseconds contained in a time interval
 * with the specified duration or INT64_MIN if \p datestr cannot be
D
Diego Biurrun 已提交
1108
 * successfully parsed.
1109 1110 1111
 * @param duration Flag which tells how to interpret \p datestr, if
 * not zero \p datestr is interpreted as a duration, otherwise as a
 * date.
1112
 */
1113
int64_t parse_date(const char *datestr, int duration);
F
Fabrice Bellard 已提交
1114

1115
/** Gets the current time in microseconds. */
1116
int64_t av_gettime(void);
F
Fabrice Bellard 已提交
1117

D
Diego Biurrun 已提交
1118
/* ffm-specific for ffserver */
F
Fabrice Bellard 已提交
1119
#define FFM_PACKET_SIZE 4096
1120 1121 1122
int64_t ffm_read_write_index(int fd);
void ffm_write_write_index(int fd, int64_t pos);
void ffm_set_write_index(AVFormatContext *s, int64_t pos, int64_t file_size);
F
Fabrice Bellard 已提交
1123

1124 1125 1126 1127 1128 1129
/**
 * Attempts to find a specific tag in a URL.
 *
 * syntax: '?tag1=val1&tag2=val2...'. Little URL decoding is done.
 * Return 1 if found.
 */
F
Fabrice Bellard 已提交
1130 1131
int find_info_tag(char *arg, int arg_size, const char *tag1, const char *info);

1132 1133
/**
 * Returns in 'buf' the path with '%d' replaced by number.
D
Diego Biurrun 已提交
1134
 *
1135 1136 1137 1138 1139 1140
 * Also handles the '%0nd' format where 'n' is the total number
 * of digits and '%%'.
 *
 * @param buf destination buffer
 * @param buf_size destination buffer size
 * @param path numbered sequence string
P
Panagiotis Issaris 已提交
1141
 * @param number frame number
D
Diego Biurrun 已提交
1142
 * @return 0 if OK, -1 on format error
1143
 */
1144 1145
int av_get_frame_filename(char *buf, int buf_size,
                          const char *path, int number);
1146 1147 1148 1149 1150

/**
 * Check whether filename actually is a numbered sequence generator.
 *
 * @param filename possible numbered sequence string
D
Diego Biurrun 已提交
1151
 * @return 1 if a valid numbered sequence string, 0 otherwise
1152
 */
1153
int av_filename_number_test(const char *filename);
1154

L
Luca Abeni 已提交
1155 1156 1157 1158 1159 1160 1161
/**
 * Generate an SDP for an RTP session.
 *
 * @param ac array of AVFormatContexts describing the RTP streams. If the
 *           array is composed by only one context, such context can contain
 *           multiple AVStreams (one AVStream per RTP stream). Otherwise,
 *           all the contexts in the array (an AVCodecContext per RTP stream)
D
Diego Biurrun 已提交
1162
 *           must contain only one AVStream.
1163 1164
 * @param n_files number of AVCodecContexts contained in ac
 * @param buff buffer where the SDP will be stored (must be allocated by
D
Diego Biurrun 已提交
1165
 *             the caller)
1166
 * @param size the size of the buffer
D
Diego Biurrun 已提交
1167
 * @return 0 if OK, AVERROR_xxx on error
L
Luca Abeni 已提交
1168
 */
1169
int avf_sdp_create(AVFormatContext *ac[], int n_files, char *buff, int size);
L
Luca Abeni 已提交
1170

F
Fabrice Bellard 已提交
1171
#ifdef HAVE_AV_CONFIG_H
1172

1173
void ff_dynarray_add(unsigned long **tab_ptr, int *nb_ptr, unsigned long elem);
F
Fabrice Bellard 已提交
1174

F
Falk Hüffner 已提交
1175
#ifdef __GNUC__
F
Fabrice Bellard 已提交
1176 1177
#define dynarray_add(tab, nb_ptr, elem)\
do {\
1178 1179
    __typeof__(tab) _tab = (tab);\
    __typeof__(elem) _elem = (elem);\
F
Fabrice Bellard 已提交
1180
    (void)sizeof(**_tab == _elem); /* check that types are compatible */\
1181
    ff_dynarray_add((unsigned long **)_tab, nb_ptr, (unsigned long)_elem);\
F
Fabrice Bellard 已提交
1182
} while(0)
F
Falk Hüffner 已提交
1183 1184 1185
#else
#define dynarray_add(tab, nb_ptr, elem)\
do {\
1186
    ff_dynarray_add((unsigned long **)(tab), nb_ptr, (unsigned long)(elem));\
F
Falk Hüffner 已提交
1187 1188
} while(0)
#endif
F
Fabrice Bellard 已提交
1189

1190
time_t mktimegm(struct tm *tm);
1191
struct tm *brktimegm(time_t secs, struct tm *tm);
1192
const char *small_strptime(const char *p, const char *fmt,
1193 1194
                           struct tm *dt);

F
Fabrice Bellard 已提交
1195 1196 1197 1198
struct in_addr;
int resolve_host(struct in_addr *sin_addr, const char *hostname);

void url_split(char *proto, int proto_size,
1199
               char *authorization, int authorization_size,
F
Fabrice Bellard 已提交
1200 1201 1202 1203 1204
               char *hostname, int hostname_size,
               int *port_ptr,
               char *path, int path_size,
               const char *url);

F
Fabrice Bellard 已提交
1205 1206
int match_ext(const char *filename, const char *extensions);

F
Fabrice Bellard 已提交
1207 1208
#endif /* HAVE_AV_CONFIG_H */

1209
#endif /* AVFORMAT_AVFORMAT_H */