1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2024-12-23 12:43:46 +02:00

changed av_open_input_file() prototype

Originally committed as revision 146 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
Fabrice Bellard 2001-09-24 23:25:28 +00:00
parent 4b44538ce6
commit 96baaa6aff
2 changed files with 43 additions and 28 deletions

View File

@ -180,7 +180,10 @@ int fifo_size(FifoBuffer *f, UINT8 *rptr);
int fifo_read(FifoBuffer *f, UINT8 *buf, int buf_size, UINT8 **rptr_ptr); 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); void fifo_write(FifoBuffer *f, UINT8 *buf, int size, UINT8 **wptr_ptr);
AVFormatContext *av_open_input_file(const char *filename, int buf_size); AVFormatContext *av_open_input_file(const char *filename,
const char *format_name,
int buf_size,
AVFormatParameters *ap);
int av_read_packet(AVFormatContext *s, AVPacket *pkt); int av_read_packet(AVFormatContext *s, AVPacket *pkt);
void av_close_input_file(AVFormatContext *s); void av_close_input_file(AVFormatContext *s);
@ -204,3 +207,10 @@ int find_info_tag(char *arg, int arg_size, const char *tag1, const char *info);
int get_frame_filename(char *buf, int buf_size, int get_frame_filename(char *buf, int buf_size,
const char *path, int number); const char *path, int number);
/* grab/output specific */
extern AVFormat video_grab_device_format;
extern AVFormat audio_device_format;
extern const char *v4l_device;
extern const char *audio_device;

View File

@ -161,13 +161,14 @@ void register_all(void)
register_avformat(&pgmpipe_format); register_avformat(&pgmpipe_format);
register_avformat(&pgmyuvpipe_format); register_avformat(&pgmyuvpipe_format);
register_avformat(&ppmpipe_format); register_avformat(&ppmpipe_format);
#ifdef CONFIG_GRAB
register_avformat(&video_grab_device_format);
register_avformat(&audio_device_format);
#endif
/* file protocols */
register_protocol(&file_protocol); register_protocol(&file_protocol);
register_protocol(&pipe_protocol); register_protocol(&pipe_protocol);
#ifdef CONFIG_GRAB
register_protocol(&audio_protocol);
register_protocol(&video_protocol);
#endif
#ifndef CONFIG_WIN32 #ifndef CONFIG_WIN32
register_protocol(&udp_protocol); register_protocol(&udp_protocol);
register_protocol(&http_protocol); register_protocol(&http_protocol);
@ -274,49 +275,51 @@ void fifo_write(FifoBuffer *f, UINT8 *buf, int size, UINT8 **wptr_ptr)
*wptr_ptr = wptr; *wptr_ptr = wptr;
} }
/* media file handling */ /* media file handling.
'filename' is the filename to open.
'format_name' is used to force the file format (NULL if auto guess).
'buf_size' is the optional buffer size (zero if default is OK).
'ap' are additionnal parameters needed when opening the file (NULL if default).
*/
AVFormatContext *av_open_input_file(const char *filename, int buf_size) AVFormatContext *av_open_input_file(const char *filename,
const char *format_name,
int buf_size,
AVFormatParameters *ap)
{ {
AVFormatParameters params, *ap;
AVFormat *fmt; AVFormat *fmt;
AVFormatContext *ic = NULL; AVFormatContext *ic = NULL;
URLFormat url_format;
int err; int err;
ic = av_mallocz(sizeof(AVFormatContext)); ic = av_mallocz(sizeof(AVFormatContext));
if (!ic) if (!ic)
goto fail; goto fail;
if (url_fopen(&ic->pb, filename, URL_RDONLY) < 0)
goto fail;
if (buf_size > 0) {
url_setbufsize(&ic->pb, buf_size);
}
/* find format */ /* find format */
err = url_getformat(url_fileno(&ic->pb), &url_format); if (format_name != NULL) {
if (err >= 0) { fmt = guess_format(format_name, NULL, NULL);
fmt = guess_format(url_format.format_name, NULL, NULL);
ap = &params;
ap->sample_rate = url_format.sample_rate;
ap->frame_rate = url_format.frame_rate;
ap->channels = url_format.channels;
ap->width = url_format.width;
ap->height = url_format.height;
ap->pix_fmt = url_format.pix_fmt;
} else { } else {
fmt = guess_format(NULL, filename, NULL); fmt = guess_format(NULL, filename, NULL);
ap = NULL;
} }
if (!fmt || !fmt->read_header) { if (!fmt || !fmt->read_header) {
return NULL; return NULL;
} }
ic->format = fmt; ic->format = fmt;
/* if no file needed do not try to open one */
if (!(fmt->flags & AVFMT_NOFILE)) {
if (url_fopen(&ic->pb, filename, URL_RDONLY) < 0)
goto fail;
if (buf_size > 0) {
url_setbufsize(&ic->pb, buf_size);
}
}
err = ic->format->read_header(ic, ap); err = ic->format->read_header(ic, ap);
if (err < 0) { if (err < 0) {
url_fclose(&ic->pb); if (!(fmt->flags & AVFMT_NOFILE)) {
url_fclose(&ic->pb);
}
goto fail; goto fail;
} }
@ -364,7 +367,9 @@ void av_close_input_file(AVFormatContext *s)
} }
s->packet_buffer = NULL; s->packet_buffer = NULL;
} }
url_fclose(&s->pb); if (!(s->format->flags & AVFMT_NOFILE)) {
url_fclose(&s->pb);
}
free(s); free(s);
} }