diff options
author | Fabrice Bellard <fabrice@bellard.org> | 2001-07-22 14:18:56 +0000 |
---|---|---|
committer | Fabrice Bellard <fabrice@bellard.org> | 2001-07-22 14:18:56 +0000 |
commit | de6d9b6404bfd1c589799142da5a95428f146edd (patch) | |
tree | 75ae0cbb74bdfafb6f1a40922db111a103db3bcf /libav/avformat.h | |
parent | 1b58d58ddaf8a8c766a0353885ff504babed0453 (diff) | |
download | ffmpeg-de6d9b6404bfd1c589799142da5a95428f146edd.tar.gz |
Initial revision
Originally committed as revision 5 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libav/avformat.h')
-rw-r--r-- | libav/avformat.h | 192 |
1 files changed, 192 insertions, 0 deletions
diff --git a/libav/avformat.h b/libav/avformat.h new file mode 100644 index 0000000000..44e9da2a55 --- /dev/null +++ b/libav/avformat.h @@ -0,0 +1,192 @@ + +#include "avcodec.h" + +#define FFMPEG_VERSION "0.4.5" + +#include "avio.h" + +/* packet functions */ + +typedef struct AVPacket { + INT64 pts; + UINT8 *data; + int size; + int stream_index; + int flags; +#define PKT_FLAG_KEY 0x0001 +} AVPacket; + +int av_new_packet(AVPacket *pkt, int size); +void av_free_packet(AVPacket *pkt); + +/*************************************************/ +/* output formats */ + +struct AVFormatContext; +struct AVFormatInputContext; + +typedef struct AVFormatParameters { + int frame_rate; + int sample_rate; + int channels; + int width; + int height; + int pix_fmt; +} AVFormatParameters; + +typedef struct AVFormat { + const char *name; + const char *long_name; + const char *mime_type; + const char *extensions; /* comma separated extensions */ + + /* output support */ + enum CodecID audio_codec; /* default audio codec */ + enum CodecID video_codec; /* default video codec */ + int (*write_header)(struct AVFormatContext *); + int (*write_packet)(struct AVFormatContext *, + int stream_index, + unsigned char *buf, int size); + int (*write_trailer)(struct AVFormatContext *); + + /* optional input support */ + /* read the format header and initialize the AVFormatInputContext + structure. Return 0 if OK. 'ap' if non NULL contains + additionnal paramters. Only used in raw format right now */ + int (*read_header)(struct AVFormatContext *, + AVFormatParameters *ap); + /* read one packet and put it in 'pkt'. pts and flags are also set */ + int (*read_packet)(struct AVFormatContext *, AVPacket *pkt); + /* close the stream. The AVFormatContext and AVStreams are not + freed by this function */ + int (*read_close)(struct AVFormatContext *); + /* seek at or before a given pts (given in microsecond). The pts + origin is defined by the stream */ + int (*read_seek)(struct AVFormatContext *, INT64 pts); + int flags; +#define AVFMT_NOFILE 0x0001 /* no file should be opened */ + struct AVFormat *next; +} AVFormat; + +typedef struct AVStream { + int id; /* internal stream id */ + AVCodecContext codec; /* codec context */ + void *priv_data; +} AVStream; + +#define MAX_STREAMS 20 + +/* format I/O context */ +typedef struct AVFormatContext { + struct AVFormat *format; + void *priv_data; + ByteIOContext pb; + int nb_streams; + AVStream *streams[MAX_STREAMS]; + char filename[1024]; /* input or output filename */ + /* stream info */ + char title[512]; + char author[512]; + char copyright[512]; + char comment[512]; + /* This buffer is only needed when packets were already buffered but + not decoded, for example to get the codec parameters in mpeg + streams */ + struct AVPacketList *packet_buffer; +} AVFormatContext; + +typedef struct AVPacketList { + AVPacket pkt; + struct AVPacketList *next; +} AVPacketList; + +extern AVFormat *first_format; + +/* rv10enc.c */ +extern AVFormat rm_format; + +/* mpegmux.c */ +extern AVFormat mpeg_mux_format; + +/* asfenc.c */ +extern AVFormat asf_format; + +/* avienc.c */ +extern AVFormat avi_format; + +/* jpegenc.c */ +extern AVFormat mpjpeg_format; +extern AVFormat jpeg_format; + +/* swfenc.c */ +extern AVFormat swf_format; + +/* wav.c */ +extern AVFormat wav_format; + +/* img.c */ +extern AVFormat pgm_format; +extern AVFormat pgmyuv_format; +extern AVFormat imgyuv_format; +extern AVFormat pgmpipe_format; + +/* raw.c */ +extern AVFormat mp2_format; +extern AVFormat ac3_format; +extern AVFormat h263_format; +extern AVFormat mpeg1video_format; +extern AVFormat pcm_format; +extern AVFormat rawvideo_format; + +/* ffm.c */ +extern AVFormat ffm_format; + +/* formats.c */ + +#define MKTAG(a,b,c,d) (a | (b << 8) | (c << 16) | (d << 24)) +#define MKBETAG(a,b,c,d) (d | (c << 8) | (b << 16) | (a << 24)) + +void register_avformat(AVFormat *format); +AVFormat *guess_format(const char *short_name, const char *filename, const char *mime_type); + +int strstart(const char *str, const char *val, const char **ptr); +void nstrcpy(char *buf, int buf_size, const char *str); +int match_ext(const char *filename, const char *extensions); + +void register_all(void); + +INT64 gettime(void); + +typedef struct FifoBuffer { + UINT8 *buffer; + UINT8 *rptr, *wptr, *end; +} FifoBuffer; + +int fifo_init(FifoBuffer *f, int size); +void fifo_free(FifoBuffer *f); +int fifo_size(FifoBuffer *f, UINT8 *rptr); +int fifo_read(FifoBuffer *f, UINT8 *buf, int buf_size, UINT8 **rptr_ptr); +void fifo_write(FifoBuffer *f, UINT8 *buf, int size, UINT8 **wptr_ptr); + +AVFormatContext *av_open_input_file(const char *filename, int buf_size); +int av_read_packet(AVFormatContext *s, AVPacket *pkt); +void av_close_input_file(AVFormatContext *s); + +int av_write_packet(AVFormatContext *s, AVPacket *pkt); + +void dump_format(AVFormatContext *ic, + int index, + const char *url, + int is_output); +int parse_image_size(int *width_ptr, int *height_ptr, const char *str); +INT64 gettime(void); +INT64 parse_date(const char *datestr, int duration); + +/* ffm specific for ffserver */ +#define FFM_PACKET_SIZE 4096 +offset_t ffm_read_write_index(int fd); +void ffm_write_write_index(int fd, offset_t pos); +void ffm_set_write_index(AVFormatContext *s, offset_t pos, offset_t file_size); + +int find_info_tag(char *arg, int arg_size, const char *tag1, const char *info); + |