videoeditorengine/mp3aacManipLib/inc/nok_bits.h
changeset 0 951a5db380a0
--- /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_ --*/