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