use av_open_input_stream

Originally committed as revision 13871 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
Baptiste Coudurier 2008-06-22 02:31:57 +00:00
parent 381ec67749
commit f2972c8c82
1 changed files with 12 additions and 21 deletions

View File

@ -2482,41 +2482,32 @@ static int http_receive_data(HTTPContext *c)
} }
} else { } else {
/* We have a header in our hands that contains useful data */ /* We have a header in our hands that contains useful data */
AVFormatContext s; AVFormatContext *s = NULL;
ByteIOContext *pb;
AVInputFormat *fmt_in; AVInputFormat *fmt_in;
int i; int i;
memset(&s, 0, sizeof(s)); url_open_buf(&pb, c->buffer, c->buffer_end - c->buffer, URL_RDONLY);
pb->is_streamed = 1;
url_open_buf(&s.pb, c->buffer, c->buffer_end - c->buffer, URL_RDONLY);
s.pb->is_streamed = 1;
/* use feed output format name to find corresponding input format */ /* use feed output format name to find corresponding input format */
fmt_in = av_find_input_format(feed->fmt->name); fmt_in = av_find_input_format(feed->fmt->name);
if (!fmt_in) if (!fmt_in)
goto fail; goto fail;
if (fmt_in->priv_data_size > 0) { av_open_input_stream(&s, pb, c->stream->feed_filename, fmt_in, NULL);
s.priv_data = av_mallocz(fmt_in->priv_data_size);
if (!s.priv_data)
goto fail;
} else
s.priv_data = NULL;
if (fmt_in->read_header(&s, 0) < 0) {
av_freep(&s.priv_data);
goto fail;
}
/* Now we have the actual streams */ /* Now we have the actual streams */
if (s.nb_streams != feed->nb_streams) { if (s->nb_streams != feed->nb_streams) {
av_freep(&s.priv_data); av_close_input_stream(s);
goto fail; goto fail;
} }
for (i = 0; i < s.nb_streams; i++)
for (i = 0; i < s->nb_streams; i++)
memcpy(feed->streams[i]->codec, memcpy(feed->streams[i]->codec,
s.streams[i]->codec, sizeof(AVCodecContext)); s->streams[i]->codec, sizeof(AVCodecContext));
av_freep(&s.priv_data);
av_close_input_stream(s);
} }
c->buffer_ptr = c->buffer; c->buffer_ptr = c->buffer;
} }