--- bitstream.h 2002/06/12 20:38:40 1.6 +++ bitstream.h 2002/06/30 10:46:29 1.10 @@ -41,7 +41,9 @@ * * * Revision history: * * * - * 26.03.2002 interlacing support - modified putvol/vopheaders paramters + * 28.06.2002 addded BitstreamNumBitsToByteAlign() * + * BitstreamShowBitsFromByteAlign() * + * 26.03.2002 interlacing support - modified putvol/vopheaders paramters * * 04.03.2002 putbits speedup (Isibaar) * * 03.03.2002 merged BITREADER and BITWRITER (Isibaar) * * 16.12.2001 inital version * @@ -110,6 +112,14 @@ #define S_VOP 3 #define N_VOP 4 +// resync-specific +#define NUMBITS_VP_RESYNC_MARKER 17 +#define RESYNC_MARKER 1 + + +int +read_video_packet_header(Bitstream *bs, const int addbits, int * quant); + // header stuff int BitstreamReadHeaders(Bitstream * bs, @@ -127,7 +137,12 @@ void BitstreamWriteVopHeader(Bitstream * const bs, const MBParam * pParam, - const FRAMEINFO * frame); + const FRAMEINFO * frame, + int vop_coded); + +void BitstreamWriteUserData(Bitstream * const bs, + uint8_t * data, + const int length); /* initialise bitstream structure */ @@ -225,6 +240,36 @@ } +// number of bits to next byte alignment +static __inline uint32_t +BitstreamNumBitsToByteAlign(Bitstream *bs) +{ + uint32_t n = (32 - bs->pos) % 8; + return n == 0 ? 8 : n; +} + + +// show nbits from next byte alignment +static __inline uint32_t +BitstreamShowBitsFromByteAlign(Bitstream *bs, int bits) +{ + int bspos = bs->pos + BitstreamNumBitsToByteAlign(bs); + int nbit = (bits + bspos) - 32; + + if (bspos >= 32) { + return bs->bufb >> (32 - nbit); + } else if (nbit > 0) { + return ((bs->bufa & (0xffffffff >> bspos)) << nbit) | (bs-> + bufb >> (32 - + nbit)); + } else { + return (bs->bufa & (0xffffffff >> bspos)) >> (32 - bspos - bits); + } + +} + + + /* move forward to the next byte boundary */ static __inline void @@ -243,7 +288,7 @@ static uint32_t __inline BitstreamPos(const Bitstream * const bs) { - return 8 * ((uint32_t) bs->tail - (uint32_t) bs->start) + bs->pos; + return 8 * ((ptr_t)bs->tail - (ptr_t)bs->start) + bs->pos; } @@ -254,7 +299,7 @@ static uint32_t __inline BitstreamLength(Bitstream * const bs) { - uint32_t len = (uint32_t) bs->tail - (uint32_t) bs->start; + uint32_t len = (ptr_t) bs->tail - (ptr_t) bs->start; if (bs->pos) { uint32_t b = bs->buf;