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