diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/avcedit/inc/bitbuffer.h --- a/videoeditorengine/avcedit/inc/bitbuffer.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,355 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef _BITBUFFER_H_ -#define _BITBUFFER_H_ - - -#include "globals.h" -#include "nrctyp32.h" - - -#define BIB_ERR_BIT_ERROR -4 -#define BIB_INCORRECT_TRAILING_BIT -3 -#define BIB_ERR_NO_BITS -2 -#define BIB_ERROR -1 -#define BIB_OK 0 - - -typedef struct _bitbuffer_s -{ - u_int8 *data; /* point to the bit buffer. The physical buffer is allocated by the main module */ - int dataLen; - int bytePos; - int bitpos; - int32 currentBits; - int errorStatus; -} bitbuffer_s; - - -#define bibRaiseError(bitbuf, error) ((bitbuf)->errorStatus = (error)) - -#define bibGetStatus(bitbuf) (bitbuf)->errorStatus - - -bitbuffer_s *bibOpen(); - -int bibInit(bitbuffer_s *bitbuf, u_int8 *streamBytes, int length); - -int bibEnd(bitbuffer_s *bitbuf); - -void bibEndSlice(bitbuffer_s *bitbuf); - -void bibClose(bitbuffer_s *bitbuf); - -int bibGetBitFunc(bitbuffer_s *bitbuf); - -int32 bibGetBitsFunc(bitbuffer_s *bitbuf, int n); - -int32 bibShowBitsFunc(bitbuffer_s *bitbuf, int n); - -int bibSkipBitsFunc(bitbuffer_s *bitbuf, int n); - -int bibGetByte(bitbuffer_s *bitbuf, int *byteRet); - -int bibByteAlign(bitbuffer_s *bitbuf); - -int bibSkipTrailingBits(bitbuffer_s *bitbuf); - -int bibMoreRbspData(bitbuffer_s *bitbuf); - -int32 bibGetNumRemainingBits(bitbuffer_s *bitbuf); - -//int bibGetMax16bits(bitbuffer_s *bitbuf, TInt n, u_int32* retValue); -void syncBitBufferBitpos(bitbuffer_s *bitbuf); - - -/* - * - * bibGetBit - * - * Parameters: - * bitbuf Bitbuffer object - * bit Return pointer for bit - * - * Function: - * Get next bit from bitbuffer. - * - * Returns: - * - - * - */ -#define bibGetBit(bitbuf, bit) \ - if ((bitbuf)->bitpos <= 0) { \ - if ((bitbuf)->bytePos < (bitbuf)->dataLen) { \ - (bitbuf)->currentBits = (bitbuf)->data[(bitbuf)->bytePos++]; \ - (bitbuf)->bitpos = 7; \ - *(bit) = ((bitbuf)->currentBits >> (bitbuf)->bitpos) & 1; \ - } \ - else { \ - (bitbuf)->errorStatus = BIB_ERR_NO_BITS; \ - *(bit) = 0; \ - } \ - } \ - else { \ - (bitbuf)->bitpos--; \ - *(bit) = ((bitbuf)->currentBits >> (bitbuf)->bitpos) & 1; \ - } - - -/* - * - * bibGetBits - * - * Parameters: - * bitbuf Bitbuffer object - * n Number of bits requested - * bits Return pointer for bits - * - * Function: - * Get next n bits from bitbuffer. If bitbuffer is low on bits, - * call bibGetBitsFunc to get more. - * - * NOTE: maximum of 24 bits can be fetched - * - * Returns: - * - - * - */ -#define bibGetBits(bitbuf, n, bits) \ - if ((n) > (bitbuf)->bitpos) { \ - if ((bitbuf)->bytePos+2 >= (bitbuf)->dataLen) \ - *(bits) = bibGetBitsFunc(bitbuf, n); \ - else { \ - do { \ - (bitbuf)->currentBits = ((bitbuf)->currentBits << 8) | (bitbuf)->data[(bitbuf)->bytePos++]; \ - (bitbuf)->bitpos += 8; \ - } while ((n) > (bitbuf)->bitpos); \ - (bitbuf)->bitpos -= (n); \ - *(bits) = ((bitbuf)->currentBits >> (bitbuf)->bitpos) & ~(((u_int32)-1)<<(n)); \ - } \ - } \ - else { \ - (bitbuf)->bitpos -= (n); \ - *(bits) = ((bitbuf)->currentBits >> (bitbuf)->bitpos) & ~(((u_int32)-1)<<(n)); \ - } - - -/* - * - * bibGetMax16bits - * - * Parameters: - * bitbuf Bitbuffer object - * n Number of bits requested - * bits Return pointer for bits - * - * Function: - * Get next n bits from bitbuffer. If bitbuffer is low on bits, - * call bibGetBitsFunc to get more. - * - * NOTE: maximum of 16 bits can be fetched - * - * Returns: - * - - * - */ -#define bibGetMax16bits(bitbuf, n, bits) \ - if ((n) > (bitbuf)->bitpos) { \ - if ((bitbuf)->bytePos+1 >= (bitbuf)->dataLen) \ - *(bits) = bibGetBitsFunc(bitbuf, n); \ - else { \ - (bitbuf)->currentBits = ((bitbuf)->currentBits << 8) | (bitbuf)->data[(bitbuf)->bytePos++]; \ - (bitbuf)->currentBits = ((bitbuf)->currentBits << 8) | (bitbuf)->data[(bitbuf)->bytePos++]; \ - (bitbuf)->bitpos += 16; \ - (bitbuf)->bitpos -= (n); \ - *(bits) = ((bitbuf)->currentBits >> (bitbuf)->bitpos) & ~(((u_int32)-1)<<(n)); \ - } \ - } \ - else { \ - (bitbuf)->bitpos -= (n); \ - *(bits) = ((bitbuf)->currentBits >> (bitbuf)->bitpos) & ~(((u_int32)-1)<<(n)); \ - } - - -/* - * - * bibGetMax8bits - * - * Parameters: - * bitbuf Bitbuffer object - * n Number of bits requested - * bits Return pointer for bits - * - * Function: - * Get next n bits from bitbuffer. If bitbuffer is low on bits, - * call bibGetBitsFunc to get more. - * - * NOTE: maximum of 8 bits can be fetched - * - * Returns: - * - - * - */ -#define bibGetMax8bits(bitbuf, n, bits) \ - if ((n) > (bitbuf)->bitpos) { \ - if ((bitbuf)->bytePos >= (bitbuf)->dataLen) \ - *(bits) = bibGetBitsFunc(bitbuf, n); \ - else { \ - (bitbuf)->currentBits = ((bitbuf)->currentBits << 8) | (bitbuf)->data[(bitbuf)->bytePos++]; \ - (bitbuf)->bitpos += 8; \ - (bitbuf)->bitpos -= (n); \ - *(bits) = ((bitbuf)->currentBits >> (bitbuf)->bitpos) & ~(((u_int32)-1)<<(n)); \ - } \ - } \ - else { \ - (bitbuf)->bitpos -= (n); \ - *(bits) = ((bitbuf)->currentBits >> (bitbuf)->bitpos) & ~(((u_int32)-1)<<(n)); \ - } - - -/* - * - * bibShowBits - * - * Parameters: - * bitbuf Bitbuffer object - * n Number of bits requested - * bits Return pointer for bits - * - * Function: - * Get next n bits from bitbuffer without advancing bitbuffer pointer. - * If bitbuffer is low on bits, call bibShowBitsFunc to get more. - * - * NOTE: maximum of 24 bits can be fetched - * - * Returns: - * - - * - */ -#define bibShowBits(bitbuf, n, bits) \ - if ((n) > (bitbuf)->bitpos) { \ - if ((bitbuf)->bytePos+2 >= (bitbuf)->dataLen) \ - *(bits) = bibShowBitsFunc(bitbuf, n); \ - else { \ - do { \ - (bitbuf)->currentBits = ((bitbuf)->currentBits << 8) | (bitbuf)->data[(bitbuf)->bytePos++]; \ - (bitbuf)->bitpos += 8; \ - } while ((n) > (bitbuf)->bitpos); \ - *(bits) = ((bitbuf)->currentBits >> ((bitbuf)->bitpos-(n))) & ~(((u_int32)-1)<<(n)); \ - } \ - } \ - else \ - *(bits) = ((bitbuf)->currentBits >> ((bitbuf)->bitpos-(n))) & ~(((u_int32)-1)<<(n)); - - -/* - * - * bibShowMax16bits - * - * Parameters: - * bitbuf Bitbuffer object - * n Number of bits requested - * bits Return pointer for bits - * - * Function: - * Get next n bits from bitbuffer without advancing bitbuffer pointer. - * If bitbuffer is low on bits, call bibShowBitsFunc to get more. - * - * NOTE: maximum of 16 bits can be fetched - * - * Returns: - * - - * - */ -#define bibShowMax16bits(bitbuf, n, bits) \ - if ((n) > (bitbuf)->bitpos) { \ - if ((bitbuf)->bytePos+1 >= (bitbuf)->dataLen) \ - *(bits) = bibShowBitsFunc(bitbuf, n); \ - else { \ - (bitbuf)->currentBits = ((bitbuf)->currentBits << 8) | (bitbuf)->data[(bitbuf)->bytePos++]; \ - (bitbuf)->currentBits = ((bitbuf)->currentBits << 8) | (bitbuf)->data[(bitbuf)->bytePos++]; \ - (bitbuf)->bitpos += 16; \ - *(bits) = ((bitbuf)->currentBits >> ((bitbuf)->bitpos-(n))) & ~(((u_int32)-1)<<(n)); \ - } \ - } \ - else \ - *(bits) = ((bitbuf)->currentBits >> ((bitbuf)->bitpos-(n))) & ~(((u_int32)-1)<<(n)); - - -/* - * - * bibShowMax8bits - * - * Parameters: - * bitbuf Bitbuffer object - * n Number of bits requested - * bits Return pointer for bits - * - * Function: - * Get next n bits from bitbuffer without advancing bitbuffer pointer. - * If bitbuffer is low on bits, call bibShowBitsFunc to get more. - * - * NOTE: maximum of 8 bits can be fetched - * - * Returns: - * - - * - */ -#define bibShowMax8bits(bitbuf, n, bits) \ - if ((n) > (bitbuf)->bitpos) { \ - if ((bitbuf)->bytePos >= (bitbuf)->dataLen) \ - *(bits) = bibShowBitsFunc(bitbuf, n); \ - else { \ - (bitbuf)->currentBits = ((bitbuf)->currentBits << 8) | (bitbuf)->data[(bitbuf)->bytePos++]; \ - (bitbuf)->bitpos += 8; \ - *(bits) = ((bitbuf)->currentBits >> ((bitbuf)->bitpos-(n))) & ~(((u_int32)-1)<<(n)); \ - } \ - } \ - else \ - *(bits) = ((bitbuf)->currentBits >> ((bitbuf)->bitpos-(n))) & ~(((u_int32)-1)<<(n)); - - -/* - * - * bibSkipBits - * - * Parameters: - * bitbuf Bitbuffer object - * n Number of bits to be skipped - * - * Function: - * Called after calling bibShowBits to skip the number of bits that - * were actually needed. If bibShowBits fetched more bits than there were - * bits in bitbuf->currentBits, calls bibSkipBitsFunc to clean up. - * - * Returns: - * - - * - */ -#define bibSkipBits(bitbuf, n) \ - (bitbuf)->bitpos -= (n); \ - if ((bitbuf)->bitpos < 0) { \ - (bitbuf)->bitpos += (n); \ - bibSkipBitsFunc(bitbuf, n); \ - } - - - -#endif /* #ifndef _BITBUFFER_H_ */