M4MP4W_Interface.c revision 0c1c027b0a0b386482d18fac0c35f2b7385d1924
10c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/* 20c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Copyright (C) 2004-2011 NXP Software 30c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Copyright (C) 2011 The Android Open Source Project 40c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * 50c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Licensed under the Apache License, Version 2.0 (the "License"); 60c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * you may not use this file except in compliance with the License. 70c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * You may obtain a copy of the License at 80c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * 90c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * http://www.apache.org/licenses/LICENSE-2.0 100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * 110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Unless required by applicable law or agreed to in writing, software 120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * distributed under the License is distributed on an "AS IS" BASIS, 130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * See the License for the specific language governing permissions and 150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * limitations under the License. 160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */ 170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @file M4MP4W_Interface.c 210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief 3GPP file writer interface 220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @note This implementation follows the common interface defined 230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * in "M4WRITER_common.h". 240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi*/ 260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#include "NXPSW_CompilerSwitches.h" 280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * OSAL includes */ 310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#include "M4OSA_Types.h" /**< OSAL basic types definiton */ 320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#include "M4OSA_FileWriter.h" /**< Include for OSAL file accesses implementation */ 330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#include "M4OSA_Memory.h" /**< Include for OSAL memory accesses implementation */ 340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#include "M4OSA_Debug.h" /**< OSAL debug tools */ 350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#include "M4OSA_CharStar.h" /**< For M4OSA_chrLength() */ 360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Writer includes */ 390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#include "M4WRITER_common.h" /**< Definition of the writer common interface that 400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi this module follows */ 410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#ifdef _M4MP4W_USE_CST_MEMORY_WRITER 430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#include "M4MP4W_Types_CstMem.h" /**< MP4/3GP core writer types */ 440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#include "M4MP4W_Writer_CstMem.h" /**< MP4/3GP core writer functions */ 450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#else 460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#include "M4MP4W_Types.h" /**< MP4/3GP core writer types */ 470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#include "M4MP4W_Writer.h" /**< MP4/3GP core writer functions */ 480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#endif /* _M4MP4W_USE_CST_MEMORY_WRITER */ 490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Specific errors for this module */ 520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#define M4WRITER_3GP_ERR_UNSUPPORTED_STREAM_TYPE \ 530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_ERR_CREATE(M4_ERR, M4WRITER_3GP, 0x000001) 540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * structure M4WRITER_3GP_InternalContext 590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief This structure defines the writer context (private) 600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @note This structure is used for all writer calls to store the context 610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi*/ 630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargitypedef struct 640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Context pMP4Context; /**< MP4 writer context */ 660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 maxAUsizes; /**< the maximum AU size possible */ 670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} M4WRITER_3GP_InternalContext; 680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/****************************************************************************** 710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_ERR M4WRITER_3GP_openWrite(M4WRITER_Context* pContext, void* pWhat, 720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_FileWriterPointer* pFileWriterPointer) 730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief Open a writer session. 740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @note 750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param pContext: (OUT) Execution context of the 3GP writer, allocated by this function. 760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param outputFileDescriptor (IN) Descriptor of the output file to create. 770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param fileWriterFunction (IN) Pointer to structure containing the set of OSAL 780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * file write functions. 790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param tempFileDescriptor (IN) Descriptor of the temporary file to open 800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * (NULL if not used) 810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param fileReaderFunction (IN) Pointer to structure containing the set of OSAL file read 820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * functions (NULL if not used) 830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4NO_ERROR: there is no error 840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4ERR_ALLOC: there is no more available memory 850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4ERR_PARAMETER: pContext or pFilePtrFct is M4OSA_NULL (debug only) 860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return any error returned by the MP4 core writer openWrite (Its coreID is M4MP4_WRITER) 870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi*/ 890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR M4WRITER_3GP_openWrite( M4WRITER_Context* pContext, 900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi void* outputFileDescriptor, 910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_FileWriterPointer* pFileWriterPointer, 920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi void* tempFileDescriptor, 930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_FileReadPointer* pFileReaderPointer ) 940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4WRITER_3GP_InternalContext* apContext; 960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_ERR err; 970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_0("M4WRITER_3GP_openWrite"); 990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 1000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 1010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Check input parameters */ 1020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL == pContext),M4ERR_PARAMETER, 1030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4WRITER_3GP_openWrite: pContext is M4OSA_NULL"); 1040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL == pFileWriterPointer),M4ERR_PARAMETER, 1050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4WRITER_3GP_openWrite: pFileWriterPointer is M4OSA_NULL"); 1060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 1070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 1080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Allocate memory for the context */ 1090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *pContext=M4OSA_NULL; 1100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi apContext = (M4WRITER_3GP_InternalContext*)M4OSA_malloc( 1110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sizeof(M4WRITER_3GP_InternalContext), 1120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4WRITER_3GP, 1130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_Char *)"M4WRITER_3GP_InternalContext"); 1140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 1150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4OSA_NULL == apContext) 1160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 1170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_0("M4WRITER_3GP_openWrite:\ 1180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi unable to allocate context, returning M4ERR_ALLOC"); 1190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return (M4OSA_ERR)M4ERR_ALLOC; 1200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 1210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 1220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 1230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Reset context variables */ 1240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi apContext->pMP4Context = M4OSA_NULL; 1250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi apContext->maxAUsizes = 0; 1260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 1270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 1280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Return the writer context */ 1290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *pContext = (M4WRITER_Context *)apContext; 1300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 1310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 1320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Launch the openWrite of the MP4 writer */ 1330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_0("M4WRITER_3GP_openWrite: calling M4MP4W_openWrite()"); 1340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 1350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MP4W_openWrite(&apContext->pMP4Context, outputFileDescriptor, 1360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pFileWriterPointer, tempFileDescriptor, pFileReaderPointer ); 1370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 1380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4OSA_ERR_IS_ERROR(err)) 1390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 1400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1("M4WRITER_3GP_openWrite: " 1410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MP4W_openWrite returns error 0x%x", err); 1420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 1430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 1440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE2_1("M4WRITER_3GP_openWrite: returning 0x%x", err); 1450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 1460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 1470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 1480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 1490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 1500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/****************************************************************************** 1510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_ERR M4WRITER_3GP_startWriting(M4WRITER_Context pContext) 1520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief Indicates to the writer that the setup session is ended and that 1530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * we will start to write. 1540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @note 1550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param pContext: (IN) Execution context of the 3GP writer, 1560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4NO_ERROR: there is no error 1570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4ERR_PARAMETER: pContext is M4OSA_NULL (debug only) 1580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return any error returned by the MP4 core writer startWriting (Its 1590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * coreID is M4MP4_WRITER) 1600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 1610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi*/ 1620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR M4WRITER_3GP_startWriting(M4WRITER_Context pContext) 1630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 1640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4WRITER_3GP_InternalContext* apContext = 1650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4WRITER_3GP_InternalContext*)pContext; 1660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 1670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_ERR err; 1680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 1690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1("M4WRITER_3GP_startWriting: pContext=0x%x", pContext); 1700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 1710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 1720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Check input parameter */ 1730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL == apContext),M4ERR_PARAMETER, 1740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4WRITER_3GP_startWriting: pContext is M4OSA_NULL"); 1750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 1760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 1770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Call the MP4 core writer */ 1780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_0("M4WRITER_3GP_startWriting: calling M4MP4W_startWriting()"); 1790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MP4W_startWriting(apContext->pMP4Context); 1800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4OSA_ERR_IS_ERROR(err)) 1810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 1820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1("M4MP4W_startWriting returns error 0x%x", err); 1830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 1840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 1850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE2_1("M4WRITER_3GP_startWriting: returning 0x%x", err); 1860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 1870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 1880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 1890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 1900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/****************************************************************************** 1910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_ERR M4WRITER_3GP_addStream( 1920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4WRITER_Context pContext, 1930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4SYS_StreamDescription *pStreamDescription) 1940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief Add a stream (audio or video). 1950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @note Decoder specific info properties are correctly set before calling 1960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * the core writer add function 1970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param pContext: (IN) Execution context of the 3GP writer, 1980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param streamDescription: (IN) stream description. 1990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4NO_ERROR: there is no error 2000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4ERR_PARAMETER: pContext or pStreamDescription is M4OSA_NULL 2010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * (debug only) 2020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return any error returned by the MP4 core writer addStream 2030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * (Its coreID is M4MP4_WRITER) 2040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 2050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi*/ 2060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR M4WRITER_3GP_addStream(M4WRITER_Context pContext, 2070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4SYS_StreamDescription* pStreamDescription) 2080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 2090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4WRITER_3GP_InternalContext *apContext = 2100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4WRITER_3GP_InternalContext *)pContext; 2110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 2120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_ERR err; 2130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4WRITER_StreamVideoInfos *pVideoInfo = M4OSA_NULL; 2140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4WRITER_StreamAudioInfos *pAudioInfo = M4OSA_NULL; 2150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MP4W_StreamIDsize sizeValue; 2160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 2170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_2("M4WRITER_3GP_addStream: pContext=0x%x, " 2180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "pStreamDescription=0x%x", 2190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pContext, pStreamDescription); 2200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 2210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 2220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Check input parameters */ 2230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL == apContext),M4ERR_PARAMETER, 2240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4WRITER_3GP_addStream: pContext is M4OSA_NULL"); 2250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL == pStreamDescription),M4ERR_PARAMETER, 2260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4WRITER_3GP_addStream: pStreamDescription is M4OSA_NULL"); 2270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 2280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 2290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Adapt audio/video stream infos */ 2300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi switch (pStreamDescription->streamType) 2310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 2320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4SYS_kMPEG_4: 2330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4SYS_kH264: 2340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4SYS_kH263: 2350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_1("M4WRITER_3GP_addStream: " 2360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "adding a Video stream (streamType=0x%x)", 2370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pStreamDescription->streamType); 2380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 2390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Common descriptions */ 2400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pStreamDescription->streamID = VideoStreamID; /**< The only values checked by our 2410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi core writer are streamID */ 2420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pStreamDescription->timeScale = 1000; /**< and timeScale */ 2430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 2440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/* Not recommended for video editing -> write explicitely the 'bitr' box into 'd263' */ 2450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/* Rem : it is REL 5 of 3gpp documentation */ 2460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi// /** 2470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi// * Average bit-rate must not be set in H263 to be compatible with Platform4 */ 2480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi// if (M4SYS_kH263 == pStreamDescription->streamType) 2490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi// { 2500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi// pStreamDescription->averageBitrate = -1; 2510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi// } 2520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 2530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 2540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Decoder specific info */ 2550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pVideoInfo = (M4WRITER_StreamVideoInfos *)pStreamDescription->decoderSpecificInfo; 2560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pStreamDescription->decoderSpecificInfoSize = pVideoInfo->Header.Size; 2570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pStreamDescription->decoderSpecificInfo = (M4OSA_MemAddr32)pVideoInfo->Header.pBuf; 2580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_2("M4WRITER_3GP_addStream: Video: DSI=0x%x, DSIsize=%d", 2590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pVideoInfo->Header.pBuf, pVideoInfo->Header.Size); 2600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 2610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 2620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4SYS_kAMR: 2630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4SYS_kAMR_WB: 2640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4SYS_kAAC: 2650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4SYS_kEVRC: 2660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_1("M4WRITER_3GP_addStream: adding an Audio stream (streamType=0x%x)", 2670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pStreamDescription->streamType); 2680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 2690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Common descriptions */ 2700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pStreamDescription->streamID = AudioStreamID; /**< The only value checked by our 2710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi core writer is streamID */ 2720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 2730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 2740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Decoder specific info */ 2750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pAudioInfo = (M4WRITER_StreamAudioInfos *)pStreamDescription->decoderSpecificInfo; 2760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pStreamDescription->decoderSpecificInfoSize = pAudioInfo->Header.Size; 2770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pStreamDescription->decoderSpecificInfo = (M4OSA_MemAddr32)pAudioInfo->Header.pBuf; 2780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_2("M4WRITER_3GP_addStream: Audio: DSI=0x%x, DSIsize=%d", 2790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pAudioInfo->Header.pBuf, pAudioInfo->Header.Size); 2800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 2810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 2820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi default: 2830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1("M4WRITER_3GP_addStream:\ 2840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi returning M4WRITER_3GP_ERR_UNSUPPORTED_STREAM_TYPE (streamType=0x%x)", 2850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pStreamDescription->streamType); 2860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return (M4OSA_ERR)M4WRITER_3GP_ERR_UNSUPPORTED_STREAM_TYPE; 2870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 2880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 2890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 2900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 2910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Call the MP4 core writer */ 2920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_0("M4WRITER_3GP_addStream: calling M4MP4W_addStream()"); 2930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MP4W_addStream(apContext->pMP4Context,pStreamDescription); 2940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4OSA_ERR_IS_ERROR(err)) 2950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 2960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1("M4WRITER_3GP_addStream: M4MP4W_addStream returns error 0x%x", err); 2970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1("M4WRITER_3GP_addStream: returning 0x%x", err); 2980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return (err); 2990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 3000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 3010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 3020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * For Video, set the M4MP4W_trackSize Option */ 3030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi switch (pStreamDescription->streamType) 3040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 3050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4SYS_kMPEG_4: 3060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4SYS_kH264: 3070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4SYS_kH263: 3080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sizeValue.streamID = VideoStreamID; 3090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sizeValue.height = (M4OSA_UInt16)(pVideoInfo->height); 3100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sizeValue.width = (M4OSA_UInt16)(pVideoInfo->width); 3110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_2("M4WRITER_3GP_addStream: Video: height=%d, width=%d", 3120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sizeValue.height, sizeValue.width); 3130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 3140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_0("M4WRITER_3GP_addStream: calling M4MP4W_setOption(M4MP4W_trackSize)"); 3150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MP4W_setOption( apContext->pMP4Context, M4MP4W_trackSize, 3160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_DataOption)&sizeValue); 3170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4OSA_ERR_IS_ERROR(err)) 3180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 3190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1("M4WRITER_3GP_addStream: M4MP4W_setOption returns error 0x%x", 3200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 3210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 3220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 3230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi default: 3240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 3250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 3260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 3270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE2_1("M4WRITER_3GP_addStream: returning 0x%x", err); 3280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 3290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 3300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 3310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 3320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/****************************************************************************** 3330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_ERR M4WRITER_3GP_closeWrite(M4WRITER_Context pContext) 3340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief Close the writer. The context is freed here. 3350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @note 3360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param pContext: (IN) Execution context of the 3GP writer, 3370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4NO_ERROR: there is no error 3380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4ERR_PARAMETER: pContext is M4OSA_NULL (debug only) 3390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return any error returned by the MP4 core writer closeWrite (Its coreID 3400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * is M4MP4_WRITER) 3410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 3420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi*/ 3430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR M4WRITER_3GP_closeWrite(M4WRITER_Context pContext) 3440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 3450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4WRITER_3GP_InternalContext* apContext=(M4WRITER_3GP_InternalContext*)pContext; 3460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 3470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 3480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1("M4WRITER_3GP_closeWrite called with pContext=0x%x", pContext); 3490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 3500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 3510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Check input parameter */ 3520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL == apContext),M4ERR_PARAMETER, 3530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4WRITER_3GP_closeWrite: pContext is M4OSA_NULL"); 3540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 3550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 3560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Call the MP4 core writer */ 3570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4OSA_NULL != apContext->pMP4Context) 3580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 3590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_0("M4WRITER_3GP_closeWrite: calling M4MP4W_closeWrite()"); 3600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MP4W_closeWrite(apContext->pMP4Context); 3610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4OSA_ERR_IS_ERROR(err)) 3620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 3630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1("M4WRITER_3GP_closeWrite: M4MP4W_closeWrite returns error 0x%x", err); 3640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 3650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 3660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 3670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 3680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Deallocate our own context */ 3690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_free((M4OSA_MemAddr32)apContext); 3700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 3710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE2_1("M4WRITER_3GP_closeWrite: returning 0x%x", err); 3720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 3730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 3740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 3750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 3760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/****************************************************************************** 3770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_ERR M4WRITER_3GP_setOption( 3780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4WRITER_Context pContext, M4OSA_UInt32 optionID, 3790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_DataOption optionValue) 3800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief This function asks the writer to set the value associated with 3810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * the optionID. The caller is responsible for allocating/ 3820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * de-allocating the memory of the value field. 3830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @note The options handled by the component depend on the implementation 3840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * of the component. 3850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param pContext: (IN) Execution context of the 3GP writer, 3860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param pptionId: (IN) ID of the option to set. 3870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param OptionValue : (IN) Value of the option to set. 3880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4NO_ERROR: there is no error 3890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4ERR_PARAMETER: pContext is M4OSA_NULL (debug only) 3900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4ERR_BAD_OPTION_ID: the ID of the option is not valid. 3910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return any error returned by the MP4 core writer setOption (Its coreID 3920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * is M4MP4_WRITER) 3930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 3940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi*/ 3950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR M4WRITER_3GP_setOption( 3960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4WRITER_Context pContext, M4OSA_UInt32 optionID, 3970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DataOption optionValue) 3980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 3990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4WRITER_3GP_InternalContext* apContext = 4000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4WRITER_3GP_InternalContext*)pContext; 4010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 4020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 4030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MP4W_memAddr memval; 4040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4SYS_StreamIDValue optval; 4050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 4060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE2_3("M4WRITER_3GP_setOption: pContext=0x%x, optionID=0x%x,\ 4070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi optionValue=0x%x", pContext, optionID, optionValue); 4080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 4090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 4100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Check input parameter */ 4110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL==apContext),M4ERR_PARAMETER, 4120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4WRITER_3GP_setOption: pContext is M4OSA_NULL"); 4130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 4140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi switch (optionID) 4150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 4160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 4170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Maximum Access Unit size */ 4180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4WRITER_kMaxAUSize: 4190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE2_0("setting M4WRITER_kMaxAUSize option"); 4200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MP4W_setOption( 4210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi apContext->pMP4Context,M4MP4W_maxAUsize, optionValue); 4220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4OSA_ERR_IS_ERROR(err)) 4230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 4240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1("M4MP4W_setOption(M4MP4W_maxAUsize) " 4250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "returns error 0x%x", err); 4260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 4270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 4280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 4290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Maximum chunck size */ 4300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4WRITER_kMaxChunckSize: 4310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE2_0("setting M4WRITER_kMaxChunckSize option"); 4320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MP4W_setOption( 4330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi apContext->pMP4Context,M4MP4W_maxChunkSize, optionValue); 4340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4OSA_ERR_IS_ERROR(err)) 4350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 4360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1("M4MP4W_setOption(M4MP4W_maxChunkSize)\ 4370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi returns error 0x%x", err); 4380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 4390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 4400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 4410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * File string signature */ 4420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4WRITER_kEmbeddedString: 4430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE2_0("setting M4WRITER_kEmbeddedString option"); 4440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* The given M4OSA_DataOption must actually 4450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi be a text string */ 4460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi memval.addr = (M4OSA_MemAddr32)optionValue; 4470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /**< this is max string size copied by the core */ 4480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi memval.size = 16; 4490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MP4W_setOption( 4500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi apContext->pMP4Context,M4MP4W_embeddedString, &memval); 4510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4OSA_ERR_IS_ERROR(err)) 4520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 4530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1("M4MP4W_setOption(M4MP4W_embeddedString)\ 4540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi returns error 0x%x", err); 4550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 4560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 4570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 4580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * File integration tag */ 4590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4WRITER_kIntegrationTag: 4600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE2_0("setting M4WRITER_kIntegrationTag option"); 4610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* The given M4OSA_DataOption must actually 4620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi be a text string */ 4630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi memval.addr = (M4OSA_MemAddr32)optionValue; 4640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /**< this is max string size copied by the core */ 4650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi memval.size = M4OSA_chrLength(optionValue); 4660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MP4W_setOption( 4670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi apContext->pMP4Context,M4MP4W_integrationTag, &memval); 4680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4OSA_ERR_IS_ERROR(err)) 4690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 4700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1("M4MP4W_setOption(M4MP4W_integrationTag)" 4710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi " returns error 0x%x", err); 4720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 4730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 4740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 4750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * File version signature */ 4760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4WRITER_kEmbeddedVersion: 4770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE2_0("setting M4WRITER_kEmbeddedVersion option"); 4780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* The given M4OSA_DataOption must actually 4790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi be a version number */ 4800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 4810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /**< Here 0 means both streams */ 4820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi optval.streamID = 0; 4830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /**< version number */ 4840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi optval.value = *(M4OSA_UInt32*)optionValue; 4850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MP4W_setOption( 4860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi apContext->pMP4Context,M4MP4W_CamcoderVersion, &optval); 4870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4OSA_ERR_IS_ERROR(err)) 4880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 4890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1("M4MP4W_setOption(M4MP4W_CamcoderVersion)" 4900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi " returns error 0x%x", err); 4910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 4920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 4930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 4940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Some options are read-only */ 4950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4WRITER_kFileSize: 4960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4WRITER_kFileSizeAudioEstimated: 4970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE2_1("trying to set a read-only option! (ID=0x%x)", 4980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi optionID); 4990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return (M4OSA_ERR)M4ERR_READ_ONLY; 5000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 5010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 5020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Maximum filesize limitation */ 5030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4WRITER_kMaxFileSize: 5040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE2_0("setting M4WRITER_kMaxFileSize option"); 5050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MP4W_setOption( 5060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi apContext->pMP4Context,M4MP4W_maxFileSize, optionValue); 5070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4OSA_ERR_IS_ERROR(err)) 5080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 5090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1("M4MP4W_setOption(M4MP4W_maxFileSize)\ 5100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi returns error 0x%x", err); 5110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 5120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 5130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 5140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 5150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Maximum file duration limitation */ 5160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4WRITER_kMaxFileDuration: 5170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE2_0("setting M4WRITER_kMaxFileDuration option"); 5180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MP4W_setOption( 5190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi apContext->pMP4Context,M4MP4W_maxFileDuration, optionValue); 5200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4OSA_ERR_IS_ERROR(err)) 5210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 5220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1("M4MP4W_setOption(M4WRITER_kMaxFileDuration)" 5230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi " returns error 0x%x", err); 5240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 5250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 5260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 5270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 5280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Set 'ftyp' atom */ 5290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4WRITER_kSetFtypBox: 5300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE2_0("setting M4WRITER_kSetFtypBox option"); 5310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MP4W_setOption( 5320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi apContext->pMP4Context, M4MP4W_setFtypBox, optionValue); 5330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4OSA_ERR_IS_ERROR(err)) 5340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 5350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1("M4MP4W_setOption(M4MP4W_setFtypBox)\ 5360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi returns error 0x%x", err); 5370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 5380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 5390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 5400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 5410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Decoder Specific Info */ 5420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4WRITER_kDSI: 5430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE2_0("setting M4WRITER_kDSI option"); 5440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MP4W_setOption( 5450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi apContext->pMP4Context, M4MP4W_DSI, optionValue); 5460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4OSA_ERR_IS_ERROR(err)) 5470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 5480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1("M4MP4W_setOption(M4MP4W_DSI)\ 5490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi returns error 0x%x", err); 5500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 5510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 5520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*+ H.264 Trimming */ 5530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4WRITER_kMUL_PPS_SPS: 5540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE2_0("setting M4WRITER_kMUL_PPS_SPS option"); 5550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MP4W_setOption( 5560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi apContext->pMP4Context, M4MP4W_MUL_PPS_SPS, optionValue); 5570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4OSA_ERR_IS_ERROR(err)) 5580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 5590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1("M4MP4W_setOption(M4MP4W_DSI)\ 5600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi returns error 0x%x", err); 5610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 5620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 5630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*- H.264 Trimming */ 5640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 5650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 5660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Unknown option */ 5670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi default: 5680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE2_1("trying to set an unknown option!\ 5690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (optionID=0x%x)", optionID); 5700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return (M4OSA_ERR)M4ERR_BAD_OPTION_ID; 5710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 5720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 5730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 5740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_1("M4WRITER_3GP_setOption: returning 0x%x", err); 5750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 5760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 5770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 5780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 5790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/****************************************************************************** 5800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_ERR M4WRITER_3GP_getOption( 5810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4WRITER_Context pContext, M4OSA_UInt32 optionID, 5820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_DataOption optionValue) 5830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief This function asks the writer to return the value associated with 5840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * the optionID. The caller is responsible for allocating/ 5850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * de-allocating the memory of the value field. 5860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @note The options handled by the component depend on the implementation 5870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * of the component. 5880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param pContext: (IN) Execution context of the 3GP writer, 5890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param OptionId: (IN) Id of the option to get. 5900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param pOptionValue: (OUT) Value of the option to get. 5910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4NO_ERROR: there is no error 5920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4ERR_PARAMETER: pContext is M4OSA_NULL (debug only) 5930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4ERR_BAD_OPTION_ID: the ID of the option is not valid. 5940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4ERR_NOT_IMPLEMENTED: This option is not implemented yet. 5950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return any error returned by the MP4 core writer getOption (Its coreID 5960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * is M4MP4_WRITER) 5970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 5980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi*/ 5990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR M4WRITER_3GP_getOption( 6000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4WRITER_Context pContext, M4OSA_UInt32 optionID, 6010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DataOption optionValue) 6020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 6030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4WRITER_3GP_InternalContext* apContext = 6040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4WRITER_3GP_InternalContext*)pContext; 6050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 6060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_ERR err; 6070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 6080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE2_3("M4WRITER_3GP_getOption: pContext=0x%x, optionID=0x%x,\ 6090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi optionValue=0x%x", pContext, optionID, optionValue); 6100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 6110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 6120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Check input parameter */ 6130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL == apContext),M4ERR_PARAMETER, 6140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4WRITER_3GP_getOption: pContext is M4OSA_NULL"); 6150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 6160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi switch (optionID) 6170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 6180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 6190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Maximum Access Unit size */ 6200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4WRITER_kMaxAUSize: 6210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE2_0("getting M4WRITER_kMaxAUSize option"); 6220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MP4W_getOption(apContext->pMP4Context,M4MP4W_maxAUsize, 6230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_DataOption*)&optionValue); 6240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4OSA_ERR_IS_ERROR(err)) 6250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 6260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1("M4MP4W_getOption(M4MP4W_maxAUsize)" 6270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi " returns error 0x%x", err); 6280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 6290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 6300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 6310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Maximum chunck size */ 6320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4WRITER_kMaxChunckSize: 6330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE2_0("getting M4WRITER_kMaxChunckSize option"); 6340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MP4W_getOption(apContext->pMP4Context,M4MP4W_maxChunkSize, 6350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_DataOption*)&optionValue); 6360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4OSA_ERR_IS_ERROR(err)) 6370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 6380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1("M4MP4W_getOption(M4MP4W_maxChunkSize)\ 6390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi returns error 0x%x", err); 6400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 6410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 6420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 6430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * The file size option */ 6440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4WRITER_kFileSize: 6450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE2_0("getting M4WRITER_kFileSize option"); 6460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* get the current file size */ 6470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MP4W_getCurrentFileSize( 6480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi apContext->pMP4Context, (M4OSA_UInt32*)optionValue); 6490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4OSA_ERR_IS_ERROR(err)) 6500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 6510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1("M4MP4W_getCurrentFileSize" 6520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi " returns error 0x%x", err); 6530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 6540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 6550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 6560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * The file size with audio option has its own function call 6570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi in the MP4 core writer */ 6580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4WRITER_kFileSizeAudioEstimated: 6590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE2_0("getting M4WRITER_kFileSizeAudioEstimated option"); 6600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* get the current file size ... */ 6610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MP4W_getCurrentFileSize( 6620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi apContext->pMP4Context, (M4OSA_UInt32*)optionValue); 6630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4OSA_ERR_IS_ERROR(err)) 6640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 6650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1("M4MP4W_getCurrentFileSize" 6660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi " returns error 0x%x", err); 6670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 6680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi //no more needed 3gp writer has its own mecanism 6690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ///* ... add the estimated next max AU size */ 6700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi //*((M4OSA_UInt32*)optionValue) += apContext->maxAUsizes; 6710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 6720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 6730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Unknown option */ 6740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi default: 6750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE2_1("trying to get an unknown option!\ 6760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (optionID=0x%x)", optionID); 6770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return (M4OSA_ERR)M4ERR_BAD_OPTION_ID; 6780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 6790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 6800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 6810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_1("M4WRITER_3GP_getOption: returning 0x%x", err); 6820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 6830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 6840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 6850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 6860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/****************************************************************************** 6870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_ERR M4WRITER_3GP_startAU( 6880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4WRITER_Context pContext, M4SYS_StreamID streamID, 6890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4SYS_AccessUnit* pAU) 6900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief Prepare an Access Unit to be ready to store data 6910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @note 6920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param pContext: (IN) Execution context of the 3GP writer, 6930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param streamID: (IN) Id of the stream to which the Access Unit 6940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * is related. 6950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param pAU: (IN/OUT) Access Unit to be prepared. 6960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4NO_ERROR: there is no error 6970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4ERR_PARAMETER: pContext or pAU is M4OSA_NULL (debug only) 6980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4ERR_BAD_STREAM_ID: streamID is not VideoStreamID nor 6990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * AudioStreamID (debug only) 7000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return any error returned by the MP4 core writer startAU (Its coreID 7010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * is M4MP4_WRITER) 7020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 7030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi*/ 7040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR M4WRITER_3GP_startAU( 7050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4WRITER_Context pContext, M4SYS_StreamID streamID, 7060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4SYS_AccessUnit* pAU) 7070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 7080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4WRITER_3GP_InternalContext* apContext = 7090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4WRITER_3GP_InternalContext*)pContext; 7100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 7110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_ERR err; 7120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 7130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE2_3("M4WRITER_3GP_startAU: pContext=0x%x, streamID=%d, pAU=0x%x", 7140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pContext, streamID, pAU); 7150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 7160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 7170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Check input parameter */ 7180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL == apContext), M4ERR_PARAMETER, 7190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4WRITER_3GP_startAU: pContext is M4OSA_NULL"); 7200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL == pAU), M4ERR_PARAMETER, 7210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4WRITER_3GP_startAU: pAU is M4OSA_NULL"); 7220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF2( 7230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ((VideoStreamID != streamID) && (AudioStreamID != streamID)), 7240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4ERR_BAD_STREAM_ID, 7250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4WRITER_3GP_processAU: Wrong streamID"); 7260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 7270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 7280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Call the MP4 writer */ 7290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_0("M4WRITER_3GP_startAU: calling M4MP4W_startAU()"); 7300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MP4W_startAU(apContext->pMP4Context, streamID, pAU); 7310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4OSA_ERR_IS_ERROR(err)) 7320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 7330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1("M4MP4W_startAU returns error 0x%x", err); 7340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 7350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 7360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_2("AU: dataAddress=0x%x, size=%d", 7370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pAU->dataAddress, pAU->size); 7380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 7390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Convert oversize to a request toward VES automaton */ 7400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4WAR_MP4W_OVERSIZE == err) 7410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 7420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4WAR_WRITER_STOP_REQ; 7430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 7440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 7450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_1("M4WRITER_3GP_startAU: returning 0x%x", err); 7460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 7470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 7480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 7490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 7500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/****************************************************************************** 7510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_ERR M4WRITER_3GP_processAU( 7520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4WRITER_Context pContext, M4SYS_StreamID streamID, 7530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4SYS_AccessUnit* pAU) 7540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief Write an Access Unit 7550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @note 7560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param pContext: (IN) Execution context of the 3GP writer, 7570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param streamID: (IN) Id of the stream to which the Access Unit 7580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * is related. 7590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param pAU: (IN/OUT) Access Unit to be written 7600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4NO_ERROR: there is no error 7610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4ERR_PARAMETER: pContext or pAU is M4OSA_NULL (debug only) 7620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4ERR_BAD_STREAM_ID: streamID is not VideoStreamID nor 7630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * AudioStreamID (debug only) 7640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return any error returned by the MP4 core writer processAU 7650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * (Its coreID is M4MP4_WRITER) 7660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 7670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi*/ 7680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR M4WRITER_3GP_processAU( 7690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4WRITER_Context pContext, M4SYS_StreamID streamID, 7700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4SYS_AccessUnit* pAU) 7710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 7720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4WRITER_3GP_InternalContext* apContext = 7730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4WRITER_3GP_InternalContext*)pContext; 7740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 7750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_ERR err; 7760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 7770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE2_3("M4WRITER_3GP_processAU: " 7780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "pContext=0x%x, streamID=%d, pAU=0x%x", 7790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pContext, streamID, pAU); 7800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 7810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 7820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Check input parameter */ 7830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL == apContext), M4ERR_PARAMETER, 7840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4WRITER_3GP_processAU: pContext is M4OSA_NULL"); 7850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL == pAU), M4ERR_PARAMETER, 7860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4WRITER_3GP_processAU: pAU is M4OSA_NULL"); 7870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF2( 7880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ((VideoStreamID != streamID) && (AudioStreamID != streamID)), 7890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4ERR_BAD_STREAM_ID, 7900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4WRITER_3GP_processAU: Wrong streamID"); 7910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 7920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_4("M4WRITER_3GP_processAU: AU: " 7930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "dataAddress=0x%x, size=%d, CTS=%d, nbFrag=%d", 7940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pAU->dataAddress, pAU->size, (M4OSA_UInt32)pAU->CTS, pAU->nbFrag); 7950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 7960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if(pAU->size > apContext->maxAUsizes) 7970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 7980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi apContext->maxAUsizes = pAU->size; 7990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 8000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 8010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Call the MP4 writer */ 8020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_0("M4WRITER_3GP_processAU: calling M4MP4W_processAU()"); 8030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MP4W_processAU(apContext->pMP4Context, streamID, pAU); 8040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4OSA_ERR_IS_ERROR(err)) 8050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 8060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1("M4MP4W_processAU returns error 0x%x", err); 8070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 8080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 8090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Convert oversize to a request toward VES automaton */ 8100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if(M4WAR_MP4W_OVERSIZE == err) 8110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 8120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4WAR_WRITER_STOP_REQ; 8130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 8140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 8150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_1("M4WRITER_3GP_processAU: returning 0x%x", err); 8160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 8170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 8180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 8190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 8200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/****************************************************************************** 8210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_ERR M4WRITER_3GP_getInterfaces( 8220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4WRITER_OutputFileType* Type, 8230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4WRITER_GlobalInterface** SrcGlobalInterface, 8240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4WRITER_DataInterface** SrcDataInterface) 8250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief Get the 3GPP writer common interface 8260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @note Retrieves the set of functions needed to use the 3GPP writer. 8270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * It follows the common writer interface. 8280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param Type: (OUT) return the type of this writer. Will always be 8290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4WRITER_k3GPP. 8300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param SrcGlobalInterface: (OUT) Main set of function to use this 8310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * 3GPP writer 8320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param SrcDataInterface: (OUT) Set of function related to datas 8330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * to use this 3GPP writer 8340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4NO_ERROR: there is no error 8350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4ERR_ALLOC: there is no more available memory 8360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4ERR_PARAMETER: At least one of the parameters is M4OSA_NULL 8370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * (debug only) 8380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 8390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi*/ 8400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR M4WRITER_3GP_getInterfaces( 8410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4WRITER_OutputFileType* Type, 8420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4WRITER_GlobalInterface** SrcGlobalInterface, 8430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4WRITER_DataInterface** SrcDataInterface) 8440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 8450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4WRITER_GlobalInterface *pGlobal; 8460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4WRITER_DataInterface *pData; 8470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 8480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE2_3("M4WRITER_3GP_getInterfaces: " 8490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "Type=0x%x, SrcGlobalInterface=0x%x,\ 8500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi SrcDataInterface=0x%x", Type, SrcGlobalInterface, SrcDataInterface); 8510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 8520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 8530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Check input parameter */ 8540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL == Type), M4ERR_PARAMETER, 8550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4WRITER_3GP_getInterfaces: Type is M4OSA_NULL"); 8560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL == SrcGlobalInterface), M4ERR_PARAMETER, 8570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4WRITER_3GP_getInterfaces: SrcGlobalInterface is M4OSA_NULL"); 8580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL == SrcDataInterface), M4ERR_PARAMETER, 8590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4WRITER_3GP_getInterfaces: SrcDataInterface is M4OSA_NULL"); 8600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 8610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 8620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Set the output type */ 8630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *Type = M4WRITER_k3GPP; 8640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 8650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 8660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Allocate the global interface structure */ 8670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pGlobal = (M4WRITER_GlobalInterface*)M4OSA_malloc( 8680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sizeof(M4WRITER_GlobalInterface), 8690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4WRITER_3GP, (M4OSA_Char *)"M4WRITER_GlobalInterface"); 8700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4OSA_NULL == pGlobal) 8710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 8720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_0("unable to allocate M4WRITER_GlobalInterface,\ 8730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi returning M4ERR_ALLOC"); 8740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *SrcGlobalInterface = M4OSA_NULL; 8750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *SrcDataInterface = M4OSA_NULL; 8760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return (M4OSA_ERR)M4ERR_ALLOC; 8770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 8780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 8790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 8800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Allocate the data interface structure */ 8810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pData = 8820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4WRITER_DataInterface *)M4OSA_malloc(sizeof(M4WRITER_DataInterface), 8830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4WRITER_3GP, (M4OSA_Char *)"M4WRITER_DataInterface"); 8840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4OSA_NULL == pData) 8850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 8860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_0("unable to allocate M4WRITER_DataInterface,\ 8870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi returning M4ERR_ALLOC"); 8880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_free((M4OSA_MemAddr32)pGlobal); 8890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *SrcGlobalInterface = M4OSA_NULL; 8900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *SrcDataInterface = M4OSA_NULL; 8910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return (M4OSA_ERR)M4ERR_ALLOC; 8920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 8930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 8940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 8950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Fill the global interface structure */ 8960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pGlobal->pFctOpen = M4WRITER_3GP_openWrite; 8970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pGlobal->pFctAddStream = M4WRITER_3GP_addStream; 8980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pGlobal->pFctStartWriting = M4WRITER_3GP_startWriting; 8990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pGlobal->pFctCloseWrite = M4WRITER_3GP_closeWrite; 9000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pGlobal->pFctSetOption = M4WRITER_3GP_setOption; 9010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pGlobal->pFctGetOption = M4WRITER_3GP_getOption; 9020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 9030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 9040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Fill the data interface structure */ 9050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pData->pStartAU = M4WRITER_3GP_startAU; 9060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pData->pProcessAU = M4WRITER_3GP_processAU; 9070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 9080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 9090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Set the return values */ 9100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *SrcGlobalInterface = pGlobal; 9110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *SrcDataInterface = pData; 9120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 9130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE2_0("M4WRITER_3GP_getInterfaces: returning M4NO_ERROR"); 9140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4NO_ERROR; 9150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 9160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 917