2006-09-10 16:02:42 +02:00
/*
* copyright ( c ) 2001 Fabrice Bellard
*
2006-10-07 17:30:46 +02:00
* This file is part of FFmpeg .
*
* FFmpeg is free software ; you can redistribute it and / or
2006-09-10 16:02:42 +02:00
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation ; either
2006-10-07 17:30:46 +02:00
* version 2.1 of the License , or ( at your option ) any later version .
2006-09-10 16:02:42 +02:00
*
2006-10-07 17:30:46 +02:00
* FFmpeg is distributed in the hope that it will be useful ,
2006-09-10 16:02:42 +02:00
* 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
2006-10-07 17:30:46 +02:00
* License along with FFmpeg ; if not , write to the Free Software
2006-09-10 16:02:42 +02:00
* Foundation , Inc . , 51 Franklin Street , Fifth Floor , Boston , MA 02110 - 1301 USA
*/
2008-08-31 09:39:47 +02:00
# ifndef AVFORMAT_AVFORMAT_H
# define AVFORMAT_AVFORMAT_H
2001-07-22 16:18:56 +02:00
2008-02-26 21:37:59 +01:00
# define LIBAVFORMAT_VERSION_MAJOR 52
2010-07-20 16:13:24 +02:00
# define LIBAVFORMAT_VERSION_MINOR 76
2010-05-24 23:59:32 +02:00
# define LIBAVFORMAT_VERSION_MICRO 0
2008-02-19 23:50:28 +01:00
2008-02-26 21:37:59 +01:00
# 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 )
2005-07-31 12:51:04 +02:00
# define LIBAVFORMAT_BUILD LIBAVFORMAT_VERSION_INT
2003-09-05 16:41:53 +02:00
2005-07-31 12:51:04 +02:00
# define LIBAVFORMAT_IDENT "Lavf" AV_STRINGIFY(LIBAVFORMAT_VERSION)
2002-04-15 04:28:05 +02:00
2008-08-08 20:40:50 +02:00
/**
2010-01-08 04:43:48 +01:00
* I return the LIBAVFORMAT_VERSION_INT constant . You got
* a fucking problem with that , douchebag ?
2008-08-08 20:40:50 +02:00
*/
unsigned avformat_version ( void ) ;
2009-11-18 18:15:17 +01:00
/**
2010-06-30 17:38:06 +02:00
* Return the libavformat build - time configuration .
2009-11-18 18:15:17 +01:00
*/
2010-01-03 15:31:25 +01:00
const char * avformat_configuration ( void ) ;
2009-11-18 18:15:17 +01:00
/**
2010-06-30 17:38:06 +02:00
* Return the libavformat license .
2009-11-18 18:15:17 +01:00
*/
2010-01-03 15:31:25 +01:00
const char * avformat_license ( void ) ;
2009-11-18 18:15:17 +01:00
2003-09-08 23:20:55 +02:00
# include <time.h>
2003-11-13 23:15:11 +01:00
# include <stdio.h> /* FILE */
2008-02-25 10:22:11 +01:00
# include "libavcodec/avcodec.h"
2001-07-22 16:18:56 +02:00
# include "avio.h"
2009-03-01 00:34:16 +01:00
struct AVFormatContext ;
2009-01-04 19:58:49 +01:00
/*
2009-01-04 21:47:09 +01:00
* Public Metadata API .
* The metadata API allows libavformat to export metadata tags to a client
2010-02-24 19:01:44 +01:00
* application using a sequence of key / value pairs . Like all strings in FFmpeg ,
* metadata must be stored as UTF - 8 encoded Unicode . Note that metadata
* exported by demuxers isn ' t checked to be valid UTF - 8 in most cases .
2009-01-04 21:47:09 +01:00
* 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 .
2010-02-01 12:39:10 +01:00
* 3. Several modifiers can be applied to the tag name . This is done by
* appending a dash character ( ' - ' ) and the modifier name in the order
* they appear in the list below - - e . g . foo - eng - sort , not foo - sort - eng .
* a ) language - - a tag whose value is localized for a particular language
* is appended with the ISO 639 - 2 / B 3 - letter language code .
* For example : Author - ger = Michael , Author - eng = Mike
* The original / default language is in the unqualified " Author " tag .
* A demuxer should set a default if it sets any translated tag .
* b ) sorting - - a modified version of a tag that should be used for
* sorting will have ' - sort ' appended . E . g . artist = " The Beatles " ,
* artist - sort = " Beatles, The " .
*
* 4. Tag names are normally exported exactly as stored in the container to
* allow lossless remuxing to the same format . For container - independent
* handling of metadata , av_metadata_conv ( ) can convert it to ffmpeg generic
* format . Follows a list of generic tag names :
*
* album - - name of the set this work belongs to
* album_artist - - main creator of the set / album , if different from artist .
* e . g . " Various Artists " for compilation albums .
* artist - - main creator of the work
* comment - - any additional description of the file .
* composer - - who composed the work , if different from artist .
* copyright - - name of copyright holder .
* date - - date when the work was created , preferably in ISO 8601.
* disc - - number of a subset , e . g . disc in a multi - disc collection .
* encoder - - name / settings of the software / hardware that produced the file .
* encoded_by - - person / group who created the file .
* filename - - original name of the file .
* genre - - < self - evident > .
* language - - main language in which the work is performed , preferably
* in ISO 639 - 2 format .
* performer - - artist who performed the work , if different from artist .
* E . g for " Also sprach Zarathustra " , artist would be " Richard
* Strauss " and performer " London Philharmonic Orchestra " .
* publisher - - name of the label / publisher .
* title - - name of the work .
* track - - number of this work in the set , can be in form current / total .
2009-01-04 19:58:49 +01:00
*/
2009-01-18 23:53:28 +01:00
# define AV_METADATA_MATCH_CASE 1
2009-01-04 19:58:49 +01:00
# define AV_METADATA_IGNORE_SUFFIX 2
2009-12-13 21:22:27 +01:00
# define AV_METADATA_DONT_STRDUP_KEY 4
# define AV_METADATA_DONT_STRDUP_VAL 8
2010-04-05 21:50:45 +02:00
# define AV_METADATA_DONT_OVERWRITE 16 ///< Don't overwrite existing tags.
2009-01-04 19:58:49 +01:00
typedef struct {
char * key ;
char * value ;
2009-01-05 00:31:31 +01:00
} AVMetadataTag ;
2009-01-04 19:58:49 +01:00
2009-01-06 00:56:27 +01:00
typedef struct AVMetadata AVMetadata ;
2009-03-01 00:34:16 +01:00
typedef struct AVMetadataConv AVMetadataConv ;
2009-01-04 19:58:49 +01:00
/**
2010-06-30 17:38:06 +02:00
* Get a metadata element with matching key .
2009-02-25 20:10:39 +01:00
* @ param prev Set to the previous matching element to find the next .
2010-03-27 22:14:16 +01:00
* If set to NULL the first matching element is returned .
2009-02-25 20:10:39 +01:00
* @ param flags Allows case as well as suffix - insensitive comparisons .
* @ return Found tag or NULL , changing key or value leads to undefined behavior .
2009-01-04 19:58:49 +01:00
*/
2009-01-05 00:31:31 +01:00
AVMetadataTag *
2009-01-06 00:56:27 +01:00
av_metadata_get ( AVMetadata * m , const char * key , const AVMetadataTag * prev , int flags ) ;
2009-01-04 19:58:49 +01:00
2009-12-13 21:22:27 +01:00
# if LIBAVFORMAT_VERSION_MAJOR == 52
2009-01-04 19:58:49 +01:00
/**
2010-06-30 17:38:06 +02:00
* Set the given tag in m , overwriting an existing tag .
2009-02-25 20:10:39 +01:00
* @ param key tag key to add to m ( will be av_strduped )
* @ param value tag value to add to m ( will be av_strduped )
* @ return > = 0 on success otherwise an error code < 0
2010-04-25 16:27:42 +02:00
* @ deprecated Use av_metadata_set2 ( ) instead .
2009-01-04 19:58:49 +01:00
*/
2010-04-25 16:27:42 +02:00
attribute_deprecated int av_metadata_set ( AVMetadata * * pm , const char * key , const char * value ) ;
2009-12-13 21:22:27 +01:00
# endif
/**
2010-06-30 17:38:06 +02:00
* Set the given tag in m , overwriting an existing tag .
2009-12-13 21:22:27 +01:00
* @ param key tag key to add to m ( will be av_strduped depending on flags )
2010-06-04 15:52:45 +02:00
* @ param value tag value to add to m ( will be av_strduped depending on flags ) .
* Passing a NULL value will cause an existing tag to be deleted .
2009-12-13 21:22:27 +01:00
* @ return > = 0 on success otherwise an error code < 0
*/
int av_metadata_set2 ( AVMetadata * * pm , const char * key , const char * value , int flags ) ;
2009-01-04 19:58:49 +01:00
2009-03-01 00:34:16 +01:00
/**
2010-06-30 17:38:06 +02:00
* Convert all the metadata sets from ctx according to the source and
2010-02-01 12:39:10 +01:00
* destination conversion tables . If one of the tables is NULL , then
* tags are converted to / from ffmpeg generic tag names .
2009-03-01 00:34:16 +01:00
* @ param d_conv destination tags format conversion table
* @ param s_conv source tags format conversion table
*/
void av_metadata_conv ( struct AVFormatContext * ctx , const AVMetadataConv * d_conv ,
const AVMetadataConv * s_conv ) ;
2009-01-06 23:11:04 +01:00
/**
2010-06-30 17:38:06 +02:00
* Free all the memory allocated for an AVMetadata struct .
2009-01-06 23:11:04 +01:00
*/
void av_metadata_free ( AVMetadata * * m ) ;
2009-01-04 19:58:49 +01:00
2001-07-22 16:18:56 +02:00
/* packet functions */
2007-03-03 13:23:20 +01:00
/**
2010-06-30 17:38:06 +02:00
* Allocate and read the payload of a packet and initialize its
2009-06-28 23:01:51 +02:00
* fields with default values .
2007-03-03 13:23:20 +01:00
*
* @ param pkt packet
2008-09-27 21:51:53 +02:00
* @ param size desired payload size
* @ return > 0 ( read size ) if OK , AVERROR_xxx otherwise
2007-03-03 13:23:20 +01:00
*/
2005-05-26 22:17:12 +02:00
int av_get_packet ( ByteIOContext * s , AVPacket * pkt , int size ) ;
2007-03-03 13:23:20 +01:00
2001-07-22 16:18:56 +02:00
2002-10-21 17:54:49 +02:00
/*************************************************/
/* fractional numbers for exact pts handling */
2007-05-02 11:13:47 +02:00
/**
2008-09-27 21:51:53 +02:00
* The exact value of the fractional number is : ' val + num / den ' .
* num is assumed to be 0 < = num < den .
2009-02-11 01:25:30 +01:00
*/
2002-10-21 17:54:49 +02:00
typedef struct AVFrac {
2005-12-17 19:14:38 +01:00
int64_t val , num , den ;
2009-01-05 23:10:16 +01:00
} AVFrac ;
2002-10-21 17:54:49 +02:00
2001-07-22 16:18:56 +02:00
/*************************************************/
2002-05-20 18:28:47 +02:00
/* input/output formats */
2001-07-22 16:18:56 +02:00
2007-01-21 02:39:17 +01:00
struct AVCodecTag ;
2008-09-27 21:51:53 +02:00
/** This structure contains the data a format has to probe a file. */
2002-05-20 18:28:47 +02:00
typedef struct AVProbeData {
2003-02-10 10:35:32 +01:00
const char * filename ;
2009-09-10 00:55:10 +02:00
unsigned char * buf ; /**< Buffer must have AVPROBE_PADDING_SIZE of extra allocated bytes filled with zero. */
int buf_size ; /**< Size of buf except extra allocated bytes */
2002-05-20 18:28:47 +02:00
} AVProbeData ;
2009-02-25 20:10:39 +01:00
# define AVPROBE_SCORE_MAX 100 ///< maximum score, half of that is used for file-extension-based detection
2007-04-08 13:34:15 +02:00
# define AVPROBE_PADDING_SIZE 32 ///< extra allocated bytes at the end of the probe buffer
2001-07-22 16:18:56 +02:00
typedef struct AVFormatParameters {
2005-04-30 23:43:59 +02:00
AVRational time_base ;
2001-07-22 16:18:56 +02:00
int sample_rate ;
int channels ;
int width ;
int height ;
2002-04-08 22:58:56 +02:00
enum PixelFormat pix_fmt ;
2008-09-27 21:51:53 +02:00
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
2008-07-09 01:20:22 +02:00
stream packet ( only meaningful if
2008-09-27 21:51:53 +02:00
mpeg2ts_raw is TRUE ) . */
unsigned int initial_pause : 1 ; /**< Do not begin to play the stream
immediately ( RTSP only ) . */
2008-07-09 01:20:22 +02:00
unsigned int prealloced_context : 1 ;
2007-12-19 11:58:54 +01:00
# if LIBAVFORMAT_VERSION_INT < (53<<16)
2004-11-11 19:09:28 +01:00
enum CodecID video_codec_id ;
enum CodecID audio_codec_id ;
2007-12-19 11:58:54 +01:00
# endif
2001-07-22 16:18:56 +02:00
} AVFormatParameters ;
2008-09-27 21:51:53 +02:00
//! Demuxer will use url_fopen, no opened file should be provided by the caller.
2007-01-19 23:54:50 +01:00
# define AVFMT_NOFILE 0x0001
2008-09-27 21:51:53 +02:00
# 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. */
2009-02-24 16:04:18 +01:00
# define AVFMT_VARIABLE_FPS 0x0400 /**< Format allows variable fps. */
2010-02-12 21:35:29 +01:00
# define AVFMT_NODIMENSIONS 0x0800 /**< Format does not need width/height */
2002-05-20 18:28:47 +02:00
typedef struct AVOutputFormat {
2001-07-22 16:18:56 +02:00
const char * name ;
2008-06-03 18:20:54 +02:00
/**
* Descriptive name for the format , meant to be more human - readable
2009-05-26 00:05:43 +02:00
* than name . You should use the NULL_IF_CONFIG_SMALL ( ) macro
2008-06-03 18:20:54 +02:00
* to define it .
*/
2001-07-22 16:18:56 +02:00
const char * long_name ;
const char * mime_type ;
2008-09-27 21:51:53 +02:00
const char * extensions ; /**< comma-separated filename extensions */
2009-02-25 20:10:39 +01:00
/** size of private data so that it can be allocated in the wrapper */
2002-05-20 18:28:47 +02:00
int priv_data_size ;
2001-07-22 16:18:56 +02:00
/* output support */
2007-03-05 01:23:23 +01:00
enum CodecID audio_codec ; /**< default audio codec */
enum CodecID video_codec ; /**< default video codec */
2001-07-22 16:18:56 +02:00
int ( * write_header ) ( struct AVFormatContext * ) ;
2004-05-29 04:06:32 +02:00
int ( * write_packet ) ( struct AVFormatContext * , AVPacket * pkt ) ;
2001-07-22 16:18:56 +02:00
int ( * write_trailer ) ( struct AVFormatContext * ) ;
2007-03-05 01:23:23 +01:00
/** can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, AVFMT_GLOBALHEADER */
2002-05-20 18:28:47 +02:00
int flags ;
2008-09-27 21:51:53 +02:00
/** Currently only used to set pixel format if not YUV420P. */
2003-01-11 05:56:29 +01:00
int ( * set_parameters ) ( struct AVFormatContext * , AVFormatParameters * ) ;
2008-09-27 22:05:12 +02:00
int ( * interleave_packet ) ( struct AVFormatContext * , AVPacket * out ,
AVPacket * in , int flush ) ;
2007-01-21 02:39:17 +01:00
/**
2008-09-27 22:05:12 +02:00
* List of supported codec_id - codec_tag pairs , ordered by " better
2009-02-25 20:10:39 +01:00
* choice first " . The arrays are all terminated by CODEC_ID_NONE.
2007-01-21 02:39:17 +01:00
*/
2008-08-24 18:51:50 +02:00
const struct AVCodecTag * const * codec_tag ;
2007-01-21 02:39:17 +01:00
2007-07-25 21:47:44 +02:00
enum CodecID subtitle_codec ; /**< default subtitle codec */
2009-03-01 01:12:08 +01:00
const AVMetadataConv * metadata_conv ;
2009-03-01 00:34:16 +01:00
2002-05-20 18:28:47 +02:00
/* private fields */
struct AVOutputFormat * next ;
} AVOutputFormat ;
2001-07-22 16:18:56 +02:00
2002-05-20 18:28:47 +02:00
typedef struct AVInputFormat {
const char * name ;
2008-06-03 18:20:54 +02:00
/**
* Descriptive name for the format , meant to be more human - readable
2009-05-26 00:05:43 +02:00
* than name . You should use the NULL_IF_CONFIG_SMALL ( ) macro
2008-06-03 18:20:54 +02:00
* to define it .
*/
2002-05-20 18:28:47 +02:00
const char * long_name ;
2008-09-27 21:51:53 +02:00
/** Size of private data so that it can be allocated in the wrapper. */
2002-05-20 18:28:47 +02:00
int priv_data_size ;
2007-08-10 18:15:23 +02:00
/**
2009-02-25 20:10:39 +01:00
* Tell if a given file has a chance of being parsed as this format .
2007-12-16 18:22:09 +01:00
* 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 .
2007-08-10 18:15:23 +02:00
*/
2002-05-20 18:28:47 +02:00
int ( * read_probe ) ( AVProbeData * ) ;
2008-09-27 21:51:53 +02:00
/** 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
2002-05-20 18:28:47 +02:00
now . ' av_new_stream ' should be called to create new streams . */
2001-07-22 16:18:56 +02:00
int ( * read_header ) ( struct AVFormatContext * ,
AVFormatParameters * ap ) ;
2008-09-27 21:51:53 +02:00
/** Read one packet and put it in 'pkt'. pts and flags are also
2002-05-20 18:28:47 +02:00
set . ' av_new_stream ' can be called only if the flag
2009-04-07 23:10:10 +02:00
AVFMTCTX_NOHEADER is used .
@ return 0 on success , < 0 on error .
When returning an error , pkt must not have been allocated
or must be freed before returning */
2001-07-22 16:18:56 +02:00
int ( * read_packet ) ( struct AVFormatContext * , AVPacket * pkt ) ;
2008-09-27 21:51:53 +02:00
/** Close the stream. The AVFormatContext and AVStreams are not
2001-07-22 16:18:56 +02:00
freed by this function */
int ( * read_close ) ( struct AVFormatContext * ) ;
2009-02-25 04:18:11 +01:00
# if LIBAVFORMAT_VERSION_MAJOR < 53
2005-12-17 19:14:38 +01:00
/**
2008-09-27 21:51:53 +02:00
* Seek to a given timestamp relative to the frames in
* stream component stream_index .
2009-02-25 20:10:39 +01:00
* @ param stream_index Must not be - 1.
* @ param flags Selects which direction should be preferred if no exact
* match is available .
2007-06-25 04:08:04 +02:00
* @ return > = 0 on success ( but not necessarily the new offset )
2004-10-11 00:05:43 +02:00
*/
2005-12-17 19:14:38 +01:00
int ( * read_seek ) ( struct AVFormatContext * ,
2004-10-11 00:05:43 +02:00
int stream_index , int64_t timestamp , int flags ) ;
2009-02-25 04:18:11 +01:00
# endif
2004-04-12 18:50:03 +02:00
/**
2008-09-27 21:51:53 +02:00
* Gets the next timestamp in stream [ stream_index ] . time_base units .
2008-03-22 02:06:57 +01:00
* @ return the timestamp or AV_NOPTS_VALUE if an error occurred
2004-04-12 18:50:03 +02:00
*/
int64_t ( * read_timestamp ) ( struct AVFormatContext * s , int stream_index ,
int64_t * pos , int64_t pos_limit ) ;
2008-09-27 21:51:53 +02:00
/** Can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER. */
2001-07-22 16:18:56 +02:00
int flags ;
2008-09-27 21:51:53 +02:00
/** If extensions are defined, then no probe is done. You should
2002-05-20 18:28:47 +02:00
usually not use extension format guessing because it is not
reliable enough */
const char * extensions ;
2008-09-27 21:51:53 +02:00
/** General purpose read-only value that the format can use. */
2002-05-20 18:28:47 +02:00
int value ;
2003-11-10 19:37:55 +01:00
2010-06-30 17:38:06 +02:00
/** Start/resume playing - only meaningful if using a network-based format
2008-09-27 21:51:53 +02:00
( RTSP ) . */
2003-11-10 19:37:55 +01:00
int ( * read_play ) ( struct AVFormatContext * ) ;
2010-06-30 17:38:06 +02:00
/** Pause playing - only meaningful if using a network-based format
2008-09-27 21:51:53 +02:00
( RTSP ) . */
2003-11-10 19:37:55 +01:00
int ( * read_pause ) ( struct AVFormatContext * ) ;
2008-08-24 18:51:50 +02:00
const struct AVCodecTag * const * codec_tag ;
2007-01-21 02:39:17 +01:00
2009-02-25 04:18:11 +01:00
/**
2010-06-30 17:38:06 +02:00
* Seek to timestamp ts .
2009-02-25 04:18:11 +01:00
* Seeking will be done so that the point from which all active streams
* can be presented successfully will be closest to ts and within min / max_ts .
* Active streams are all streams that have AVStream . discard < AVDISCARD_ALL .
*/
2009-02-25 11:45:08 +01:00
int ( * read_seek2 ) ( struct AVFormatContext * s , int stream_index , int64_t min_ts , int64_t ts , int64_t max_ts , int flags ) ;
2009-02-25 04:18:11 +01:00
2009-03-01 01:12:08 +01:00
const AVMetadataConv * metadata_conv ;
2009-03-01 00:34:16 +01:00
2002-05-20 18:28:47 +02:00
/* private fields */
struct AVInputFormat * next ;
} AVInputFormat ;
2001-07-22 16:18:56 +02:00
2007-04-15 15:51:57 +02:00
enum AVStreamParseType {
AVSTREAM_PARSE_NONE ,
AVSTREAM_PARSE_FULL , /**< full parsing and repack */
2008-09-27 21:51:53 +02:00
AVSTREAM_PARSE_HEADERS , /**< Only parse headers, do not repack. */
2008-09-27 22:05:12 +02:00
AVSTREAM_PARSE_TIMESTAMPS , /**< full parsing and interpolation of timestamps for frames not starting on a packet boundary */
2010-05-26 06:20:32 +02:00
AVSTREAM_PARSE_FULL_ONCE , /**< full parsing and repack of the first frame only, only implemented for H.264 currently */
2007-04-15 15:51:57 +02:00
} ;
2003-11-10 19:37:55 +01:00
typedef struct AVIndexEntry {
int64_t pos ;
int64_t timestamp ;
# define AVINDEX_KEYFRAME 0x0001
2006-03-01 12:29:55 +01:00
int flags : 2 ;
2008-09-27 21:51:53 +02:00
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. */
2003-11-10 19:37:55 +01:00
} AVIndexEntry ;
2008-03-07 20:25:09 +01:00
# 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
2010-07-02 18:38:44 +02:00
/** Track should be used during playback by default.
Useful for subtitle track that should be displayed
even when user did not explicitly ask for subtitles . */
# define AV_DISPOSITION_FORCED 0x0040
2008-03-07 20:25:09 +01:00
2007-12-20 10:59:07 +01:00
/**
* Stream structure .
* New fields can be added to the end with minor version bumps .
2007-12-21 12:50:18 +01:00
* Removal , reordering and changes to existing fields require a major
2007-12-20 10:59:07 +01:00
* version bump .
2007-12-21 12:50:18 +01:00
* sizeof ( AVStream ) must not be used outside libav * .
2007-12-20 10:59:07 +01:00
*/
2001-07-22 16:18:56 +02:00
typedef struct AVStream {
2007-03-05 01:23:23 +01:00
int index ; /**< stream index in AVFormatContext */
2008-09-27 21:51:53 +02:00
int id ; /**< format-specific stream ID */
2007-03-05 01:23:23 +01:00
AVCodecContext * codec ; /**< codec context */
2005-06-24 13:38:22 +02:00
/**
2009-02-25 20:10:39 +01:00
* Real base framerate of the stream .
* This is the lowest framerate with which all timestamps can be
2007-06-04 23:05:58 +02:00
* represented accurately ( it is the least common multiple of all
2009-02-25 20:10:39 +01:00
* framerates in the stream ) . Note , this value is just a guess !
* For example , if the time base is 1 / 90000 and all frames have either
2008-09-27 21:51:53 +02:00
* approximately 3600 or 1800 timer ticks , then r_frame_rate will be 50 / 1.
2005-06-24 13:38:22 +02:00
*/
AVRational r_frame_rate ;
2001-07-22 16:18:56 +02:00
void * priv_data ;
2007-08-05 00:46:13 +02:00
2002-05-20 18:28:47 +02:00
/* internal data used in av_find_stream_info() */
2007-08-05 00:46:13 +02:00
int64_t first_dts ;
2008-09-27 21:51:53 +02:00
/** encoding: pts generation when outputting stream */
2007-07-10 00:15:11 +02:00
struct AVFrac pts ;
2005-08-22 00:31:01 +02:00
/**
2007-12-21 12:50:18 +01:00
* This is the fundamental unit of time ( in seconds ) in terms
* of which frame timestamps are represented . For fixed - fps content ,
2009-02-25 20:10:39 +01:00
* time base should be 1 / framerate and timestamp increments should be 1.
2005-08-22 00:31:01 +02:00
*/
2004-05-21 22:43:21 +02:00
AVRational time_base ;
2007-03-05 01:23:23 +01:00
int pts_wrap_bits ; /**< number of bits in pts (used for wrapping control) */
2002-10-11 11:16:05 +02:00
/* ffmpeg.c private use */
2008-09-27 21:51:53 +02:00
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.
2005-01-22 02:48:11 +01:00
//FIXME move stuff to a flags field?
2008-09-27 21:51:53 +02:00
/** Quality, as it has been removed from AVCodecContext and put in AVVideoFrame.
2007-06-12 11:29:25 +02:00
* MN : dunno if that is the right place for it */
2005-12-17 19:14:38 +01:00
float quality ;
2007-08-16 14:07:05 +02:00
/**
2007-12-21 12:50:18 +01:00
* 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 .
2007-08-18 02:31:32 +02:00
* This may be undefined ( AV_NOPTS_VALUE ) .
2007-12-21 12:50:18 +01:00
* @ note The ASF header does NOT contain a correct start_time the ASF
* demuxer must NOT set this .
2007-08-16 14:07:05 +02:00
*/
2005-12-17 19:14:38 +01:00
int64_t start_time ;
2007-08-18 02:35:43 +02:00
/**
2007-12-21 12:50:18 +01:00
* Decoding : duration of the stream , in stream time base .
2007-08-18 02:35:43 +02:00
* If a source file does not specify a duration , but does specify
2008-09-27 21:51:53 +02:00
* a bitrate , this value will be estimated from bitrate and file size .
2007-08-18 02:35:43 +02:00
*/
2003-08-08 19:49:27 +02:00
int64_t duration ;
2003-11-10 19:37:55 +01:00
2009-03-01 17:35:25 +01:00
# if LIBAVFORMAT_VERSION_INT < (53<<16)
2009-04-15 22:18:02 +02:00
char language [ 4 ] ; /** ISO 639-2/B 3-letter language code (empty string if undefined) */
2009-03-01 17:35:25 +01:00
# endif
2005-06-03 16:02:29 +02:00
2003-11-10 19:37:55 +01:00
/* av_read_frame() support */
2007-04-15 15:51:57 +02:00
enum AVStreamParseType need_parsing ;
2003-11-10 19:37:55 +01:00
struct AVCodecParserContext * parser ;
2003-12-16 12:21:25 +01:00
2003-11-10 19:37:55 +01:00
int64_t cur_dts ;
2008-02-20 21:24:38 +01:00
int last_IP_duration ;
int64_t last_IP_pts ;
2003-11-10 19:37:55 +01:00
/* av_seek_frame() support */
2008-09-27 21:51:53 +02:00
AVIndexEntry * index_entries ; /**< Only used if the format does not
support seeking natively . */
2003-11-10 19:37:55 +01:00
int nb_index_entries ;
2006-09-27 21:47:39 +02:00
unsigned int index_entries_allocated_size ;
2005-12-17 19:14:38 +01:00
2005-06-24 13:38:22 +02:00
int64_t nb_frames ; ///< number of frames in this stream if known or 0
2006-08-30 23:18:17 +02:00
2008-08-12 19:28:00 +02:00
# if LIBAVFORMAT_VERSION_INT < (53<<16)
int64_t unused [ 4 + 1 ] ;
2008-01-27 16:43:17 +01:00
char * filename ; /**< source filename of the stream */
2009-03-01 17:35:25 +01:00
# endif
2008-03-07 20:25:09 +01:00
2008-09-27 21:51:53 +02:00
int disposition ; /**< AV_DISPOSITION_* bit field */
2008-07-12 20:42:00 +02:00
AVProbeData probe_data ;
2008-08-12 19:28:00 +02:00
# define MAX_REORDER_DELAY 16
int64_t pts_buffer [ MAX_REORDER_DELAY + 1 ] ;
2008-08-24 01:13:58 +02:00
/**
* sample aspect ratio ( 0 if unknown )
* - encoding : Set by user .
* - decoding : Set by libavformat .
*/
AVRational sample_aspect_ratio ;
2009-01-04 23:31:55 +01:00
2009-01-06 00:56:27 +01:00
AVMetadata * metadata ;
2009-01-23 00:35:31 +01:00
2010-07-11 16:56:32 +02:00
/* Intended mostly for av_read_frame() support. Not supposed to be used by */
/* external applications; try to use something else if at all possible. */
2009-01-23 00:35:31 +01:00
const uint8_t * cur_ptr ;
int cur_len ;
AVPacket cur_pkt ;
2009-02-24 23:19:09 +01:00
// Timestamp generation support:
/**
* Timestamp corresponding to the last dts sync point .
*
* Initialized when AVCodecParserContext . dts_sync_point > = 0 and
* a DTS is received from the underlying container . Otherwise set to
* AV_NOPTS_VALUE by default .
*/
int64_t reference_dts ;
2009-05-31 02:24:06 +02:00
/**
* Number of packets to buffer for codec probing
* NOT PART OF PUBLIC API
*/
2009-09-24 21:20:53 +02:00
# define MAX_PROBE_PACKETS 2500
2009-05-31 02:24:06 +02:00
int probe_packets ;
2009-09-16 02:59:15 +02:00
/**
2009-09-16 22:04:04 +02:00
* last packet in packet_buffer for this stream when muxing .
2009-09-16 02:59:15 +02:00
* used internally , NOT PART OF PUBLIC API , dont read or write from outside of libav *
*/
2009-09-16 22:04:04 +02:00
struct AVPacketList * last_in_packet_buffer ;
2009-12-13 16:52:11 +01:00
/**
* Average framerate
*/
AVRational avg_frame_rate ;
2010-02-23 16:07:18 +01:00
/**
* Number of frames that have been demuxed during av_find_stream_info ( )
*/
int codec_info_nb_frames ;
2001-07-22 16:18:56 +02:00
} AVStream ;
2007-09-25 22:45:46 +02:00
# define AV_PROGRAM_RUNNING 1
2007-12-20 10:59:07 +01:00
/**
* New fields can be added to the end with minor version bumps .
2007-12-21 12:50:18 +01:00
* Removal , reordering and changes to existing fields require a major
2007-12-20 10:59:07 +01:00
* version bump .
2007-12-21 12:50:18 +01:00
* sizeof ( AVProgram ) must not be used outside libav * .
2007-12-20 10:59:07 +01:00
*/
2007-09-25 22:45:46 +02:00
typedef struct AVProgram {
int id ;
2009-03-01 17:35:25 +01:00
# if LIBAVFORMAT_VERSION_INT < (53<<16)
2008-09-27 21:51:53 +02:00
char * provider_name ; ///< network name for DVB streams
char * name ; ///< service name for DVB streams
2009-03-01 17:35:25 +01:00
# endif
2007-09-25 22:45:46 +02:00
int flags ;
enum AVDiscard discard ; ///< selects which program to discard and which to feed to the caller
2007-10-20 10:25:13 +02:00
unsigned int * stream_index ;
unsigned int nb_stream_indexes ;
2009-01-06 00:56:27 +01:00
AVMetadata * metadata ;
2007-09-25 22:45:46 +02:00
} AVProgram ;
2007-03-05 01:23:23 +01:00
# define AVFMTCTX_NOHEADER 0x0001 / **< signal that no header is present
2003-10-29 15:20:56 +01:00
( streams are added dynamically ) */
2008-05-23 00:00:21 +02:00
typedef struct AVChapter {
2008-09-27 21:51:53 +02:00
int id ; ///< unique ID to identify the chapter
AVRational time_base ; ///< time base in which the start/end timestamps are specified
2008-05-23 14:45:03 +02:00
int64_t start , end ; ///< chapter start/end time in time_base units
2009-03-01 17:35:25 +01:00
# if LIBAVFORMAT_VERSION_INT < (53<<16)
2008-05-23 14:44:12 +02:00
char * title ; ///< chapter title
2009-03-01 17:35:25 +01:00
# endif
2009-01-06 00:56:27 +01:00
AVMetadata * metadata ;
2008-05-23 00:00:21 +02:00
} AVChapter ;
2010-01-27 20:13:35 +01:00
# if LIBAVFORMAT_VERSION_MAJOR < 53
2001-07-22 16:18:56 +02:00
# define MAX_STREAMS 20
2010-01-27 20:13:35 +01:00
# endif
2001-07-22 16:18:56 +02:00
2007-12-20 10:43:01 +01:00
/**
2008-09-27 21:51:53 +02:00
* Format I / O context .
2007-12-20 10:43:01 +01:00
* New fields can be added to the end with minor version bumps .
2007-12-21 12:50:18 +01:00
* Removal , reordering and changes to existing fields require a major
2007-12-20 10:43:01 +01:00
* version bump .
2007-12-21 12:50:18 +01:00
* sizeof ( AVFormatContext ) must not be used outside libav * .
2007-12-20 10:43:01 +01:00
*/
2001-07-22 16:18:56 +02:00
typedef struct AVFormatContext {
2009-02-18 15:01:46 +01:00
const AVClass * av_class ; /**< Set by avformat_alloc_context. */
2008-09-27 21:51:53 +02:00
/* Can only be iformat or oformat, not both at the same time. */
2002-05-20 18:28:47 +02:00
struct AVInputFormat * iformat ;
struct AVOutputFormat * oformat ;
2001-07-22 16:18:56 +02:00
void * priv_data ;
2007-11-21 08:41:00 +01:00
ByteIOContext * pb ;
2007-01-16 23:31:10 +01:00
unsigned int nb_streams ;
2001-07-22 16:18:56 +02:00
AVStream * streams [ MAX_STREAMS ] ;
2007-03-05 01:23:23 +01:00
char filename [ 1024 ] ; /**< input or output filename */
2001-07-22 16:18:56 +02:00
/* stream info */
2004-04-06 08:31:12 +02:00
int64_t timestamp ;
2009-03-01 17:35:25 +01:00
# if LIBAVFORMAT_VERSION_INT < (53<<16)
2001-07-22 16:18:56 +02:00
char title [ 512 ] ;
char author [ 512 ] ;
char copyright [ 512 ] ;
char comment [ 512 ] ;
2003-09-09 00:34:28 +02:00
char album [ 512 ] ;
2007-03-05 01:23:23 +01:00
int year ; /**< ID3 year, 0 if none */
int track ; /**< track number, 0 if none */
char genre [ 32 ] ; /**< ID3 genre */
2009-03-01 17:35:25 +01:00
# endif
2003-09-09 00:34:28 +02:00
2008-09-27 21:51:53 +02:00
int ctx_flags ; /**< Format-specific flags, see AVFMTCTX_xx */
/* private data for pts handling (do not modify directly). */
2007-03-05 01:23:23 +01:00
/** This buffer is only needed when packets were already buffered but
2008-09-27 21:51:53 +02:00
not decoded , for example to get the codec parameters in MPEG
streams . */
2003-08-08 19:49:27 +02:00
struct AVPacketList * packet_buffer ;
2008-09-27 21:51:53 +02:00
/** Decoding: position of the first frame of the component, in
2003-08-08 19:49:27 +02:00
AV_TIME_BASE fractional seconds . NEVER set this value directly :
2008-09-27 21:51:53 +02:00
It is deduced from the AVStream values . */
2005-12-17 19:14:38 +01:00
int64_t start_time ;
2008-09-27 21:51:53 +02:00
/** Decoding: duration of the stream, in AV_TIME_BASE fractional
2010-04-04 14:20:10 +02:00
seconds . Only set this value if you know none of the individual stream
durations and also dont set any of them . This is deduced from the
AVStream values if not set . */
2003-08-08 19:49:27 +02:00
int64_t duration ;
2008-09-27 21:51:53 +02:00
/** decoding: total file size, 0 if unknown */
2003-08-08 19:49:27 +02:00
int64_t file_size ;
2008-09-27 21:51:53 +02:00
/** Decoding: total stream bitrate in bit/s, 0 if not
2003-08-08 19:49:27 +02:00
available . Never set it directly if the file_size and the
2009-02-25 20:10:39 +01:00
duration are known as FFmpeg can compute it automatically . */
2003-08-08 19:49:27 +02:00
int bit_rate ;
2003-11-10 19:37:55 +01:00
/* av_read_frame() support */
AVStream * cur_st ;
2009-01-23 00:35:31 +01:00
# if LIBAVFORMAT_VERSION_INT < (53<<16)
const uint8_t * cur_ptr_deprecated ;
int cur_len_deprecated ;
AVPacket cur_pkt_deprecated ;
# endif
2003-11-10 19:37:55 +01:00
/* av_seek_frame() support */
2007-03-05 01:23:23 +01:00
int64_t data_offset ; /** offset of the first packet */
2003-11-10 19:37:55 +01:00
int index_built ;
2005-12-17 19:14:38 +01:00
2004-10-07 00:29:30 +02:00
int mux_rate ;
2009-06-22 18:52:02 +02:00
unsigned int packet_size ;
2004-10-16 23:27:42 +02:00
int preload ;
int max_delay ;
2005-06-18 03:52:24 +02:00
2005-12-17 19:14:38 +01:00
# define AVFMT_NOOUTPUTLOOP -1
# define AVFMT_INFINITEOUTPUTLOOP 0
2007-03-05 01:23:23 +01:00
/** number of times to loop output in formats that support it */
2005-06-18 03:52:24 +02:00
int loop_output ;
2005-12-17 19:14:38 +01:00
2005-08-15 16:22:43 +02:00
int flags ;
2009-02-25 20:10:39 +01:00
# define AVFMT_FLAG_GENPTS 0x0001 ///< Generate missing pts even if it requires parsing future frames.
2008-09-27 21:51:53 +02:00
# define AVFMT_FLAG_IGNIDX 0x0002 ///< Ignore index.
# define AVFMT_FLAG_NONBLOCK 0x0004 ///< Do not block when reading packets from input.
2010-01-30 23:55:12 +01:00
# define AVFMT_FLAG_IGNDTS 0x0008 ///< Ignore DTS on frames that contain both DTS & PTS
2010-03-31 14:55:16 +02:00
# define AVFMT_FLAG_NOFILLIN 0x0010 ///< Do not infer any values from other values, just return what is stored in the container
# define AVFMT_FLAG_NOPARSE 0x0020 ///< Do not use AVParsers, you also must set AVFMT_FLAG_NOFILLIN as the fillin code works on frames and no parsing -> no frames. Also seeking to frames can not work if parsing to find frame boundaries has been disabled
2010-05-18 21:34:21 +02:00
# define AVFMT_FLAG_RTP_HINT 0x0040 ///< Add RTP hinting to the output file
2006-07-13 23:13:49 +02:00
int loop_input ;
2009-02-25 20:10:39 +01:00
/** decoding: size of data to probe; encoding: unused. */
2006-08-27 14:21:19 +02:00
unsigned int probesize ;
2007-01-23 18:34:26 +01:00
/**
2008-09-27 21:51:53 +02:00
* Maximum time ( in AV_TIME_BASE units ) during which the input should
* be analyzed in av_find_stream_info ( ) .
2007-01-23 18:34:26 +01:00
*/
int max_analyze_duration ;
2007-02-11 13:37:28 +01:00
const uint8_t * key ;
int keylen ;
2007-09-25 22:45:46 +02:00
unsigned int nb_programs ;
AVProgram * * programs ;
2007-12-19 11:56:17 +01:00
/**
* Forced video codec_id .
2008-09-27 21:51:53 +02:00
* Demuxing : Set by user .
2007-12-19 11:56:17 +01:00
*/
enum CodecID video_codec_id ;
/**
* Forced audio codec_id .
2008-09-27 21:51:53 +02:00
* Demuxing : Set by user .
2007-12-19 11:56:17 +01:00
*/
enum CodecID audio_codec_id ;
/**
* Forced subtitle codec_id .
2008-09-27 21:51:53 +02:00
* Demuxing : Set by user .
2007-12-19 11:56:17 +01:00
*/
enum CodecID subtitle_codec_id ;
2008-01-13 14:33:37 +01:00
/**
2009-02-25 20:10:39 +01:00
* Maximum amount of memory in bytes to use for the index of each stream .
* If the index exceeds this size , entries will be discarded as
2008-01-13 14:33:37 +01:00
* needed to maintain a smaller size . This can lead to slower or less
* accurate seeking ( depends on demuxer ) .
2008-09-27 21:51:53 +02:00
* Demuxers for which a full in - memory index is mandatory will ignore
2008-01-13 14:33:37 +01:00
* this .
* muxing : unused
* demuxing : set by user
*/
unsigned int max_index_size ;
2008-03-08 22:59:11 +01:00
/**
2008-03-08 23:43:13 +01:00
* Maximum amount of memory in bytes to use for buffering frames
2008-09-27 21:51:53 +02:00
* obtained from realtime capture devices .
2008-03-08 22:59:11 +01:00
*/
unsigned int max_picture_buffer ;
2008-05-23 00:00:21 +02:00
2008-05-23 15:08:44 +02:00
unsigned int nb_chapters ;
2008-05-23 00:00:21 +02:00
AVChapter * * chapters ;
2008-06-09 15:38:56 +02:00
/**
2008-09-27 21:51:53 +02:00
* Flags to enable debugging .
2008-06-09 15:38:56 +02:00
*/
int debug ;
# define FF_FDEBUG_TS 0x0001
2008-07-12 20:42:00 +02:00
/**
2008-09-27 21:51:53 +02:00
* Raw packets from the demuxer , prior to parsing and decoding .
2008-07-12 20:42:00 +02:00
* 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 ;
2008-08-07 00:17:38 +02:00
struct AVPacketList * raw_packet_buffer_end ;
struct AVPacketList * packet_buffer_end ;
2009-01-04 19:48:37 +01:00
2009-01-06 00:56:27 +01:00
AVMetadata * metadata ;
2009-06-25 20:48:57 +02:00
/**
* Remaining size available for raw_packet_buffer , in bytes .
* NOT PART OF PUBLIC API
*/
2009-09-24 21:20:53 +02:00
# define RAW_PACKET_BUFFER_SIZE 2500000
2009-06-25 20:48:57 +02:00
int raw_packet_buffer_remaining_size ;
2010-03-15 11:29:37 +01:00
/**
* Start time of the stream in real world time , in microseconds
* since the unix epoch ( 00 : 00 1 st January 1970 ) . That is , pts = 0
* in the stream was captured at this real world time .
* - encoding : Set by user .
* - decoding : Unused .
*/
int64_t start_time_realtime ;
2001-07-22 16:18:56 +02:00
} AVFormatContext ;
typedef struct AVPacketList {
AVPacket pkt ;
struct AVPacketList * next ;
} AVPacketList ;
2007-12-12 20:01:58 +01:00
# if LIBAVFORMAT_VERSION_INT < (53<<16)
2002-05-20 18:28:47 +02:00
extern AVInputFormat * first_iformat ;
extern AVOutputFormat * first_oformat ;
2007-12-12 20:01:58 +01:00
# endif
2009-02-15 10:04:08 +01:00
/**
* If f is NULL , returns the first registered input format ,
2009-02-25 20:10:39 +01:00
* if f is non - NULL , returns the next registered input format after f
2009-02-15 10:04:08 +01:00
* or NULL if f is the last one .
*/
2007-12-12 20:01:58 +01:00
AVInputFormat * av_iformat_next ( AVInputFormat * f ) ;
2009-02-15 10:04:08 +01:00
/**
* If f is NULL , returns the first registered output format ,
2009-02-25 20:10:39 +01:00
* if f is non - NULL , returns the next registered output format after f
2009-02-15 10:04:08 +01:00
* or NULL if f is the last one .
*/
2007-12-12 20:01:58 +01:00
AVOutputFormat * av_oformat_next ( AVOutputFormat * f ) ;
2001-07-22 16:18:56 +02:00
2004-11-11 19:09:28 +01:00
enum CodecID av_guess_image2_codec ( const char * filename ) ;
2003-01-11 05:56:29 +01:00
2009-02-25 20:10:39 +01:00
/* XXX: Use automatic init with either ELF sections or C file parser */
/* modules. */
2001-07-22 16:18:56 +02:00
2002-05-20 18:28:47 +02:00
/* utils.c */
void av_register_input_format ( AVInputFormat * format ) ;
void av_register_output_format ( AVOutputFormat * format ) ;
2009-12-31 15:12:58 +01:00
# if LIBAVFORMAT_VERSION_MAJOR < 53
attribute_deprecated AVOutputFormat * guess_stream_format ( const char * short_name ,
2008-09-27 22:05:12 +02:00
const char * filename ,
const char * mime_type ) ;
2010-01-01 13:46:24 +01:00
/**
* @ deprecated Use av_guess_format ( ) instead .
*/
attribute_deprecated AVOutputFormat * guess_format ( const char * short_name ,
const char * filename ,
const char * mime_type ) ;
2009-12-31 15:12:58 +01:00
# endif
2009-12-31 17:38:21 +01:00
/**
2010-06-30 17:38:06 +02:00
* Return the output format in the list of registered output formats
* which best matches the provided parameters , or return NULL if
2009-12-31 17:38:21 +01:00
* there is no match .
*
* @ param short_name if non - NULL checks if short_name matches with the
* names of the registered formats
* @ param filename if non - NULL checks if filename terminates with the
* extensions of the registered formats
* @ param mime_type if non - NULL checks if mime_type matches with the
* MIME type of the registered formats
*/
2010-01-01 13:46:24 +01:00
AVOutputFormat * av_guess_format ( const char * short_name ,
2010-01-01 13:52:20 +01:00
const char * filename ,
const char * mime_type ) ;
2007-03-03 13:23:20 +01:00
/**
2010-06-30 17:38:06 +02:00
* Guess the codec ID based upon muxer and filename .
2007-03-03 13:23:20 +01:00
*/
2005-12-17 19:14:38 +01:00
enum CodecID av_guess_codec ( AVOutputFormat * fmt , const char * short_name ,
2008-09-27 22:05:12 +02:00
const char * filename , const char * mime_type ,
2010-03-31 01:30:55 +02:00
enum AVMediaType type ) ;
2001-07-22 16:18:56 +02:00
2007-03-03 13:23:20 +01:00
/**
2010-06-30 17:38:06 +02:00
* Send a nice hexadecimal dump of a buffer to the specified file stream .
2007-03-12 15:17:26 +01:00
*
* @ param f The file stream pointer where the dump should be sent to .
2007-03-03 13:23:20 +01:00
* @ param buf buffer
* @ param size buffer size
2007-03-12 15:17:26 +01:00
*
* @ see av_hex_dump_log , av_pkt_dump , av_pkt_dump_log
2007-03-03 13:23:20 +01:00
*/
2003-11-10 19:37:55 +01:00
void av_hex_dump ( FILE * f , uint8_t * buf , int size ) ;
2007-03-03 13:23:20 +01:00
/**
2010-06-30 17:38:06 +02:00
* Send a nice hexadecimal dump of a buffer to the log .
2007-03-12 15:17:26 +01:00
*
* @ 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 ) ;
/**
2010-06-30 17:38:06 +02:00
* Send a nice dump of a packet to the specified file stream .
2007-03-12 15:17:26 +01:00
*
* @ param f The file stream pointer where the dump should be sent to .
2007-03-03 13:23:20 +01:00
* @ param pkt packet to dump
2008-09-27 21:51:53 +02:00
* @ param dump_payload True if the payload must be displayed , too .
2007-03-03 13:23:20 +01:00
*/
2003-11-10 19:37:55 +01:00
void av_pkt_dump ( FILE * f , AVPacket * pkt , int dump_payload ) ;
2001-07-22 16:18:56 +02:00
2007-03-12 15:17:26 +01:00
/**
2010-06-30 17:38:06 +02:00
* Send a nice dump of a packet to the log .
2007-03-12 15:17:26 +01:00
*
* @ 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
2008-09-27 21:51:53 +02:00
* @ param dump_payload True if the payload must be displayed , too .
2007-03-12 15:17:26 +01:00
*/
void av_pkt_dump_log ( void * avcl , int level , AVPacket * pkt , int dump_payload ) ;
2009-01-25 17:44:45 +01:00
/**
2010-06-30 17:38:06 +02:00
* Initialize libavformat and register all the muxers , demuxers and
2009-01-25 17:44:45 +01:00
* protocols . If you do not call this function , then you can select
* exactly which formats you want to support .
*
* @ see av_register_input_format ( )
* @ see av_register_output_format ( )
2009-02-15 15:29:23 +01:00
* @ see av_register_protocol ( )
2009-01-25 17:44:45 +01:00
*/
2002-07-25 18:01:46 +02:00
void av_register_all ( void ) ;
2001-07-22 16:18:56 +02:00
2010-05-13 00:17:29 +02:00
/**
2010-06-30 17:38:06 +02:00
* Get the CodecID for the given codec tag tag .
2010-05-13 00:17:29 +02:00
* If no codec id is found returns CODEC_ID_NONE .
*
* @ param tags list of supported codec_id - codec_tag pairs , as stored
* in AVInputFormat . codec_tag and AVOutputFormat . codec_tag
*/
2008-11-08 19:37:03 +01:00
enum CodecID av_codec_get_id ( const struct AVCodecTag * const * tags , unsigned int tag ) ;
2010-05-13 00:17:29 +02:00
/**
2010-06-30 17:38:06 +02:00
* Get the codec tag for the given codec id id .
2010-05-13 00:17:29 +02:00
* If no codec tag is found returns 0.
*
* @ param tags list of supported codec_id - codec_tag pairs , as stored
* in AVInputFormat . codec_tag and AVOutputFormat . codec_tag
*/
2008-11-08 19:37:03 +01:00
unsigned int av_codec_get_tag ( const struct AVCodecTag * const * tags , enum CodecID id ) ;
2007-01-21 02:39:17 +01:00
2002-05-20 18:28:47 +02:00
/* media file input */
2007-03-03 13:23:20 +01:00
/**
2010-06-30 17:38:06 +02:00
* Find AVInputFormat based on the short name of the input format .
2007-03-03 13:23:20 +01:00
*/
2002-05-20 18:28:47 +02:00
AVInputFormat * av_find_input_format ( const char * short_name ) ;
2007-03-03 13:23:20 +01:00
/**
2010-06-30 17:38:06 +02:00
* Guess the file format .
2007-03-03 13:23:20 +01:00
*
2008-09-27 21:51:53 +02:00
* @ param is_opened Whether the file is already opened ; determines whether
* demuxers with or without AVFMT_NOFILE are probed .
2007-03-03 13:23:20 +01:00
*/
2002-07-25 18:01:46 +02:00
AVInputFormat * av_probe_input_format ( AVProbeData * pd , int is_opened ) ;
2007-03-03 13:23:20 +01:00
2010-05-01 15:49:35 +02:00
/**
2010-06-30 17:38:06 +02:00
* Guess the file format .
2010-05-01 15:49:35 +02:00
*
* @ param is_opened Whether the file is already opened ; determines whether
* demuxers with or without AVFMT_NOFILE are probed .
2010-05-01 17:36:51 +02:00
* @ param score_max A probe score larger that this is required to accept a
* detection , the variable is set to the actual detection
* score afterwards .
* If the score is < = AVPROBE_SCORE_MAX / 4 it is recommended
2010-05-01 15:49:35 +02:00
* to retry with a larger probe buffer .
*/
AVInputFormat * av_probe_input_format2 ( AVProbeData * pd , int is_opened , int * score_max ) ;
2007-03-03 13:23:20 +01:00
/**
2010-06-30 17:38:06 +02:00
* Allocate all the structures needed to read an input stream .
2007-03-03 13:23:20 +01:00
* This does not open the needed codecs for decoding the stream [ s ] .
*/
2005-12-17 19:14:38 +01:00
int av_open_input_stream ( AVFormatContext * * ic_ptr ,
ByteIOContext * pb , const char * filename ,
2003-10-29 15:20:56 +01:00
AVInputFormat * fmt , AVFormatParameters * ap ) ;
2007-03-03 13:23:20 +01:00
/**
2010-06-30 17:38:06 +02:00
* Open a media file as input . The codecs are not opened . Only the file
2007-03-03 13:23:20 +01:00
* header ( if present ) is read .
*
2008-09-27 21:51:53 +02:00
* @ 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 .
2007-03-03 13:23:20 +01:00
* @ param buf_size optional buffer size ( zero if default is OK )
2008-09-27 22:05:12 +02:00
* @ param ap Additional parameters needed when opening the file
* ( NULL if default ) .
2008-09-27 21:51:53 +02:00
* @ return 0 if OK , AVERROR_xxx otherwise
2007-03-03 13:23:20 +01:00
*/
2005-12-17 19:14:38 +01:00
int av_open_input_file ( AVFormatContext * * ic_ptr , const char * filename ,
2002-05-20 18:28:47 +02:00
AVInputFormat * fmt ,
int buf_size ,
AVFormatParameters * ap ) ;
2009-02-08 09:16:40 +01:00
# if LIBAVFORMAT_VERSION_MAJOR < 53
/**
* @ deprecated Use avformat_alloc_context ( ) instead .
*/
attribute_deprecated AVFormatContext * av_alloc_format_context ( void ) ;
# endif
2007-12-15 17:54:58 +01:00
/**
2010-06-30 17:38:06 +02:00
* Allocate an AVFormatContext .
2007-12-16 18:22:09 +01:00
* Can be freed with av_free ( ) but do not forget to free everything you
2007-12-15 17:54:58 +01:00
* explicitly allocated as well !
*/
2009-02-08 09:16:40 +01:00
AVFormatContext * avformat_alloc_context ( void ) ;
2002-05-20 18:28:47 +02:00
2007-03-03 13:23:20 +01:00
/**
2010-06-30 17:38:06 +02:00
* Read packets of a media file to get stream information . This
2007-03-03 13:23:20 +01:00
* is useful for file formats with no headers such as MPEG . This
2009-02-25 20:10:39 +01:00
* function also computes the real framerate in case of MPEG - 2 repeat
2007-03-03 13:23:20 +01:00
* 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
2008-09-27 21:51:53 +02:00
* @ 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 .
2007-03-03 13:23:20 +01:00
*/
2002-05-20 18:28:47 +02:00
int av_find_stream_info ( AVFormatContext * ic ) ;
2007-03-03 13:23:20 +01:00
/**
2010-06-30 17:38:06 +02:00
* Read a transport packet from a media file .
2007-03-03 13:23:20 +01:00
*
2007-06-04 23:05:58 +02:00
* This function is obsolete and should never be used .
2007-03-03 13:23:20 +01:00
* Use av_read_frame ( ) instead .
*
* @ param s media file handle
* @ param pkt is filled
2008-09-27 21:51:53 +02:00
* @ return 0 if OK , AVERROR_xxx on error
2007-03-03 13:23:20 +01:00
*/
2001-07-22 16:18:56 +02:00
int av_read_packet ( AVFormatContext * s , AVPacket * pkt ) ;
2007-03-03 13:23:20 +01:00
/**
2010-06-30 17:38:06 +02:00
* Return the next frame of a stream .
2007-03-03 13:23:20 +01:00
*
* 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
2009-02-25 20:10:39 +01:00
* values in AVStream . time_base units ( and guessed if the format cannot
2008-09-27 21:51:53 +02:00
* 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
2007-03-03 13:23:20 +01:00
* decompress the payload .
*
2008-09-27 21:51:53 +02:00
* @ return 0 if OK , < 0 on error or end of file
2007-03-03 13:23:20 +01:00
*/
2003-11-10 19:37:55 +01:00
int av_read_frame ( AVFormatContext * s , AVPacket * pkt ) ;
2007-03-03 13:23:20 +01:00
/**
2010-06-30 17:38:06 +02:00
* Seek to the keyframe at timestamp .
2007-03-03 13:23:20 +01:00
* ' 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 .
2008-09-27 21:51:53 +02:00
* @ param timestamp Timestamp in AVStream . time_base units
* or , if no stream is specified , in AV_TIME_BASE units .
2007-03-03 13:23:20 +01:00
* @ param flags flags which select direction and seeking mode
* @ return > = 0 on success
*/
2008-09-27 22:05:12 +02:00
int av_seek_frame ( AVFormatContext * s , int stream_index , int64_t timestamp ,
int flags ) ;
2007-03-03 13:23:20 +01:00
2009-02-08 18:52:52 +01:00
/**
2010-06-30 17:38:06 +02:00
* Seek to timestamp ts .
2009-02-08 18:52:52 +01:00
* Seeking will be done so that the point from which all active streams
* can be presented successfully will be closest to ts and within min / max_ts .
* Active streams are all streams that have AVStream . discard < AVDISCARD_ALL .
*
2009-02-25 20:10:39 +01:00
* If flags contain AVSEEK_FLAG_BYTE , then all timestamps are in bytes and
2009-02-08 18:52:52 +01:00
* are the file position ( this may not be supported by all demuxers ) .
2009-02-25 20:10:39 +01:00
* If flags contain AVSEEK_FLAG_FRAME , then all timestamps are in frames
2009-02-08 18:52:52 +01:00
* in the stream with stream_index ( this may not be supported by all demuxers ) .
2009-02-25 20:10:39 +01:00
* Otherwise all timestamps are in units of the stream selected by stream_index
* or if stream_index is - 1 , in AV_TIME_BASE units .
* If flags contain AVSEEK_FLAG_ANY , then non - keyframes are treated as
2009-02-08 18:52:52 +01:00
* keyframes ( this may not be supported by all demuxers ) .
*
2009-02-25 20:10:39 +01:00
* @ param stream_index index of the stream which is used as time base reference
2009-02-08 18:52:52 +01:00
* @ param min_ts smallest acceptable timestamp
* @ param ts target timestamp
* @ param max_ts largest acceptable timestamp
* @ param flags flags
2010-03-30 17:50:57 +02:00
* @ return > = 0 on success , error code otherwise
2009-02-08 18:55:00 +01:00
*
2010-07-02 13:46:29 +02:00
* @ note This is part of the new seek API which is still under construction .
2009-02-25 20:10:39 +01:00
* Thus do not use this yet . It may change at any time , do not expect
* ABI compatibility yet !
2009-02-08 18:52:52 +01:00
*/
int avformat_seek_file ( AVFormatContext * s , int stream_index , int64_t min_ts , int64_t ts , int64_t max_ts , int flags ) ;
2007-03-03 13:23:20 +01:00
/**
2010-06-30 17:38:06 +02:00
* Start playing a network - based stream ( e . g . RTSP stream ) at the
2008-09-27 21:51:53 +02:00
* current position .
2007-03-03 13:23:20 +01:00
*/
2003-11-10 19:37:55 +01:00
int av_read_play ( AVFormatContext * s ) ;
2007-03-03 13:23:20 +01:00
/**
2010-06-30 17:38:06 +02:00
* Pause a network - based stream ( e . g . RTSP stream ) .
2007-03-03 13:23:20 +01:00
*
* Use av_read_play ( ) to resume it .
*/
2003-11-10 19:37:55 +01:00
int av_read_pause ( AVFormatContext * s ) ;
2007-03-03 13:23:20 +01:00
2007-12-19 15:07:13 +01:00
/**
2010-06-30 17:38:06 +02:00
* Free a AVFormatContext allocated by av_open_input_stream .
2007-12-19 15:07:13 +01:00
* @ param s context to free
*/
void av_close_input_stream ( AVFormatContext * s ) ;
2007-03-03 13:23:20 +01:00
/**
2010-06-30 17:38:06 +02:00
* Close a media file ( but not its codecs ) .
2007-03-03 13:23:20 +01:00
*
* @ param s media file handle
*/
2001-07-22 16:18:56 +02:00
void av_close_input_file ( AVFormatContext * s ) ;
2007-03-03 13:23:20 +01:00
/**
2010-06-30 17:38:06 +02:00
* Add a new stream to a media file .
2007-03-03 13:23:20 +01:00
*
* 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
2008-09-27 21:51:53 +02:00
* @ param id file - format - dependent stream ID
2007-03-03 13:23:20 +01:00
*/
2002-05-20 18:28:47 +02:00
AVStream * av_new_stream ( AVFormatContext * s , int id ) ;
2007-09-25 22:45:46 +02:00
AVProgram * av_new_program ( AVFormatContext * s , int id ) ;
2007-03-03 13:23:20 +01:00
2008-05-23 00:00:21 +02:00
/**
2010-06-30 17:38:06 +02:00
* Add a new chapter .
2008-05-23 00:00:21 +02:00
* This function is NOT part of the public API
2008-09-27 21:51:53 +02:00
* and should ONLY be used by demuxers .
2008-05-23 00:00:21 +02:00
*
* @ param s media file handle
2008-09-27 21:51:53 +02:00
* @ param id unique ID for this chapter
2008-05-23 20:15:13 +02:00
* @ param start chapter start time in time_base units
* @ param end chapter end time in time_base units
2008-05-23 00:00:21 +02:00
* @ param title chapter title
2008-05-23 15:14:11 +02:00
*
2008-09-27 21:51:53 +02:00
* @ return AVChapter or NULL on error
2008-05-23 00:00:21 +02:00
*/
2008-09-27 22:05:12 +02:00
AVChapter * ff_new_chapter ( AVFormatContext * s , int id , AVRational time_base ,
int64_t start , int64_t end , const char * title ) ;
2008-05-23 00:00:21 +02:00
2007-03-03 13:23:20 +01:00
/**
2010-06-30 17:38:06 +02:00
* Set the pts for a given stream .
2007-03-03 13:23:20 +01:00
*
* @ 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 )
*/
2004-05-21 22:43:21 +02:00
void av_set_pts_info ( AVStream * s , int pts_wrap_bits ,
2009-07-01 20:50:31 +02:00
unsigned int pts_num , unsigned int pts_den ) ;
2001-07-22 16:18:56 +02:00
2004-10-11 00:05:43 +02:00
# define AVSEEK_FLAG_BACKWARD 1 ///< seek backward
# define AVSEEK_FLAG_BYTE 2 ///< seeking based on position in bytes
2008-09-27 21:51:53 +02:00
# define AVSEEK_FLAG_ANY 4 ///< seek to any frame, even non-keyframes
2009-08-10 22:48:05 +02:00
# define AVSEEK_FLAG_FRAME 8 ///< seeking based on frame number
2004-10-11 00:05:43 +02:00
2004-01-13 23:02:49 +01:00
int av_find_default_stream_index ( AVFormatContext * s ) ;
2007-03-03 13:23:20 +01:00
/**
2010-06-30 17:38:06 +02:00
* Get the index for a specific timestamp .
2008-09-27 21:51:53 +02:00
* @ 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 > =
2007-03-03 13:23:20 +01:00
* if AVSEEK_FLAG_ANY seek to any frame , only keyframes otherwise
* @ return < 0 if no such timestamp could be found
*/
2004-11-23 19:23:56 +01:00
int av_index_search_timestamp ( AVStream * st , int64_t timestamp , int flags ) ;
2007-03-03 13:23:20 +01:00
2008-01-13 14:33:37 +01:00
/**
2010-06-30 17:38:06 +02:00
* Ensure the index uses less memory than the maximum specified in
2009-02-25 20:10:39 +01:00
* AVFormatContext . max_index_size by discarding entries if it grows
2008-01-13 14:33:37 +01:00
* 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 ) ;
2007-03-03 13:23:20 +01:00
/**
2010-06-30 17:38:06 +02:00
* Add an index entry into a sorted list . Update the entry if the list
2008-09-27 21:51:53 +02:00
* already contains it .
2007-03-03 13:23:20 +01:00
*
2008-09-27 21:51:53 +02:00
* @ param timestamp timestamp in the time base of the given stream
2007-03-03 13:23:20 +01:00
*/
2008-09-27 22:05:12 +02:00
int av_add_index_entry ( AVStream * st , int64_t pos , int64_t timestamp ,
int size , int distance , int flags ) ;
2007-03-03 13:23:20 +01:00
/**
2010-06-30 17:38:06 +02:00
* Perform a binary search using av_index_search_timestamp ( ) and
2010-07-19 16:58:37 +02:00
* AVInputFormat . read_timestamp ( ) .
2008-09-27 22:05:12 +02:00
* This is not supposed to be called directly by a user application ,
* but by demuxers .
2007-03-03 13:23:20 +01:00
* @ param target_ts target timestamp in the time base of the given stream
* @ param stream_index stream number
*/
2008-09-27 22:05:12 +02:00
int av_seek_frame_binary ( AVFormatContext * s , int stream_index ,
int64_t target_ts , int flags ) ;
2007-03-03 13:23:20 +01:00
/**
2010-06-30 17:38:06 +02:00
* Update cur_dts of all streams based on the given timestamp and AVStream .
2007-03-03 13:23:20 +01:00
*
2008-09-27 21:51:53 +02:00
* 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 ) .
2007-03-03 13:23:20 +01:00
* @ param timestamp new dts expressed in time_base of param ref_st
* @ param ref_st reference stream giving time_base of param timestamp
*/
2006-07-23 20:19:33 +02:00
void av_update_cur_dts ( AVFormatContext * s , AVStream * ref_st , int64_t timestamp ) ;
2007-03-03 13:23:20 +01:00
/**
2010-06-30 17:38:06 +02:00
* Perform a binary search using read_timestamp ( ) .
2008-09-27 22:05:12 +02:00
* This is not supposed to be called directly by a user application ,
* but by demuxers .
2007-03-03 13:23:20 +01:00
* @ param target_ts target timestamp in the time base of the given stream
* @ param stream_index stream number
*/
2008-09-27 22:05:12 +02:00
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 ) ) ;
2004-01-13 23:02:49 +01:00
2007-03-05 01:23:23 +01:00
/** media file output */
2003-01-11 05:56:29 +01:00
int av_set_parameters ( AVFormatContext * s , AVFormatParameters * ap ) ;
2007-03-03 13:23:20 +01:00
2010-06-27 16:16:46 +02:00
/**
* Split a URL string into components .
*
* The pointers to buffers for storing individual components may be null ,
* in order to ignore that component . Buffers for components not found are
* set to empty strings . If the port is not found , it is set to a negative
* value .
*
* @ param proto the buffer for the protocol
* @ param proto_size the size of the proto buffer
* @ param authorization the buffer for the authorization
* @ param authorization_size the size of the authorization buffer
* @ param hostname the buffer for the host name
* @ param hostname_size the size of the hostname buffer
* @ param port_ptr a pointer to store the port number in
* @ param path the buffer for the path
* @ param path_size the size of the path buffer
* @ param url the URL to split
*/
void av_url_split ( char * proto , int proto_size ,
char * authorization , int authorization_size ,
char * hostname , int hostname_size ,
int * port_ptr ,
char * path , int path_size ,
const char * url ) ;
2007-03-03 13:23:20 +01:00
/**
2010-06-30 17:38:06 +02:00
* Allocate the stream private data and write the stream header to an
2007-06-12 11:29:25 +02:00
* output media file .
2007-03-03 13:23:20 +01:00
*
* @ param s media file handle
2008-09-27 21:51:53 +02:00
* @ return 0 if OK , AVERROR_xxx on error
2007-03-03 13:23:20 +01:00
*/
2002-05-20 18:28:47 +02:00
int av_write_header ( AVFormatContext * s ) ;
2007-03-03 13:23:20 +01:00
/**
2010-06-30 17:38:06 +02:00
* Write a packet to an output media file .
2007-03-03 13:23:20 +01:00
*
* The packet shall contain one audio or video frame .
2008-09-27 22:05:12 +02:00
* The packet must be correctly interleaved according to the container
* specification , if not then av_interleaved_write_frame must be used .
2007-03-03 13:23:20 +01:00
*
* @ param s media file handle
2008-09-27 22:05:12 +02:00
* @ param pkt The packet , which contains the stream_index , buf / buf_size ,
dts / pts , . . .
2008-09-27 21:51:53 +02:00
* @ return < 0 on error , = 0 if OK , 1 if end of stream wanted
2007-03-03 13:23:20 +01:00
*/
2004-05-29 04:06:32 +02:00
int av_write_frame ( AVFormatContext * s , AVPacket * pkt ) ;
2007-03-03 13:23:20 +01:00
/**
2010-06-30 17:38:06 +02:00
* Write a packet to an output media file ensuring correct interleaving .
2007-03-03 13:23:20 +01:00
*
* The packet must contain one audio or video frame .
2009-02-25 20:10:39 +01:00
* If the packets are already correctly interleaved , the application should
2007-06-12 20:50:50 +02:00
* 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 .
2007-03-03 13:23:20 +01:00
*
* @ param s media file handle
2008-09-27 22:05:12 +02:00
* @ param pkt The packet , which contains the stream_index , buf / buf_size ,
dts / pts , . . .
2008-09-27 21:51:53 +02:00
* @ return < 0 on error , = 0 if OK , 1 if end of stream wanted
2007-03-03 13:23:20 +01:00
*/
2004-05-29 20:50:31 +02:00
int av_interleaved_write_frame ( AVFormatContext * s , AVPacket * pkt ) ;
2007-03-03 13:23:20 +01:00
/**
2010-06-30 17:38:06 +02:00
* Interleave a packet per dts in an output media file .
2007-03-03 13:23:20 +01:00
*
2008-09-27 22:05:12 +02:00
* Packets with pkt - > destruct = = av_destruct_packet will be freed inside this
2009-02-25 20:10:39 +01:00
* function , so they cannot be used after it . Note that calling av_free_packet ( )
2008-09-27 22:05:12 +02:00
* on them is still safe .
2007-03-03 13:23:20 +01:00
*
* @ param s media file handle
* @ param out the interleaved packet will be output here
2010-07-02 12:49:29 +02:00
* @ param pkt the input packet
2007-03-03 13:23:20 +01:00
* @ 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 ,
2008-03-22 02:06:57 +01:00
* < 0 if an error occurred
2007-03-03 13:23:20 +01:00
*/
2008-09-27 22:05:12 +02:00
int av_interleave_packet_per_dts ( AVFormatContext * s , AVPacket * out ,
AVPacket * pkt , int flush ) ;
2004-05-29 04:06:32 +02:00
2007-03-03 13:23:20 +01:00
/**
2010-06-30 17:38:06 +02:00
* Write the stream trailer to an output media file and free the
2009-06-28 23:05:46 +02:00
* file private data .
2007-03-03 13:23:20 +01:00
*
2008-09-03 19:57:56 +02:00
* May only be called after a successful call to av_write_header .
*
2007-03-03 13:23:20 +01:00
* @ param s media file handle
2008-09-27 21:51:53 +02:00
* @ return 0 if OK , AVERROR_xxx on error
2007-03-03 13:23:20 +01:00
*/
2002-05-20 18:28:47 +02:00
int av_write_trailer ( AVFormatContext * s ) ;
2001-07-22 16:18:56 +02:00
void dump_format ( AVFormatContext * ic ,
2005-12-17 19:14:38 +01:00
int index ,
2001-07-22 16:18:56 +02:00
const char * url ,
int is_output ) ;
2007-03-03 13:23:20 +01:00
2009-01-04 12:04:02 +01:00
# if LIBAVFORMAT_VERSION_MAJOR < 53
2007-03-03 13:23:20 +01:00
/**
2010-06-30 17:38:06 +02:00
* Parse width and height out of string str .
2007-06-12 10:06:54 +02:00
* @ deprecated Use av_parse_video_frame_size instead .
2007-03-03 13:23:20 +01:00
*/
2008-09-27 22:05:12 +02:00
attribute_deprecated int parse_image_size ( int * width_ptr , int * height_ptr ,
const char * str ) ;
2007-03-03 13:23:20 +01:00
/**
2010-06-30 17:38:06 +02:00
* Convert framerate from a string to a fraction .
2007-06-12 10:06:54 +02:00
* @ deprecated Use av_parse_video_frame_rate instead .
2007-03-03 13:23:20 +01:00
*/
2008-09-27 22:05:12 +02:00
attribute_deprecated int parse_frame_rate ( int * frame_rate , int * frame_rate_base ,
const char * arg ) ;
2009-01-04 12:04:02 +01:00
# endif
2007-03-03 13:23:20 +01:00
/**
2010-06-30 17:38:06 +02:00
* Parse datestr and return a corresponding number of microseconds .
2007-09-19 14:38:07 +02:00
* @ param datestr String representing a date or a duration .
* - If a date the syntax is :
2007-03-03 13:23:20 +01:00
* @ code
2010-06-23 00:54:32 +02:00
* now | { [ { YYYY - MM - DD | YYYYMMDD } [ T | t | ] ] { { HH [ : MM [ : SS [ . m . . . ] ] ] } | { HH [ MM [ SS [ . m . . . ] ] ] } } [ Z | z ] }
2007-03-03 13:23:20 +01:00
* @ endcode
2010-06-23 00:54:32 +02:00
* If the value is " now " it takes the current time .
2008-09-27 21:51:53 +02:00
* Time is local time unless Z is appended , in which case it is
2007-09-19 14:38:07 +02:00
* interpreted as UTC .
2008-09-27 21:51:53 +02:00
* If the year - month - day part is not specified it takes the current
2007-09-19 14:38:07 +02:00
* year - month - day .
2010-06-30 17:38:06 +02:00
* @ return the number of microseconds since 1 st of January , 1970 up to
2009-05-26 00:05:43 +02:00
* the time of the parsed date or INT64_MIN if datestr cannot be
2007-09-19 14:38:07 +02:00
* successfully parsed .
* - If a duration the syntax is :
* @ code
* [ - ] HH [ : MM [ : SS [ . m . . . ] ] ]
* [ - ] S + [ . m . . . ]
* @ endcode
2010-06-30 17:38:06 +02:00
* @ return the number of microseconds contained in a time interval
2009-05-26 00:05:43 +02:00
* with the specified duration or INT64_MIN if datestr cannot be
2007-12-01 13:05:59 +01:00
* successfully parsed .
2009-05-26 00:05:43 +02:00
* @ param duration Flag which tells how to interpret datestr , if
* not zero datestr is interpreted as a duration , otherwise as a
2007-09-19 14:38:07 +02:00
* date .
2007-03-03 13:23:20 +01:00
*/
2003-02-11 17:35:48 +01:00
int64_t parse_date ( const char * datestr , int duration ) ;
2001-07-22 16:18:56 +02:00
2010-06-30 17:38:06 +02:00
/** Get the current time in microseconds. */
2003-02-11 17:35:48 +01:00
int64_t av_gettime ( void ) ;
2002-07-25 18:01:46 +02:00
2008-09-27 21:51:53 +02:00
/* ffm-specific for ffserver */
2001-07-22 16:18:56 +02:00
# define FFM_PACKET_SIZE 4096
2008-10-03 12:16:29 +02:00
int64_t ffm_read_write_index ( int fd ) ;
2009-02-12 03:15:07 +01:00
int ffm_write_write_index ( int fd , int64_t pos ) ;
2008-10-03 12:16:29 +02:00
void ffm_set_write_index ( AVFormatContext * s , int64_t pos , int64_t file_size ) ;
2001-07-22 16:18:56 +02:00
2007-03-03 13:23:20 +01:00
/**
2010-06-30 17:38:06 +02:00
* Attempt to find a specific tag in a URL .
2007-03-03 13:23:20 +01:00
*
* syntax : ' ? tag1 = val1 & tag2 = val2 . . . ' . Little URL decoding is done .
* Return 1 if found .
*/
2001-07-22 16:18:56 +02:00
int find_info_tag ( char * arg , int arg_size , const char * tag1 , const char * info ) ;
2007-03-03 13:23:20 +01:00
/**
2010-06-30 17:38:06 +02:00
* Return in ' buf ' the path with ' % d ' replaced by a number .
2008-09-27 21:51:53 +02:00
*
2007-03-03 13:23:20 +01:00
* Also handles the ' % 0 nd ' 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
2007-11-15 12:45:07 +01:00
* @ param number frame number
2008-09-27 21:51:53 +02:00
* @ return 0 if OK , - 1 on format error
2007-03-03 13:23:20 +01:00
*/
2006-09-04 11:57:47 +02:00
int av_get_frame_filename ( char * buf , int buf_size ,
const char * path , int number ) ;
2007-03-03 13:23:20 +01:00
/**
2010-06-30 17:38:06 +02:00
* Check whether filename actually is a numbered sequence generator .
2007-03-03 13:23:20 +01:00
*
* @ param filename possible numbered sequence string
2008-09-27 21:51:53 +02:00
* @ return 1 if a valid numbered sequence string , 0 otherwise
2007-03-03 13:23:20 +01:00
*/
2006-09-04 11:57:47 +02:00
int av_filename_number_test ( const char * filename ) ;
2001-09-25 01:25:28 +02:00
2007-07-27 00:34:26 +02:00
/**
2010-06-30 17:38:06 +02:00
* Generate an SDP for an RTP session .
2007-07-27 00:34:26 +02:00
*
* @ 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 )
2008-09-27 21:51:53 +02:00
* must contain only one AVStream .
2007-08-05 15:44:56 +02:00
* @ param n_files number of AVCodecContexts contained in ac
* @ param buff buffer where the SDP will be stored ( must be allocated by
2008-09-27 21:51:53 +02:00
* the caller )
2007-08-05 15:44:56 +02:00
* @ param size the size of the buffer
2008-09-27 21:51:53 +02:00
* @ return 0 if OK , AVERROR_xxx on error
2007-07-27 00:34:26 +02:00
*/
2007-08-05 15:44:56 +02:00
int avf_sdp_create ( AVFormatContext * ac [ ] , int n_files , char * buff , int size ) ;
2007-07-27 00:34:26 +02:00
2010-03-31 21:03:03 +02:00
/**
2010-06-30 17:38:06 +02:00
* Return a positive value if the given filename has one of the given
2010-03-31 21:03:03 +02:00
* extensions , 0 otherwise .
*
* @ param extensions a comma - separated list of filename extensions
*/
int av_match_ext ( const char * filename , const char * extensions ) ;
2008-08-31 09:39:47 +02:00
# endif /* AVFORMAT_AVFORMAT_H */