diff options
author | Miguel Freitas <miguelfreitas@users.sourceforge.net> | 2003-08-10 16:03:21 +0000 |
---|---|---|
committer | Miguel Freitas <miguelfreitas@users.sourceforge.net> | 2003-08-10 16:03:21 +0000 |
commit | 5565e0dd6dfbd1a160ecbdd2c84af0dc5d279d93 (patch) | |
tree | 9a24163ad7b1394313a726c02542e5394318d320 /src/demuxers/demux_elem.c | |
parent | c916741b33565418c8c574cf5b6f0139af46061b (diff) | |
download | xine-lib-5565e0dd6dfbd1a160ecbdd2c84af0dc5d279d93.tar.gz xine-lib-5565e0dd6dfbd1a160ecbdd2c84af0dc5d279d93.tar.bz2 |
apply Frantisek patches to handle end of streams better
CVS patchset: 5267
CVS date: 2003/08/10 16:03:21
Diffstat (limited to 'src/demuxers/demux_elem.c')
-rw-r--r-- | src/demuxers/demux_elem.c | 25 |
1 files changed, 12 insertions, 13 deletions
diff --git a/src/demuxers/demux_elem.c b/src/demuxers/demux_elem.c index d324f4d61..9100ebdc6 100644 --- a/src/demuxers/demux_elem.c +++ b/src/demuxers/demux_elem.c @@ -19,7 +19,7 @@ */ /* - * $Id: demux_elem.c,v 1.74 2003/07/25 21:02:05 miguelfreitas Exp $ + * $Id: demux_elem.c,v 1.75 2003/08/10 16:03:21 miguelfreitas Exp $ * * demultiplexer for elementary mpeg streams */ @@ -55,7 +55,7 @@ typedef struct { input_plugin_t *input; int status; - int blocksize; + uint32_t blocksize; } demux_mpeg_elem_t ; typedef struct { @@ -64,22 +64,23 @@ typedef struct { static int demux_mpeg_elem_next (demux_mpeg_elem_t *this, int preview_mode) { buf_element_t *buf; + uint32_t blocksize; + off_t done; lprintf ("next piece\n"); - buf = this->input->read_block(this->input, this->video_fifo, this->blocksize); + buf = this->video_fifo->buffer_pool_alloc(this->video_fifo); + blocksize = (this->blocksize ? this->blocksize : buf->max_size); + done = this->input->read(this->input, buf->mem, blocksize); + lprintf ("read size = %lld\n", done); - if (!buf) { - this->status = DEMUX_FINISHED; - return 0; - } - - lprintf ("size = %d\n", buf->size); - if (buf->size <= 0) { + if (done <= 0) { buf->free_buffer (buf); this->status = DEMUX_FINISHED; return 0; } + buf->size = done; + buf->content = buf->mem; buf->pts = 0; buf->extra_info->input_pos = this->input->get_current_pos(this->input); buf->type = BUF_VIDEO_MPEG; @@ -89,7 +90,7 @@ static int demux_mpeg_elem_next (demux_mpeg_elem_t *this, int preview_mode) { this->video_fifo->put(this->video_fifo, buf); - return (buf->size > 0); + return 1; } static int demux_mpeg_elem_send_chunk (demux_plugin_t *this_gen) { @@ -114,8 +115,6 @@ static void demux_mpeg_elem_send_headers (demux_plugin_t *this_gen) { this->audio_fifo = this->stream->audio_fifo; this->blocksize = this->input->get_blocksize(this->input); - if (!this->blocksize) - this->blocksize = 2048; xine_demux_control_start(this->stream); |