/* * Copyright (C) 2007-2008 ARM Limited * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ /** * * File Name: armCOMM_Bitstream.h * OpenMAX DL: v1.0.2 * Revision: 9641 * Date: Thursday, February 7, 2008 * * * * * File: armCOMM_Bitstream.h * Brief: Declares common API's/Data types used across the OpenMax Encoders/Decoders. * */ #ifndef _armCodec_H_ #define _armCodec_H_ #include "omxtypes.h" typedef struct { OMX_U8 codeLen; OMX_U32 codeWord; } ARM_VLC32; /* The above should be renamed as "ARM_VLC32" */ /** * Function: armLookAheadBits() * * Description: * Get the next N bits from the bitstream without advancing the bitstream pointer * * Parameters: * [in] **ppBitStream * [in] *pOffset * [in] N=1...32 * * Returns Value */ OMX_U32 armLookAheadBits(const OMX_U8 **ppBitStream, OMX_INT *pOffset, OMX_INT N); /** * Function: armGetBits() * * Description: * Read N bits from the bitstream * * Parameters: * [in] *ppBitStream * [in] *pOffset * [in] N=1..32 * * [out] *ppBitStream * [out] *pOffset * Returns Value */ OMX_U32 armGetBits(const OMX_U8 **ppBitStream, OMX_INT *pOffset, OMX_INT N); /** * Function: armByteAlign() * * Description: * Align the pointer *ppBitStream to the next byte boundary * * Parameters: * [in] *ppBitStream * [in] *pOffset * * [out] *ppBitStream * [out] *pOffset * **/ OMXVoid armByteAlign(const OMX_U8 **ppBitStream,OMX_INT *pOffset); /** * Function: armSkipBits() * * Description: * Skip N bits from the value at *ppBitStream * * Parameters: * [in] *ppBitStream * [in] *pOffset * [in] N * * [out] *ppBitStream * [out] *pOffset * **/ OMXVoid armSkipBits(const OMX_U8 **ppBitStream,OMX_INT *pOffset,OMX_INT N); /*************************************** * Variable bit length Decode ***************************************/ /** * Function: armUnPackVLC32() * * Description: * Variable length decode of variable length symbol (max size 32 bits) read from * the bit stream pointed by *ppBitStream at *pOffset by using the table * pointed by pCodeBook * * Parameters: * [in] **ppBitStream * [in] *pOffset * [in] pCodeBook * * [out] **ppBitStream * [out] *pOffset * * Returns : Code Book Index if successfull. * : "ARM_NO_CODEBOOK_INDEX = 0xFFFF" if search fails. **/ #define ARM_NO_CODEBOOK_INDEX (OMX_U16)(0xFFFF) OMX_U16 armUnPackVLC32( const OMX_U8 **ppBitStream, OMX_INT *pOffset, const ARM_VLC32 *pCodeBook ); /*************************************** * Fixed bit length Encode ***************************************/ /** * Function: armPackBits * * Description: * Pack a VLC code word into the bitstream * * Remarks: * * Parameters: * [in] ppBitStream pointer to the pointer to the current byte * in the bit stream. * [in] pOffset pointer to the bit position in the byte * pointed by *ppBitStream. Valid within 0 * to 7. * [in] codeWord Code word that need to be inserted in to the * bitstream * [in] codeLength Length of the code word valid range 1...32 * * [out] ppBitStream *ppBitStream is updated after the block is encoded, * so that it points to the current byte in the bit * stream buffer. * [out] pBitOffset *pBitOffset is updated so that it points to the * current bit position in the byte pointed by * *ppBitStream. * * Return Value: * Standard OMX_RESULT result. See enumeration for possible result codes. * */ OMXResult armPackBits ( OMX_U8 **ppBitStream, OMX_INT *pOffset, OMX_U32 codeWord, OMX_INT codeLength ); /*************************************** * Variable bit length Encode ***************************************/ /** * Function: armPackVLC32 * * Description: * Pack a VLC code word into the bitstream * * Remarks: * * Parameters: * [in] ppBitStream pointer to the pointer to the current byte * in the bit stream. * [in] pBitOffset pointer to the bit position in the byte * pointed by *ppBitStream. Valid within 0 * to 7. * [in] code VLC code word that need to be inserted in to the * bitstream * * [out] ppBitStream *ppBitStream is updated after the block is encoded, * so that it points to the current byte in the bit * stream buffer. * [out] pBitOffset *pBitOffset is updated so that it points to the * current bit position in the byte pointed by * *ppBitStream. * * Return Value: * Standard OMX_RESULT result. See enumeration for possible result codes. * */ OMXResult armPackVLC32 ( OMX_U8 **ppBitStream, OMX_INT *pBitOffset, ARM_VLC32 code ); #endif /*_armCodec_H_*/ /*End of File*/