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