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