videoeditorengine/h263decoder/inc/biblin.h
changeset 0 951a5db380a0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videoeditorengine/h263decoder/inc/biblin.h	Fri Jan 29 14:08:33 2010 +0200
@@ -0,0 +1,230 @@
+/*
+* 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:  
+* Header file for Bit Buffer module. 
+*
+*/
+
+
+#ifndef _BIBLIN_H_
+#define _BIBLIN_H_
+
+#include "epoclib.h"
+
+/*
+ * Defines
+ */
+
+/* Error codes */
+/* Obsolete error codes are not used anymore and are defined only to maintain
+   backwards compatibility with older versions of the file. */
+#define ERR_BIB_STRUCT_ALLOC 1000      /* If a structure allocation failed */
+#define ERR_BIB_BUFFER_ALLOC 1001      /* Obsolete */
+#define ERR_BIB_FILE_READ 1002         /* Obsolete */
+#define ERR_BIB_NOT_ENOUGH_DATA 1003   /* If the number of bits requested from
+                                          the buffer is greater than the number
+                                          of bits available in the buffer */
+#define ERR_BIB_ALREADY_OPENED 1004    /* Obsolete */
+#define ERR_BIB_FILE_OPEN 1005         /* Obsolete */
+#define ERR_BIB_ALREADY_CLOSED 1006    /* Obsolete */
+#define ERR_BIB_FILE_CLOSE 1007        /* Obsolete */
+#define ERR_BIB_NUM_BITS 1008          /* Obsolete */
+#define ERR_BIB_FILE_NOT_OPEN 1009     /* Obsolete */
+#define ERR_BIB_ILLEGAL_SIZE 1010      /* Obsolete */
+#define ERR_BIB_CANNOT_REWIND 1011     /* If the number of bits requested to be
+                                          rewinded is greater than the number
+                                          of bits available in the buffer */
+#define ERR_BIB_BUFLIST 1012           /* If the internal buffer list has
+                                          been corrupted */
+#define ERR_BIB_TOO_SMALL_BUFFER 1013  /* Obsolete */
+#define ERR_BIB_FEC_RELOCK 1050        /* Obsolete */
+#define ERR_BIB_PSC_FOUND 1060         /* Obsolete */
+
+
+/*
+ * Structs and typedefs
+ */
+
+
+
+/* {{-output"bibBuffer_t_info.txt" -ignore"*" -noCR}}
+ * The bibBuffer_t data type is a structure containing all the necessary data
+ * for a bit buffer instance (except for the actual data buffer). This
+ * structure is passed to all of the bit buffer functions.
+ * {{-output"bibBuffer_t_info.txt"}}
+ */
+
+/* {{-output"bibBuffer_t.txt"}} */
+
+
+
+enum CopyMode {
+     CopyNone        = 0,
+     CopyWhole       = 1,
+     CopyWithEdit    = 2,
+     EditOnly        = 3
+};
+
+typedef struct bibEditParams_s {
+
+   int StartByteIndex;      // start byte position where data is to be written 
+   int StartBitIndex;       // start bit position where data is to be written 
+   int curNumBits;      // number of bits that need to be replaced 
+   int newNumBits;      // number of bits to be written 
+   int newValue;      // the value to be written 
+
+} bibEditParams_t; 
+
+typedef struct bibBufferEdit_s {
+
+    CopyMode copyMode; 
+    int numChanges; 
+    bibEditParams_t *editParams;
+
+} bibBufferEdit_t; 
+
+
+
+
+typedef struct bibBuffer_s {
+   u_char *baseAddr;       /* the start address of the buffer */
+
+   unsigned size;          /* the size of the buffer in bytes */
+
+   unsigned getIndex;      /* an index to the buffer where data was last got */
+
+   int bitIndex;           /* an index to the byte pointed by getIndex + 1 */
+
+   u_int32 bitsLeft;       /* the number of bits currently in the buffer */
+
+   u_int32 numBytesRead;   /* the total number of bytes read */
+
+   int error;               /* stores possible error code */
+
+} bibBuffer_t;
+/* {{-output"bibBuffer_t.txt"}} */
+
+#ifdef DEBUG_OUTPUT
+extern bibBuffer_t * buffer_global;
+#endif
+
+/* typedefs for bibFlushBits, bibGetBits, and bibShowBits function types */
+typedef void (*bibFlushBits_t) (int, bibBuffer_t *, int *, int *, int16 *);
+typedef u_int32 (*bibGetBits_t) (int, bibBuffer_t *, int *, int *, int16 *);
+typedef u_int32 (*bibShowBits_t) (int, bibBuffer_t *, int *, int *, int16 *);
+
+/*
+ * External macros
+ */
+
+/*
+    * bibNumberOfBitsLeft
+    *
+    * Parameters:
+    *    bibBuffer_t *buffer        input bit buffer instance
+    *
+    * Function:
+    *    This macro returns the number of bits which are left to be read
+    *    from the current position.
+    *
+    * Returns:
+    *    See above.
+    */
+
+   #define bibNumberOfBitsLeft(buffer) \
+      ((buffer)->bitsLeft)
+
+/*
+ * External function prototypes
+ */
+
+bibBuffer_t *bibCreate(void *srcBuffer, unsigned srcBufferLength,
+   int16 *errorCode);
+
+void bibDelete(bibBuffer_t *buffer, int16 *errorCode);
+
+u_int32 bibNumberOfFlushedBits(bibBuffer_t *buffer);
+
+u_int32 bibNumberOfFlushedBytes(bibBuffer_t *buffer);
+
+u_int32 bibNumberOfRewBits(bibBuffer_t *buffer);
+
+void bibRewindBits(u_int32 numberOfBits, bibBuffer_t *buffer, int16 *errorCode);
+
+
+/* 
+ * Prototypes for bibFlushBits/bibGetBits/bibShowBits 
+ */
+
+void bibFlushBits(int numberOfBits, bibBuffer_t *buffer);
+u_int32 bibGetBits(int numberOfBits, bibBuffer_t *buffer);
+u_int32 bibShowBits(int numberOfBits, bibBuffer_t *buffer);
+
+inline void bibFlushBits(int numberOfBits, bibBuffer_t *buffer, int *numberOfBitsGot, int * /*bitErrorIndication*/, int16 * /*errorCode*/)
+{
+    *numberOfBitsGot = numberOfBits;
+    bibFlushBits(numberOfBits, buffer);
+}
+
+inline u_int32 bibGetBits(int numberOfBits, bibBuffer_t *buffer, int *numberOfBitsGot, int * /*bitErrorIndication*/, int16 * /*errorCode*/)
+{
+    *numberOfBitsGot = numberOfBits;
+    return bibGetBits(numberOfBits, buffer);
+}
+
+inline u_int32 bibShowBits(int numberOfBits, bibBuffer_t *buffer, int *numberOfBitsGot, int * /*bitErrorIndication*/, int16 * /*errorCode*/)
+{
+    *numberOfBitsGot = numberOfBits;
+    return bibShowBits(numberOfBits, buffer);
+}
+
+#define bibFlushBitsFromBuffer bibFlushBits
+#define bibGetBitsFromBuffer bibGetBits
+#define bibShowBitsFromBuffer bibShowBits
+
+
+bibBufferEdit_t *bibBufferEditCreate(int16 *errorCode);
+void bibBufEditDelete(bibBufferEdit_t *bufEdit, int16 *errorCode);
+
+// copy from input buffer to output buffer in various copy modes (with or without editing)
+void CopyStream(bibBuffer_t *SrcBuffer,bibBuffer_t *DestBuffer,bibBufferEdit_t *bufEdit, 
+								int ByteStart,int BitStart);
+// copy from input buffer to output buffer (without editing)
+void CopyBuffer(bibBuffer_t *SrcBuffer,bibBuffer_t *DestBuffer, 
+								int ByteStart,int BitStart, int ByteEnd, int BitEnd);
+// copy from BufferEdit to output buffer (no copying; rather, inserting code into output buffer)
+void CopyBufferEdit(bibBuffer_t *SrcBuffer, bibBuffer_t *DestBuffer, 
+										bibEditParams_t *edParam, int updateSrcBufferStats=1);
+// insert correct IntraDC values for H.263 chrominance blocks in output buffer
+void ResetH263IntraDcUV(bibBuffer_t *DestBuffer, int uValue, int vValue); 
+// insert correct IntraDC values for MPEG-4 chrominance blocks in output buffer
+void ResetMPEG4IntraDcUV(bibBuffer_t *DestBuffer, int IntraDC_size); 
+
+	/* 
+			SrcValue		the source value from which bits are to be extacted 
+			MaxNumBits	the length in bits of the source value
+			StartBit		the index of the starting bit form where data is to be retrieved
+			getBits			the number of bits to be retrieved 
+	*/
+u_int32 bibGetBitsFromWord(u_int32 SrcValue, u_int32 getBits, u_int32 *StartBit, 
+												u_int32 MaxNumBits);
+void bibForwardBits(u_int32 numberOfBits, bibBuffer_t *buffer);
+void bibStuffBits(bibBuffer_t *buffer);
+void bibStuffBitsMPEG4(bibBuffer_t *inBuffer, bibBuffer_t *outBuffer, bibBufferEdit_t *bufEdit, 
+											 int *StartByteIndex, int *StartBitIndex, int updateSrcBufferStats);
+
+
+#endif
+// End of File