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 M4READER_3gpCom.h 197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief Generic encapsulation of the core 3gp reader 207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note This file declares the generic shell interface retrieving function 217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * of the 3GP reader 227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifndef __M4READER_3GPCOM_H__ 267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define __M4READER_3GPCOM_H__ 277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "NXPSW_CompilerSwitches.h" 297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4OSA_Types.h" 317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4OSA_Error.h" 327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4READER_Common.h" 337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef __cplusplus 357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargiextern "C" { 367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif 377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Error: Function M4READER_Com3GP_getNextStreamHandler must be called before. 407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define M4ERR_NO_VIDEO_STREAM_RETRIEVED_YET M4OSA_ERR_CREATE(M4_ERR, M4READER_3GP, 0x000001) 427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Error: No video stream H263 in file. 457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define M4ERR_VIDEO_NOT_H263 M4OSA_ERR_CREATE(M4_ERR, M4READER_3GP, 0x000002) 477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * There has been a problem with the decoder configuration information, seems to be invalid */ 507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define M4ERR_READER3GP_DECODER_CONFIG_ERROR M4OSA_ERR_CREATE(M4_ERR, M4READER_3GP, 0x000003) 517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define M4READER_COM3GP_MAXVIDEOSTREAM 5 537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define M4READER_COM3GP_MAXAUDIOSTREAM 5 547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define M4READER_COM3GP_MAXTEXTSTREAM 5 557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargitypedef struct 577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Context m_pFFContext; /**< core file format context */ 597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4_StreamHandler* m_AudioStreams[M4READER_COM3GP_MAXAUDIOSTREAM]; 617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4_StreamHandler* m_pAudioStream; /**< pointer to the current allocated audio 627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi stream handler */ 637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4_StreamHandler* m_VideoStreams[M4READER_COM3GP_MAXVIDEOSTREAM]; 657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4_StreamHandler* m_pVideoStream; /**< pointer to the current allocated video 667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi stream handler */ 677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef M4VPS_SUPPORT_TTEXT 697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4_StreamHandler* m_TextStreams[M4READER_COM3GP_MAXTEXTSTREAM]; 707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4_StreamHandler* m_pTextStream; /**< pointer to the current allocated text 717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi stream handler */ 727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif /*M4VPS_SUPPORT_TTEXT*/ 737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} M4READER_Com3GP_Context; 757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * structure M4READER_3GP_Buffer (but nothing specific to 3GP, nor to a reader !) 797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief This structure defines a buffer that can be used to exchange data (should be in OSAL) 807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargitypedef struct 837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 size; /**< the size in bytes of the buffer */ 857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_MemAddr8 dataAddress; /**< the pointer to the buffer */ 867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} M4READER_3GP_Buffer; 877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * enum M4READER_3GP_OptionID 917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief This enum defines the reader options specific to the 3GP format. 927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note These options can be read from or written to a 3GP reader via M4READER_3GP_getOption. 937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargitypedef enum 967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Get the DecoderConfigInfo for H263, 997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * option value must be a pointer to M4READER_3GP_H263Properties allocated by caller */ 1007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4READER_3GP_kOptionID_H263Properties = M4OSA_OPTION_ID_CREATE(M4_READ, M4READER_3GP, 0x01), 1017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 1037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Get the Purple Labs drm information */ 1047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4READER_3GP_kOptionID_PurpleLabsDrm = M4OSA_OPTION_ID_CREATE(M4_READ, M4READER_3GP, 0x02), 1057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 1077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Set the Fast open mode (Only the first AU of each stream will be parsed -> less CPU, 1087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi less RAM). */ 1097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4READER_3GP_kOptionID_FastOpenMode = M4OSA_OPTION_ID_CREATE(M4_WRITE, M4READER_3GP, 0x03), 1107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 1127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Set the Audio only mode (the video stream won't be opened) */ 1137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4READER_3GP_kOptionID_AudioOnly = M4OSA_OPTION_ID_CREATE(M4_WRITE, M4READER_3GP, 0x04), 1147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 1167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Set the Video only mode (the audio stream won't be opened) */ 1177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4READER_3GP_kOptionID_VideoOnly = M4OSA_OPTION_ID_CREATE(M4_WRITE, M4READER_3GP, 0x05), 1187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 1207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Get the next video CTS */ 1217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4READER_3GP_kOptionID_getNextVideoCTS = M4OSA_OPTION_ID_CREATE(M4_READ, M4READER_3GP, 0x06) 1227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} M4READER_3GP_OptionID; 1247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 1277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 1287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * struct M4READER_3GP_H263Properties 1297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief Contains info about H263 stream read from the 3GP file. 1307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 1317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 1327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargitypedef struct 1337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 1347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /**< the profile as defined in the Visual Object Sequence header, if present */ 1357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt8 uiProfile; 1367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /**< the level as defined in the Visual Object Sequence header, if present */ 1377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt8 uiLevel; 1387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} M4READER_3GP_H263Properties; 1407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 1427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 1437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief Get the next stream found in the 3gp file 1447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note 1457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pContext: (IN) Context of the reader 1467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pMediaFamily: (OUT) Pointer to a user allocated M4READER_MediaFamily that will 1477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * be filled with the media family of the found stream 1487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pStreamHandler: (OUT) Pointer to a stream handler that will be allocated and 1497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * filled with the found stream description 1507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR There is no error 1517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER At least one parameter is not properly set 1527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4WAR_NO_MORE_STREAM No more available stream in the media (all streams found) 1537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 1547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 1557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4READER_Com3GP_getNextStreamHandler(M4OSA_Context context, 1567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4READER_MediaFamily *pMediaFamily, 1577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4_StreamHandler **pStreamHandler); 1587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 1607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 1617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief Prepare the access unit (AU) 1627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note An AU is the smallest possible amount of data to be decoded by a decoder. 1637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pContext: (IN) Context of the reader 1647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pStreamHandler (IN) The stream handler of the stream to make jump 1657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pAccessUnit (IN/OUT) Pointer to an access unit to fill with read data 1667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * (the au structure is allocated by the user, and must 1677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * be initialized by calling M4READER_fillAuStruct_fct 1687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * after creation) 1697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR There is no error 1707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER At least one parameter is not properly set 1717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @returns M4ERR_ALLOC Memory allocation failed 1727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 1737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 1747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4READER_Com3GP_fillAuStruct(M4OSA_Context context, M4_StreamHandler *pStreamHandler, 1757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4_AccessUnit *pAccessUnit); 1767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 1787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 1797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief Cleans up the stream handler 1807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pContext: (IN/OUT) Context of the reader shell 1817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pStreamHandler: (IN/OUT) Stream handler 1827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER: The context is null 1837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR: No error 1847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 1857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 1867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4READER_Com3GP_cleanUpHandler(M4_StreamHandler* pStreamHandler); 1877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef __cplusplus 1897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 1907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif /* __cplusplus */ 1917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif /* __M4READER_3GPCOM_H__ */ 1937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 194