17c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* 27c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Copyright (C) 2011 The Android Open Source Project 37c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 47c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Licensed under the Apache License, Version 2.0 (the "License"); 57c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * you may not use this file except in compliance with the License. 67c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * You may obtain a copy of the License at 77c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 87c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * http://www.apache.org/licenses/LICENSE-2.0 97c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Unless required by applicable law or agreed to in writing, software 117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * distributed under the License is distributed on an "AS IS" BASIS, 127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * See the License for the specific language governing permissions and 147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * limitations under the License. 157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @file M4MP4W_Interface.c 207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief 3GPP file writer interface 217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note This implementation follows the common interface defined 227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * in "M4WRITER_common.h". 237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "NXPSW_CompilerSwitches.h" 277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * OSAL includes */ 307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4OSA_Types.h" /**< OSAL basic types definiton */ 317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4OSA_FileWriter.h" /**< Include for OSAL file accesses implementation */ 327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4OSA_Memory.h" /**< Include for OSAL memory accesses implementation */ 337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4OSA_Debug.h" /**< OSAL debug tools */ 347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Writer includes */ 377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4WRITER_common.h" /**< Definition of the writer common interface that 387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi this module follows */ 397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef _M4MP4W_USE_CST_MEMORY_WRITER 417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4MP4W_Types_CstMem.h" /**< MP4/3GP core writer types */ 427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4MP4W_Writer_CstMem.h" /**< MP4/3GP core writer functions */ 437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#else 447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4MP4W_Types.h" /**< MP4/3GP core writer types */ 457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4MP4W_Writer.h" /**< MP4/3GP core writer functions */ 467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif /* _M4MP4W_USE_CST_MEMORY_WRITER */ 477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Specific errors for this module */ 507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define M4WRITER_3GP_ERR_UNSUPPORTED_STREAM_TYPE \ 517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR_CREATE(M4_ERR, M4WRITER_3GP, 0x000001) 527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * structure M4WRITER_3GP_InternalContext 577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief This structure defines the writer context (private) 587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note This structure is used for all writer calls to store the context 597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargitypedef struct 627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Context pMP4Context; /**< MP4 writer context */ 647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 maxAUsizes; /**< the maximum AU size possible */ 657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} M4WRITER_3GP_InternalContext; 667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/****************************************************************************** 697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4WRITER_3GP_openWrite(M4WRITER_Context* pContext, void* pWhat, 707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_FileWriterPointer* pFileWriterPointer) 717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief Open a writer session. 727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note 737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pContext: (OUT) Execution context of the 3GP writer, allocated by this function. 747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param outputFileDescriptor (IN) Descriptor of the output file to create. 757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param fileWriterFunction (IN) Pointer to structure containing the set of OSAL 767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * file write functions. 777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param tempFileDescriptor (IN) Descriptor of the temporary file to open 787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * (NULL if not used) 797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param fileReaderFunction (IN) Pointer to structure containing the set of OSAL file read 807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * functions (NULL if not used) 817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR: there is no error 827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_ALLOC: there is no more available memory 837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER: pContext or pFilePtrFct is M4OSA_NULL (debug only) 847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return any error returned by the MP4 core writer openWrite (Its coreID is M4MP4_WRITER) 857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4WRITER_3GP_openWrite( M4WRITER_Context* pContext, 887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi void* outputFileDescriptor, 897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_FileWriterPointer* pFileWriterPointer, 907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi void* tempFileDescriptor, 917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_FileReadPointer* pFileReaderPointer ) 927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4WRITER_3GP_InternalContext* apContext; 947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err; 957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("M4WRITER_3GP_openWrite"); 977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Check input parameters */ 1007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL == pContext),M4ERR_PARAMETER, 1017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "M4WRITER_3GP_openWrite: pContext is M4OSA_NULL"); 1027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL == pFileWriterPointer),M4ERR_PARAMETER, 1037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "M4WRITER_3GP_openWrite: pFileWriterPointer is M4OSA_NULL"); 1047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 1067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Allocate memory for the context */ 1077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *pContext=M4OSA_NULL; 108694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu apContext = (M4WRITER_3GP_InternalContext*)M4OSA_32bitAlignedMalloc( 1097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi sizeof(M4WRITER_3GP_InternalContext), 1107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4WRITER_3GP, 1117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_Char *)"M4WRITER_3GP_InternalContext"); 1127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_NULL == apContext) 1147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 1157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("M4WRITER_3GP_openWrite:\ 1167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi unable to allocate context, returning M4ERR_ALLOC"); 1177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return (M4OSA_ERR)M4ERR_ALLOC; 1187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 1197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 1217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Reset context variables */ 1227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi apContext->pMP4Context = M4OSA_NULL; 1237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi apContext->maxAUsizes = 0; 1247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 1267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Return the writer context */ 1277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *pContext = (M4WRITER_Context *)apContext; 1287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 1307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Launch the openWrite of the MP4 writer */ 1317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE3_0("M4WRITER_3GP_openWrite: calling M4MP4W_openWrite()"); 1327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4MP4W_openWrite(&apContext->pMP4Context, outputFileDescriptor, 1347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pFileWriterPointer, tempFileDescriptor, pFileReaderPointer ); 1357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_ERR_IS_ERROR(err)) 1377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 1387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4WRITER_3GP_openWrite: " 1397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "M4MP4W_openWrite returns error 0x%x", err); 1407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 1417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE2_1("M4WRITER_3GP_openWrite: returning 0x%x", err); 1437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 1457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 1467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/****************************************************************************** 1497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4WRITER_3GP_startWriting(M4WRITER_Context pContext) 1507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief Indicates to the writer that the setup session is ended and that 1517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * we will start to write. 1527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note 1537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pContext: (IN) Execution context of the 3GP writer, 1547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR: there is no error 1557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER: pContext is M4OSA_NULL (debug only) 1567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return any error returned by the MP4 core writer startWriting (Its 1577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * coreID is M4MP4_WRITER) 1587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 1597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 1607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4WRITER_3GP_startWriting(M4WRITER_Context pContext) 1617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 1627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4WRITER_3GP_InternalContext* apContext = 1637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4WRITER_3GP_InternalContext*)pContext; 1647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err; 1667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4WRITER_3GP_startWriting: pContext=0x%x", pContext); 1687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 1707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Check input parameter */ 1717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL == apContext),M4ERR_PARAMETER, 1727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "M4WRITER_3GP_startWriting: pContext is M4OSA_NULL"); 1737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 1757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Call the MP4 core writer */ 1767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE3_0("M4WRITER_3GP_startWriting: calling M4MP4W_startWriting()"); 1777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4MP4W_startWriting(apContext->pMP4Context); 1787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_ERR_IS_ERROR(err)) 1797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 1807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4MP4W_startWriting returns error 0x%x", err); 1817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 1827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE2_1("M4WRITER_3GP_startWriting: returning 0x%x", err); 1847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 1857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 1867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/****************************************************************************** 1897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4WRITER_3GP_addStream( 1907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4WRITER_Context pContext, 1917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4SYS_StreamDescription *pStreamDescription) 1927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief Add a stream (audio or video). 1937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note Decoder specific info properties are correctly set before calling 1947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * the core writer add function 1957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pContext: (IN) Execution context of the 3GP writer, 1967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param streamDescription: (IN) stream description. 1977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR: there is no error 1987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER: pContext or pStreamDescription is M4OSA_NULL 1997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * (debug only) 2007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return any error returned by the MP4 core writer addStream 2017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * (Its coreID is M4MP4_WRITER) 2027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 2037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 2047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4WRITER_3GP_addStream(M4WRITER_Context pContext, 2057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_StreamDescription* pStreamDescription) 2067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 2077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4WRITER_3GP_InternalContext *apContext = 2087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4WRITER_3GP_InternalContext *)pContext; 2097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err; 2117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4WRITER_StreamVideoInfos *pVideoInfo = M4OSA_NULL; 2127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4WRITER_StreamAudioInfos *pAudioInfo = M4OSA_NULL; 2137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4MP4W_StreamIDsize sizeValue; 2147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_2("M4WRITER_3GP_addStream: pContext=0x%x, " 2167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "pStreamDescription=0x%x", 2177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pContext, pStreamDescription); 2187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 2207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Check input parameters */ 2217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL == apContext),M4ERR_PARAMETER, 2227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "M4WRITER_3GP_addStream: pContext is M4OSA_NULL"); 2237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL == pStreamDescription),M4ERR_PARAMETER, 2247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "M4WRITER_3GP_addStream: pStreamDescription is M4OSA_NULL"); 2257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 2277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Adapt audio/video stream infos */ 2287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi switch (pStreamDescription->streamType) 2297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 2307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4SYS_kMPEG_4: 2317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4SYS_kH264: 2327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4SYS_kH263: 2337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE3_1("M4WRITER_3GP_addStream: " 2347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "adding a Video stream (streamType=0x%x)", 2357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pStreamDescription->streamType); 2367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 2377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Common descriptions */ 2387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pStreamDescription->streamID = VideoStreamID; /**< The only values checked by our 2397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi core writer are streamID */ 2407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pStreamDescription->timeScale = 1000; /**< and timeScale */ 2417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* Not recommended for video editing -> write explicitely the 'bitr' box into 'd263' */ 2437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* Rem : it is REL 5 of 3gpp documentation */ 2447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi// /** 2457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi// * Average bit-rate must not be set in H263 to be compatible with Platform4 */ 2467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi// if (M4SYS_kH263 == pStreamDescription->streamType) 2477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi// { 2487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi// pStreamDescription->averageBitrate = -1; 2497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi// } 2507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 2527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Decoder specific info */ 2537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pVideoInfo = (M4WRITER_StreamVideoInfos *)pStreamDescription->decoderSpecificInfo; 2547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pStreamDescription->decoderSpecificInfoSize = pVideoInfo->Header.Size; 2557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pStreamDescription->decoderSpecificInfo = (M4OSA_MemAddr32)pVideoInfo->Header.pBuf; 2567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE3_2("M4WRITER_3GP_addStream: Video: DSI=0x%x, DSIsize=%d", 2577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pVideoInfo->Header.pBuf, pVideoInfo->Header.Size); 2587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 2597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4SYS_kAMR: 2617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4SYS_kAMR_WB: 2627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4SYS_kAAC: 2637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4SYS_kEVRC: 2647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE3_1("M4WRITER_3GP_addStream: adding an Audio stream (streamType=0x%x)", 2657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pStreamDescription->streamType); 2667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 2677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Common descriptions */ 2687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pStreamDescription->streamID = AudioStreamID; /**< The only value checked by our 2697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi core writer is streamID */ 2707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 2727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Decoder specific info */ 2737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAudioInfo = (M4WRITER_StreamAudioInfos *)pStreamDescription->decoderSpecificInfo; 2747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pStreamDescription->decoderSpecificInfoSize = pAudioInfo->Header.Size; 2757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pStreamDescription->decoderSpecificInfo = (M4OSA_MemAddr32)pAudioInfo->Header.pBuf; 2767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE3_2("M4WRITER_3GP_addStream: Audio: DSI=0x%x, DSIsize=%d", 2777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAudioInfo->Header.pBuf, pAudioInfo->Header.Size); 2787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 2797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi default: 2817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4WRITER_3GP_addStream:\ 2827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi returning M4WRITER_3GP_ERR_UNSUPPORTED_STREAM_TYPE (streamType=0x%x)", 2837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pStreamDescription->streamType); 2847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return (M4OSA_ERR)M4WRITER_3GP_ERR_UNSUPPORTED_STREAM_TYPE; 2857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 2867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 2877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 2897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Call the MP4 core writer */ 2907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE3_0("M4WRITER_3GP_addStream: calling M4MP4W_addStream()"); 2917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4MP4W_addStream(apContext->pMP4Context,pStreamDescription); 2927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_ERR_IS_ERROR(err)) 2937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 2947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4WRITER_3GP_addStream: M4MP4W_addStream returns error 0x%x", err); 2957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4WRITER_3GP_addStream: returning 0x%x", err); 2967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return (err); 2977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 2987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 3007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * For Video, set the M4MP4W_trackSize Option */ 3017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi switch (pStreamDescription->streamType) 3027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4SYS_kMPEG_4: 3047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4SYS_kH264: 3057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4SYS_kH263: 3067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi sizeValue.streamID = VideoStreamID; 3077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi sizeValue.height = (M4OSA_UInt16)(pVideoInfo->height); 3087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi sizeValue.width = (M4OSA_UInt16)(pVideoInfo->width); 3097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE3_2("M4WRITER_3GP_addStream: Video: height=%d, width=%d", 3107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi sizeValue.height, sizeValue.width); 3117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE3_0("M4WRITER_3GP_addStream: calling M4MP4W_setOption(M4MP4W_trackSize)"); 3137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4MP4W_setOption( apContext->pMP4Context, M4MP4W_trackSize, 3147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_DataOption)&sizeValue); 3157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_ERR_IS_ERROR(err)) 3167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4WRITER_3GP_addStream: M4MP4W_setOption returns error 0x%x", 3187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err); 3197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 3217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi default: 3227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 3237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE2_1("M4WRITER_3GP_addStream: returning 0x%x", err); 3267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 3277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 3287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/****************************************************************************** 3317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4WRITER_3GP_closeWrite(M4WRITER_Context pContext) 3327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief Close the writer. The context is freed here. 3337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note 3347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pContext: (IN) Execution context of the 3GP writer, 3357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR: there is no error 3367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER: pContext is M4OSA_NULL (debug only) 3377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return any error returned by the MP4 core writer closeWrite (Its coreID 3387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * is M4MP4_WRITER) 3397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 3407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 3417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4WRITER_3GP_closeWrite(M4WRITER_Context pContext) 3427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 3437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4WRITER_3GP_InternalContext* apContext=(M4WRITER_3GP_InternalContext*)pContext; 3447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 3457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4WRITER_3GP_closeWrite called with pContext=0x%x", pContext); 3477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 3497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Check input parameter */ 3507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL == apContext),M4ERR_PARAMETER, 3517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "M4WRITER_3GP_closeWrite: pContext is M4OSA_NULL"); 3527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 3547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Call the MP4 core writer */ 3557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_NULL != apContext->pMP4Context) 3567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE3_0("M4WRITER_3GP_closeWrite: calling M4MP4W_closeWrite()"); 3587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4MP4W_closeWrite(apContext->pMP4Context); 3597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_ERR_IS_ERROR(err)) 3607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4WRITER_3GP_closeWrite: M4MP4W_closeWrite returns error 0x%x", err); 3627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 3667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Deallocate our own context */ 367694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(apContext); 3687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE2_1("M4WRITER_3GP_closeWrite: returning 0x%x", err); 3707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 3717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 3727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/****************************************************************************** 3757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4WRITER_3GP_setOption( 3767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4WRITER_Context pContext, M4OSA_UInt32 optionID, 3777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_DataOption optionValue) 3787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief This function asks the writer to set the value associated with 3797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * the optionID. The caller is responsible for allocating/ 3807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * de-allocating the memory of the value field. 3817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note The options handled by the component depend on the implementation 3827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * of the component. 3837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pContext: (IN) Execution context of the 3GP writer, 3847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pptionId: (IN) ID of the option to set. 3857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param OptionValue : (IN) Value of the option to set. 3867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR: there is no error 3877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER: pContext is M4OSA_NULL (debug only) 3887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_BAD_OPTION_ID: the ID of the option is not valid. 3897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return any error returned by the MP4 core writer setOption (Its coreID 3907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * is M4MP4_WRITER) 3917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 3927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 3937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4WRITER_3GP_setOption( 3947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4WRITER_Context pContext, M4OSA_UInt32 optionID, 3957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DataOption optionValue) 3967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 3977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4WRITER_3GP_InternalContext* apContext = 3987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4WRITER_3GP_InternalContext*)pContext; 3997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 4017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4MP4W_memAddr memval; 4027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_StreamIDValue optval; 4037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE2_3("M4WRITER_3GP_setOption: pContext=0x%x, optionID=0x%x,\ 4057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi optionValue=0x%x", pContext, optionID, optionValue); 4067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 4087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Check input parameter */ 4097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL==apContext),M4ERR_PARAMETER, 4107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "M4WRITER_3GP_setOption: pContext is M4OSA_NULL"); 4117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi switch (optionID) 4137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 4147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 4157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Maximum Access Unit size */ 4167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4WRITER_kMaxAUSize: 4177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE2_0("setting M4WRITER_kMaxAUSize option"); 4187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4MP4W_setOption( 4197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi apContext->pMP4Context,M4MP4W_maxAUsize, optionValue); 4207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_ERR_IS_ERROR(err)) 4217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 4227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4MP4W_setOption(M4MP4W_maxAUsize) " 4237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "returns error 0x%x", err); 4247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 4267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 4277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Maximum chunck size */ 4287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4WRITER_kMaxChunckSize: 4297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE2_0("setting M4WRITER_kMaxChunckSize option"); 4307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4MP4W_setOption( 4317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi apContext->pMP4Context,M4MP4W_maxChunkSize, optionValue); 4327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_ERR_IS_ERROR(err)) 4337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 4347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4MP4W_setOption(M4MP4W_maxChunkSize)\ 4357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi returns error 0x%x", err); 4367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 4387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 4397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * File string signature */ 4407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4WRITER_kEmbeddedString: 4417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE2_0("setting M4WRITER_kEmbeddedString option"); 4427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* The given M4OSA_DataOption must actually 4437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi be a text string */ 4447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi memval.addr = (M4OSA_MemAddr32)optionValue; 4457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /**< this is max string size copied by the core */ 4467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi memval.size = 16; 4477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4MP4W_setOption( 4487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi apContext->pMP4Context,M4MP4W_embeddedString, &memval); 4497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_ERR_IS_ERROR(err)) 4507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 4517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4MP4W_setOption(M4MP4W_embeddedString)\ 4527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi returns error 0x%x", err); 4537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 4557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 4567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * File integration tag */ 4577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4WRITER_kIntegrationTag: 4587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE2_0("setting M4WRITER_kIntegrationTag option"); 4597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* The given M4OSA_DataOption must actually 4607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi be a text string */ 4617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi memval.addr = (M4OSA_MemAddr32)optionValue; 4627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /**< this is max string size copied by the core */ 463947721ba962c19913b76658cdbb19ae8c77c9c50Dheeraj Sharma memval.size = strlen((const char *)optionValue); 4647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4MP4W_setOption( 4657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi apContext->pMP4Context,M4MP4W_integrationTag, &memval); 4667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_ERR_IS_ERROR(err)) 4677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 4687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4MP4W_setOption(M4MP4W_integrationTag)" 4697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi " returns error 0x%x", err); 4707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 4727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 4737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * File version signature */ 4747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4WRITER_kEmbeddedVersion: 4757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE2_0("setting M4WRITER_kEmbeddedVersion option"); 4767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* The given M4OSA_DataOption must actually 4777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi be a version number */ 4787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /**< Here 0 means both streams */ 4807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi optval.streamID = 0; 4817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /**< version number */ 4827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi optval.value = *(M4OSA_UInt32*)optionValue; 4837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4MP4W_setOption( 4847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi apContext->pMP4Context,M4MP4W_CamcoderVersion, &optval); 4857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_ERR_IS_ERROR(err)) 4867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 4877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4MP4W_setOption(M4MP4W_CamcoderVersion)" 4887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi " returns error 0x%x", err); 4897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 4917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 4927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Some options are read-only */ 4937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4WRITER_kFileSize: 4947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4WRITER_kFileSizeAudioEstimated: 4957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE2_1("trying to set a read-only option! (ID=0x%x)", 4967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi optionID); 4977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return (M4OSA_ERR)M4ERR_READ_ONLY; 4987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 4997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 5007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Maximum filesize limitation */ 5017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4WRITER_kMaxFileSize: 5027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE2_0("setting M4WRITER_kMaxFileSize option"); 5037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4MP4W_setOption( 5047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi apContext->pMP4Context,M4MP4W_maxFileSize, optionValue); 5057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_ERR_IS_ERROR(err)) 5067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 5077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4MP4W_setOption(M4MP4W_maxFileSize)\ 5087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi returns error 0x%x", err); 5097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 5107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 5117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 5137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Maximum file duration limitation */ 5147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4WRITER_kMaxFileDuration: 5157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE2_0("setting M4WRITER_kMaxFileDuration option"); 5167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4MP4W_setOption( 5177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi apContext->pMP4Context,M4MP4W_maxFileDuration, optionValue); 5187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_ERR_IS_ERROR(err)) 5197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 5207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4MP4W_setOption(M4WRITER_kMaxFileDuration)" 5217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi " returns error 0x%x", err); 5227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 5237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 5247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 5267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Set 'ftyp' atom */ 5277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4WRITER_kSetFtypBox: 5287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE2_0("setting M4WRITER_kSetFtypBox option"); 5297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4MP4W_setOption( 5307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi apContext->pMP4Context, M4MP4W_setFtypBox, optionValue); 5317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_ERR_IS_ERROR(err)) 5327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 5337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4MP4W_setOption(M4MP4W_setFtypBox)\ 5347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi returns error 0x%x", err); 5357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 5367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 5377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 5397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Decoder Specific Info */ 5407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4WRITER_kDSI: 5417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE2_0("setting M4WRITER_kDSI option"); 5427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4MP4W_setOption( 5437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi apContext->pMP4Context, M4MP4W_DSI, optionValue); 5447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_ERR_IS_ERROR(err)) 5457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 5467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4MP4W_setOption(M4MP4W_DSI)\ 5477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi returns error 0x%x", err); 5487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 5497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 5507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*+ H.264 Trimming */ 5517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4WRITER_kMUL_PPS_SPS: 5527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE2_0("setting M4WRITER_kMUL_PPS_SPS option"); 5537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4MP4W_setOption( 5547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi apContext->pMP4Context, M4MP4W_MUL_PPS_SPS, optionValue); 5557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_ERR_IS_ERROR(err)) 5567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 5577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4MP4W_setOption(M4MP4W_DSI)\ 5587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi returns error 0x%x", err); 5597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 5607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 5617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*- H.264 Trimming */ 5627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 5647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Unknown option */ 5657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi default: 5667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE2_1("trying to set an unknown option!\ 5677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (optionID=0x%x)", optionID); 5687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return (M4OSA_ERR)M4ERR_BAD_OPTION_ID; 5697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 5707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 5717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE3_1("M4WRITER_3GP_setOption: returning 0x%x", err); 5737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 5747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 5757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/****************************************************************************** 5787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4WRITER_3GP_getOption( 5797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4WRITER_Context pContext, M4OSA_UInt32 optionID, 5807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_DataOption optionValue) 5817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief This function asks the writer to return the value associated with 5827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * the optionID. The caller is responsible for allocating/ 5837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * de-allocating the memory of the value field. 5847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note The options handled by the component depend on the implementation 5857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * of the component. 5867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pContext: (IN) Execution context of the 3GP writer, 5877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param OptionId: (IN) Id of the option to get. 5887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pOptionValue: (OUT) Value of the option to get. 5897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR: there is no error 5907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER: pContext is M4OSA_NULL (debug only) 5917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_BAD_OPTION_ID: the ID of the option is not valid. 5927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_NOT_IMPLEMENTED: This option is not implemented yet. 5937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return any error returned by the MP4 core writer getOption (Its coreID 5947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * is M4MP4_WRITER) 5957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 5967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 5977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4WRITER_3GP_getOption( 5987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4WRITER_Context pContext, M4OSA_UInt32 optionID, 5997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DataOption optionValue) 6007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 6017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4WRITER_3GP_InternalContext* apContext = 6027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4WRITER_3GP_InternalContext*)pContext; 6037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err; 6057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE2_3("M4WRITER_3GP_getOption: pContext=0x%x, optionID=0x%x,\ 6077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi optionValue=0x%x", pContext, optionID, optionValue); 6087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 6107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Check input parameter */ 6117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL == apContext),M4ERR_PARAMETER, 6127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "M4WRITER_3GP_getOption: pContext is M4OSA_NULL"); 6137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi switch (optionID) 6157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 6167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 6177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Maximum Access Unit size */ 6187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4WRITER_kMaxAUSize: 6197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE2_0("getting M4WRITER_kMaxAUSize option"); 6207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4MP4W_getOption(apContext->pMP4Context,M4MP4W_maxAUsize, 6217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_DataOption*)&optionValue); 6227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_ERR_IS_ERROR(err)) 6237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 6247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4MP4W_getOption(M4MP4W_maxAUsize)" 6257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi " returns error 0x%x", err); 6267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 6277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 6287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 6297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Maximum chunck size */ 6307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4WRITER_kMaxChunckSize: 6317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE2_0("getting M4WRITER_kMaxChunckSize option"); 6327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4MP4W_getOption(apContext->pMP4Context,M4MP4W_maxChunkSize, 6337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_DataOption*)&optionValue); 6347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_ERR_IS_ERROR(err)) 6357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 6367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4MP4W_getOption(M4MP4W_maxChunkSize)\ 6377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi returns error 0x%x", err); 6387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 6397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 6407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 6417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * The file size option */ 6427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4WRITER_kFileSize: 6437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE2_0("getting M4WRITER_kFileSize option"); 6447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* get the current file size */ 6457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4MP4W_getCurrentFileSize( 6467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi apContext->pMP4Context, (M4OSA_UInt32*)optionValue); 6477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_ERR_IS_ERROR(err)) 6487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 6497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4MP4W_getCurrentFileSize" 6507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi " returns error 0x%x", err); 6517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 6527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 6537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 6547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * The file size with audio option has its own function call 6557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi in the MP4 core writer */ 6567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4WRITER_kFileSizeAudioEstimated: 6577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE2_0("getting M4WRITER_kFileSizeAudioEstimated option"); 6587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* get the current file size ... */ 6597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4MP4W_getCurrentFileSize( 6607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi apContext->pMP4Context, (M4OSA_UInt32*)optionValue); 6617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_ERR_IS_ERROR(err)) 6627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 6637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4MP4W_getCurrentFileSize" 6647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi " returns error 0x%x", err); 6657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 6667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi //no more needed 3gp writer has its own mecanism 6677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ///* ... add the estimated next max AU size */ 6687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi //*((M4OSA_UInt32*)optionValue) += apContext->maxAUsizes; 6697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 6707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 6717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Unknown option */ 6727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi default: 6737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE2_1("trying to get an unknown option!\ 6747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (optionID=0x%x)", optionID); 6757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return (M4OSA_ERR)M4ERR_BAD_OPTION_ID; 6767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 6777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 6787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE3_1("M4WRITER_3GP_getOption: returning 0x%x", err); 6807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 6817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 6827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/****************************************************************************** 6857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4WRITER_3GP_startAU( 6867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4WRITER_Context pContext, M4SYS_StreamID streamID, 6877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4SYS_AccessUnit* pAU) 6887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief Prepare an Access Unit to be ready to store data 6897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note 6907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pContext: (IN) Execution context of the 3GP writer, 6917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param streamID: (IN) Id of the stream to which the Access Unit 6927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * is related. 6937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pAU: (IN/OUT) Access Unit to be prepared. 6947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR: there is no error 6957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER: pContext or pAU is M4OSA_NULL (debug only) 6967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_BAD_STREAM_ID: streamID is not VideoStreamID nor 6977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * AudioStreamID (debug only) 6987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return any error returned by the MP4 core writer startAU (Its coreID 6997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * is M4MP4_WRITER) 7007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 7017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 7027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4WRITER_3GP_startAU( 7037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4WRITER_Context pContext, M4SYS_StreamID streamID, 7047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_AccessUnit* pAU) 7057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 7067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4WRITER_3GP_InternalContext* apContext = 7077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4WRITER_3GP_InternalContext*)pContext; 7087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err; 7107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE2_3("M4WRITER_3GP_startAU: pContext=0x%x, streamID=%d, pAU=0x%x", 7127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pContext, streamID, pAU); 7137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 7157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Check input parameter */ 7167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL == apContext), M4ERR_PARAMETER, 7177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "M4WRITER_3GP_startAU: pContext is M4OSA_NULL"); 7187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL == pAU), M4ERR_PARAMETER, 7197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "M4WRITER_3GP_startAU: pAU is M4OSA_NULL"); 7207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF2( 7217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ((VideoStreamID != streamID) && (AudioStreamID != streamID)), 7227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4ERR_BAD_STREAM_ID, 7237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "M4WRITER_3GP_processAU: Wrong streamID"); 7247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 7267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Call the MP4 writer */ 7277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE3_0("M4WRITER_3GP_startAU: calling M4MP4W_startAU()"); 7287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4MP4W_startAU(apContext->pMP4Context, streamID, pAU); 7297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_ERR_IS_ERROR(err)) 7307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 7317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4MP4W_startAU returns error 0x%x", err); 7327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 7337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE3_2("AU: dataAddress=0x%x, size=%d", 7357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAU->dataAddress, pAU->size); 7367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Convert oversize to a request toward VES automaton */ 7387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4WAR_MP4W_OVERSIZE == err) 7397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 7407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4WAR_WRITER_STOP_REQ; 7417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 7427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE3_1("M4WRITER_3GP_startAU: returning 0x%x", err); 7447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 7457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 7467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/****************************************************************************** 7497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4WRITER_3GP_processAU( 7507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4WRITER_Context pContext, M4SYS_StreamID streamID, 7517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4SYS_AccessUnit* pAU) 7527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief Write an Access Unit 7537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note 7547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pContext: (IN) Execution context of the 3GP writer, 7557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param streamID: (IN) Id of the stream to which the Access Unit 7567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * is related. 7577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pAU: (IN/OUT) Access Unit to be written 7587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR: there is no error 7597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER: pContext or pAU is M4OSA_NULL (debug only) 7607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_BAD_STREAM_ID: streamID is not VideoStreamID nor 7617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * AudioStreamID (debug only) 7627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return any error returned by the MP4 core writer processAU 7637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * (Its coreID is M4MP4_WRITER) 7647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 7657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 7667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4WRITER_3GP_processAU( 7677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4WRITER_Context pContext, M4SYS_StreamID streamID, 7687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4SYS_AccessUnit* pAU) 7697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 7707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4WRITER_3GP_InternalContext* apContext = 7717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4WRITER_3GP_InternalContext*)pContext; 7727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err; 7747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE2_3("M4WRITER_3GP_processAU: " 7767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "pContext=0x%x, streamID=%d, pAU=0x%x", 7777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pContext, streamID, pAU); 7787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 7807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Check input parameter */ 7817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL == apContext), M4ERR_PARAMETER, 7827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "M4WRITER_3GP_processAU: pContext is M4OSA_NULL"); 7837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL == pAU), M4ERR_PARAMETER, 7847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "M4WRITER_3GP_processAU: pAU is M4OSA_NULL"); 7857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF2( 7867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ((VideoStreamID != streamID) && (AudioStreamID != streamID)), 7877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4ERR_BAD_STREAM_ID, 7887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "M4WRITER_3GP_processAU: Wrong streamID"); 7897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE3_4("M4WRITER_3GP_processAU: AU: " 7917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "dataAddress=0x%x, size=%d, CTS=%d, nbFrag=%d", 7927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pAU->dataAddress, pAU->size, (M4OSA_UInt32)pAU->CTS, pAU->nbFrag); 7937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pAU->size > apContext->maxAUsizes) 7957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 7967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi apContext->maxAUsizes = pAU->size; 7977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 7987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 7997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Call the MP4 writer */ 8007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE3_0("M4WRITER_3GP_processAU: calling M4MP4W_processAU()"); 8017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4MP4W_processAU(apContext->pMP4Context, streamID, pAU); 8027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_ERR_IS_ERROR(err)) 8037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 8047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_1("M4MP4W_processAU returns error 0x%x", err); 8057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 8067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 8077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Convert oversize to a request toward VES automaton */ 8087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(M4WAR_MP4W_OVERSIZE == err) 8097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 8107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4WAR_WRITER_STOP_REQ; 8117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 8127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 8137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE3_1("M4WRITER_3GP_processAU: returning 0x%x", err); 8147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 8157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 8167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 8177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 8187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/****************************************************************************** 8197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4WRITER_3GP_getInterfaces( 8207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4WRITER_OutputFileType* Type, 8217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4WRITER_GlobalInterface** SrcGlobalInterface, 8227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4WRITER_DataInterface** SrcDataInterface) 8237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief Get the 3GPP writer common interface 8247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note Retrieves the set of functions needed to use the 3GPP writer. 8257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * It follows the common writer interface. 8267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param Type: (OUT) return the type of this writer. Will always be 8277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4WRITER_k3GPP. 8287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param SrcGlobalInterface: (OUT) Main set of function to use this 8297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 3GPP writer 8307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param SrcDataInterface: (OUT) Set of function related to datas 8317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * to use this 3GPP writer 8327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR: there is no error 8337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_ALLOC: there is no more available memory 8347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER: At least one of the parameters is M4OSA_NULL 8357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * (debug only) 8367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 8377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 8387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4WRITER_3GP_getInterfaces( 8397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4WRITER_OutputFileType* Type, 8407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4WRITER_GlobalInterface** SrcGlobalInterface, 8417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4WRITER_DataInterface** SrcDataInterface) 8427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 8437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4WRITER_GlobalInterface *pGlobal; 8447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4WRITER_DataInterface *pData; 8457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 8467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE2_3("M4WRITER_3GP_getInterfaces: " 8477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "Type=0x%x, SrcGlobalInterface=0x%x,\ 8487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi SrcDataInterface=0x%x", Type, SrcGlobalInterface, SrcDataInterface); 8497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 8507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 8517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Check input parameter */ 8527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL == Type), M4ERR_PARAMETER, 8537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "M4WRITER_3GP_getInterfaces: Type is M4OSA_NULL"); 8547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL == SrcGlobalInterface), M4ERR_PARAMETER, 8557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "M4WRITER_3GP_getInterfaces: SrcGlobalInterface is M4OSA_NULL"); 8567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL == SrcDataInterface), M4ERR_PARAMETER, 8577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "M4WRITER_3GP_getInterfaces: SrcDataInterface is M4OSA_NULL"); 8587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 8597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 8607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Set the output type */ 8617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *Type = M4WRITER_k3GPP; 8627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 8637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 8647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Allocate the global interface structure */ 865694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu pGlobal = (M4WRITER_GlobalInterface*)M4OSA_32bitAlignedMalloc( 8667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi sizeof(M4WRITER_GlobalInterface), 8677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4WRITER_3GP, (M4OSA_Char *)"M4WRITER_GlobalInterface"); 8687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_NULL == pGlobal) 8697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 8707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("unable to allocate M4WRITER_GlobalInterface,\ 8717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi returning M4ERR_ALLOC"); 8727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *SrcGlobalInterface = M4OSA_NULL; 8737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *SrcDataInterface = M4OSA_NULL; 8747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return (M4OSA_ERR)M4ERR_ALLOC; 8757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 8767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 8777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 8787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Allocate the data interface structure */ 8797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pData = 880694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu (M4WRITER_DataInterface *)M4OSA_32bitAlignedMalloc(sizeof(M4WRITER_DataInterface), 8817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4WRITER_3GP, (M4OSA_Char *)"M4WRITER_DataInterface"); 8827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_NULL == pData) 8837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 8847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE1_0("unable to allocate M4WRITER_DataInterface,\ 8857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi returning M4ERR_ALLOC"); 886694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pGlobal); 8877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *SrcGlobalInterface = M4OSA_NULL; 8887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *SrcDataInterface = M4OSA_NULL; 8897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return (M4OSA_ERR)M4ERR_ALLOC; 8907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 8917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 8927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 8937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Fill the global interface structure */ 8947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pGlobal->pFctOpen = M4WRITER_3GP_openWrite; 8957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pGlobal->pFctAddStream = M4WRITER_3GP_addStream; 8967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pGlobal->pFctStartWriting = M4WRITER_3GP_startWriting; 8977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pGlobal->pFctCloseWrite = M4WRITER_3GP_closeWrite; 8987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pGlobal->pFctSetOption = M4WRITER_3GP_setOption; 8997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pGlobal->pFctGetOption = M4WRITER_3GP_getOption; 9007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 9017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 9027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Fill the data interface structure */ 9037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pData->pStartAU = M4WRITER_3GP_startAU; 9047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pData->pProcessAU = M4WRITER_3GP_processAU; 9057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 9067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 9077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Set the return values */ 9087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *SrcGlobalInterface = pGlobal; 9097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *SrcDataInterface = pData; 9107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 9117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE2_0("M4WRITER_3GP_getInterfaces: returning M4NO_ERROR"); 9127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 9137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 9147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 915