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:
parent
4b44538ce6
commit
96baaa6aff
@ -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;
|
||||||
|
@ -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 = ¶ms;
|
|
||||||
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user