--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/videoeditorengine/mp3aacManipLib/inc/nok_bits.h Fri Jan 29 14:08:33 2010 +0200
@@ -0,0 +1,295 @@
+/*
+* 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:
+*
+*/
+
+
+/**************************************************************************
+ nok_bits.h - Interface for bitstream handling.
+
+ Author(s): Juha Ojanpera
+ Copyright (c) 1999-2004 by Nokia Research Center, Audio-Visual Systems.
+ *************************************************************************/
+
+#ifndef NOKBITSTREAM_H_
+#define NOKBITSTREAM_H_
+
+/*-- Project Headers. --*/
+#include "defines.h"
+
+/*-- Bitstream supports any length... --*/
+#define BITSMODULO_BUFFER
+
+#ifndef BITSMODULO_BUFFER
+#define MOD_OPCODE(x, y) (x & y)
+#else
+#define MOD_OPCODE(x, y) (x % y)
+#endif /*-- MODULO_BUFFER --*/
+
+const uint32 bsBitMask[] =
+{0x0, 0x1, 0x3, 0x7, 0xF, 0x1F, 0x3F, 0x7F, 0xFF, 0x1FF, 0x3FF, 0x7FF, 0xFFF,
+ 0x1FFFL, 0x3FFFL, 0x7FFFL, 0xFFFFL, 0x1FFFFL, 0x3FFFFL, 0x7FFFFL, 0xFFFFFL,
+ 0x1FFFFFL, 0x3FFFFFL, 0x7FFFFFL, 0xFFFFFFL, 0x1FFFFFFL, 0x3FFFFFFL, 0x7FFFFFFL,
+ 0xFFFFFFFL, 0x1FFFFFFFL, 0x3FFFFFFFL, 0x7FFFFFFFL, 0xFFFFFFFFL};
+
+#ifdef BYTE_16bit
+typedef uint16 DSP_BYTE;
+#else
+typedef uint8 DSP_BYTE;
+#endif
+
+/**
+ * Data structure for accessing bits from input bitstram.
+ */
+typedef enum BYTE_MODE
+{
+ BIT8 = 0,
+ BIT16
+
+} BYTE_MODE;
+
+#define MAX_BUFS (1)
+
+typedef struct BufMapperStr
+{
+ uint8 numBufs;
+ uint8 **bsBuf;
+ uint32 *bsBufLen;
+ uint32 *bytesRead;
+
+} BufMapper;
+
+class TBitStream
+{
+public:
+
+
+ /**
+ * Bitstream (modulo/ring) buffer. */
+ DSP_BYTE *dsp_buffer;
+ uint8 *bit_buffer;
+
+ /**
+ * Number of bits in the data type.
+ */
+ int16 slotBits;
+
+ /* Which bit buffer is to be used. */
+ BYTE_MODE mode;
+
+ /**
+ * Size of the buffer.
+ */
+ uint32 buf_len;
+
+ /**
+ * Bit counter.
+ */
+ int16 bit_counter;
+
+ /**
+ * Read index.
+ */
+ uint32 buf_index;
+
+ /**
+ * Write index.
+ */
+ uint32 buf_writeIndex;
+
+ /**
+ * Bitmask for 'buf_index'.
+ */
+ uint32 buf_mask;
+
+ /**
+ * Number of bytes read from the buffer. This field will be used to check
+ * whether there are enough bits in the buffer to result a successfull
+ * decoding of current frame.
+ */
+ uint32 slots_read;
+
+ /**
+ * Number of bits read from the buffer. This will be resetted on a call-by-call
+ * basis and therefore gives the number of bits that each call read from
+ * the buffer. The buffer is updated according to this value.
+ */
+ uint32 bits_read;
+
+};
+
+/**
+ * Bitstream manipulation methods.
+ */
+
+
+/**
+ * Initializes input bitstream.
+ *
+ * @param bs Bitstream handle
+ * @param bit_buffer Input bitstream
+ * @param size Size of input bitstream in bytes
+ */
+IMPORT_C void BsInit(TBitStream *bs, uint8 *bit_buffer, uint32 size);
+
+IMPORT_C void BsInit1(TBitStream *bs, uint8 *bit_buffer, uint32 size);
+
+IMPORT_C void BsInit2(TBitStream *bs, DSP_BYTE *dsp_buffer, uint32 size);
+
+
+/**
+ * Retrieves size of bitstream in bytes.
+ *
+ * @param bs Bitstream handle
+ *
+ * @return Size of bitstream
+ */
+IMPORT_C uint32 BsGetBufSize(TBitStream *bs);
+
+IMPORT_C uint32 BsGetBufOriginalSize(TBitStream *bs);
+
+/**
+ * Retrieves number of bits read from the bitstream.
+ *
+ * @param bs Bitstream handle
+ */
+IMPORT_C uint32 BsGetBitsRead(TBitStream *bs);
+
+IMPORT_C void BsSetBitsRead(TBitStream *bs, uint32 bits_read);
+IMPORT_C void BsClearBitsRead(TBitStream *bs);
+
+/**
+ * Resets bitstream.
+ *
+ * @param bs Bitstream handle
+ */
+IMPORT_C void BsReset(TBitStream *bs);
+
+/**
+ * Retrieves the number of bytes left in the bitstream.
+ *
+ * @param bs Bitstream handle
+ *
+ * @return Number of bytes left in the bitstream
+ */
+IMPORT_C uint32 BsSlotsLeft(TBitStream *bs);
+
+/**
+ * Appends bits from one bitstream to another bitstream.
+ *
+ * @param bs Source btstream handle
+ * @param br Destination btstream handle
+ * @param n Number of bytes to copy
+ */
+IMPORT_C void BsMoveBytes(TBitStream *bs, TBitStream *br, int16 n);
+
+/**
+ * Appends bits from one specified buffer to bitstream.
+ *
+ * @param bs Destination btstream handle
+ * @param outBuf Source buffer
+ * @param bytesToCopy Number of bytes to copy
+ *
+ * @return Number of bytes appended
+ */
+IMPORT_C uint32 BsCopyBytes(TBitStream *bs, uint8 *outBuf, uint32 bytesToCopy);
+
+/**
+ * Appends bits from one source to destination bitstream.
+ *
+ * @param bs Destination btstream handle
+ * @param outBuf Source bitstream handle
+ * @param bitsToCopy Number of bits to copy
+ */
+IMPORT_C void
+BsCopyBits(TBitStream *bsSrc, TBitStream *bsDst, int32 bitsToCopy);
+
+/**
+ * Rewinds the read index of the bitstream.
+ *
+ * @param bs Bitstream handle
+ * @param n Number of bits to rewind
+ */
+IMPORT_C void BsRewindNBits(TBitStream *bs, uint32 nBits);
+
+IMPORT_C void BsBufferUpdate(TBitStream *bs, int32 bytesRead);
+
+IMPORT_C void BsSaveBufState(TBitStream *bsSrc, TBitStream *bsDst);
+
+/**
+ * Writes bits to bitstream.
+ *
+ * @param bs Bitstream handle
+ * @param n Number of bits to write
+ * @param word Data bits to write
+ */
+IMPORT_C void BsPutBits(TBitStream *bs, int16 n, uint32 word);
+
+/**
+ * Byte aligns bitstream by writing '0' bits.
+ *
+ * @param bs Bitstream handle
+ *
+ * @return Number of bits written
+ */
+IMPORT_C int16 BsPutBitsByteAlign(TBitStream *bs);
+
+/**
+ * Reads bits from bitstream.
+ *
+ * @param bs Bitstream handle
+ * @param n Number of bits to read
+ *
+ * @return Read data bits
+ */
+IMPORT_C uint32 BsGetBits(TBitStream *bs, int16 n);
+
+/**
+ * Byte aligns bitstream by advanding read index.
+ *
+ * @param bs Bitstream handle
+ *
+ * @return Number of bits skipped
+ */
+IMPORT_C int16 BsByteAlign(TBitStream *bs);
+
+/**
+ * Reads bits from bitstream without updating read index.
+ *
+ * @param bs Bitstream handle
+ * @param n Number of bits to lookahead
+ *
+ * @return Read data bits
+ */
+IMPORT_C uint32 BsLookAhead(TBitStream *bs, int16 n);
+
+/**
+ * Advances bitstream read index (8 bits at maximum!).
+ *
+ * @param bs Bitstream handle
+ * @param n Number of bits to skip. Note that this can at maximum be 8 bits!
+ */
+IMPORT_C void BsSkipBits(TBitStream *bs, int16 n);
+
+/**
+ * Advances bitstream read index.
+ *
+ * @param bs Bitstream handle
+ * @param n Number of bits to skip
+ */
+IMPORT_C void BsSkipNBits(TBitStream *bs, int32 n);
+
+#endif /*-- BITSTREAM_H_ --*/