Commit | Line | Data |
---|---|---|
de6d9b64 FB |
1 | |
2 | #include "avcodec.h" | |
3 | ||
de6d9b64 FB |
4 | #include "avio.h" |
5 | ||
6 | /* packet functions */ | |
7 | ||
8 | typedef struct AVPacket { | |
9 | INT64 pts; | |
10 | UINT8 *data; | |
11 | int size; | |
12 | int stream_index; | |
13 | int flags; | |
14 | #define PKT_FLAG_KEY 0x0001 | |
15 | } AVPacket; | |
16 | ||
17 | int av_new_packet(AVPacket *pkt, int size); | |
18 | void av_free_packet(AVPacket *pkt); | |
19 | ||
20 | /*************************************************/ | |
21 | /* output formats */ | |
22 | ||
23 | struct AVFormatContext; | |
24 | struct AVFormatInputContext; | |
25 | ||
26 | typedef struct AVFormatParameters { | |
27 | int frame_rate; | |
28 | int sample_rate; | |
29 | int channels; | |
30 | int width; | |
31 | int height; | |
32 | int pix_fmt; | |
33 | } AVFormatParameters; | |
34 | ||
35 | typedef struct AVFormat { | |
36 | const char *name; | |
37 | const char *long_name; | |
38 | const char *mime_type; | |
39 | const char *extensions; /* comma separated extensions */ | |
40 | ||
41 | /* output support */ | |
42 | enum CodecID audio_codec; /* default audio codec */ | |
43 | enum CodecID video_codec; /* default video codec */ | |
44 | int (*write_header)(struct AVFormatContext *); | |
45 | int (*write_packet)(struct AVFormatContext *, | |
46 | int stream_index, | |
47 | unsigned char *buf, int size); | |
48 | int (*write_trailer)(struct AVFormatContext *); | |
49 | ||
50 | /* optional input support */ | |
51 | /* read the format header and initialize the AVFormatInputContext | |
52 | structure. Return 0 if OK. 'ap' if non NULL contains | |
53 | additionnal paramters. Only used in raw format right now */ | |
54 | int (*read_header)(struct AVFormatContext *, | |
55 | AVFormatParameters *ap); | |
56 | /* read one packet and put it in 'pkt'. pts and flags are also set */ | |
57 | int (*read_packet)(struct AVFormatContext *, AVPacket *pkt); | |
58 | /* close the stream. The AVFormatContext and AVStreams are not | |
59 | freed by this function */ | |
60 | int (*read_close)(struct AVFormatContext *); | |
61 | /* seek at or before a given pts (given in microsecond). The pts | |
62 | origin is defined by the stream */ | |
63 | int (*read_seek)(struct AVFormatContext *, INT64 pts); | |
64 | int flags; | |
813cae4b FB |
65 | #define AVFMT_NOFILE 0x0001 /* no file should be opened */ |
66 | #define AVFMT_NEEDNUMBER 0x0002 /* needs '%d' in filename */ | |
de6d9b64 FB |
67 | struct AVFormat *next; |
68 | } AVFormat; | |
69 | ||
70 | typedef struct AVStream { | |
71 | int id; /* internal stream id */ | |
72 | AVCodecContext codec; /* codec context */ | |
73 | void *priv_data; | |
74 | } AVStream; | |
75 | ||
76 | #define MAX_STREAMS 20 | |
77 | ||
78 | /* format I/O context */ | |
79 | typedef struct AVFormatContext { | |
80 | struct AVFormat *format; | |
81 | void *priv_data; | |
82 | ByteIOContext pb; | |
83 | int nb_streams; | |
84 | AVStream *streams[MAX_STREAMS]; | |
85 | char filename[1024]; /* input or output filename */ | |
86 | /* stream info */ | |
87 | char title[512]; | |
88 | char author[512]; | |
89 | char copyright[512]; | |
90 | char comment[512]; | |
91 | /* This buffer is only needed when packets were already buffered but | |
92 | not decoded, for example to get the codec parameters in mpeg | |
93 | streams */ | |
94 | struct AVPacketList *packet_buffer; | |
95 | } AVFormatContext; | |
96 | ||
97 | typedef struct AVPacketList { | |
98 | AVPacket pkt; | |
99 | struct AVPacketList *next; | |
100 | } AVPacketList; | |
101 | ||
102 | extern AVFormat *first_format; | |
103 | ||
104 | /* rv10enc.c */ | |
105 | extern AVFormat rm_format; | |
106 | ||
107 | /* mpegmux.c */ | |
108 | extern AVFormat mpeg_mux_format; | |
109 | ||
110 | /* asfenc.c */ | |
111 | extern AVFormat asf_format; | |
112 | ||
113 | /* avienc.c */ | |
114 | extern AVFormat avi_format; | |
115 | ||
116 | /* jpegenc.c */ | |
117 | extern AVFormat mpjpeg_format; | |
118 | extern AVFormat jpeg_format; | |
eea23282 | 119 | extern AVFormat single_jpeg_format; |
de6d9b64 FB |
120 | |
121 | /* swfenc.c */ | |
122 | extern AVFormat swf_format; | |
123 | ||
124 | /* wav.c */ | |
125 | extern AVFormat wav_format; | |
126 | ||
127 | /* img.c */ | |
128 | extern AVFormat pgm_format; | |
6775c758 | 129 | extern AVFormat ppm_format; |
de6d9b64 FB |
130 | extern AVFormat pgmyuv_format; |
131 | extern AVFormat imgyuv_format; | |
6775c758 | 132 | |
de6d9b64 | 133 | extern AVFormat pgmpipe_format; |
6775c758 FB |
134 | extern AVFormat pgmyuvpipe_format; |
135 | extern AVFormat ppmpipe_format; | |
de6d9b64 FB |
136 | |
137 | /* raw.c */ | |
138 | extern AVFormat mp2_format; | |
139 | extern AVFormat ac3_format; | |
140 | extern AVFormat h263_format; | |
141 | extern AVFormat mpeg1video_format; | |
eea23282 | 142 | extern AVFormat mjpeg_format; |
de6d9b64 FB |
143 | extern AVFormat pcm_format; |
144 | extern AVFormat rawvideo_format; | |
145 | ||
146 | /* ffm.c */ | |
147 | extern AVFormat ffm_format; | |
148 | ||
149 | /* formats.c */ | |
150 | ||
151 | #define MKTAG(a,b,c,d) (a | (b << 8) | (c << 16) | (d << 24)) | |
152 | #define MKBETAG(a,b,c,d) (d | (c << 8) | (b << 16) | (a << 24)) | |
153 | ||
154 | void register_avformat(AVFormat *format); | |
155 | AVFormat *guess_format(const char *short_name, const char *filename, const char *mime_type); | |
156 | ||
157 | int strstart(const char *str, const char *val, const char **ptr); | |
158 | void nstrcpy(char *buf, int buf_size, const char *str); | |
159 | int match_ext(const char *filename, const char *extensions); | |
160 | ||
161 | void register_all(void); | |
162 | ||
163 | INT64 gettime(void); | |
164 | ||
165 | typedef struct FifoBuffer { | |
166 | UINT8 *buffer; | |
167 | UINT8 *rptr, *wptr, *end; | |
168 | } FifoBuffer; | |
169 | ||
170 | int fifo_init(FifoBuffer *f, int size); | |
171 | void fifo_free(FifoBuffer *f); | |
172 | int fifo_size(FifoBuffer *f, UINT8 *rptr); | |
173 | int fifo_read(FifoBuffer *f, UINT8 *buf, int buf_size, UINT8 **rptr_ptr); | |
174 | void fifo_write(FifoBuffer *f, UINT8 *buf, int size, UINT8 **wptr_ptr); | |
175 | ||
176 | AVFormatContext *av_open_input_file(const char *filename, int buf_size); | |
177 | int av_read_packet(AVFormatContext *s, AVPacket *pkt); | |
178 | void av_close_input_file(AVFormatContext *s); | |
179 | ||
180 | int av_write_packet(AVFormatContext *s, AVPacket *pkt); | |
181 | ||
182 | void dump_format(AVFormatContext *ic, | |
183 | int index, | |
184 | const char *url, | |
185 | int is_output); | |
186 | int parse_image_size(int *width_ptr, int *height_ptr, const char *str); | |
187 | INT64 gettime(void); | |
188 | INT64 parse_date(const char *datestr, int duration); | |
189 | ||
190 | /* ffm specific for ffserver */ | |
191 | #define FFM_PACKET_SIZE 4096 | |
192 | offset_t ffm_read_write_index(int fd); | |
193 | void ffm_write_write_index(int fd, offset_t pos); | |
194 | void ffm_set_write_index(AVFormatContext *s, offset_t pos, offset_t file_size); | |
195 | ||
196 | int find_info_tag(char *arg, int arg_size, const char *tag1, const char *info); | |
197 | ||
813cae4b FB |
198 | int get_frame_filename(char *buf, int buf_size, |
199 | const char *path, int number); |