blob: 8c0ef3731cb490411f9d083b6fa82a839e6e2bd8 [file] [log] [blame]
/*
* 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: 12290
* Date: Wednesday, April 9, 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*/