summaryrefslogtreecommitdiffstats
path: root/libmpdemux
diff options
context:
space:
mode:
authorreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2007-12-22 16:22:54 +0000
committerreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2007-12-22 16:22:54 +0000
commitde4908b64450c5a48abe75a787082b23fda9b3dc (patch)
tree51c3d85f8276a8acefd850fa0ca7e94b810adeee /libmpdemux
parent2b9c02cca048017ec27ebacb90b43793d8eb4709 (diff)
downloadmpv-de4908b64450c5a48abe75a787082b23fda9b3dc.tar.bz2
mpv-de4908b64450c5a48abe75a787082b23fda9b3dc.tar.xz
Get rid of URLProtocol mess (especially problematic since it made use
of a non-constant global variable) and use ByteIOContext directly. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@25499 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpdemux')
-rw-r--r--libmpdemux/demux_lavf.c46
1 files changed, 12 insertions, 34 deletions
diff --git a/libmpdemux/demux_lavf.c b/libmpdemux/demux_lavf.c
index f7f1d856c0..77ed2ff703 100644
--- a/libmpdemux/demux_lavf.c
+++ b/libmpdemux/demux_lavf.c
@@ -60,11 +60,13 @@ const m_option_t lavfdopts_conf[] = {
{NULL, NULL, 0, 0, 0, 0, NULL}
};
+#define BIO_BUFFER_SIZE 32768
typedef struct lavf_priv_t{
AVInputFormat *avif;
AVFormatContext *avfc;
ByteIOContext *pb;
+ uint8_t buffer[BIO_BUFFER_SIZE];
int audio_streams;
int video_streams;
int sub_streams;
@@ -126,30 +128,21 @@ static const AVCodecTag mp_bmp_tags[] = {
const struct AVCodecTag *mp_bmp_taglists[] = {codec_bmp_tags, mp_bmp_tags, 0};
-static int mp_open(URLContext *h, const char *filename, int flags){
- return 0;
-}
-
-static int mp_read(URLContext *h, unsigned char *buf, int size){
- stream_t *stream = (stream_t*)h->priv_data;
+static int mp_read(void *opaque, uint8_t *buf, int size) {
+ stream_t *stream = opaque;
int ret;
if(stream_eof(stream)) //needed?
return -1;
ret=stream_read(stream, buf, size);
- mp_msg(MSGT_HEADER,MSGL_DBG2,"%d=mp_read(%p, %p, %d), eof:%d\n", ret, h, buf, size, stream->eof);
+ mp_msg(MSGT_HEADER,MSGL_DBG2,"%d=mp_read(%p, %p, %d), eof:%d\n", ret, stream, buf, size, stream->eof);
return ret;
}
-static int mp_write(URLContext *h, unsigned char *buf, int size){
- return -1;
-}
-
-static offset_t mp_seek(URLContext *h, offset_t pos, int whence){
- stream_t *stream = (stream_t*)h->priv_data;
-
- mp_msg(MSGT_HEADER,MSGL_DBG2,"mp_seek(%p, %d, %d)\n", h, (int)pos, whence);
+static offset_t mp_seek(void *opaque, offset_t pos, int whence) {
+ stream_t *stream = opaque;
+ mp_msg(MSGT_HEADER,MSGL_DBG2,"mp_seek(%p, %d, %d)\n", stream, (int)pos, whence);
if(whence == SEEK_CUR)
pos +=stream_tell(stream);
else if(whence == SEEK_END && stream->end_pos > 0)
@@ -171,19 +164,6 @@ static offset_t mp_seek(URLContext *h, offset_t pos, int whence){
return pos - stream->start_pos;
}
-static int mp_close(URLContext *h){
- return 0;
-}
-
-static URLProtocol mp_protocol = {
- "mp",
- mp_open,
- mp_read,
- mp_write,
- mp_seek,
- mp_close,
-};
-
static void list_formats(void) {
AVInputFormat *fmt;
mp_msg(MSGT_DEMUX, MSGL_INFO, "Available lavf input formats:\n");
@@ -443,8 +423,6 @@ static demuxer_t* demux_open_lavf(demuxer_t *demuxer){
stream_seek(demuxer->stream, 0);
- register_protocol(&mp_protocol);
-
avfc = av_alloc_format_context();
if (opt_cryptokey)
@@ -469,10 +447,9 @@ static demuxer_t* demux_open_lavf(demuxer_t *demuxer){
else
strncpy(mp_filename + 3, "foobar.dummy", sizeof(mp_filename)-3);
- url_fopen(&priv->pb, mp_filename, URL_RDONLY);
+ priv->pb = alloc_put_byte(priv->buffer, BIO_BUFFER_SIZE, 0,
+ demuxer->stream, mp_read, NULL, mp_seek);
- ((URLContext*)(priv->pb->opaque))->priv_data= demuxer->stream;
-
if(av_open_input_stream(&avfc, priv->pb, mp_filename, priv->avif, &ap)<0){
mp_msg(MSGT_HEADER,MSGL_ERR,"LAVF_header: av_open_input_stream() failed\n");
return NULL;
@@ -787,8 +764,9 @@ static void demux_close_lavf(demuxer_t *demuxer)
if(priv->avfc)
{
av_freep(&priv->avfc->key);
- av_close_input_file(priv->avfc); priv->avfc= NULL;
+ av_close_input_stream(priv->avfc);
}
+ av_freep(&priv->pb);
free(priv); demuxer->priv= NULL;
}
}