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