Commit 48b927bb authored by Christophe Massiot's avatar Christophe Massiot

Fixed GetChunk for chunks < 4 bytes.

parent a7a2bab4
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* input_ext-dec.h: structures exported to the VideoLAN decoders * input_ext-dec.h: structures exported to the VideoLAN decoders
***************************************************************************** *****************************************************************************
* Copyright (C) 1999, 2000 VideoLAN * Copyright (C) 1999, 2000 VideoLAN
* $Id: input_ext-dec.h,v 1.32 2001/05/01 12:22:18 sam Exp $ * $Id: input_ext-dec.h,v 1.33 2001/07/16 12:10:32 massiot Exp $
* *
* Authors: Christophe Massiot <massiot@via.ecp.fr> * Authors: Christophe Massiot <massiot@via.ecp.fr>
* Michel Kaempf <maxx@via.ecp.fr> * Michel Kaempf <maxx@via.ecp.fr>
...@@ -401,7 +401,7 @@ static __inline__ void RealignBits( bit_stream_t * p_bit_stream ) ...@@ -401,7 +401,7 @@ static __inline__ void RealignBits( bit_stream_t * p_bit_stream )
* GetChunk : reads a large chunk of data * GetChunk : reads a large chunk of data
***************************************************************************** *****************************************************************************
* The position in the stream must be byte-aligned, if unsure call * The position in the stream must be byte-aligned, if unsure call
* RealignBits(). p_buffer must to a buffer at least as big as i_buf_len * RealignBits(). p_buffer must point to a buffer at least as big as i_buf_len
* otherwise your code will crash. * otherwise your code will crash.
*****************************************************************************/ *****************************************************************************/
static __inline__ void GetChunk( bit_stream_t * p_bit_stream, static __inline__ void GetChunk( bit_stream_t * p_bit_stream,
...@@ -409,13 +409,14 @@ static __inline__ void GetChunk( bit_stream_t * p_bit_stream, ...@@ -409,13 +409,14 @@ static __inline__ void GetChunk( bit_stream_t * p_bit_stream,
{ {
ptrdiff_t i_available; ptrdiff_t i_available;
if( p_bit_stream->fifo.i_available ) /* We need to take care because i_buf_len may be < 4. */
while( p_bit_stream->fifo.i_available > 0 && i_buf_len )
{ {
*((WORD_TYPE *)p_buffer) = WORD_AT( &p_bit_stream->fifo.buffer ); *p_buffer = p_bit_stream->fifo.buffer >> (8 * sizeof(WORD_TYPE) - 8);
p_buffer += p_bit_stream->fifo.i_available >> 3; p_buffer++;
i_buf_len -= p_bit_stream->fifo.i_available >> 3; i_buf_len--;
p_bit_stream->fifo.buffer = 0; p_bit_stream->fifo.buffer <<= 8;
p_bit_stream->fifo.i_available = 0; p_bit_stream->fifo.i_available -= 8;
} }
if( (i_available = p_bit_stream->p_end - p_bit_stream->p_byte) if( (i_available = p_bit_stream->p_end - p_bit_stream->p_byte)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment