summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrantišek Dvořák <valtri@users.sourceforge.net>2005-11-21 10:28:18 +0000
committerFrantišek Dvořák <valtri@users.sourceforge.net>2005-11-21 10:28:18 +0000
commit975188759796608792330daa267a053d9ee92a26 (patch)
treeda08ca5bea6f08ecad851ec03add3454cbc9c722
parent875d3ec29a852da4619421f838ba25dd86073007 (diff)
downloadxine-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.c33
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) {