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 * @file    M4PTO3GPP_API.c
197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief   Picture to 3gpp Service implementation.
207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note
217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/
237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*16 bytes signature to be written in the generated 3gp files */
257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define M4PTO3GPP_SIGNATURE     "NXP-SW : PTO3GPP"
267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/****************/
287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*** Includes ***/
297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/****************/
307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *  Our header */
337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4PTO3GPP_InternalTypes.h"
347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4PTO3GPP_API.h"
357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *  Our errors */
387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4PTO3GPP_ErrorCodes.h"
397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef M4VSS_SUPPORT_ENCODER_MPEG4
417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "VideoEditorVideoEncoder.h"
427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif
437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *  OSAL headers */
477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4OSA_Memory.h"       /* OSAL memory management */
487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4OSA_Debug.h"        /* OSAL debug management */
497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/************************/
527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*** Various Magicals ***/
537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/************************/
547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define M4PTO3GPP_WRITER_AUDIO_STREAM_ID                1
567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define M4PTO3GPP_WRITER_VIDEO_STREAM_ID                2
577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define M4PTO3GPP_QUANTIZER_STEP                        4       /**< Quantizer step */
587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define M4PTO3GPP_WRITER_AUDIO_PROFILE_LEVEL            0xFF    /**< No specific profile and
597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                                                     level */
607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define M4PTO3GPP_WRITER_AUDIO_AMR_TIME_SCALE           8000    /**< AMR */
617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define M4PTO3GPP_BITRATE_REGULATION_CTS_PERIOD_IN_MS   500     /**< MAGICAL */
627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define M4PTO3GPP_MARGE_OF_FILE_SIZE                    25000   /**< MAGICAL */
637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * define   AMR 12.2 kbps silence frame
667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/
687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define M4PTO3GPP_AMR_AU_SILENCE_FRAME_122_SIZE     32
697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define M4PTO3GPP_AMR_AU_SILENCE_FRAME_122_DURATION 20
707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargiconst M4OSA_UInt8 M4PTO3GPP_AMR_AU_SILENCE_122_FRAME[M4PTO3GPP_AMR_AU_SILENCE_FRAME_122_SIZE]=
717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 0x3C, 0x91, 0x17, 0x16, 0xBE, 0x66, 0x78, 0x00, 0x00, 0x01, 0xE7, 0xAF,
727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi  0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define M4PTO3GPP_AMR_AU_SILENCE_FRAME_048_SIZE     13
767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define M4PTO3GPP_AMR_AU_SILENCE_FRAME_048_DURATION 20
777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargiconst M4OSA_UInt8 M4PTO3GPP_AMR_AU_SILENCE_048_FRAME[M4PTO3GPP_AMR_AU_SILENCE_FRAME_048_SIZE] =
787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 0x04, 0xFF, 0x18, 0xC7, 0xF0, 0x0D, 0x04, 0x33, 0xFF, 0xE0, 0x00, 0x00, 0x00 };
797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/***************************/
817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*** "Private" functions ***/
827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/***************************/
837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargistatic M4OSA_ERR M4PTO3GPP_Ready4Processing(M4PTO3GPP_InternalContext* pC);
847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/****************************/
867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*** "External" functions ***/
877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/****************************/
887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargiextern M4OSA_ERR M4WRITER_3GP_getInterfaces(M4WRITER_OutputFileType* pType,
897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                            M4WRITER_GlobalInterface** SrcGlobalInterface,
907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                            M4WRITER_DataInterface** SrcDataInterface);
917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargiextern M4OSA_ERR M4READER_AMR_getInterfaces(M4READER_MediaType *pMediaType,
927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                            M4READER_GlobalInterface **pRdrGlobalInterface,
937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                            M4READER_DataInterface **pRdrDataInterface);
947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargiextern M4OSA_ERR M4READER_3GP_getInterfaces(M4READER_MediaType *pMediaType,
957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                            M4READER_GlobalInterface **pRdrGlobalInterface,
967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                            M4READER_DataInterface **pRdrDataInterface);
977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/****************************/
997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*** "Static" functions ***/
1007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/****************************/
1017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargistatic M4OSA_ERR M4PTO3GPP_writeAmrSilence122Frame(
1027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                    M4WRITER_DataInterface* pWriterDataIntInterface,
1037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                    M4WRITER_Context* pWriterContext,
1047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                    M4SYS_AccessUnit* pWriterAudioAU,
1057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                    M4OSA_Time mtIncCts);
1067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargistatic M4OSA_ERR M4PTO3GPP_writeAmrSilence048Frame(
1077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                   M4WRITER_DataInterface* pWriterDataIntInterface,
1087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                   M4WRITER_Context* pWriterContext,
1097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                   M4SYS_AccessUnit* pWriterAudioAU,
1107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                   M4OSA_Time mtIncCts);
1117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
1127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
1137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4PTO3GPP_GetVersion(M4_VersionInfo* pVersionInfo);
1147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief   Get the M4PTO3GPP version.
1157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note    Can be called anytime. Do not need any context.
1167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param   pVersionInfo        (OUT) Pointer to a version info structure
1177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return  M4NO_ERROR:         No error
1187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return  M4ERR_PARAMETER:    pVersionInfo is M4OSA_NULL (If Debug Level >= 2)
1197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
1207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/
1217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*********************************************************/
1237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4PTO3GPP_GetVersion(M4_VersionInfo* pVersionInfo)
1247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*********************************************************/
1257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
1267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_1("M4PTO3GPP_GetVersion called with pVersionInfo=0x%x", pVersionInfo);
1277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
1297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     *  Check input parameters */
1307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF2((M4OSA_NULL==pVersionInfo),M4ERR_PARAMETER,
1317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            "M4PTO3GPP_GetVersion: pVersionInfo is M4OSA_NULL");
1327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pVersionInfo->m_major       = M4PTO3GPP_VERSION_MAJOR;
1347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pVersionInfo->m_minor       = M4PTO3GPP_VERSION_MINOR;
1357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pVersionInfo->m_revision    = M4PTO3GPP_VERSION_REVISION;
1367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return M4NO_ERROR;
1387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
1397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
1417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
1427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4PTO3GPP_Init(M4PTO3GPP_Context* pContext);
1437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief   Initializes the M4PTO3GPP (allocates an execution context).
1447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note
1457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param   pContext            (OUT) Pointer on the M4PTO3GPP context to allocate
1467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param   pFileReadPtrFct     (IN) Pointer to OSAL file reader functions
1477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param   pFileWritePtrFct    (IN) Pointer to OSAL file writer functions
1487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return  M4NO_ERROR:         No error
1497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return  M4ERR_PARAMETER:    At least one parameter is M4OSA_NULL (If Debug Level >= 2)
1507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return  M4ERR_ALLOC:        There is no more available memory
1517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
1527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/
1537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*********************************************************/
1547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4PTO3GPP_Init(   M4PTO3GPP_Context* pContext,
1557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                            M4OSA_FileReadPointer* pFileReadPtrFct,
1567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                            M4OSA_FileWriterPointer* pFileWritePtrFct)
1577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*********************************************************/
1587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
1597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4PTO3GPP_InternalContext *pC;
1607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32 i;
1617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_1("M4PTO3GPP_Init called with pContext=0x%x", pContext);
1637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
1657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     *  Check input parameters */
1667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF2((M4OSA_NULL == pContext), M4ERR_PARAMETER,
1677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            "M4PTO3GPP_Init: pContext is M4OSA_NULL");
1687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
1707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     *  Allocate the M4PTO3GPP context and return it to the user */
171694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu    pC = (M4PTO3GPP_InternalContext*)M4OSA_32bitAlignedMalloc(sizeof(M4PTO3GPP_InternalContext), M4PTO3GPP,
1727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        (M4OSA_Char *)"M4PTO3GPP_InternalContext");
1737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    *pContext = pC;
1747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (M4OSA_NULL == pC)
1757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
1767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_0("M4PTO3GPP_Step(): unable to allocate M4PTO3GPP_InternalContext,\
1777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                       returning M4ERR_ALLOC");
1787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return M4ERR_ALLOC;
1797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
1807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
1827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     *  Init the context. All pointers must be initialized to M4OSA_NULL because CleanUp()
1837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        can be called just after Init(). */
1847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_State = M4PTO3GPP_kState_CREATED;
1857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_VideoState = M4PTO3GPP_kStreamState_NOSTREAM;
1867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_AudioState = M4PTO3GPP_kStreamState_NOSTREAM;
1877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
1897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     *  Reader stuff */
1907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_pReaderAudioAU        = M4OSA_NULL;
1917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_pReaderAudioStream    = M4OSA_NULL;
1927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
1947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     *  Writer stuff */
1957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_pEncoderHeader        = M4OSA_NULL;
1967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_pWriterVideoStream    = M4OSA_NULL;
1977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_pWriterAudioStream    = M4OSA_NULL;
1987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_pWriterVideoStreamInfo= M4OSA_NULL;
1997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_pWriterAudioStreamInfo= M4OSA_NULL;
2007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
2027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     *  Contexts of the used modules  */
2037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_pAudioReaderContext    = M4OSA_NULL;
2047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_p3gpWriterContext  = M4OSA_NULL;
2057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_pMp4EncoderContext = M4OSA_NULL;
2067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_eEncoderState = M4PTO3GPP_kNoEncoder;
2077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
2097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     *  Interfaces of the used modules */
2107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_pReaderGlobInt    = M4OSA_NULL;
2117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_pReaderDataInt    = M4OSA_NULL;
2127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_pWriterGlobInt    = M4OSA_NULL;
2137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_pWriterDataInt    = M4OSA_NULL;
2147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_pEncoderInt       = M4OSA_NULL;
2157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_pEncoderExternalAPI = M4OSA_NULL;
2167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_pEncoderUserData = M4OSA_NULL;
2177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
2197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     * Fill the OSAL file function set */
2207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->pOsalFileRead = pFileReadPtrFct;
2217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->pOsalFileWrite = pFileWritePtrFct;
2227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
2247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     *  Video rate control stuff */
2257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_mtCts             = 0.0F;
2267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_mtNextCts         = 0.0F;
2277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_mtAudioCts        = 0.0F;
2287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_AudioOffSet       = 0.0F;
2297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_dLastVideoRegulCts= 0.0F;
2307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_PrevAudioCts      = 0.0F;
2317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_DeltaAudioCts     = 0.0F;
2327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_MaxFileSize       = 0;
2347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_CurrentFileSize   = 0;
2357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_IsLastPicture         = M4OSA_FALSE;
2377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_bAudioPaddingSilence  = M4OSA_FALSE;
2387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_bLastInternalCallBack = M4OSA_FALSE;
2397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_NbCurrentFrame        = 0;
2407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->pSavedPlane = M4OSA_NULL;
2427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->uiSavedDuration = 0;
2437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_0("M4PTO3GPP_Init(): returning M4NO_ERROR");
2457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return M4NO_ERROR;
2467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
2477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
2497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
2507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4PTO3GPP_Open(M4PTO3GPP_Context pContext, M4PTO3GPP_Params* pParams);
2517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief   Set the M4PTO3GPP input and output files.
2527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note    It opens the input file, but the output file may not be created yet.
2537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param   pContext            (IN) M4PTO3GPP context
2547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param   pParams             (IN) Pointer to the parameters for the PTO3GPP.
2557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note    The pointed structure can be de-allocated after this function returns because
2567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *          it is internally copied by the PTO3GPP
2577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return  M4NO_ERROR:         No error
2587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return  M4ERR_PARAMETER:    At least one parameter is M4OSA_NULL
2597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return  M4ERR_STATE:        M4PTO3GPP is not in an appropriate state for this function to be
2600a389ab70db304fb840e33f33781ecc0503eae3chongteng                                 called
2617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return  M4ERR_ALLOC:        There is no more available memory
2627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return  ERR_PTO3GPP_INVALID_VIDEO_FRAME_SIZE_FOR_H263 The output video frame
2637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *                              size parameter is incompatible with H263 encoding
2647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return  ERR_PTO3GPP_UNDEFINED_OUTPUT_VIDEO_FORMAT       The output video format
2657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                                            parameter is undefined
2667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return  ERR_PTO3GPP_UNDEFINED_OUTPUT_VIDEO_BITRATE      The output video bit-rate parameter
2677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                                            is undefined
2687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return  ERR_PTO3GPP_UNDEFINED_OUTPUT_VIDEO_FRAME_SIZE   The output video frame size parameter
2697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                                            is undefined
2707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return  ERR_PTO3GPP_UNDEFINED_OUTPUT_FILE_SIZE          The output file size parameter
2717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                                            is undefined
2727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return  ERR_PTO3GPP_UNDEFINED_AUDIO_PADDING             The output audio padding parameter
2737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                                            is undefined
2747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return  ERR_PTO3GPP_UNHANDLED_AUDIO_TRACK_INPUT_FILE    The input audio file contains
2757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                                            a track format not handled by PTO3GPP
2767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
2777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/
2787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*********************************************************/
2797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4PTO3GPP_Open(M4PTO3GPP_Context pContext, M4PTO3GPP_Params* pParams)
2807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*********************************************************/
2817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
2827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4PTO3GPP_InternalContext   *pC = (M4PTO3GPP_InternalContext*)(pContext);
2837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_ERR                   err = M4NO_ERROR;
2847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4READER_MediaFamily    mediaFamily;
2867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4_StreamHandler*       pStreamHandler;
2877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4READER_MediaType      readerMediaType;
2887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE2_2("M4PTO3GPP_Open called with pContext=0x%x, pParams=0x%x", pContext, pParams);
2907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
2927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     *  Check input parameters */
2937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF2((M4OSA_NULL == pContext), M4ERR_PARAMETER, \
2947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    "M4PTO3GPP_Open: pContext is M4OSA_NULL");
2957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF2((M4OSA_NULL == pParams),  M4ERR_PARAMETER, \
2967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    "M4PTO3GPP_Open: pParams is M4OSA_NULL");
2977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
2997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     *  Check parameters correctness */
3007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF2((M4OSA_NULL == pParams->pPictureCallbackFct),
3017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi               M4ERR_PARAMETER, "M4PTO3GPP_Open: pC->m_Params.pPictureCallbackFct is M4OSA_NULL");
3027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF2((M4OSA_NULL == pParams->pPictureCallbackCtxt),
3037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4ERR_PARAMETER,
3047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                 "M4PTO3GPP_Open: pC->m_Params.pPictureCallbackCtxt is M4OSA_NULL");
3057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF2((M4OSA_NULL == pParams->pOutput3gppFile),
3067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4ERR_PARAMETER, "M4PTO3GPP_Open: pC->m_Params.pOutput3gppFile is M4OSA_NULL");
3077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF2((M4OSA_NULL == pParams->pTemporaryFile),
3087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4ERR_PARAMETER, "M4PTO3GPP_Open: pC->m_Params.pTemporaryFile is M4OSA_NULL");
3097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
3107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
3117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     * Video Format */
3120a389ab70db304fb840e33f33781ecc0503eae3chongteng    if( (M4VIDEOEDITING_kH263 != pParams->OutputVideoFormat) &&
3137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        (M4VIDEOEDITING_kMPEG4 != pParams->OutputVideoFormat) &&
3148806b706693c0992724f6603353af18aeb4a0f80Hong Teng        (M4VIDEOEDITING_kH264 != pParams->OutputVideoFormat)) {
3157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_0("M4PTO3GPP_Open: Undefined output video format");
3167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return ERR_PTO3GPP_UNDEFINED_OUTPUT_VIDEO_FORMAT;
3177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     }
3187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
3197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     /**
3207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     * Video Bitrate */
3210a389ab70db304fb840e33f33781ecc0503eae3chongteng    if(!((M4VIDEOEDITING_k16_KBPS       == pParams->OutputVideoBitrate) ||
3227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi         (M4VIDEOEDITING_k24_KBPS       == pParams->OutputVideoBitrate) ||
3237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi         (M4VIDEOEDITING_k32_KBPS       == pParams->OutputVideoBitrate) ||
3247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi         (M4VIDEOEDITING_k48_KBPS       == pParams->OutputVideoBitrate) ||
3257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi         (M4VIDEOEDITING_k64_KBPS       == pParams->OutputVideoBitrate) ||
3267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi         (M4VIDEOEDITING_k96_KBPS       == pParams->OutputVideoBitrate) ||
3277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi         (M4VIDEOEDITING_k128_KBPS      == pParams->OutputVideoBitrate) ||
3287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi         (M4VIDEOEDITING_k192_KBPS      == pParams->OutputVideoBitrate) ||
3297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi         (M4VIDEOEDITING_k256_KBPS      == pParams->OutputVideoBitrate) ||
3307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi         (M4VIDEOEDITING_k288_KBPS      == pParams->OutputVideoBitrate) ||
3317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi         (M4VIDEOEDITING_k384_KBPS      == pParams->OutputVideoBitrate) ||
3327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi         (M4VIDEOEDITING_k512_KBPS      == pParams->OutputVideoBitrate) ||
3337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi         (M4VIDEOEDITING_k800_KBPS      == pParams->OutputVideoBitrate) ||
3347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi         /*+ New Encoder bitrates */
3357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi         (M4VIDEOEDITING_k2_MBPS        == pParams->OutputVideoBitrate) ||
3367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi         (M4VIDEOEDITING_k5_MBPS        == pParams->OutputVideoBitrate) ||
3377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi         (M4VIDEOEDITING_k8_MBPS        == pParams->OutputVideoBitrate) ||
3388806b706693c0992724f6603353af18aeb4a0f80Hong Teng         (M4VIDEOEDITING_kVARIABLE_KBPS == pParams->OutputVideoBitrate))) {
3397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_0("M4PTO3GPP_Open: Undefined output video bitrate");
3407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return ERR_PTO3GPP_UNDEFINED_OUTPUT_VIDEO_BITRATE;
3417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
3427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
3437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
3447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     * Video frame size */
3457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (!((M4VIDEOEDITING_kSQCIF == pParams->OutputVideoFrameSize) ||
3467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi          (M4VIDEOEDITING_kQQVGA == pParams->OutputVideoFrameSize) ||
3477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi          (M4VIDEOEDITING_kQCIF == pParams->OutputVideoFrameSize) ||
3487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi          (M4VIDEOEDITING_kQVGA == pParams->OutputVideoFrameSize) ||
3497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi          (M4VIDEOEDITING_kCIF  == pParams->OutputVideoFrameSize) ||
3507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi          (M4VIDEOEDITING_kVGA  == pParams->OutputVideoFrameSize) ||
3517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
3527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi          (M4VIDEOEDITING_kNTSC == pParams->OutputVideoFrameSize) ||
3537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi          (M4VIDEOEDITING_kWVGA == pParams->OutputVideoFrameSize) ||
3547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
3557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi          (M4VIDEOEDITING_k640_360 == pParams->OutputVideoFrameSize) ||
3567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi          (M4VIDEOEDITING_k854_480 == pParams->OutputVideoFrameSize) ||
3578806b706693c0992724f6603353af18aeb4a0f80Hong Teng          (M4VIDEOEDITING_k1280_720 == pParams->OutputVideoFrameSize) ||
3588806b706693c0992724f6603353af18aeb4a0f80Hong Teng          (M4VIDEOEDITING_k1080_720 == pParams->OutputVideoFrameSize) ||
3598806b706693c0992724f6603353af18aeb4a0f80Hong Teng          (M4VIDEOEDITING_k960_720 == pParams->OutputVideoFrameSize) ||
3608806b706693c0992724f6603353af18aeb4a0f80Hong Teng          (M4VIDEOEDITING_k1920_1080 == pParams->OutputVideoFrameSize))) {
3617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_0("M4PTO3GPP_Open: Undefined output video frame size");
3627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return ERR_PTO3GPP_UNDEFINED_OUTPUT_VIDEO_FRAME_SIZE;
3637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
3647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
3657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
3667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     * Maximum size of the output 3GPP file */
3677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (!((M4PTO3GPP_k50_KB     == pParams->OutputFileMaxSize) ||
3687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi          (M4PTO3GPP_k75_KB     == pParams->OutputFileMaxSize) ||
3697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi          (M4PTO3GPP_k100_KB    == pParams->OutputFileMaxSize) ||
3707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi          (M4PTO3GPP_k150_KB    == pParams->OutputFileMaxSize) ||
3717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi          (M4PTO3GPP_k200_KB    == pParams->OutputFileMaxSize) ||
3727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi          (M4PTO3GPP_k300_KB    == pParams->OutputFileMaxSize) ||
3737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi          (M4PTO3GPP_k400_KB    == pParams->OutputFileMaxSize) ||
3747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi          (M4PTO3GPP_k500_KB    == pParams->OutputFileMaxSize) ||
3758806b706693c0992724f6603353af18aeb4a0f80Hong Teng          (M4PTO3GPP_kUNLIMITED == pParams->OutputFileMaxSize))) {
3767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_0("M4PTO3GPP_Open: Undefined output 3GPP file size");
3777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return ERR_PTO3GPP_UNDEFINED_OUTPUT_FILE_SIZE;
3787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
3797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
3807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /* Audio padding */
3818806b706693c0992724f6603353af18aeb4a0f80Hong Teng    if (M4OSA_NULL != pParams->pInputAudioTrackFile) {
3827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if ((!( (M4PTO3GPP_kAudioPaddingMode_None   == pParams->AudioPaddingMode) ||
3837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                (M4PTO3GPP_kAudioPaddingMode_Silence== pParams->AudioPaddingMode) ||
3848806b706693c0992724f6603353af18aeb4a0f80Hong Teng                (M4PTO3GPP_kAudioPaddingMode_Loop   == pParams->AudioPaddingMode)))) {
3857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_0("M4PTO3GPP_Open: Undefined audio padding");
3867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return ERR_PTO3GPP_UNDEFINED_AUDIO_PADDING;
3877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
3887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
3897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
3907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**< Size check for H263 (only valid sizes are CIF, QCIF and SQCIF) */
3917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if ((M4VIDEOEDITING_kH263 == pParams->OutputVideoFormat) &&
3927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        (M4VIDEOEDITING_kSQCIF != pParams->OutputVideoFrameSize) &&
3937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        (M4VIDEOEDITING_kQCIF != pParams->OutputVideoFrameSize) &&
3948806b706693c0992724f6603353af18aeb4a0f80Hong Teng        (M4VIDEOEDITING_kCIF != pParams->OutputVideoFrameSize)) {
3957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_0("M4PTO3GPP_Open():\
3967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi             returning ERR_PTO3GPP_INVALID_VIDEO_FRAME_SIZE_FOR_H263");
3977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return ERR_PTO3GPP_INVALID_VIDEO_FRAME_SIZE_FOR_H263;
3987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
3997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
4007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
4017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     *  Check state automaton */
4028806b706693c0992724f6603353af18aeb4a0f80Hong Teng    if (M4PTO3GPP_kState_CREATED != pC->m_State) {
4037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_1("M4PTO3GPP_Open(): Wrong State (%d), returning M4ERR_STATE", pC->m_State);
4047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return M4ERR_STATE;
4057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
4067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
4077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
4087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     * Copy the M4PTO3GPP_Params structure */
40932ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu    memcpy((void *)(&pC->m_Params),
41032ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu                (void *)pParams, sizeof(M4PTO3GPP_Params));
4117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE1_1("M4PTO3GPP_Open: outputVideoBitrate = %d", pC->m_Params.OutputVideoBitrate);
4127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
4137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /***********************************/
4147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /* Open input file with the reader */
4157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /***********************************/
4168806b706693c0992724f6603353af18aeb4a0f80Hong Teng    if (M4OSA_NULL != pC->m_Params.pInputAudioTrackFile) {
4177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
4187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi         * Get the reader interface according to the input audio file type */
4197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        switch(pC->m_Params.AudioFileFormat)
4207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
4217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef M4VSS_SUPPORT_READER_AMR
4227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_kFileType_AMR:
4237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = M4READER_AMR_getInterfaces( &readerMediaType, &pC->m_pReaderGlobInt,
4247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                &pC->m_pReaderDataInt);
4257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if (M4NO_ERROR != err)
4267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
4277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1("M4PTO3GPP_Open(): M4READER_AMR_getInterfaces returns 0x%x", err);
4287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return err;
4297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
4307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
4317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif
4327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
4337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef AAC_SUPPORTED
4347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_kFileType_3GPP:
4357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err = M4READER_3GP_getInterfaces( &readerMediaType, &pC->m_pReaderGlobInt,
4367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    &pC->m_pReaderDataInt);
4377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if (M4NO_ERROR != err)
4387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
4397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4OSA_TRACE1_1("M4PTO3GPP_Open(): M4READER_3GP_getInterfaces returns 0x%x", err);
4407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                return err;
4417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
4427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
4437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif
4447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
4457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        default:
4467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return ERR_PTO3GPP_UNHANDLED_AUDIO_TRACK_INPUT_FILE;
4477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
4487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
4497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
4507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi         *  Initializes the reader shell */
4517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = pC->m_pReaderGlobInt->m_pFctCreate(&pC->m_pAudioReaderContext);
4527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if (M4NO_ERROR != err)
4537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
4547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1("M4PTO3GPP_Open(): pReaderGlobInt->m_pFctCreate returns 0x%x", err);
4557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return err;
4567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
4577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
4587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->m_pReaderDataInt->m_readerContext = pC->m_pAudioReaderContext;
4597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**< Link the reader interface to the reader context */
4607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
4617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
4627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi         *  Set the reader shell file access functions */
4637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = pC->m_pReaderGlobInt->m_pFctSetOption(pC->m_pAudioReaderContext,
4647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4READER_kOptionID_SetOsaFileReaderFctsPtr,  (M4OSA_DataOption)pC->pOsalFileRead);
4657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if (M4NO_ERROR != err)
4667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
4677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1("M4PTO3GPP_Open(): pReaderGlobInt->m_pFctSetOption returns 0x%x", err);
4687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return err;
4697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
4707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
4717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
4727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi         *  Open the input audio file */
4737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = pC->m_pReaderGlobInt->m_pFctOpen(pC->m_pAudioReaderContext,
4747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->m_Params.pInputAudioTrackFile);
4757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if (M4NO_ERROR != err)
4767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
4777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1("M4PTO3GPP_Open(): pReaderGlobInt->m_pFctOpen returns 0x%x", err);
4787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->m_pReaderGlobInt->m_pFctDestroy(pC->m_pAudioReaderContext);
4797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->m_pAudioReaderContext = M4OSA_NULL;
4807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return err;
4817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
4827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
4837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
4847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi         *  Get the audio streams from the input file */
4857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = M4NO_ERROR;
4867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        while (M4NO_ERROR == err)
4877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
4887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err = pC->m_pReaderGlobInt->m_pFctGetNextStream(pC->m_pAudioReaderContext,
4897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                &mediaFamily, &pStreamHandler);
4907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
4917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if((err == ((M4OSA_UInt32)M4ERR_READER_UNKNOWN_STREAM_TYPE)) ||
4927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                   (err == ((M4OSA_UInt32)M4WAR_TOO_MUCH_STREAMS)))
4937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
4947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err = M4NO_ERROR;
4957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                continue;
4967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
4977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
4987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if (M4NO_ERROR == err) /**< One stream found */
4997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
5007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                /**< Found an audio stream */
5017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                if ((M4READER_kMediaFamilyAudio == mediaFamily)
5027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    && (M4OSA_NULL == pC->m_pReaderAudioStream))
5037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                {
5047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    pC->m_pReaderAudioStream = (M4_AudioStreamHandler*)pStreamHandler;
5057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    /**< Keep pointer to the audio stream */
5067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    M4OSA_TRACE3_0("M4PTO3GPP_Open(): Found an audio stream in input");
5077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    pStreamHandler->m_bStreamIsOK = M4OSA_TRUE;
5087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
5097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    /**
5107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                     *  Allocate audio AU used for read operations */
511694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu                    pC->m_pReaderAudioAU = (M4_AccessUnit*)M4OSA_32bitAlignedMalloc(sizeof(M4_AccessUnit),
5127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                        M4PTO3GPP,(M4OSA_Char *)"pReaderAudioAU");
5137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    if (M4OSA_NULL == pC->m_pReaderAudioAU)
5147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    {
5157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                        M4OSA_TRACE1_0("M4PTO3GPP_Open(): unable to allocate pReaderAudioAU, \
5167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                       returning M4ERR_ALLOC");
5177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                        return M4ERR_ALLOC;
5187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    }
5197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
5207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    /**
5217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                     *  Initializes an access Unit */
5227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    err = pC->m_pReaderGlobInt->m_pFctFillAuStruct(pC->m_pAudioReaderContext,
5237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                            pStreamHandler, pC->m_pReaderAudioAU);
5247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    if (M4NO_ERROR != err)
5257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    {
5267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                        M4OSA_TRACE1_1("M4PTO3GPP_Open():\
5277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                         pReaderGlobInt->m_pFctFillAuStruct(audio)returns 0x%x", err);
5287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                        return err;
5297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    }
5307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                }
5317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                else
5327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                {
5337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    pStreamHandler->m_bStreamIsOK = M4OSA_FALSE;
5347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                }
5357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
5367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            else if (M4WAR_NO_MORE_STREAM != err) /**< Unexpected error code */
5377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
5387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4OSA_TRACE1_1("M4PTO3GPP_Open():\
5397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                     pReaderGlobInt->m_pFctGetNextStream returns 0x%x",
5407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    err);
5417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                return err;
5427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
5437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        } /* while*/
5447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    } /*if (M4OSA_NULL != pC->m_Params.pInputAudioTrackFile)*/
5457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
5467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_VideoState = M4PTO3GPP_kStreamState_STARTED;
5477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
5487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
5497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     * Init the audio stream */
5507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (M4OSA_NULL != pC->m_pReaderAudioStream)
5517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
5527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->m_AudioState = M4PTO3GPP_kStreamState_STARTED;
5537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = pC->m_pReaderGlobInt->m_pFctReset(pC->m_pAudioReaderContext,
5547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (M4_StreamHandler*)pC->m_pReaderAudioStream);
5557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if (M4NO_ERROR != err)
5567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
5577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1("M4PTO3GPP_Open(): pReaderDataInt->m_pFctReset(audio returns 0x%x",
5587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                 err);
5597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return err;
5607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
5617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
5627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
5637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
5647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     *  Update state automaton */
5657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_State = M4PTO3GPP_kState_OPENED;
5667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
5677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
5687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     * Get the max File size */
5697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    switch(pC->m_Params.OutputFileMaxSize)
5707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
5717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    case M4PTO3GPP_k50_KB:  pC->m_MaxFileSize = 50000;  break;
5727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    case M4PTO3GPP_k75_KB:  pC->m_MaxFileSize = 75000;  break;
5737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    case M4PTO3GPP_k100_KB: pC->m_MaxFileSize = 100000; break;
5747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    case M4PTO3GPP_k150_KB: pC->m_MaxFileSize = 150000; break;
5757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    case M4PTO3GPP_k200_KB: pC->m_MaxFileSize = 200000; break;
5767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    case M4PTO3GPP_k300_KB: pC->m_MaxFileSize = 300000; break;
5777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    case M4PTO3GPP_k400_KB: pC->m_MaxFileSize = 400000; break;
5787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    case M4PTO3GPP_k500_KB: pC->m_MaxFileSize = 500000; break;
5797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    case M4PTO3GPP_kUNLIMITED:
5807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    default:                                            break;
5817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
5827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
5837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_0("M4PTO3GPP_Open(): returning M4NO_ERROR");
5847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return M4NO_ERROR;
5857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
5867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
5877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
5887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
5897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4PTO3GPP_Step(M4PTO3GPP_Context pContext);
5907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief   Perform one step of trancoding.
5917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note
5927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param   pContext            (IN) M4PTO3GPP context
5937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return  M4NO_ERROR          No error
5947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return  M4ERR_PARAMETER     pContext is M4OSA_NULL
5957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return  M4ERR_STATE:    M4PTO3GPP is not in an appropriate state for this function
5967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *                           to be called
5977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return  M4PTO3GPP_WAR_END_OF_PROCESSING Encoding completed
5987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
5997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/
6007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*********************************************************/
6017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4PTO3GPP_Step(M4PTO3GPP_Context pContext)
6027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*********************************************************/
6037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
6047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4PTO3GPP_InternalContext *pC = (M4PTO3GPP_InternalContext*)(pContext);
6057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_ERR err = M4NO_ERROR;
6067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32 l_uiAudioStepCount = 0;
6077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_Int32  JumpToTime = 0;
6087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_Time  mtIncCts;
6097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
6107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
6117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     *  Check input parameters */
6127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF2((M4OSA_NULL==pContext), M4ERR_PARAMETER,
6137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4PTO3GPP_Step: pContext is M4OSA_NULL");
6147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
6157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
6167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     *  Check state automaton */
6177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if ( !((M4PTO3GPP_kState_OPENED == pC->m_State) || (M4PTO3GPP_kState_READY == pC->m_State)) )
6187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
6197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_1("M4PTO3GPP_Step(): Wrong State (%d), returning M4ERR_STATE", pC->m_State);
6207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return M4ERR_STATE;
6217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
6227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
6237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /******************************************************************/
6247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
6257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     *  In case this is the first step, we prepare the decoder, the encoder and the writer */
6267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (M4PTO3GPP_kState_OPENED == pC->m_State)
6277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
6287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE2_0("M4PTO3GPP_Step(): This is the first step, \
6297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                       calling M4PTO3GPP_Ready4Processing");
6307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
6317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
6327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi         *  Prepare the reader, the decoder, the encoder, the writer... */
6337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = M4PTO3GPP_Ready4Processing(pC);
6347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if (M4NO_ERROR != err)
6357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
6367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1("M4PTO3GPP_Step(): M4PTO3GPP_Ready4Processing() returns 0x%x", err);
6377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return err;
6387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
6397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
6407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
6417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi         *  Update state automaton */
6427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->m_State = M4PTO3GPP_kState_READY;
6437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
6447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE3_0("M4PTO3GPP_Step(): returning M4NO_ERROR (a)");
6457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return M4NO_ERROR; /**< we only do that in the first step, \
6467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                           first REAL step will be the next one */
6477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
6487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
6497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
6507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /*
6517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     * Check if we reached the targeted file size.
6527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     * We do that before the encoding, because the core encoder has to know if this is
6537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     * the last frame to encode */
6547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    err = pC->m_pWriterGlobInt->pFctGetOption(pC->m_p3gpWriterContext,
6557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4WRITER_kFileSizeAudioEstimated, (M4OSA_DataOption) &pC->m_CurrentFileSize);
6567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if ((0 != pC->m_MaxFileSize) &&
6577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**< Add a marge to the file size in order to never exceed the max file size */
6587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi       ((pC->m_CurrentFileSize + M4PTO3GPP_MARGE_OF_FILE_SIZE) >= pC->m_MaxFileSize))
6597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
6607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->m_IsLastPicture = M4OSA_TRUE;
6617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
6627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
6637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /******************************************************************
6647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    *  At that point we are in M4PTO3GPP_kState_READY state
6657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    *  We perform one step of video encoding
6667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    ******************************************************************/
6677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
6687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /************* VIDEO ENCODING ***************/
6697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (M4PTO3GPP_kStreamState_STARTED == pC->m_VideoState) /**<If the video encoding is going on*/
6707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {   /**
6717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi         * Call the encoder  */
6727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->m_NbCurrentFrame++;
6737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
6747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /* Check if it is the last frame the to encode */
6757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if((pC->m_Params.NbVideoFrames > 0) \
6767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            && (pC->m_NbCurrentFrame >= pC->m_Params.NbVideoFrames))
6777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
6787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->m_IsLastPicture = M4OSA_TRUE;
6797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
6807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
6817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE2_2("M4PTO3GPP_Step(): Calling pEncoderInt->pFctEncode with videoCts = %.2f\
6827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                       nb = %lu", pC->m_mtCts, pC->m_NbCurrentFrame);
6837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
6847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = pC->m_pEncoderInt->pFctEncode(pC->m_pMp4EncoderContext, M4OSA_NULL,
6857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /**< The input plane is null because the input Picture will be obtained by the\
6867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            VPP filter from the context */
6877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                        pC->m_mtCts,
6887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                        (pC->m_IsLastPicture ?
6897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                        M4ENCODER_kLastFrame : M4ENCODER_kNormalFrame) );
6907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**< Last param set to M4OSA_TRUE signals that this is the last frame to be encoded,\
6917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_FALSE else */
6927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
6937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE3_2("M4PTO3GPP_Step(): pEncoderInt->pFctEncode returns 0x%x, vidFormat =0x%x",
6947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err, pC->m_Params.OutputVideoFormat);
6957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if((M4NO_ERROR == err) && (M4VIDEOEDITING_kH264 == pC->m_Params.OutputVideoFormat))
6967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
6977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /* Check if last frame.*
6987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            *                  */
6997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if(M4OSA_TRUE == pC->m_IsLastPicture)
7007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
7017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4OSA_TRACE3_0("M4PTO3GPP_Step(): Last picture");
7027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->m_VideoState = M4PTO3GPP_kStreamState_FINISHED;
7037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
7047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
7057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
7067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
7077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if (M4WAR_NO_MORE_AU == err) /**< The video encoding is finished */
7087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
7097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE3_0("M4PTO3GPP_Step(): pEncoderInt->pFctEncode returns M4WAR_NO_MORE_AU");
7107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->m_VideoState = M4PTO3GPP_kStreamState_FINISHED;
7117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
7127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        else if (M4NO_ERROR != err)     /**< Unexpected error code */
7137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
7147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if( (((M4OSA_UInt32)M4WAR_WRITER_STOP_REQ) == err) ||
7157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    (((M4OSA_UInt32)M4ERR_ALLOC) == err) )
7167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
7177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4OSA_TRACE1_0("M4PTO3GPP_Step: returning ERR_PTO3GPP_ENCODER_ACCES_UNIT_ERROR");
7187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                return ERR_PTO3GPP_ENCODER_ACCES_UNIT_ERROR;
7197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
7207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            else
7217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
7227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4OSA_TRACE1_1("M4PTO3GPP_Step(): pEncoderInt->pFctEncode(last) (a) returns 0x%x",
7237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    err);
7247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                return err;
7257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
7267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
7277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    } /**< End of video encoding */
7287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
7297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
7307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /****** AUDIO TRANSCODING (read + null encoding + write) ******/
7317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (M4PTO3GPP_kStreamState_STARTED == pC->m_AudioState)
7327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
7337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        while ( (M4PTO3GPP_kStreamState_STARTED == pC->m_AudioState) &&
7347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                (pC->m_mtAudioCts < pC->m_mtNextCts))
7357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
7367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
7377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            l_uiAudioStepCount++;
7387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if (M4OSA_FALSE == pC->m_bAudioPaddingSilence)
7397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
7407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                /**< Read the next audio AU in the input Audio file */
7417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err = pC->m_pReaderDataInt->m_pFctGetNextAu(pC->m_pAudioReaderContext,
7427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    (M4_StreamHandler*)pC->m_pReaderAudioStream, pC->m_pReaderAudioAU);
7437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->m_mtAudioCts = pC->m_pReaderAudioAU->m_CTS + pC->m_AudioOffSet;
7447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
7457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                if (M4WAR_NO_MORE_AU == err)    /* The audio transcoding is finished */
7467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                {
7477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    M4OSA_TRACE2_0("M4PTO3GPP_Step():\
7487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                  pReaderDataInt->m_pFctGetNextAu(audio) returns \
7497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                    M4WAR_NO_MORE_AU");
7507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    switch(pC->m_Params.AudioPaddingMode)
7517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    {
7527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                        case M4PTO3GPP_kAudioPaddingMode_None:
7537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
7547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                            pC->m_AudioState = M4PTO3GPP_kStreamState_FINISHED;
7557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                            break;
7567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
7577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                        case M4PTO3GPP_kAudioPaddingMode_Silence:
7587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
7597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                            if (M4DA_StreamTypeAudioAmrNarrowBand
7607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                != pC->m_pReaderAudioStream->m_basicProperties.m_streamType)
7617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                /**< Do nothing if the input audio file format is not AMR */
7627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                            {
7637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                pC->m_AudioState = M4PTO3GPP_kStreamState_FINISHED;
7647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                            }
7657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                            else
7667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                            {
7677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                pC->m_bAudioPaddingSilence = M4OSA_TRUE;
7687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                            }
7697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                            break;
7707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
7717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                        case M4PTO3GPP_kAudioPaddingMode_Loop:
7727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
7737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                            /**< Jump to the beginning of the audio file */
7747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                            err = pC->m_pReaderGlobInt->m_pFctJump(pC->m_pAudioReaderContext,
7757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                (M4_StreamHandler*)pC->m_pReaderAudioStream, &JumpToTime);
7767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
7777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                            if (M4NO_ERROR != err)
7787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                            {
7797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                M4OSA_TRACE1_1("M4PTO3GPP_Step(): \
7807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                              pReaderDataInt->m_pFctReset(audio returns 0x%x",
7817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                               err);
7827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                return err;
7837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                            }
7847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
7857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                            if (M4DA_StreamTypeAudioAmrNarrowBand
7867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                == pC->m_pReaderAudioStream->m_basicProperties.m_streamType)
7877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                            {
7887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                pC->m_mtAudioCts += 20; /*< SEMC bug fixed at Lund */
7897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                pC->m_AudioOffSet = pC->m_mtAudioCts;
7907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
7917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                /**
7927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                 * 'BZZZ' bug fix:
7937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                 * add a silence frame */
7947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                mtIncCts = (M4OSA_Time)((pC->m_mtAudioCts) *
7957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                    (pC->m_pWriterAudioStream->timeScale / 1000.0));
7967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                err = M4PTO3GPP_writeAmrSilence122Frame(pC->m_pWriterDataInt,
7977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                    pC->m_p3gpWriterContext, &pC->m_WriterAudioAU, mtIncCts);
7987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
7997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                if (M4NO_ERROR != err)
8007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                {
8017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                    M4OSA_TRACE1_1("M4PTO3GPP_Step(): \
8027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                                   M4PTO3GPP_AddAmrSilenceSid returns 0x%x", err);
8037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                    return err;
8047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                }/**< Add => no audio cts increment...*/
8057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                            }
8067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                            else
8077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                            {
8087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                pC->m_AudioOffSet = pC->m_mtAudioCts + pC->m_DeltaAudioCts;
8097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                            }
8107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                            break;
8117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    } /* end of: switch */
8127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                }
8137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                else if (M4NO_ERROR != err)
8147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                {
8157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    M4OSA_TRACE1_1("M4PTO3GPP_Step(): pReaderDataInt->m_pFctGetNextAu(Audio)\
8167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                   returns 0x%x", err);
8177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    return err;
8187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                }
8197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                else
8207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                {
8217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    /**
8227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                     * Save the delta Cts (AAC only) */
8237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    pC->m_DeltaAudioCts = pC->m_pReaderAudioAU->m_CTS - pC->m_PrevAudioCts;
8247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    pC->m_PrevAudioCts  = pC->m_pReaderAudioAU->m_CTS;
8257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
8267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    /**
8277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                     *  Prepare the writer AU */
8287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    err = pC->m_pWriterDataInt->pStartAU(pC->m_p3gpWriterContext, 1,
8297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                        &pC->m_WriterAudioAU);
8307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    if (M4NO_ERROR != err)
8317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    {
8327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                        M4OSA_TRACE1_1("M4PTO3GPP_Step(): pWriterDataInt->pStartAU(Audio)\
8337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                       returns 0x%x", err);
8347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                        return err;
8357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    }
8367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
8377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    /**
8387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                     *  Copy audio data from reader AU to writer AU */
8397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    M4OSA_TRACE2_1("M4PTO3GPP_Step(): Copying audio AU: size=%d",
8407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                        pC->m_pReaderAudioAU->m_size);
84132ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu                    memcpy((void *)pC->m_WriterAudioAU.dataAddress,
84232ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu                        (void *)pC->m_pReaderAudioAU->m_dataAddress,
8437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                        pC->m_pReaderAudioAU->m_size);
8447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    pC->m_WriterAudioAU.size = pC->m_pReaderAudioAU->m_size;
8457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
8467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    /**
8477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                     *  Convert CTS unit from milliseconds to timescale */
8487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    if (M4DA_StreamTypeAudioAmrNarrowBand
8497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                        != pC->m_pReaderAudioStream->m_basicProperties.m_streamType)
8507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    {
8517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                        pC->m_WriterAudioAU.CTS  = (M4OSA_Time)
8527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                            ((pC->m_AudioOffSet + pC->m_pReaderAudioAU->m_CTS)
8537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                            * pC->m_pWriterAudioStream->timeScale / 1000.0);
8547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    }
8557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    else
8567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    {
8577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                        pC->m_WriterAudioAU.CTS = (M4OSA_Time)(pC->m_mtAudioCts *
8587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                            (pC->m_pWriterAudioStream->timeScale / 1000.0));
8597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    }
8607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    pC->m_WriterAudioAU.nbFrag = 0;
8617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    M4OSA_TRACE2_1("M4PTO3GPP_Step(): audio AU: CTS=%d ms", pC->m_mtAudioCts
8627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                        /*pC->m_pReaderAudioAU->m_CTS*/);
8637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
8647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    /**
8657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                     *  Write it to the output file */
8667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    err = pC->m_pWriterDataInt->pProcessAU(pC->m_p3gpWriterContext, 1,
8677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                        &pC->m_WriterAudioAU);
8687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
8697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    if (M4NO_ERROR != err)
8707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    {
8717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                        M4OSA_TRACE1_1("M4PTO3GPP_Step(): pWriterDataInt->pProcessAU(Audio)\
8727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                       returns 0x%x", err);
8737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                        return err;
8747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    }
8757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                }
8767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
8777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            else /**< M4OSA_TRUE == pC->m_bAudioPaddingSilence */
8787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
8797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                if (M4DA_StreamTypeAudioAmrNarrowBand ==
8807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    pC->m_pReaderAudioStream->m_basicProperties.m_streamType)
8817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                {
8827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    /**
8837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                     * Fill in audio au with silence */
8847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    pC->m_mtAudioCts += 20;
8857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
8867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    /**
8877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                     * Padd with silence */
8887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    mtIncCts = (M4OSA_Time)(pC->m_mtAudioCts
8897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                        * (pC->m_pWriterAudioStream->timeScale / 1000.0));
8907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    err = M4PTO3GPP_writeAmrSilence048Frame(pC->m_pWriterDataInt,
8917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                        pC->m_p3gpWriterContext, &pC->m_WriterAudioAU, mtIncCts);
8927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
8937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    if (M4NO_ERROR != err)
8947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    {
8957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                        M4OSA_TRACE1_1("M4PTO3GPP_Step(): M4PTO3GPP_AddAmrSilenceSid returns 0x%x",
8967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                            err);
8977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                        return err;
8987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    }
8997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                }
9007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                else /**< Do nothing if the input audio file format is not AMR */
9017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                {
9027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    pC->m_AudioState = M4PTO3GPP_kStreamState_FINISHED;
9037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                }
9047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
9057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
9067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        } /**< while */
9077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    } /**< End of audio encoding */
9087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
9097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_mtCts = pC->m_mtNextCts;
9107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
9117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
9127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     *  The transcoding is finished when no stream is being encoded anymore */
9137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (M4PTO3GPP_kStreamState_FINISHED == pC->m_VideoState)
9147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
9157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->m_State = M4PTO3GPP_kState_FINISHED;
9167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE2_0("M4PTO3GPP_Step(): transcoding finished, returning M4WAR_NO_MORE_AU");
9177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return M4PTO3GPP_WAR_END_OF_PROCESSING;
9187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
9197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
9207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_0("M4PTO3GPP_Step(): returning M4NO_ERROR (b)");
9217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return M4NO_ERROR;
9227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
9237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
9247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
9257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
9267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4PTO3GPP_Close(M4PTO3GPP_Context pContext);
9277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief   Finish the M4PTO3GPP transcoding.
9287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note    The output 3GPP file is ready to be played after this call
9297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param   pContext            (IN) M4PTO3GPP context
9307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return  M4NO_ERROR:         No error
9317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return  M4ERR_PARAMETER:    pContext is M4OSA_NULL (If Debug Level >= 2)
9327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return  M4ERR_STATE:    M4PTO3GPP is not in an appropriate state for this function to be called
9337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
9347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/
9357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*********************************************************/
9367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4PTO3GPP_Close(M4PTO3GPP_Context pContext)
9377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*********************************************************/
9387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
9397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4PTO3GPP_InternalContext *pC = (M4PTO3GPP_InternalContext*)(pContext);
9407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_ERR    osaErr = M4NO_ERROR;
9417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32 lastCTS;
9427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4ENCODER_Header* encHeader;
9437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4SYS_StreamIDmemAddr streamHeader;
9447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
9457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_1("M4PTO3GPP_Close called with pContext=0x%x", pContext);
9467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
9477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
9487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     *  Check input parameters */
9497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF2((M4OSA_NULL==pContext), M4ERR_PARAMETER, "M4PTO3GPP_Close:\
9507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                                             pContext is M4OSA_NULL");
9517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
9527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /* Check state automaton */
9537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if ((pC->m_State != M4PTO3GPP_kState_OPENED) &&
9547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        (pC->m_State != M4PTO3GPP_kState_READY) &&
9557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        (pC->m_State != M4PTO3GPP_kState_FINISHED))
9567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
9577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_1("M4PTO3GPP_Close(): Wrong State (%d), returning M4ERR_STATE", pC->m_State);
9587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return M4ERR_STATE;
9597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
9607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
9617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /*************************************/
9627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /******** Finish the encoding ********/
9637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /*************************************/
9647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (M4PTO3GPP_kState_READY == pC->m_State)
9657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
9667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->m_State = M4PTO3GPP_kState_FINISHED;
9677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
9687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
9697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (M4PTO3GPP_kEncoderRunning == pC->m_eEncoderState)
9707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
9717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if (pC->m_pEncoderInt->pFctStop != M4OSA_NULL)
9727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
9737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            osaErr = pC->m_pEncoderInt->pFctStop(pC->m_pMp4EncoderContext);
9747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if (M4NO_ERROR != osaErr)
9757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
9767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4OSA_TRACE1_1("M4PTO3GPP_close: m_pEncoderInt->pFctStop returns 0x%x", osaErr);
9777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                /* Well... how the heck do you handle a failed cleanup? */
9787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
9797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
9807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
9817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->m_eEncoderState = M4PTO3GPP_kEncoderStopped;
9827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
9837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
9847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /* Has the encoder actually been opened? Don't close it if that's not the case. */
9857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (M4PTO3GPP_kEncoderStopped == pC->m_eEncoderState)
9867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
9877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        osaErr = pC->m_pEncoderInt->pFctClose(pC->m_pMp4EncoderContext);
9887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if (M4NO_ERROR != osaErr)
9897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
9907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1("M4PTO3GPP_close: m_pEncoderInt->pFctClose returns 0x%x", osaErr);
9917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /* Well... how the heck do you handle a failed cleanup? */
9927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
9937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
9947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->m_eEncoderState = M4PTO3GPP_kEncoderClosed;
9957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
9967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
9977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /*******************************/
9987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /******** Close 3GP out ********/
9997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /*******************************/
10007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
10017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (M4OSA_NULL != pC->m_p3gpWriterContext)  /* happens in state _SET */
10027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
10037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /* HW encoder: fetch the DSI from the shell video encoder, and feed it to the writer before
10047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        closing it. */
10050a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury        if ((M4VIDEOEDITING_kMPEG4 == pC->m_Params.OutputVideoFormat)
10067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            || (M4VIDEOEDITING_kH264 == pC->m_Params.OutputVideoFormat))
10077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
10087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            osaErr = pC->m_pEncoderInt->pFctGetOption(pC->m_pMp4EncoderContext,
10097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4ENCODER_kOptionID_EncoderHeader,
10107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                                            (M4OSA_DataOption)&encHeader);
10117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if ( (M4NO_ERROR != osaErr) || (M4OSA_NULL == encHeader->pBuf) )
10127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
10137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4OSA_TRACE1_1("M4PTO3GPP_close: failed to get the encoder header (err 0x%x)",
10147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    osaErr);
10157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                /**< no return here, we still have stuff to deallocate after close, even if \
10167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                it fails. */
10177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
10187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            else
10197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
10207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                /* set this header in the writer */
10217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                streamHeader.streamID = M4PTO3GPP_WRITER_VIDEO_STREAM_ID;
10227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                streamHeader.size = encHeader->Size;
10237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                streamHeader.addr = (M4OSA_MemAddr32)encHeader->pBuf;
10247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                osaErr = pC->m_pWriterGlobInt->pFctSetOption(pC->m_p3gpWriterContext,
10257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    M4WRITER_kDSI, &streamHeader);
10267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                if (M4NO_ERROR != osaErr)
10277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                {
10287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    M4OSA_TRACE1_1("M4PTO3GPP_close: failed to set the DSI in the writer \
10297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                (err 0x%x)   ", osaErr);
10307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                }
10317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
10327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
10337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
10347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /* Update last Video CTS */
10357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        lastCTS = (M4OSA_UInt32)pC->m_mtCts;
10367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
10377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        osaErr = pC->m_pWriterGlobInt->pFctSetOption(pC->m_p3gpWriterContext,
10387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (M4OSA_UInt32)M4WRITER_kMaxFileDuration, &lastCTS);
10397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if (M4NO_ERROR != osaErr)
10407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
10417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1("M4PTO3GPP_Close: SetOption(M4WRITER_kMaxFileDuration) returns 0x%x",
10427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                osaErr);
10437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
10447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
10457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /* Write and close the 3GP output file */
10467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        osaErr = pC->m_pWriterGlobInt->pFctCloseWrite(pC->m_p3gpWriterContext);
10477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if (M4NO_ERROR != osaErr)
10487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
10497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1("M4PTO3GPP_Close: pWriterGlobInt->pFctCloseWrite returns 0x%x", osaErr);
10507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /**< don't return yet, we have to close other things */
10517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
10527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->m_p3gpWriterContext = M4OSA_NULL;
10537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
10547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
10557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
10567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     * State transition */
10577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_State = M4PTO3GPP_kState_CLOSED;
10587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
10597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_1("M4PTO3GPP_Close(): returning 0x%x", osaErr);
10607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return osaErr;
10617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
10627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
10637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
10647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
10657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
10667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4PTO3GPP_CleanUp(M4PTO3GPP_Context pContext);
10677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief   Free all resources used by the M4PTO3GPP.
10687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note    The context is no more valid after this call
10697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param   pContext            (IN) M4PTO3GPP context
10707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return  M4NO_ERROR:         No error
10717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return  M4ERR_PARAMETER:    pContext is M4OSA_NULL (If Debug Level >= 2)
10727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
10737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/
10747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*********************************************************/
10757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4PTO3GPP_CleanUp(M4PTO3GPP_Context pContext)
10767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*********************************************************/
10777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
10787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_ERR err = M4NO_ERROR;
10797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4PTO3GPP_InternalContext *pC = (M4PTO3GPP_InternalContext*)(pContext);
10807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
10817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_1("M4PTO3GPP_CleanUp called with pContext=0x%x", pContext);
10827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
10837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
10847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     *  Check input parameters */
10857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF2((M4OSA_NULL==pContext),M4ERR_PARAMETER, "M4PTO3GPP_CleanUp: pContext \
10867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                                            is M4OSA_NULL");
10877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
10887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
10897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     *  First call Close, if needed, to clean the video encoder */
10907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
10917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if ((M4PTO3GPP_kState_OPENED == pC->m_State) || (M4PTO3GPP_kState_READY == pC->m_State)
10927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        || (M4PTO3GPP_kState_FINISHED == pC->m_State))
10937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
10947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = M4PTO3GPP_Close(pContext);
10957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if (M4NO_ERROR != err)
10967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
10977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1("M4PTO3GPP_CleanUp: M4PTO3GPP_Close returns 0x%x", err);
10987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /**< don't return, we have to free other components */
10997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
11007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
11017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
11027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
11037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     *  Free Audio reader stuff, if needed */
11047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
11057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (M4OSA_NULL != pC->m_pAudioReaderContext) /**< may be M4OSA_NULL if M4PTO3GPP_Open was not\
11067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                                 called */
11077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
11087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
11097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = pC->m_pReaderGlobInt->m_pFctClose(pC->m_pAudioReaderContext);
11107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if (M4NO_ERROR != err)
11117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
11127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1("M4PTO3GPP_CleanUp: pReaderGlobInt->m_pFctClose returns 0x%x", err);
11137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /**< don't return, we have to free other components */
11147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
11157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = pC->m_pReaderGlobInt->m_pFctDestroy(pC->m_pAudioReaderContext);
11167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->m_pAudioReaderContext = M4OSA_NULL;
11177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if (M4NO_ERROR != err)
11187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
11197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1("M4PTO3GPP_CleanUp: pReaderGlobInt->m_pFctDestroy returns 0x%x", err);
11207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /**< don't return, we have to free other components */
11217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
11227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
11237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
11247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (M4OSA_NULL != pC->m_pReaderAudioAU)
11257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
1126694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu        free(pC->m_pReaderAudioAU);
11277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->m_pReaderAudioAU = M4OSA_NULL;
11287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
11297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
11307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
11317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     *  Free video encoder stuff, if needed */
11327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (M4OSA_NULL != pC->m_pMp4EncoderContext)
11337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
11347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = pC->m_pEncoderInt->pFctCleanup(pC->m_pMp4EncoderContext);
11357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->m_pMp4EncoderContext = M4OSA_NULL;
11367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if (M4NO_ERROR != err)
11377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
11387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1("M4PTO3GPP_CleanUp: pEncoderInt->pFctDestroy returns 0x%x", err);
11397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /**< don't return, we have to free other components */
11407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
11417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
11427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
11437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (M4OSA_NULL != pC->m_pWriterVideoStream)
11447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
1145694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu        free(pC->m_pWriterVideoStream);
11467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->m_pWriterVideoStream = M4OSA_NULL;
11477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
11487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (M4OSA_NULL != pC->m_pWriterAudioStream)
11497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
1150694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu        free(pC->m_pWriterAudioStream);
11517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->m_pWriterAudioStream = M4OSA_NULL;
11527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
11537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (M4OSA_NULL != pC->m_pWriterVideoStreamInfo)
11547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
1155694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu        free(pC->m_pWriterVideoStreamInfo);
11567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->m_pWriterVideoStreamInfo = M4OSA_NULL;
11577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
11587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (M4OSA_NULL != pC->m_pWriterAudioStreamInfo)
11597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
1160694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu        free(pC->m_pWriterAudioStreamInfo);
11617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->m_pWriterAudioStreamInfo = M4OSA_NULL;
11627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
11637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
11647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
11657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
11667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     *  Free the shells interfaces */
11677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (M4OSA_NULL != pC->m_pReaderGlobInt)
11687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
1169694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu        free(pC->m_pReaderGlobInt);
11707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->m_pReaderGlobInt = M4OSA_NULL;
11717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
11727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (M4OSA_NULL != pC->m_pReaderDataInt)
11737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
1174694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu        free(pC->m_pReaderDataInt);
11757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->m_pReaderDataInt = M4OSA_NULL;
11767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
11777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
11787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if(M4OSA_NULL != pC->m_pEncoderInt)
11797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
1180694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu        free(pC->m_pEncoderInt);
11817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->m_pEncoderInt = M4OSA_NULL;
11827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
11837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if(M4OSA_NULL != pC->m_pWriterGlobInt)
11847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
1185694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu        free(pC->m_pWriterGlobInt);
11867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->m_pWriterGlobInt = M4OSA_NULL;
11877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
11887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if(M4OSA_NULL != pC->m_pWriterDataInt)
11897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
1190694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu        free(pC->m_pWriterDataInt);
11917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->m_pWriterDataInt = M4OSA_NULL;
11927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
11937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**< Do not free pC->pOsaMemoryPtrFct and pC->pOsaMemoryPtrFct, because it's owned by the \
11947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    application */
11957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
11967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
11977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     *  Free the context itself */
1198694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu    free(pC);
11997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC = M4OSA_NULL;
12007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
12017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_0("M4PTO3GPP_CleanUp(): returning M4NO_ERROR");
12027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return M4NO_ERROR;
12037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
12047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
12057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/********************* INTERNAL FUNCTIONS *********************/
12067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
12077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
12087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
12097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4PTO3GPP_Ready4Processing(M4PTO3GPP_InternalContext* pC);
12107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief   Prepare all resources and interfaces for the transcoding.
12117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note    It is called by the first M4OSA_Step() call
12127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param   pC          (IN) M4PTO3GPP private context
12137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return  M4NO_ERROR: No error
12147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return  Any error returned by an underlaying module
12157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
12167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/
12177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/******************************************************/
12187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4PTO3GPP_Ready4Processing(M4PTO3GPP_InternalContext* pC)
12197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/******************************************************/
12207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
12217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_ERR               err = M4NO_ERROR;
12227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4WRITER_OutputFileType outputFileType;
12237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32            uiVersion;
12247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4ENCODER_Format        encFormat;
12257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4ENCODER_AdvancedParams   EncParams;    /**< Encoder advanced parameters */
12267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4SYS_StreamIDValue     optionValue;
12277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
12287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_1("M4PTO3GPP_Ready4Processing called with pC=0x%x", pC);
12297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
12307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /******************************/
12317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /******************************/
12327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
12337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /********************************************/
12347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /********                            ********/
12357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /******** Video Encoder Parames init ********/
12367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /********                            ********/
12377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /********************************************/
12387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
12397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
12407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     *  Get the correct encoder interface */
12417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    switch(pC->m_Params.OutputVideoFormat)
12427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
12437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_kMPEG4:
12447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef M4VSS_SUPPORT_ENCODER_MPEG4
12457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err = VideoEditorVideoEncoder_getInterface_MPEG4(&encFormat, &pC->m_pEncoderInt,
12467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    M4ENCODER_OPEN_ADVANCED);
12477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#else /* software MPEG4 encoder not available! */
12487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4OSA_TRACE1_0("No MPEG4 encoder available! Did you forget to register one?");
12497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err = M4ERR_STATE;
12507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif /* software MPEG4 encoder available? */
12517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
12527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_kH263:
12537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef M4VSS_SUPPORT_ENCODER_MPEG4
12547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err = VideoEditorVideoEncoder_getInterface_H263(&encFormat, &pC->m_pEncoderInt,
12557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    M4ENCODER_OPEN_ADVANCED);
12567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#else /* software H263 encoder not available! */
12577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4OSA_TRACE1_0("No H263 encoder available! Did you forget to register one?");
12587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err = M4ERR_STATE;
12597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif /* software H263 encoder available? */
12607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
12617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_kH264:
12627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef M4VSS_SUPPORT_ENCODER_AVC
12637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err = VideoEditorVideoEncoder_getInterface_H264(&encFormat, &pC->m_pEncoderInt,
12647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    M4ENCODER_OPEN_ADVANCED);
12657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#else /* software H264 encoder not available! */
12667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4OSA_TRACE1_0("M4PTO3GPP_Ready4Processing: No H264 encoder available!\
12677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                               Did you forget to register one?");
12687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err = M4ERR_STATE;
12697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif /* software H264 encoder available? */
12707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
12717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        default:
12727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1("M4PTO3GPP_Ready4Processing: unknown format 0x%x returning \
12737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                           ERR_M4PTO3GPP_UNDEFINED_OUTPUT_VIDEO_FORMAT",
12747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                           pC->m_Params.OutputVideoFormat);
12757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return ERR_PTO3GPP_UNDEFINED_OUTPUT_VIDEO_FORMAT;
12767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
12777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (M4NO_ERROR != err)
12787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
12797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_1("switch(pC->m_Params.OutputVideoFormat): getInterfaces returns 0x%x", err);
12807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return err;
12817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
12827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
12837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
12847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     *  Fill encoder parameters according to M4PTO3GPP settings */
12857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
12867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
12877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     * Video frame size */
12887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    switch(pC->m_Params.OutputVideoFrameSize)
12897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
12907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_kSQCIF :
12917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            EncParams.FrameHeight = M4ENCODER_SQCIF_Height;
12927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            EncParams.FrameWidth  = M4ENCODER_SQCIF_Width;
12937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
12947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_kQQVGA :
12957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            EncParams.FrameHeight = M4ENCODER_QQVGA_Height;
12967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            EncParams.FrameWidth  = M4ENCODER_QQVGA_Width;
12977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
12987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_kQCIF :
12997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            EncParams.FrameHeight = M4ENCODER_QCIF_Height;
13007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            EncParams.FrameWidth  = M4ENCODER_QCIF_Width;
13017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
13027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_kQVGA :
13037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            EncParams.FrameHeight = M4ENCODER_QVGA_Height;
13047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            EncParams.FrameWidth  = M4ENCODER_QVGA_Width;
13057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
13067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_kCIF :
13077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            EncParams.FrameHeight = M4ENCODER_CIF_Height;
13087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            EncParams.FrameWidth  = M4ENCODER_CIF_Width;
13097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
13107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_kVGA :
13117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            EncParams.FrameHeight = M4ENCODER_VGA_Height;
13127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            EncParams.FrameWidth  = M4ENCODER_VGA_Width;
13137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
13147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* +PR LV5807 */
13157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_kWVGA :
13167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            EncParams.FrameHeight = M4ENCODER_WVGA_Height;
13177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            EncParams.FrameWidth  = M4ENCODER_WVGA_Width;
13187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
13197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_kNTSC:
13207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            EncParams.FrameHeight = M4ENCODER_NTSC_Height;
13217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            EncParams.FrameWidth  = M4ENCODER_NTSC_Width;
13227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
13237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* -PR LV5807 */
13247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* +CR Google */
13257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_k640_360:
13267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            EncParams.FrameHeight = M4ENCODER_640_360_Height;
13277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            EncParams.FrameWidth  = M4ENCODER_640_360_Width;
13287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
13297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
13307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_k854_480:
13317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            EncParams.FrameHeight = M4ENCODER_854_480_Height;
13327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            EncParams.FrameWidth  = M4ENCODER_854_480_Width;
13337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
13347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
13358806b706693c0992724f6603353af18aeb4a0f80Hong Teng        case M4VIDEOEDITING_k1280_720:
13368806b706693c0992724f6603353af18aeb4a0f80Hong Teng            EncParams.FrameHeight = M4ENCODER_1280_720_Height;
13378806b706693c0992724f6603353af18aeb4a0f80Hong Teng            EncParams.FrameWidth  = M4ENCODER_1280_720_Width;
13388806b706693c0992724f6603353af18aeb4a0f80Hong Teng            break;
13398806b706693c0992724f6603353af18aeb4a0f80Hong Teng
13408806b706693c0992724f6603353af18aeb4a0f80Hong Teng        case M4VIDEOEDITING_k1080_720:
13418806b706693c0992724f6603353af18aeb4a0f80Hong Teng            EncParams.FrameHeight = M4ENCODER_1080_720_Height;
13428806b706693c0992724f6603353af18aeb4a0f80Hong Teng            EncParams.FrameWidth  = M4ENCODER_1080_720_Width;
13437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
13447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
13458806b706693c0992724f6603353af18aeb4a0f80Hong Teng        case M4VIDEOEDITING_k960_720:
13468806b706693c0992724f6603353af18aeb4a0f80Hong Teng            EncParams.FrameHeight = M4ENCODER_960_720_Height;
13478806b706693c0992724f6603353af18aeb4a0f80Hong Teng            EncParams.FrameWidth  = M4ENCODER_960_720_Width;
13487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
13497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
13508806b706693c0992724f6603353af18aeb4a0f80Hong Teng        case M4VIDEOEDITING_k1920_1080:
13518806b706693c0992724f6603353af18aeb4a0f80Hong Teng            EncParams.FrameHeight = M4ENCODER_1920_1080_Height;
13528806b706693c0992724f6603353af18aeb4a0f80Hong Teng            EncParams.FrameWidth  = M4ENCODER_1920_1080_Width;
13537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
13547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* -CR Google */
13557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        default :
13567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1("M4PTO3GPP_Ready4Processing: unknown format 0x%x returning \
13577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                           ERR_M4PTO3GPP_UNDEFINED_OUTPUT_VIDEO_FRAME_SIZE",
13587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                           pC->m_Params.OutputVideoFrameSize);
13597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return ERR_PTO3GPP_UNDEFINED_OUTPUT_VIDEO_FRAME_SIZE;
13607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
13617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
13627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    EncParams.InputFormat = M4ENCODER_kIYUV420;
13637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
13647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
13657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     * Video bitrate */
13667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    switch(pC->m_Params.OutputVideoBitrate)
13677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
13687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_k16_KBPS:
13697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_k24_KBPS:
13707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_k32_KBPS:
13717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_k48_KBPS:
13727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_k64_KBPS:
13737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_k96_KBPS:
13747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_k128_KBPS:
13757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_k192_KBPS:
13767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_k256_KBPS:
13777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_k288_KBPS:
13787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_k384_KBPS:
13797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_k512_KBPS:
13807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_k800_KBPS:
13817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*+ New Encoder bitrates */
13827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_k2_MBPS:
13837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_k5_MBPS:
13847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_k8_MBPS:
13857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*- New Encoder bitrates */
13867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            EncParams.Bitrate = pC->m_Params.OutputVideoBitrate;
13877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
13887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
13897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_kVARIABLE_KBPS:
13907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*+ New Encoder bitrates */
13917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            EncParams.Bitrate = M4VIDEOEDITING_k8_MBPS;
13927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*- New Encoder bitrates */
13937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
13947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
13957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        default :
13967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1("M4PTO3GPP_Ready4Processing: unknown format 0x%x returning\
13977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                           ERR_M4PTO3GPP_UNDEFINED_OUTPUT_VIDEO_BITRATE",
13987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                           pC->m_Params.OutputVideoBitrate);
13997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return ERR_PTO3GPP_UNDEFINED_OUTPUT_VIDEO_BITRATE;
14007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
14017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
14027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
14037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     * Video format */
14047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    switch(pC->m_Params.OutputVideoFormat)
14057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
14067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_kMPEG4 :
14077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            EncParams.Format    = M4ENCODER_kMPEG4;
14087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
14097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_kH263 :
14107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            EncParams.Format    = M4ENCODER_kH263;
14117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
14127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_kH264:
14137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            EncParams.Format    = M4ENCODER_kH264;
14147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
14157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        default :
14167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1("M4PTO3GPP_Ready4Processing: unknown format 0x%x returning\
14177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                           ERR_M4PTO3GPP_UNDEFINED_OUTPUT_VIDEO_FORMAT",
14187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                           pC->m_Params.OutputVideoFormat);
14197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return ERR_PTO3GPP_UNDEFINED_OUTPUT_VIDEO_FORMAT;
14207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
14217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
14227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
14237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     * Video frame rate (set it to max = 30 fps) */
14247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    EncParams.uiTimeScale = 30;
14257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    EncParams.uiRateFactor = 1;
14267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
14277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    EncParams.FrameRate = M4ENCODER_k30_FPS;
14287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
14297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
14307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /******************************/
14317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /******** 3GP out init ********/
14327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /******************************/
14337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
14347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /* Get the 3GPP writer interface */
14357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    err = M4WRITER_3GP_getInterfaces(&outputFileType, &pC->m_pWriterGlobInt, &pC->m_pWriterDataInt);
14367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (M4NO_ERROR != err)
14377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
14387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_1("M4WRITER_3GP_getInterfaces: M4WRITER_3GP_getInterfaces returns 0x%x", err);
14397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return err;
14407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
14417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
14427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /* Init the 3GPP writer */
14437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    err = pC->m_pWriterGlobInt->pFctOpen(&pC->m_p3gpWriterContext, pC->m_Params.pOutput3gppFile,
14447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->pOsalFileWrite, pC->m_Params.pTemporaryFile, pC->pOsalFileRead);
14457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (M4NO_ERROR != err)
14467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
14477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_1("M4PTO3GPP_Ready4Processing: pWriterGlobInt->pFctOpen returns 0x%x", err);
14487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return err;
14497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
14507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
14517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
14527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     *  Link to the writer context in the writer interface */
14537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_pWriterDataInt->pWriterContext = pC->m_p3gpWriterContext;
14547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
14557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
14567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     *  Set the product description string in the written file */
14577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    err = pC->m_pWriterGlobInt->pFctSetOption(pC->m_p3gpWriterContext, M4WRITER_kEmbeddedString,
14587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        (M4OSA_DataOption)M4PTO3GPP_SIGNATURE);
14597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (M4NO_ERROR != err)
14607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
14617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_1("M4PTO3GPP_Ready4Processing: \
14627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                       pWriterGlobInt->pFctSetOption(M4WRITER_kEmbeddedString) returns 0x%x", err);
14637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return err;
14647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
14657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
14667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
14677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     *  Set the product version in the written file */
14687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    uiVersion = M4VIDEOEDITING_VERSION_MAJOR*100 + M4VIDEOEDITING_VERSION_MINOR*10
14697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        + M4VIDEOEDITING_VERSION_REVISION;
14707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    err = pC->m_pWriterGlobInt->pFctSetOption(pC->m_p3gpWriterContext, M4WRITER_kEmbeddedVersion,
14717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        (M4OSA_DataOption)&uiVersion);
14727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (M4NO_ERROR != err)
14737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
14747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_1("M4PTO3GPP_Ready4Processing: \
14757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                       pWriterGlobInt->pFctSetOption(M4WRITER_kEmbeddedVersion) returns 0x%x", err);
14767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return err;
14777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
14787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
14797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
14807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     *  Allocate and fill the video stream structures for the writer */
14817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_pWriterVideoStream =
1482694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu        (M4SYS_StreamDescription*)M4OSA_32bitAlignedMalloc(sizeof(M4SYS_StreamDescription), M4PTO3GPP,
14837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        (M4OSA_Char *)"pWriterVideoStream");
14847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (M4OSA_NULL == pC->m_pWriterVideoStream)
14857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
14867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_0("M4PTO3GPP_Ready4Processing(): unable to allocate pWriterVideoStream, \
14877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                       returning M4ERR_ALLOC");
14887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return M4ERR_ALLOC;
14897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
14907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_pWriterVideoStreamInfo =
1491694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu        (M4WRITER_StreamVideoInfos*)M4OSA_32bitAlignedMalloc(sizeof(M4WRITER_StreamVideoInfos), M4PTO3GPP,
14927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        (M4OSA_Char *)"pWriterVideoStreamInfo");
14937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (M4OSA_NULL == pC->m_pWriterVideoStreamInfo)
14947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
14957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_0("M4PTO3GPP_Ready4Processing(): unable to allocate pWriterVideoStreamInfo,\
14967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                       returning M4ERR_ALLOC");
14977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return M4ERR_ALLOC;
14987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
14997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
15007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
15017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     * Fill Video properties structure for the AddStream method */
15027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_pWriterVideoStreamInfo->height        = EncParams.FrameHeight;
15037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_pWriterVideoStreamInfo->width         = EncParams.FrameWidth;
15047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_pWriterVideoStreamInfo->fps           = 0;        /**< Not used by the core writer */
15057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_pWriterVideoStreamInfo->Header.pBuf   = M4OSA_NULL;
15067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /** No header, will be set by setOption */
15077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_pWriterVideoStreamInfo->Header.Size   = 0;
15087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
15097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
15107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     *  Fill Video stream description structure for the AddStream method */
15117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_pWriterVideoStream->streamID = M4PTO3GPP_WRITER_VIDEO_STREAM_ID;
15127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
15137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
15147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     * Video format */
15157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    switch(pC->m_Params.OutputVideoFormat)
15167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
15177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_kMPEG4:
15187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->m_pWriterVideoStream->streamType = M4SYS_kMPEG_4;   break;
15197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_kH263:
15207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->m_pWriterVideoStream->streamType = M4SYS_kH263;     break;
15217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_kH264:
15227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->m_pWriterVideoStream->streamType = M4SYS_kH264;     break;
15237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        default :
15247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1("M4PTO3GPP_Ready4Processing: unknown format 0x%x returning \
15257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                           ERR_M4PTO3GPP_UNDEFINED_OUTPUT_VIDEO_FORMAT",
15267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                           pC->m_Params.OutputVideoFormat);
15277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return ERR_PTO3GPP_UNDEFINED_OUTPUT_VIDEO_FORMAT;
15287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
15297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
15307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
15317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     * Video bitrate */
15327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    switch(pC->m_Params.OutputVideoBitrate)
15337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
15347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_k16_KBPS:
15357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_k24_KBPS:
15367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_k32_KBPS:
15377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_k48_KBPS:
15387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_k64_KBPS:
15397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_k96_KBPS:
15407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_k128_KBPS:
15417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_k192_KBPS:
15427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_k256_KBPS:
15437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_k288_KBPS:
15447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_k384_KBPS:
15457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_k512_KBPS:
15467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_k800_KBPS:
15477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*+ New Encoder bitrates */
15487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_k2_MBPS:
15497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_k5_MBPS:
15507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_k8_MBPS:
15517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*- New Encoder bitrates */
15527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->m_pWriterVideoStream->averageBitrate = pC->m_Params.OutputVideoBitrate;
15537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
15547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
15557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_kVARIABLE_KBPS :
15567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->m_pWriterVideoStream->averageBitrate = 0;
15577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
15587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
15597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        default :
15607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1("M4PTO3GPP_Ready4Processing: unknown format 0x%x returning\
15617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                           ERR_M4PTO3GPP_UNDEFINED_OUTPUT_VIDEO_BITRATE",
15627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                           pC->m_Params.OutputVideoBitrate);
15637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return ERR_PTO3GPP_UNDEFINED_OUTPUT_VIDEO_BITRATE;
15647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
15657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
15667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_pWriterVideoStream->duration                  = 0;        /**< Duration is not known */
15677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_pWriterVideoStream->timeScale                 = 0;    /**< Not used by the core writer */
15687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_pWriterVideoStream->maxBitrate                = pC->m_pWriterVideoStream->averageBitrate;
15697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_pWriterVideoStream->profileLevel              = 0;    /**< Not used by the core writer */
15707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_pWriterVideoStream->decoderSpecificInfo       = (M4OSA_MemAddr32)
15717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                                            (pC->m_pWriterVideoStreamInfo);
15727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_pWriterVideoStream->decoderSpecificInfoSize   = sizeof(M4WRITER_StreamVideoInfos);
15737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
15747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
15757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     * Update AU properties for video stream */
15767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_WriterVideoAU.CTS         = pC->m_WriterVideoAU.DTS = 0;  /** Reset time */
15777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_WriterVideoAU.size        = 0;
15787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_WriterVideoAU.frag        = M4OSA_NULL;
15797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_WriterVideoAU.nbFrag      = 0;                            /** No fragment */
15807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_WriterVideoAU.stream      = pC->m_pWriterVideoStream;
15817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_WriterVideoAU.attribute   = AU_RAP;
15827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_WriterVideoAU.dataAddress = M4OSA_NULL;
15837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
15847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
15857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     *  If there is an audio input, allocate and fill the audio stream structures for the writer */
15867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if(M4OSA_NULL != pC->m_pReaderAudioStream)
15877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
15887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->m_pWriterAudioStream =
1589694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu            (M4SYS_StreamDescription*)M4OSA_32bitAlignedMalloc(sizeof(M4SYS_StreamDescription), M4PTO3GPP,
15907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (M4OSA_Char *)"pWriterAudioStream");
15917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if (M4OSA_NULL == pC->m_pWriterAudioStream)
15927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
15937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_0("M4PTO3GPP_Ready4Processing(): unable to allocate pWriterAudioStream, \
15947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                           returning M4ERR_ALLOC");
15957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return M4ERR_ALLOC;
15967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
15977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->m_pWriterAudioStreamInfo =
1598694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu            (M4WRITER_StreamAudioInfos*)M4OSA_32bitAlignedMalloc(sizeof(M4WRITER_StreamAudioInfos), M4PTO3GPP,
15997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (M4OSA_Char *)"pWriterAudioStreamInfo");
16007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if (M4OSA_NULL == pC->m_pWriterAudioStreamInfo)
16017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
16027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_0("M4PTO3GPP_Ready4Processing(): unable to allocate \
16037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                           pWriterAudioStreamInfo, returning M4ERR_ALLOC");
16047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return M4ERR_ALLOC;
16057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
16067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
16077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->m_pWriterAudioStreamInfo->nbSamplesPerSec = 0; /**< unused by our shell writer */
16087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->m_pWriterAudioStreamInfo->nbBitsPerSample = 0; /**< unused by our shell writer */
16097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->m_pWriterAudioStreamInfo->nbChannels = 1;      /**< unused by our shell writer */
16107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
16117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( (M4OSA_NULL != pC->m_pReaderAudioStream) && /* audio could have been discarded */
16127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (M4OSA_NULL != pC->m_pReaderAudioStream->m_basicProperties.m_pDecoderSpecificInfo) )
16137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
16147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /* If we copy the stream from the input, we copy its DSI */
16157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->m_pWriterAudioStreamInfo->Header.Size =
16167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->m_pReaderAudioStream->m_basicProperties.m_decoderSpecificInfoSize;
16177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->m_pWriterAudioStreamInfo->Header.pBuf =
16187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                (M4OSA_MemAddr8)pC->m_pReaderAudioStream->m_basicProperties.m_pDecoderSpecificInfo;
16197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
16207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        else
16217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
16227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /* Writer will put a default DSI */
16237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->m_pWriterAudioStreamInfo->Header.Size = 0;
16247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->m_pWriterAudioStreamInfo->Header.pBuf = M4OSA_NULL;
16257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
16267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
16277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
16287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi         * Add the audio stream */
16297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        switch (pC->m_pReaderAudioStream->m_basicProperties.m_streamType)
16307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
16317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            case M4DA_StreamTypeAudioAmrNarrowBand:
16327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->m_pWriterAudioStream->streamType = M4SYS_kAMR;
16337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                break;
16347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            case M4DA_StreamTypeAudioAac:
16357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->m_pWriterAudioStream->streamType = M4SYS_kAAC;
16367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                break;
16377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            case M4DA_StreamTypeAudioEvrc:
16387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->m_pWriterAudioStream->streamType = M4SYS_kEVRC;
16397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                break;
16407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            default:
16417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4OSA_TRACE1_1("M4PTO3GPP_Ready4Processing: unhandled audio format (0x%x),\
16427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                               returning ERR_PTO3GPP_UNDEFINED_OUTPUT_VIDEO_BITRATE",
16437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                               pC->m_pReaderAudioStream->m_basicProperties.m_streamType);
16447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                return ERR_PTO3GPP_UNDEFINED_OUTPUT_AUDIO_FORMAT;
16457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
16467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
16477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /*
16487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi         * Fill Audio stream description structure for the AddStream method */
16497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->m_pWriterAudioStream->streamID                  = M4PTO3GPP_WRITER_AUDIO_STREAM_ID;
16507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->m_pWriterAudioStream->duration                  = 0;/**< Duration is not known yet */
16517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->m_pWriterAudioStream->timeScale                 = M4PTO3GPP_WRITER_AUDIO_AMR_TIME_SCALE;
16527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->m_pWriterAudioStream->profileLevel              = M4PTO3GPP_WRITER_AUDIO_PROFILE_LEVEL;
16537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->m_pWriterAudioStream->averageBitrate            =
16547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                pC->m_pReaderAudioStream->m_basicProperties.m_averageBitRate;
16557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->m_pWriterAudioStream->maxBitrate                =
16567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                pC->m_pWriterAudioStream->averageBitrate;
16577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
16587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
16597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi         * Our writer shell interface is a little tricky: we put M4WRITER_StreamAudioInfos \
16607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            in the DSI pointer... */
16617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->m_pWriterAudioStream->decoderSpecificInfo =
16627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    (M4OSA_MemAddr32)pC->m_pWriterAudioStreamInfo;
16637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
16647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
16657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi         * Update AU properties for audio stream */
16667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->m_WriterAudioAU.CTS         = pC->m_WriterAudioAU.DTS = 0;  /** Reset time */
16677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->m_WriterAudioAU.size        = 0;
16687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->m_WriterAudioAU.frag        = M4OSA_NULL;
16697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->m_WriterAudioAU.nbFrag      = 0;                            /** No fragment */
16707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->m_WriterAudioAU.stream      = pC->m_pWriterAudioStream;
16717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->m_WriterAudioAU.attribute   = AU_RAP;
16727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->m_WriterAudioAU.dataAddress = M4OSA_NULL;
16737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
16747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
16757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /************************************/
16767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /******** Video Encoder Init ********/
16777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /************************************/
16787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
16797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
16807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     * PTO uses its own bitrate regulation, not the "true" core regulation */
16817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    EncParams.bInternalRegulation = M4OSA_TRUE; //M4OSA_FALSE;
16827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    EncParams.uiStartingQuantizerValue = M4PTO3GPP_QUANTIZER_STEP;
16837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
16840a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury    EncParams.videoProfile = pC->m_Params.videoProfile;
16850a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury    EncParams.videoLevel = pC->m_Params.videoLevel;
16860a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury
16877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
16887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     * Other encoder settings */
16890a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury
16900a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury    EncParams.uiHorizontalSearchRange  = 0;             /* use default */
16910a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury    EncParams.uiVerticalSearchRange    = 0;             /* use default */
16920a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury    EncParams.bErrorResilience         = M4OSA_FALSE;   /* no error resilience */
16930a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury    EncParams.uiIVopPeriod             = 15;             /* use default */
16940a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury    EncParams.uiMotionEstimationTools  = 0;             /* M4V_MOTION_EST_TOOLS_ALL */
16950a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury    EncParams.bAcPrediction            = M4OSA_TRUE;    /* use AC prediction */
16960a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury    EncParams.bDataPartitioning        = M4OSA_FALSE;   /* no data partitioning */
16970a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury
16987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
16997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
17007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     * Create video encoder */
17017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    err = pC->m_pEncoderInt->pFctInit(&pC->m_pMp4EncoderContext, pC->m_pWriterDataInt,
17027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                    M4PTO3GPP_applyVPP, pC, pC->m_pEncoderExternalAPI,
17037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                    pC->m_pEncoderUserData);
17047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (M4NO_ERROR != err)
17057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
17067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_1("M4PTO3GPP_Ready4Processing: EncoderInt->pFctInit returns 0x%x", err);
17077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return err;
17087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
17097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
17107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_eEncoderState = M4PTO3GPP_kEncoderClosed;
17117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
17127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    err = pC->m_pEncoderInt->pFctOpen(pC->m_pMp4EncoderContext, &pC->m_WriterVideoAU, &EncParams);
17137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (M4NO_ERROR != err)
17147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
17157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_1("M4PTO3GPP_Ready4Processing: EncoderInt->pFctOpen returns 0x%x", err);
17167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return err;
17177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
17187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
17197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_eEncoderState = M4PTO3GPP_kEncoderStopped;
17207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
17217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (M4OSA_NULL != pC->m_pEncoderInt->pFctStart)
17227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
17237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = pC->m_pEncoderInt->pFctStart(pC->m_pMp4EncoderContext);
17247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
17257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if (M4NO_ERROR != err)
17267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
17277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1("M4PTO3GPP_Ready4Processing: EncoderInt->pFctStart returns 0x%x", err);
17287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return err;
17297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
17307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
17317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
17327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_eEncoderState = M4PTO3GPP_kEncoderRunning;
17337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
17347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
17357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     * No more  setoption on "M4ENCODER_kVideoFragmentSize" here.
17367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     * It is now automaticly and "smartly" set in the encoder shell. */
17377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
17387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**************************************/
17397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /******** 3GP out add streams  ********/
17407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**************************************/
17417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
17427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    err = pC->m_pWriterGlobInt->pFctAddStream(pC->m_p3gpWriterContext, pC->m_pWriterVideoStream);
17437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (M4NO_ERROR != err)
17447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
17457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_1("M4PTO3GPP_Ready4Processing: pWriterGlobInt->pFctAddStream(video) returns\
17467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                       0x%x", err);
17477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return err;
17487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
17497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
17507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
17517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     * Set video max au size */
17527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    optionValue.streamID    = M4PTO3GPP_WRITER_VIDEO_STREAM_ID;
17537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    optionValue.value = (M4OSA_UInt32)(1.5F * (M4OSA_Float)(pC->m_pWriterVideoStreamInfo->width
17547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                                * pC->m_pWriterVideoStreamInfo->height)
17557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                                * M4PTO3GPP_VIDEO_MIN_COMPRESSION_RATIO);
17567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_1("M4PTO3GPP_Ready4Processing,M4WRITER_kMaxAUSize: %u",optionValue.value);
17577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    err = pC->m_pWriterGlobInt->pFctSetOption(pC->m_p3gpWriterContext,
17587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                (M4OSA_UInt32)M4WRITER_kMaxAUSize,(M4OSA_DataOption) &optionValue);
17597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (M4NO_ERROR != err)
17607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
17617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_1("M4PTO3GPP_Ready4Processing: pWriterGlobInt->pFctSetOption(video,\
17627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                       M4WRITER_kMaxAUSize) returns 0x%x", err);
17637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return err;
17647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
17657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
17667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
17677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     * Set video max chunck size */
17687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    optionValue.value = (M4OSA_UInt32)((M4OSA_Float)optionValue.value
17697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                        * M4PTO3GPP_VIDEO_AU_SIZE_TO_CHUNCK_SIZE_RATIO);
17707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_1("M4PTO3GPP_Ready4Processing,M4WRITER_kMaxChunckSize: %u",optionValue.value);
17717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    err = pC->m_pWriterGlobInt->pFctSetOption(pC->m_p3gpWriterContext,
17727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                        (M4OSA_UInt32)M4WRITER_kMaxChunckSize,(M4OSA_DataOption) &optionValue);
17737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (M4NO_ERROR != err)
17747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
17757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_1("M4PTO3GPP_Ready4Processing: pWriterGlobInt->pFctSetOption(video,\
17767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                       M4WRITER_kMaxChunckSize) returns 0x%x", err);
17777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return err;
17787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
17797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
17807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (M4OSA_NULL != pC->m_pReaderAudioStream)
17817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
17827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = pC->m_pWriterGlobInt->pFctAddStream(pC->m_p3gpWriterContext, pC->m_pWriterAudioStream);
17837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if (M4NO_ERROR != err)
17847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
17857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1("M4PTO3GPP_Ready4Processing: pWriterGlobInt->pFctAddStream(audio) \
17867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                           returns 0x%x", err);
17877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return err;
17887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
17897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
17907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
17917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi         * Set audio max au size */
17927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        optionValue.value       = M4PTO3GPP_AUDIO_MAX_AU_SIZE;
17937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        optionValue.streamID    = M4PTO3GPP_WRITER_AUDIO_STREAM_ID;
17947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = pC->m_pWriterGlobInt->pFctSetOption(pC->m_p3gpWriterContext,
17957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (M4OSA_UInt32)M4WRITER_kMaxAUSize,(M4OSA_DataOption) &optionValue);
17967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if (M4NO_ERROR != err)
17977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
17987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1("M4PTO3GPP_Ready4Processing: pWriterGlobInt->pFctSetOption(audio,\
17997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                           M4WRITER_kMaxAUSize) returns 0x%x", err);
18007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return err;
18017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
18027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
18037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
18047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi         * Set audio max chunck size */
18057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        optionValue.value = M4PTO3GPP_AUDIO_MAX_CHUNK_SIZE; /**< Magical */
18067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = pC->m_pWriterGlobInt->pFctSetOption(pC->m_p3gpWriterContext,
18077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                        (M4OSA_UInt32)M4WRITER_kMaxChunckSize,(M4OSA_DataOption) &optionValue);
18087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if (M4NO_ERROR != err)
18097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
18107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1("M4PTO3GPP_Ready4Processing: pWriterGlobInt->pFctSetOption(audio,\
18117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                           M4WRITER_kMaxChunckSize) returns 0x%x", err);
18127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return err;
18137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
18147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
18157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
18167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /*
18177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     * Close the stream registering in order to be ready to write data */
18187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    err = pC->m_pWriterGlobInt->pFctStartWriting(pC->m_p3gpWriterContext);
18197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (M4NO_ERROR != err)
18207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
18217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_1("M4PTO3GPP_Ready4Processing: pWriterGlobInt->pFctStartWriting returns 0x%x",
18227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                        err);
18237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return err;
18247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
18257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
18267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
18277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_0("M4PTO3GPP_Ready4Processing: returning M4NO_ERROR");
18287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return M4NO_ERROR;
18297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
18307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
18317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
18327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
18337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR M4PTO3GPP_writeAmrSilence122Frame(M4WRITER_DataInterface* pWriterDataIntInterface,
18347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                            M4WRITER_Context* pWriterContext,
18357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                      M4SYS_AccessUnit* pWriterAudioAU, M4OSA_Time mtIncCts)
18367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief   Write an AMR 12.2kbps silence FRAME into the writer
18377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note    Mainly used to fix the 'bzz' bug...
18387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param   pWriterDataIntInterface (IN)    writer data interfaces
18397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *          pWriterContext          (IN/OUT)writer context
18407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *          pWriterAudioAU          (OUT)   writer audio access unit
18417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *          mtIncCts                (IN)    writer CTS
18427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return  M4NO_ERROR: No error
18437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
18447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/
18457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargistatic M4OSA_ERR M4PTO3GPP_writeAmrSilence122Frame(M4WRITER_DataInterface* pWriterDataIntInterface,
18467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                                   M4WRITER_Context* pWriterContext,
18477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                                    M4SYS_AccessUnit* pWriterAudioAU,
18487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                                    M4OSA_Time mtIncCts)
18497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
18507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_ERR err;
18517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
18527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    err = pWriterDataIntInterface->pStartAU(pWriterContext, M4PTO3GPP_WRITER_AUDIO_STREAM_ID,
18537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                        pWriterAudioAU);
18547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (M4NO_ERROR != err)
18557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
18567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_1("M4PTO3GPP_writeAmrSilence122Frame: pWriterDataInt->pStartAU(audio) returns \
18577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                                    0x%x!", err);
18587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return err;
18597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
18607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
186132ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu    memcpy((void *)pWriterAudioAU->dataAddress,
186232ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu     (void *)M4PTO3GPP_AMR_AU_SILENCE_122_FRAME, M4PTO3GPP_AMR_AU_SILENCE_FRAME_122_SIZE);
18637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pWriterAudioAU->size    = M4PTO3GPP_AMR_AU_SILENCE_FRAME_122_SIZE;
18647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pWriterAudioAU->CTS     = mtIncCts;
18657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pWriterAudioAU->nbFrag  = 0;
18667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
18677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    err = pWriterDataIntInterface->pProcessAU(pWriterContext, M4PTO3GPP_WRITER_AUDIO_STREAM_ID,
18687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                                pWriterAudioAU);
18697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (M4NO_ERROR != err)
18707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
18717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_1("M4PTO3GPP_writeAmrSilence122Frame: pWriterDataInt->pProcessAU(silence) \
18727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                       returns 0x%x!", err);
18737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return err;
18747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
18757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
18767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return M4NO_ERROR;
18777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
18787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
18797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
18807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
18817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR M4PTO3GPP_writeAmrSilence048Frame(M4WRITER_DataInterface* pWriterDataIntInterface,
18827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                        M4WRITER_Context* pWriterContext,
18837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                      M4SYS_AccessUnit* pWriterAudioAU, M4OSA_Time mtIncCts)
18847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief   Write an AMR 12.2kbps silence FRAME into the writer
18857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note    Mainly used to fix the 'bzz' bug...
18867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param   pWriterDataIntInterface (IN)    writer data interfaces
18877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *          pWriterContext          (IN/OUT)writer context
18887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *          pWriterAudioAU          (OUT)   writer audio access unit
18897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *          mtIncCts                (IN)    writer CTS
18907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return  M4NO_ERROR: No error
18917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
18927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/
18937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargistatic M4OSA_ERR M4PTO3GPP_writeAmrSilence048Frame(M4WRITER_DataInterface* pWriterDataIntInterface,
18947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                                   M4WRITER_Context* pWriterContext,
18957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                                M4SYS_AccessUnit* pWriterAudioAU,
18967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                                M4OSA_Time mtIncCts)
18977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
18987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_ERR err;
18997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
19007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    err = pWriterDataIntInterface->pStartAU(pWriterContext, M4PTO3GPP_WRITER_AUDIO_STREAM_ID,
19017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                                        pWriterAudioAU);
19027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (M4NO_ERROR != err)
19037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
19047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_1("M4PTO3GPP_writeAmrSilence048Frame: pWriterDataInt->pStartAU(audio)\
19057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                       returns 0x%x!", err);
19067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return err;
19077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
19087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
190932ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu    memcpy((void *)pWriterAudioAU->dataAddress,
191032ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu                (void *)M4PTO3GPP_AMR_AU_SILENCE_048_FRAME,
19117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4PTO3GPP_AMR_AU_SILENCE_FRAME_048_SIZE);
19127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pWriterAudioAU->size    = M4PTO3GPP_AMR_AU_SILENCE_FRAME_048_SIZE;
19137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pWriterAudioAU->CTS     = mtIncCts;
19147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pWriterAudioAU->nbFrag  = 0;
19157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
19167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    err = pWriterDataIntInterface->pProcessAU(pWriterContext,
19177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    M4PTO3GPP_WRITER_AUDIO_STREAM_ID, pWriterAudioAU);
19187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (M4NO_ERROR != err)
19197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
19207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_1("M4PTO3GPP_writeAmrSilence048Frame: \
19217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                       pWriterDataInt->pProcessAU(silence) returns 0x%x!", err);
19227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return err;
19237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
19247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
19257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return M4NO_ERROR;
19267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
19277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
19287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1929