diff options
author | František Dvořák <valtri@users.sourceforge.net> | 2005-11-21 10:28:18 +0000 |
---|---|---|
committer | František Dvořák <valtri@users.sourceforge.net> | 2005-11-21 10:28:18 +0000 |
commit | 975188759796608792330daa267a053d9ee92a26 (patch) | |
tree | da08ca5bea6f08ecad851ec03add3454cbc9c722 | |
parent | 875d3ec29a852da4619421f838ba25dd86073007 (diff) | |
download | xine-lib-975188759796608792330daa267a053d9ee92a26.tar.gz xine-lib-975188759796608792330daa267a053d9ee92a26.tar.bz2 |
Fixed IDCIN demuxer (it can't never work :->) - sending Mr. Huffman morbidly by pieces now.
CVS patchset: 7806
CVS date: 2005/11/21 10:28:18
-rw-r--r-- | src/demuxers/demux_idcin.c | 33 |
1 files changed, 24 insertions, 9 deletions
diff --git a/src/demuxers/demux_idcin.c b/src/demuxers/demux_idcin.c index f9412d6b0..a778d4c6f 100644 --- a/src/demuxers/demux_idcin.c +++ b/src/demuxers/demux_idcin.c @@ -65,7 +65,7 @@ * - if any bytes exceed 63, do not shift the bytes at all before * transmitting them to the video decoder * - * $Id: demux_idcin.c,v 1.52 2004/06/13 21:28:53 miguelfreitas Exp $ + * $Id: demux_idcin.c,v 1.53 2005/11/21 10:28:18 valtri Exp $ */ #ifdef HAVE_CONFIG_H @@ -359,6 +359,7 @@ static void demux_idcin_send_headers(demux_plugin_t *this_gen) { demux_idcin_t *this = (demux_idcin_t *) this_gen; buf_element_t *buf; xine_bmiheader *bih = (xine_bmiheader *)this->bih; + uint32_t i, size; this->video_fifo = this->stream->video_fifo; this->audio_fifo = this->stream->audio_fifo; @@ -370,14 +371,28 @@ static void demux_idcin_send_headers(demux_plugin_t *this_gen) { /* send init info to decoders */ bih->biSize = sizeof(xine_bmiheader) + HUFFMAN_TABLE_SIZE; - buf = this->video_fifo->buffer_pool_alloc (this->video_fifo); - buf->decoder_flags = BUF_FLAG_HEADER|BUF_FLAG_STDHEADER|BUF_FLAG_FRAMERATE| - BUF_FLAG_FRAME_END; - buf->decoder_info[0] = IDCIN_FRAME_PTS_INC; /* initial video_step */ - buf->size = bih->biSize; - memcpy(buf->content, this->bih, buf->size); - buf->type = BUF_VIDEO_IDCIN; - this->video_fifo->put (this->video_fifo, buf); + size = bih->biSize; + + i = 0; + do { + buf = this->video_fifo->buffer_pool_alloc (this->video_fifo); + buf->decoder_info[0] = IDCIN_FRAME_PTS_INC; /* initial video_step */ + if (size > buf->max_size) { + buf->size = buf->max_size; + buf->decoder_flags = BUF_FLAG_HEADER|BUF_FLAG_STDHEADER| + BUF_FLAG_FRAMERATE; + } else { + buf->size = size; + buf->decoder_flags = BUF_FLAG_HEADER|BUF_FLAG_STDHEADER| + BUF_FLAG_FRAMERATE|BUF_FLAG_FRAME_END; + } + memcpy(buf->content, this->bih + i, buf->size); + buf->type = BUF_VIDEO_IDCIN; + this->video_fifo->put (this->video_fifo, buf); + + size -= buf->size; + i += buf->size; + } while (size); if (this->audio_fifo && this->wave.nChannels) { |