17c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*
27c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Copyright (C) 2011 The Android Open Source Project
37c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
47c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Licensed under the Apache License, Version 2.0 (the "License");
57c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * you may not use this file except in compliance with the License.
67c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * You may obtain a copy of the License at
77c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
87c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *      http://www.apache.org/licenses/LICENSE-2.0
97c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Unless required by applicable law or agreed to in writing, software
117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * distributed under the License is distributed on an "AS IS" BASIS,
127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * See the License for the specific language governing permissions and
147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * limitations under the License.
157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************
187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @file   M4_BitStreamParser.h
197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief  MPEG-4 File Format bit stream utility
207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note   This file contains utility functions used to parse MPEG specific
217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *         data structures.
227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************
237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/
247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifndef __M4_BITSTREAMPARSER_H__
257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define __M4_BITSTREAMPARSER_H__
267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4OSA_Types.h"
287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* M4_BitStreamParser_Init.
317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*
327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* Allocates the context and initializes internal data
337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*
347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @param pContext   : A pointer to the context internally used by the package - ALLOCATED BY THE
357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*                    FUNCTION (M4OSA_NULL if allocation fails)
367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @param bitStream  : A pointer to the bitstream - must be 32 bits as access are 32 bits
377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @param size        : The size of the bitstream in bytes
387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*
397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/
407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargivoid M4_BitStreamParser_Init(void** pContext, void* pBitStream, M4OSA_Int32 size);
417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************
447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    Clean up context
457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param    pContext    (IN/OUT)  M4_BitStreamParser context.
467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************
477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/
487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargivoid M4_BitStreamParser_CleanUp(void* pContext);
497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************
527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    Read the next <length> bits in the bitstream.
537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note    The function does not update the bitstream pointer.
547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param    pContext    (IN/OUT) M4_BitStreamParser context.
557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param    length        (IN) The number of bits to extract from the bitstream
567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    the read bits
577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************
587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/
597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_UInt32 M4_BitStreamParser_ShowBits(void* pContext, M4OSA_Int32 length);
607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************
637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    Increment the bitstream pointer of <length> bits.
647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param    pContext    (IN/OUT) M4_BitStreamParser context.
657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param    length        (IN) The number of bit to shift the bitstream
667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************
677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/
687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargivoid M4_BitStreamParser_FlushBits(void* pContext, M4OSA_Int32 length);
697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************
727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    Get a pointer to the current byte pointed by the bitstream pointer.
737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * It does not update the bitstream pointer
747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pContext   : A pointer to the context internally used by the package
767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param length        : The number of bit to extract from the bitstream
777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @returns the read bits
797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/
807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_UInt32 M4_BitStreamParser_GetBits(void* pContext,M4OSA_Int32 bitPos, M4OSA_Int32 length);
817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* M4_BitStreamParser_Restart resets the bitstream indexes.
847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*
857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @param pContext   : A pointer to the context internally used by the package
867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*
877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/
887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargivoid M4_BitStreamParser_Restart(void* pContext);
897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************
927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    Get a pointer to the current byte pointed by the bitstream pointer.
937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @returns pointer to the current location in the bitstream
947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note    It should be used carefully as the pointer is in the bitstream itself
957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *            and no copy is made.
967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param    pContext    (IN/OUT)  M4_BitStreamParser context.
977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/
987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_UInt8*  M4_BitStreamParser_GetCurrentbitStreamPointer(void* pContext);
997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
1017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* M4_BitStreamParser_GetSize gets the size of the bitstream in bytes
1027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*
1037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @param pContext   : A pointer to the context internally used by the package
1047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*
1057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @returns the size of the bitstream in bytes
1067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/
1077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_Int32 M4_BitStreamParser_GetSize(void* pContext);
1087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargivoid M4_MPEG4BitStreamParser_Init(void** pContext, void* pBitStream, M4OSA_Int32 size);
1107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
1127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* getMpegLengthFromInteger returns a decoded size value from an encoded one (SDL)
1137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*
1147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @param pContext   : A pointer to the context internally used by the package
1157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @param val : encoded value
1167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*
1177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @returns size in a human readable form
1187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/
1197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_Int32 M4_MPEG4BitStreamParser_GetMpegLengthFromInteger(void* pContext, M4OSA_UInt32 val);
1217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
1247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************
1257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    Decode an MPEG4 Systems descriptor size from an encoded SDL size data.
1267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note    The value is read from the current bitstream location.
1277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param    pContext    (IN/OUT)  M4_BitStreamParser context.
1287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    Size in a human readable form
1297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************
1307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/
1317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_Int32 M4_MPEG4BitStreamParser_GetMpegLengthFromStream(void* pContext);
1327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif /*__M4_BITSTREAMPARSER_H__*/
1347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
135