M4VSS3GPP_Edit.c revision bb337b471658b7c2264c6ff1bb613739db851baa
17c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*
27c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Copyright (C) 2004-2011 NXP Software
37c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Copyright (C) 2011 The Android Open Source Project
47c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
57c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Licensed under the Apache License, Version 2.0 (the "License");
67c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * you may not use this file except in compliance with the License.
77c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * You may obtain a copy of the License at
87c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
97c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *      http://www.apache.org/licenses/LICENSE-2.0
107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Unless required by applicable law or agreed to in writing, software
127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * distributed under the License is distributed on an "AS IS" BASIS,
137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * See the License for the specific language governing permissions and
157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * limitations under the License.
167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @file    M4VSS3GPP_Edit.c
207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    Video Studio Service 3GPP edit API implementation.
217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note
227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/****************/
267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*** Includes ***/
277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/****************/
287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "NXPSW_CompilerSwitches.h"
307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Our headers */
327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4VSS3GPP_API.h"
337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4VSS3GPP_InternalTypes.h"
347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4VSS3GPP_InternalFunctions.h"
357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4VSS3GPP_InternalConfig.h"
367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4VSS3GPP_ErrorCodes.h"
377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * OSAL headers */
417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4OSA_Memory.h"   /**< OSAL memory management */
427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4OSA_Debug.h"    /**< OSAL debug management */
437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4OSA_CharStar.h" /**< OSAL string management */
447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef WIN32
467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "string.h"         /**< for strcpy (Don't want to get dependencies
477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                 with M4OSA_String...) */
487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif                      /* WIN32 */
507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/************************************************************************/
527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* Static local functions                                               */
537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/************************************************************************/
547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargistatic M4OSA_ERR M4VSS3GPP_intClipSettingsSanityCheck(
557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VSS3GPP_ClipSettings *pClip );
567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargistatic M4OSA_ERR M4VSS3GPP_intTransitionSettingsSanityCheck(
577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VSS3GPP_TransitionSettings *pTransition );
587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargistatic M4OSA_Void M4VSS3GPP_intFreeSettingsList(
597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VSS3GPP_InternalEditContext *pC );
607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargistatic M4OSA_ERR
617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4VSS3GPP_intCreateMP3OutputFile( M4VSS3GPP_InternalEditContext *pC,
627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                 M4OSA_Void *pOutputFile );
637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargistatic M4OSA_ERR M4VSS3GPP_intSwitchToNextClip(
647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VSS3GPP_InternalEditContext *pC );
657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargistatic M4OSA_ERR
667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4VSS3GPP_intComputeOutputVideoAndAudioDsi( M4VSS3GPP_InternalEditContext *pC,
677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                           M4OSA_UInt8 uiMasterClip );
687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargistatic M4OSA_Void M4VSS3GPP_intComputeOutputAverageVideoBitrate(
697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VSS3GPP_InternalEditContext *pC );
707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4VSS3GPP_GetVersion()
747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    Get the VSS 3GPP version.
757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note    Can be called anytime. Do not need any context.
767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param    pVersionInfo        (OUT) Pointer to a version info structure
777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4NO_ERROR:            No error
787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4ERR_PARAMETER:    pVersionInfo is M4OSA_NULL (If Debug Level >= 2)
797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4VSS3GPP_GetVersion( M4_VersionInfo *pVersionInfo )
827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_1("M4VSS3GPP_GetVersion called with pVersionInfo=0x%x",
847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pVersionInfo);
857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    *    Check input parameters */
887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF2((M4OSA_NULL == pVersionInfo), M4ERR_PARAMETER,
897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "M4VSS3GPP_GetVersion: pVersionInfo is M4OSA_NULL");
907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pVersionInfo->m_major = M4VSS_VERSION_MAJOR;
927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pVersionInfo->m_minor = M4VSS_VERSION_MINOR;
937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pVersionInfo->m_revision = M4VSS_VERSION_REVISION;
947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return M4NO_ERROR;
967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
1007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4VSS3GPP_editInit()
1017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    Initializes the VSS 3GPP edit operation (allocates an execution context).
1027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note
1037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param    pContext            (OUT) Pointer on the VSS 3GPP edit context to allocate
1047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param    pFileReadPtrFct        (IN) Pointer to OSAL file reader functions
1057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param   pFileWritePtrFct    (IN) Pointer to OSAL file writer functions
1067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4NO_ERROR:            No error
1077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4ERR_PARAMETER:    At least one parameter is M4OSA_NULL
1087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4ERR_ALLOC:        There is no more available memory
1097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
1107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
1117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4VSS3GPP_editInit( M4VSS3GPP_EditContext *pContext,
1127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                             M4OSA_FileReadPointer *pFileReadPtrFct,
1137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                             M4OSA_FileWriterPointer *pFileWritePtrFct )
1147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
1157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VSS3GPP_InternalEditContext *pC;
1167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_ERR err;
1177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32 i;
1187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_3(
1207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "M4VSS3GPP_editInit called with pContext=0x%x, \
1217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pFileReadPtrFct=0x%x, pFileWritePtrFct=0x%x",
1227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pContext, pFileReadPtrFct, pFileWritePtrFct);
1237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
1257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Check input parameters */
1267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF2((M4OSA_NULL == pContext), M4ERR_PARAMETER,
1277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "M4VSS3GPP_editInit: pContext is M4OSA_NULL");
1287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF2((M4OSA_NULL == pFileReadPtrFct), M4ERR_PARAMETER,
1297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "M4VSS3GPP_editInit: pFileReadPtrFct is M4OSA_NULL");
1307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF2((M4OSA_NULL == pFileWritePtrFct), M4ERR_PARAMETER,
1317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "M4VSS3GPP_editInit: pFileWritePtrFct is M4OSA_NULL");
1327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
1347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Allocate the VSS context and return it to the user */
1357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC = (M4VSS3GPP_InternalEditContext
1367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        *)M4OSA_malloc(sizeof(M4VSS3GPP_InternalEditContext),
1377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4VSS3GPP, (M4OSA_Char *)"M4VSS3GPP_InternalContext");
1387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    *pContext = pC;
1397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /* Inialization of context Variables */
1407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_memset((M4OSA_MemAddr8)pC, sizeof(M4VSS3GPP_InternalEditContext), 0);
1417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL == pC )
1437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
1447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_0(
1457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            "M4VSS3GPP_editInit(): unable to allocate M4VSS3GPP_InternalContext,\
1467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            returning M4ERR_ALLOC");
1477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return M4ERR_ALLOC;
1487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
1497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /* Init the context. */
1527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->pClipList = M4OSA_NULL;
1537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->pTransitionList = M4OSA_NULL;
1547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->pEffectsList = M4OSA_NULL;
1557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->pActiveEffectsList = M4OSA_NULL;
1567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->pActiveEffectsList1 = M4OSA_NULL;
1577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->pC1 = M4OSA_NULL;
1587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->pC2 = M4OSA_NULL;
1597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->yuv1[0].pac_data = pC->yuv1[1].pac_data = pC->
1607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        yuv1[2].pac_data = M4OSA_NULL;
1617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->yuv2[0].pac_data = pC->yuv2[1].pac_data = pC->
1627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        yuv2[2].pac_data = M4OSA_NULL;
1637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->yuv3[0].pac_data = pC->yuv3[1].pac_data = pC->
1647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        yuv3[2].pac_data = M4OSA_NULL;
1657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->yuv4[0].pac_data = pC->yuv4[1].pac_data = pC->
1667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        yuv4[2].pac_data = M4OSA_NULL;
1677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->bClip1AtBeginCut = M4OSA_FALSE;
1687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->bTransitionEffect = M4OSA_FALSE;
1697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->bSupportSilence = M4OSA_FALSE;
1707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
1727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Init PC->ewc members */
1737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    // Decorrelate input and output encoding timestamp to handle encoder prefetch
1747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->ewc.VideoStreamType = M4SYS_kVideoUnknown;
1757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->ewc.bVideoDataPartitioning = M4OSA_FALSE;
1767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->ewc.pVideoOutputDsi = M4OSA_NULL;
1777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->ewc.bActivateEmp = M4OSA_FALSE;
1787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->ewc.AudioStreamType = M4SYS_kAudioUnknown;
1797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->ewc.uiNbChannels = 1;
1807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->ewc.pAudioOutputDsi = M4OSA_NULL;
1817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->ewc.pAudioEncCtxt = M4OSA_NULL;
1827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->ewc.pAudioEncDSI.pInfo = M4OSA_NULL;
1837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->ewc.pSilenceFrameData = M4OSA_NULL;
1847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->ewc.pEncContext = M4OSA_NULL;
1857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->ewc.pDummyAuBuffer = M4OSA_NULL;
1867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->ewc.encoderState = M4VSS3GPP_kNoEncoder;
1877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->ewc.p3gpWriterContext = M4OSA_NULL;
1887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
1897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Keep the OSAL file functions pointer set in our context */
1907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->pOsaFileReadPtr = pFileReadPtrFct;
1917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->pOsaFileWritPtr = pFileWritePtrFct;
1927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef M4VSS_ENABLE_EXTERNAL_DECODERS
1947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    for ( i = 0; i < M4VD_kVideoType_NB; i++ )
1967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
1977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->registeredExternalDecs[i].pDecoderInterface = M4OSA_NULL;
1987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->registeredExternalDecs[i].pUserData = M4OSA_NULL;
1997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->registeredExternalDecs[i].registered = M4OSA_FALSE;
2007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
2017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif /* M4VSS_ENABLE_EXTERNAL_DECODERS */
2027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef M4VSS_SUPPORT_OMX_CODECS
2047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    for ( i = 0; i < M4VSS3GPP_kCodecType_NB; i++ )
2067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
2077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->m_codecInterface[i] = M4OSA_NULL;
2087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
2097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->pOMXUserData = M4OSA_NULL;
2107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif /* M4VSS_SUPPORT_OMX_CODECS */
2117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /*
2127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Reset pointers for media and codecs interfaces */
2137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    err = M4VSS3GPP_clearInterfaceTables(&pC->ShellAPI);
2157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4ERR_CHECK_RETURN(err);
2167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /*
2187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    *  Call the media and codecs subscription module */
2197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    err = M4VSS3GPP_subscribeMediaAndCodec(&pC->ShellAPI);
2207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4ERR_CHECK_RETURN(err);
2217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
2237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Update main state automaton */
2247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->State = M4VSS3GPP_kEditState_CREATED;
2257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->Vstate = M4VSS3GPP_kEditVideoState_READ_WRITE;
2267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->Astate = M4VSS3GPP_kEditAudioState_READ_WRITE;
227bb337b471658b7c2264c6ff1bb613739db851baaSantosh Madhava    /* The flag is set to false at the beginning of every clip */
228bb337b471658b7c2264c6ff1bb613739db851baaSantosh Madhava    pC->m_bClipExternalHasStarted = M4OSA_FALSE;
2297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->bIsMMS = M4OSA_FALSE;
2317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
2337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Return with no error */
2347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_0("M4VSS3GPP_editInit(): returning M4NO_ERROR");
2357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return M4NO_ERROR;
2367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
2377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
2397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
2407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4VSS3GPP_editCreateClipSettings()
2417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    Allows filling a clip settings structure with default values
2427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
2437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note    WARNING: pClipSettings->Effects[ ] will be allocated in this function.
2447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *                   pClipSettings->pFile      will be allocated in this function.
2457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
2467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param    pClipSettings        (IN) Pointer to a valid M4VSS3GPP_ClipSettings structure
2477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param   pFile               (IN) Clip file name
2487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param   filePathSize        (IN) Clip path size (needed for UTF 16 conversion)
2497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param    nbEffects           (IN) Nb of effect settings to allocate
2507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4NO_ERROR:            No error
2517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4ERR_PARAMETER:    pClipSettings is M4OSA_NULL (debug only)
2527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
2537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
2547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR
2557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4VSS3GPP_editCreateClipSettings( M4VSS3GPP_ClipSettings *pClipSettings,
2567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                 M4OSA_Void *pFile, M4OSA_UInt32 filePathSize,
2577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                 M4OSA_UInt8 nbEffects )
2587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
2597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt8 uiFx;
2607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_1(
2627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "M4VSS3GPP_editCreateClipSettings called with pClipSettings=0x%p",
2637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pClipSettings);
2647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
2667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    *    Check input parameter */
2677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF2((M4OSA_NULL == pClipSettings), M4ERR_PARAMETER,
2687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "M4VSS3GPP_editCreateClipSettings: pClipSettings is NULL");
2697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
2717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Set the clip settings to default */
2727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->pFile = M4OSA_NULL;        /**< no file */
2737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->FileType =
2747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4VIDEOEDITING_kFileType_Unsupported; /**< undefined */
2757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL != pFile )
2777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
2787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        //pClipSettings->pFile = (M4OSA_Char*) M4OSA_malloc(M4OSA_chrLength(pFile)+1, M4VSS3GPP,
2797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        // "pClipSettings->pFile");
2807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /*FB: add clip path size because of utf 16 conversion*/
2817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pClipSettings->pFile =
2827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (M4OSA_Void *)M4OSA_malloc(filePathSize + 1, M4VSS3GPP,
2837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (M4OSA_Char *)"pClipSettings->pFile");
2847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4OSA_NULL == pClipSettings->pFile )
2867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
2877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_0(
2887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_editCreateClipSettings : ERROR allocating filename");
2897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return M4ERR_ALLOC;
2907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
2917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        //M4OSA_memcpy(pClipSettings->pFile, pFile, M4OSA_chrLength(pFile)+1);
2927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /*FB: add clip path size because of utf 16 conversion*/
2937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_memcpy(pClipSettings->pFile, pFile, filePathSize + 1);
2947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
2957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /*FB: add file path size to support UTF16 conversion*/
2977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->filePathSize = filePathSize + 1;
2987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**/
2997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->ClipProperties.bAnalysed = M4OSA_FALSE;
3007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->ClipProperties.FileType = 0;
3017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->ClipProperties.Version[0] = 0;
3027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->ClipProperties.Version[1] = 0;
3037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->ClipProperties.Version[2] = 0;
3047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->ClipProperties.uiClipDuration = 0;
3057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
3067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->uiBeginCutTime = 0; /**< no begin cut */
3077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->uiEndCutTime = 0;   /**< no end cut */
3087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
3097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
3107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Reset video characteristics */
3117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->ClipProperties.VideoStreamType = M4VIDEOEDITING_kNoneVideo;
3127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->ClipProperties.uiClipVideoDuration = 0;
3137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->ClipProperties.uiVideoBitrate = 0;
3147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->ClipProperties.uiVideoMaxAuSize = 0;
3157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->ClipProperties.uiVideoWidth = 0;
3167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->ClipProperties.uiVideoHeight = 0;
3177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->ClipProperties.uiVideoTimeScale = 0;
3187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->ClipProperties.fAverageFrameRate = 0.0;
3197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->ClipProperties.ProfileAndLevel =
3207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4VIDEOEDITING_kProfile_and_Level_Out_Of_Range;
3217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->ClipProperties.uiH263level = 0;
3227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->ClipProperties.uiVideoProfile = 0;
3237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->ClipProperties.bMPEG4dataPartition = M4OSA_FALSE;
3247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->ClipProperties.bMPEG4rvlc = M4OSA_FALSE;
3257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->ClipProperties.bMPEG4resynchMarker = M4OSA_FALSE;
3267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
3277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
3287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Reset audio characteristics */
3297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->ClipProperties.AudioStreamType = M4VIDEOEDITING_kNoneAudio;
3307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->ClipProperties.uiClipAudioDuration = 0;
3317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->ClipProperties.uiAudioBitrate = 0;
3327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->ClipProperties.uiAudioMaxAuSize = 0;
3337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->ClipProperties.uiNbChannels = 0;
3347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->ClipProperties.uiSamplingFrequency = 0;
3357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->ClipProperties.uiExtendedSamplingFrequency = 0;
3367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->ClipProperties.uiDecodedPcmSize = 0;
3377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
3387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
3397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Return with no error */
3407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_0("M4VSS3GPP_editSetDefaultSettings(): returning M4NO_ERROR");
3417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
3427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return M4NO_ERROR;
3437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
3447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
3457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
3467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
3477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4VSS3GPP_editDuplicateClipSettings()
3487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    Duplicates a clip settings structure, performing allocations if required
3497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
3507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param    pClipSettingsDest    (IN) Pointer to a valid M4VSS3GPP_ClipSettings structure
3517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param    pClipSettingsOrig    (IN) Pointer to a valid M4VSS3GPP_ClipSettings structure
3527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param   bCopyEffects        (IN) Flag to know if we have to duplicate effects
3537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4NO_ERROR:            No error
3547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4ERR_PARAMETER:    pClipSettings is M4OSA_NULL (debug only)
3557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
3567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
3577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR
3587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4VSS3GPP_editDuplicateClipSettings( M4VSS3GPP_ClipSettings *pClipSettingsDest,
3597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                    M4VSS3GPP_ClipSettings *pClipSettingsOrig,
3607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                    M4OSA_Bool bCopyEffects )
3617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
3627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt8 uiFx;
3637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
3647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_2(
3657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "M4VSS3GPP_editDuplicateClipSettings called with dest=0x%p src=0x%p",
3667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pClipSettingsDest, pClipSettingsOrig);
3677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
3687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /* Check input parameter */
3697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF2((M4OSA_NULL == pClipSettingsDest), M4ERR_PARAMETER,
3707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "M4VSS3GPP_editDuplicateClipSettings: pClipSettingsDest is NULL");
3717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF2((M4OSA_NULL == pClipSettingsOrig), M4ERR_PARAMETER,
3727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "M4VSS3GPP_editDuplicateClipSettings: pClipSettingsOrig is NULL");
3737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
3747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /* Copy plain structure */
3757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_memcpy((M4OSA_MemAddr8)pClipSettingsDest,
3767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        (M4OSA_MemAddr8)pClipSettingsOrig, sizeof(M4VSS3GPP_ClipSettings));
3777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
3787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /* Duplicate filename */
3797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL != pClipSettingsOrig->pFile )
3807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
3817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        //pClipSettingsDest->pFile =
3827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        // (M4OSA_Char*) M4OSA_malloc(M4OSA_chrLength(pClipSettingsOrig->pFile)+1, M4VSS3GPP,
3837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        // "pClipSettingsDest->pFile");
3847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /*FB: clip path size is needed for utf 16 conversion*/
3857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /*FB 2008/10/16: bad allocation size which raises a crash*/
3867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pClipSettingsDest->pFile =
3877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (M4OSA_Char *)M4OSA_malloc(pClipSettingsOrig->filePathSize + 1,
3887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4VSS3GPP, (M4OSA_Char *)"pClipSettingsDest->pFile");
3897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
3907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4OSA_NULL == pClipSettingsDest->pFile )
3917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
3927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_0(
3937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_editDuplicateClipSettings : ERROR allocating filename");
3947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return M4ERR_ALLOC;
3957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
3967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /*FB: clip path size is needed for utf 16 conversion*/
3977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        //M4OSA_memcpy(pClipSettingsDest->pFile, pClipSettingsOrig->pFile,
3987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        // M4OSA_chrLength(pClipSettingsOrig->pFile)+1);
3997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /*FB 2008/10/16: bad allocation size which raises a crash*/
4007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_memcpy(pClipSettingsDest->pFile, pClipSettingsOrig->pFile,
4017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pClipSettingsOrig->filePathSize/*+1*/);
4027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        ( (M4OSA_Char
4037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            *)pClipSettingsDest->pFile)[pClipSettingsOrig->filePathSize] = '\0';
4047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
4057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
4067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /* Duplicate effects */
4077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#if 0
4087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
4097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_TRUE == bCopyEffects )
4107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
4117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( pClipSettingsOrig->nbEffects > 0 )
4127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
4137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pClipSettingsDest->Effects = (M4VSS3GPP_EffectSettings
4147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                *)M4OSA_malloc(sizeof(M4VSS3GPP_EffectSettings)
4157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                * pClipSettingsOrig->nbEffects,
4167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4VSS3GPP, "pClipSettingsDest->Effects");
4177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
4187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if( M4OSA_NULL == pClipSettingsDest->Effects )
4197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
4207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4OSA_TRACE1_1(
4217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    "M4VSS3GPP_editDuplicateClipSettings : ERROR allocating effects, nb=%lu",
4227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    pClipSettingsOrig->nbEffects);
4237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pClipSettingsDest->nbEffects = 0;
4247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                return M4ERR_ALLOC;
4257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
4267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
4277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            for ( uiFx = 0; uiFx < pClipSettingsOrig->nbEffects; uiFx++ )
4287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
4297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                /* Copy plain structure */
4307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4OSA_memcpy(
4317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    (M4OSA_MemAddr8) &(pClipSettingsDest->Effects[uiFx]),
4327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    (M4OSA_MemAddr8) &(pClipSettingsOrig->Effects[uiFx]),
4337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    sizeof(M4VSS3GPP_EffectSettings));
4347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
4357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
4367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
4377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    else
4387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
4397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pClipSettingsDest->nbEffects = 0;
4407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pClipSettingsDest->Effects = M4OSA_NULL;
4417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
4427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
4437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif /* RC */
4447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /* Return with no error */
4457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
4467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_0(
4477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "M4VSS3GPP_editDuplicateClipSettings(): returning M4NO_ERROR");
4487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
4497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return M4NO_ERROR;
4507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
4517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
4527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
4537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
4547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4VSS3GPP_editFreeClipSettings()
4557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    Free the pointers allocated in the ClipSetting structure (pFile, Effects).
4567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
4577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param    pClipSettings        (IN) Pointer to a valid M4VSS3GPP_ClipSettings structure
4587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4NO_ERROR:            No error
4597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4ERR_PARAMETER:    pClipSettings is M4OSA_NULL (debug only)
4607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
4617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
4627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4VSS3GPP_editFreeClipSettings(
4637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VSS3GPP_ClipSettings *pClipSettings )
4647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
4657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
4667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    *    Check input parameter */
4677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF2((M4OSA_NULL == pClipSettings), M4ERR_PARAMETER,
4687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "M4VSS3GPP_editFreeClipSettings: pClipSettings is NULL");
4697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
4707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /* free filename */
4717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL != pClipSettings->pFile )
4727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
4737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_free((M4OSA_MemAddr32)pClipSettings->pFile);
4747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pClipSettings->pFile = M4OSA_NULL;
4757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
4767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
4777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /* free effects settings */
4787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /*    if(M4OSA_NULL != pClipSettings->Effects)
4797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
4807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_free((M4OSA_MemAddr32)pClipSettings->Effects);
4817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->Effects = M4OSA_NULL;
4827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->nbEffects = 0;
4837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    } RC */
4847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
4857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return M4NO_ERROR;
4867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
4877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
4887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
4897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
4907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4VSS3GPP_editOpen()
4917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief     Set the VSS input and output files.
4927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note      It opens the input file, but the output file may not be created yet.
4937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param     pContext           (IN) VSS edit context
4947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param     pSettings           (IN) Edit settings
4957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4NO_ERROR:       No error
4967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4ERR_PARAMETER:  At least one parameter is M4OSA_NULL (debug only)
4977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4ERR_STATE:      VSS is not in an appropriate state for this function to be called
4987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4ERR_ALLOC:      There is no more available memory
4997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
5007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
5017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4VSS3GPP_editOpen( M4VSS3GPP_EditContext pContext,
5027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                             M4VSS3GPP_EditSettings *pSettings )
5037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
5047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VSS3GPP_InternalEditContext *pC =
5057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        (M4VSS3GPP_InternalEditContext *)pContext;
5067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
5077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_ERR err;
5087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_Int32 i;
5097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VIDEOEDITING_FileType outputFileType =
5107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4VIDEOEDITING_kFileType_Unsupported; /**< 3GPP or MP3 (we don't do AMR output) */
5117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32 uiC1duration, uiC2duration;
5127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
5137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_2(
5147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "M4VSS3GPP_editOpen called with pContext=0x%x, pSettings=0x%x",
5157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pContext, pSettings);
5167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
5177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
5187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    *    Check input parameters */
5197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF2((M4OSA_NULL == pContext), M4ERR_PARAMETER,
5207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "M4VSS3GPP_editOpen: pContext is M4OSA_NULL");
5217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF2((M4OSA_NULL == pSettings), M4ERR_PARAMETER,
5227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "M4VSS3GPP_editOpen: pSettings is M4OSA_NULL");
5237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF2((M4OSA_NULL == pSettings->pClipList), M4ERR_PARAMETER,
5247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "M4VSS3GPP_editOpen: pSettings->pClipList is M4OSA_NULL");
5257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF2(( pSettings->uiClipNumber > 1)
5267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        && (M4OSA_NULL == pSettings->pTransitionList), M4ERR_PARAMETER,
5277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "M4VSS3GPP_editOpen: pSettings->pTransitionList is M4OSA_NULL");
5287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
5297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
5307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Check state automaton */
5317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( ( pC->State != M4VSS3GPP_kEditState_CREATED)
5327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        && (pC->State != M4VSS3GPP_kEditState_CLOSED) )
5337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
5347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_1(
5357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            "M4VSS3GPP_editOpen: State error (0x%x)! Returning M4ERR_STATE",
5367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->State);
5377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return M4ERR_STATE;
5387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
5397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
5407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
5417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Free any previously allocated internal settings list */
5427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VSS3GPP_intFreeSettingsList(pC);
5437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
5447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
5457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Copy the user settings in our context */
5467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->uiClipNumber = pSettings->uiClipNumber;
5477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
5487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
5497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Copy the clip list */
5507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->pClipList =
5517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        (M4VSS3GPP_ClipSettings *)M4OSA_malloc(sizeof(M4VSS3GPP_ClipSettings)
5527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * pC->uiClipNumber, M4VSS3GPP, (M4OSA_Char *)"pC->pClipList");
5537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
5547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL == pC->pClipList )
5557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
5567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_0(
5577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            "M4VSS3GPP_editOpen: unable to allocate pC->Settings.pClipList,\
5587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            returning M4ERR_ALLOC");
5597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return M4ERR_ALLOC;
5607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
5617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
5627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    for ( i = 0; i < pSettings->uiClipNumber; i++ )
5637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
5647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4VSS3GPP_editDuplicateClipSettings(&(pC->pClipList[i]),
5657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pSettings->pClipList[i], M4OSA_TRUE);
5667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
5677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
5687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
5697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Copy effects list RC */
5707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
5717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /*FB bug fix 19.03.2008 if the number of effects is 0 -> crash*/
5727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( pSettings->nbEffects > 0 )
5737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
5747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->nbEffects = pSettings->nbEffects;
5757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->pEffectsList = (M4VSS3GPP_EffectSettings
5767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            *)M4OSA_malloc(sizeof(M4VSS3GPP_EffectSettings) * pC->nbEffects,
5777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4VSS3GPP, (M4OSA_Char *)"pC->pEffectsList");
5787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
5797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4OSA_NULL == pC->pEffectsList )
5807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
5817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_0(
5827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_editOpen: unable to allocate pC->pEffectsList, returning M4ERR_ALLOC");
5837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return M4ERR_ALLOC;
5847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
5857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
5867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        for ( i = 0; i < pC->nbEffects; i++ )
5877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
5887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_memcpy((M4OSA_MemAddr8) &(pC->pEffectsList[i]),
5897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                (M4OSA_MemAddr8) &(pSettings->Effects[i]),
5907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                sizeof(M4VSS3GPP_EffectSettings));
5917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
5927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
5937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
5947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Allocate active effects list RC */
5957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->pActiveEffectsList =
5967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (M4OSA_UInt8 *)M4OSA_malloc(sizeof(M4OSA_UInt8) * pC->nbEffects,
5977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4VSS3GPP, (M4OSA_Char *)"pC->pActiveEffectsList");
5987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
5997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4OSA_NULL == pC->pActiveEffectsList )
6007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
6017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_0(
6027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_editOpen: unable to allocate pC->pActiveEffectsList,\
6037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                returning M4ERR_ALLOC");
6047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return M4ERR_ALLOC;
6057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
6067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
6077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi         * Allocate active effects list */
6087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->pActiveEffectsList1 =
6097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (M4OSA_UInt8 *)M4OSA_malloc(sizeof(M4OSA_UInt8) * pC->nbEffects,
6107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4VSS3GPP, (M4OSA_Char *)"pC->pActiveEffectsList");
6117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if (M4OSA_NULL == pC->pActiveEffectsList1)
6127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
6137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_0("M4VSS3GPP_editOpen: unable to allocate pC->pActiveEffectsList, \
6147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                           returning M4ERR_ALLOC");
6157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return M4ERR_ALLOC;
6167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
6177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
6187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
6197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    else
6207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
6217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->nbEffects = 0;
6227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->nbActiveEffects = 0;
6237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->nbActiveEffects1 = 0;
6247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->pEffectsList = M4OSA_NULL;
6257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->pActiveEffectsList = M4OSA_NULL;
6267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->pActiveEffectsList1 = M4OSA_NULL;
6277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
6287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
6297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
6307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Test the clip analysis data, if it is not provided, analyse the clips by ourselves. */
6317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    for ( i = 0; i < pC->uiClipNumber; i++ )
6327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
6337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4OSA_FALSE == pC->pClipList[i].ClipProperties.bAnalysed )
6347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
6357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /**< Analysis not provided by the integrator */
6367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err = M4VSS3GPP_editAnalyseClip(pC->pClipList[i].pFile,
6377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->pClipList[i].FileType, &pC->pClipList[i].ClipProperties,
6387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->pOsaFileReadPtr);
6397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
6407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if( M4NO_ERROR != err )
6417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
6427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4OSA_TRACE1_1(
6437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    "M4VSS3GPP_editOpen: M4VSS3GPP_editAnalyseClip returns 0x%x!",
6447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    err);
6457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                return err;
6467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
6477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
6487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
6497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
6507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
6517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Check clip compatibility */
6527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    for ( i = 0; i < pC->uiClipNumber; i++ )
6537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
6547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
6557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Check all the clips are compatible with VSS 3GPP */
6567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = M4VSS3GPP_intCheckClipCompatibleWithVssEditing(
6577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            &pC->pClipList[i].ClipProperties);
6587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
6597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4NO_ERROR != err )
6607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
6617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_2(
6627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_editOpen:\
6637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4VSS3GPP_intCheckClipCompatibleWithVssEditing(%d) returns 0x%x!",
6647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                i, err);
6657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return err;
6667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
6677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
6687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
6697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Check the master clip versus all the other ones.
6707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        (including master clip with itself, else variables for master clip
6717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        are not properly setted) */
6727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = M4VSS3GPP_editCheckClipCompatibility(
6737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            &pC->pClipList[pSettings->uiMasterClip].ClipProperties,
6747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            &pC->pClipList[i].ClipProperties);
6757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /* in case of warning regarding audio incompatibility, editing continues */
6767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4OSA_ERR_IS_ERROR(err) )
6777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
6787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_2(
6797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_editOpen: M4VSS3GPP_editCheckClipCompatibility(%d) returns 0x%x!",
6807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                i, err);
6817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return err;
6827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
6837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
6847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
6857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /* Search audio tracks that cannot be edited :
6867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    *   - delete all audio effects for the clip
6877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    *   - if master clip is editable let the transition
6887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    (bad track will be replaced later with silence)
6897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    *   - if master clip is not editable switch to a dummy transition (only copy/paste) */
6907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    for ( i = 0; i < pC->uiClipNumber; i++ )
6917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
6927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4OSA_FALSE == pC->pClipList[i].ClipProperties.bAudioIsEditable )
6937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
6947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_UInt8 uiFx;
6957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
6967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            for ( uiFx = 0; uiFx < pC->nbEffects; uiFx++ )
6977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
6987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->pEffectsList[uiFx].AudioEffectType
6997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    = M4VSS3GPP_kAudioEffectType_None;
7007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
7017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
7027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if( ( i < (pC->uiClipNumber - 1))
7037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                && (M4OSA_NULL != pSettings->pTransitionList[i])
7047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                && (M4OSA_FALSE == pC->pClipList[pSettings->
7057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                uiMasterClip].ClipProperties.bAudioIsEditable) )
7067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
7077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pSettings->pTransitionList[i]->AudioTransitionType
7087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    = M4VSS3GPP_kAudioTransitionType_None;
7097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
7107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
7117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
7127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
7137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
7147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * We add a transition of duration 0 at the end of the last clip.
7157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * It will suppress a whole bunch a test latter in the processing... */
7167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->pTransitionList = (M4VSS3GPP_TransitionSettings
7177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        *)M4OSA_malloc(sizeof(M4VSS3GPP_TransitionSettings)
7187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * (pC->uiClipNumber), M4VSS3GPP, (M4OSA_Char *)"pC->pTransitionList");
7197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
7207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL == pC->pTransitionList )
7217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
7227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_0(
7237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            "M4VSS3GPP_editOpen: unable to allocate pC->Settings.pTransitionList,\
7247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            returning M4ERR_ALLOC");
7257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return M4ERR_ALLOC;
7267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
7277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
7287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**< copy transition settings */
7297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    for ( i = 0; i < (pSettings->uiClipNumber - 1); i++ )
7307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
7317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_memcpy((M4OSA_MemAddr8) &(pC->pTransitionList[i]),
7327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (M4OSA_MemAddr8)pSettings->pTransitionList[i],
7337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            sizeof(M4VSS3GPP_TransitionSettings));
7347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
7357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
7367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**< We fill the last "dummy" transition */
7377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->pTransitionList[pC->uiClipNumber - 1].uiTransitionDuration = 0;
7387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->pTransitionList[pC->uiClipNumber
7397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        - 1].VideoTransitionType = M4VSS3GPP_kVideoTransitionType_None;
7407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->pTransitionList[pC->uiClipNumber
7417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        - 1].AudioTransitionType = M4VSS3GPP_kAudioTransitionType_None;
7427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
7437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
7447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Avoid weird clip settings */
7457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    for ( i = 0; i < pSettings->uiClipNumber; i++ )
7467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
7477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = M4VSS3GPP_intClipSettingsSanityCheck(&pC->pClipList[i]);
7487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
7497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4NO_ERROR != err )
7507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
7517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1(
7527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_editOpen: M4VSS3GPP_intClipSettingsSanityCheck returns 0x%x!",
7537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err);
7547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return err;
7557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
7567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
7577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
7587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    for ( i = 0; i < (pSettings->uiClipNumber - 1); i++ )
7597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
7607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
7617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Maximum transition duration between clip n and clip n+1 is the duration
7627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * of the shortest clip */
7637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( 0 == pC->pClipList[i].uiEndCutTime )
7647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
7657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            uiC1duration = pC->pClipList[i].ClipProperties.uiClipVideoDuration;
7667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
7677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        else
7687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
7697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /**< duration of clip n is the end cut time */
7707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            uiC1duration = pC->pClipList[i].uiEndCutTime;
7717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
7727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
7737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**< Substract begin cut */
7747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        uiC1duration -= pC->pClipList[i].uiBeginCutTime;
7757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
7767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**< Check that the transition is shorter than clip n */
7777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( pC->pTransitionList[i].uiTransitionDuration > uiC1duration )
7787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
7797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->pTransitionList[i].uiTransitionDuration = uiC1duration - 1;
7807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
7817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
7827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( 0 == pC->pClipList[i + 1].uiEndCutTime )
7837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
7847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            uiC2duration =
7857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->pClipList[i + 1].ClipProperties.uiClipVideoDuration;
7867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
7877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        else
7887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
7897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /**< duration of clip n+1 is the end cut time */
7907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            uiC2duration = pC->pClipList[i + 1].uiEndCutTime;
7917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
7927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
7937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**< Substract begin cut */
7947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        uiC2duration -= pC->pClipList[i + 1].uiBeginCutTime;
7957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
7967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**< Check that the transition is shorter than clip n+1 */
7977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( pC->pTransitionList[i].uiTransitionDuration > uiC2duration )
7987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
7997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->pTransitionList[i].uiTransitionDuration = uiC2duration - 1;
8007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
8017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
8027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
8037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Avoid weird transition settings */
8047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err =
8057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4VSS3GPP_intTransitionSettingsSanityCheck(&pC->pTransitionList[i]);
8067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
8077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4NO_ERROR != err )
8087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
8097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1(
8107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_editOpen: M4VSS3GPP_intClipSettingsSanityCheck returns 0x%x!",
8117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err);
8127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return err;
8137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
8147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
8157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
8167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Check that two transitions are not overlapping
8177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi          (no overlapping possible for first clip) */
8187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( i > 0 )
8197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
8207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /**
8217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            * There is a transition overlap if the sum of the duration of
8227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi              two consecutive transitions
8237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            * is higher than the duration of the clip in-between. */
8247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if( ( pC->pTransitionList[i - 1].uiTransitionDuration
8257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                + pC->pTransitionList[i].uiTransitionDuration) >= uiC1duration )
8267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
8277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4OSA_TRACE1_1(
8287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    "M4VSS3GPP_editOpen: Overlapping transitions on clip %d,\
8297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    returning M4VSS3GPP_ERR_OVERLAPPING_TRANSITIONS",
8307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    i);
8317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                return M4VSS3GPP_ERR_OVERLAPPING_TRANSITIONS;
8327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
8337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
8347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
8357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
8367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
8377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Output clip duration */
8387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    for ( i = 0; i < pC->uiClipNumber; i++ )
8397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
8407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
8417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Compute the sum of the clip duration */
8427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( 0 == pC->pClipList[i].uiEndCutTime )
8437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
8447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->ewc.iOutputDuration +=
8457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->
8467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pClipList[
8477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    i].ClipProperties.
8487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                        uiClipVideoDuration; /* Only video track duration is important to
8497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                             avoid deviation if audio track is longer */
8507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
8517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        else
8527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
8537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->ewc.iOutputDuration +=
8547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->pClipList[i].uiEndCutTime; /**< Add end cut */
8557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
8567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
8577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->ewc.iOutputDuration -=
8587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->pClipList[i].uiBeginCutTime; /**< Remove begin cut */
8597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
8607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
8617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Remove the duration of the transition (it is counted twice) */
8627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->ewc.iOutputDuration -= pC->pTransitionList[i].uiTransitionDuration;
8637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
8647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
8657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
8667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Copy the video properties of the master clip to the output properties */
8677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->ewc.uiVideoWidth =
8687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->pClipList[pSettings->uiMasterClip].ClipProperties.uiVideoWidth;
8697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->ewc.uiVideoHeight =
8707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->pClipList[pSettings->uiMasterClip].ClipProperties.uiVideoHeight;
8717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->ewc.uiVideoTimeScale =
8727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->pClipList[pSettings->uiMasterClip].ClipProperties.uiVideoTimeScale;
8737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->ewc.bVideoDataPartitioning = pC->pClipList[pSettings->
8747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        uiMasterClip].ClipProperties.bMPEG4dataPartition;
8757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
8767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    switch( pC->pClipList[pSettings->uiMasterClip].ClipProperties.VideoStreamType )
8777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
8787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_kH263:
8797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->ewc.VideoStreamType = M4SYS_kH263;
8807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
8817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
8827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_kMPEG4_EMP:
8837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->ewc.bActivateEmp = M4OSA_TRUE; /* no break */
8847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
8857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_kMPEG4:
8867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->ewc.VideoStreamType = M4SYS_kMPEG_4;
8877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
8887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
8897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_kH264:
8907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->ewc.VideoStreamType = M4SYS_kH264;
8917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
8927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
8937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        default:
8947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->ewc.VideoStreamType = M4SYS_kVideoUnknown;
8957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
8967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
8977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
8987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
8997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Copy the audio properties of the master clip to the output properties */
9007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->ewc.uiNbChannels =
9017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->pClipList[pSettings->uiMasterClip].ClipProperties.uiNbChannels;
9027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->ewc.uiAudioBitrate =
9037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->pClipList[pSettings->uiMasterClip].ClipProperties.uiAudioBitrate;
9047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->ewc.uiSamplingFrequency = pC->pClipList[pSettings->
9057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        uiMasterClip].ClipProperties.uiSamplingFrequency;
9067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->ewc.uiSilencePcmSize =
9077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->pClipList[pSettings->uiMasterClip].ClipProperties.uiDecodedPcmSize;
9087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->ewc.scale_audio = pC->ewc.uiSamplingFrequency / 1000.0;
9097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
9107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    switch( pC->pClipList[pSettings->uiMasterClip].ClipProperties.AudioStreamType )
9117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
9127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_kAMR_NB:
9137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->ewc.AudioStreamType = M4SYS_kAMR;
9147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->ewc.pSilenceFrameData =
9157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                (M4OSA_UInt8 *)M4VSS3GPP_AMR_AU_SILENCE_FRAME_048;
9167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->ewc.uiSilenceFrameSize =
9177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4VSS3GPP_AMR_AU_SILENCE_FRAME_048_SIZE;
9187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->ewc.iSilenceFrameDuration =
9197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4VSS3GPP_AMR_AU_SILENCE_FRAME_048_DURATION;
9207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->bSupportSilence = M4OSA_TRUE;
9217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
9227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
9237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_kAAC:
9247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_kAACplus:
9257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_keAACplus:
9267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->ewc.AudioStreamType = M4SYS_kAAC;
9277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
9287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if( pC->ewc.uiNbChannels == 1 )
9297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
9307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->ewc.pSilenceFrameData =
9317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    (M4OSA_UInt8 *)M4VSS3GPP_AAC_AU_SILENCE_MONO;
9327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->ewc.uiSilenceFrameSize = M4VSS3GPP_AAC_AU_SILENCE_MONO_SIZE;
9337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->bSupportSilence = M4OSA_TRUE;
9347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
9357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            else
9367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
9377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->ewc.pSilenceFrameData =
9387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    (M4OSA_UInt8 *)M4VSS3GPP_AAC_AU_SILENCE_STEREO;
9397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->ewc.uiSilenceFrameSize =
9407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    M4VSS3GPP_AAC_AU_SILENCE_STEREO_SIZE;
9417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->bSupportSilence = M4OSA_TRUE;
9427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
9437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->ewc.iSilenceFrameDuration =
9447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                1024; /* AAC is always 1024/Freq sample duration */
9457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
9467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
9477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_kMP3:
9487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->ewc.AudioStreamType = M4SYS_kMP3;
9497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->ewc.pSilenceFrameData = M4OSA_NULL;
9507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->ewc.uiSilenceFrameSize = 0;
9517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->ewc.iSilenceFrameDuration = 0;
9527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /* Special case, mp3 core reader return a time in ms */
9537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->ewc.scale_audio = 1.0;
9547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
9557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
9567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_kEVRC:
9577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->ewc.AudioStreamType = M4SYS_kEVRC;
9587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->ewc.pSilenceFrameData = M4OSA_NULL;
9597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->ewc.uiSilenceFrameSize = 0;
9607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->ewc.iSilenceFrameDuration = 160; /* EVRC frames are 20 ms at 8000 Hz
9617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                             (makes it easier to factorize amr and evrc code) */
9627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
9637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
9647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        default:
9657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->ewc.AudioStreamType = M4SYS_kAudioUnknown;
9667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
9677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
9687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
9697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
9707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * We produce a 3gpp file, unless it is mp3 */
9717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4VIDEOEDITING_kMP3 == pC->
9727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pClipList[pSettings->uiMasterClip].ClipProperties.AudioStreamType )
9737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        outputFileType = M4VIDEOEDITING_kFileType_MP3;
9747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    else
9757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        outputFileType = M4VIDEOEDITING_kFileType_3GPP;
9767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
9777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
9787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Beware, a null duration would lead to a divide by zero error (better safe than sorry...) */
9797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( 0 == pC->ewc.iOutputDuration )
9807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
9817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->ewc.iOutputDuration = 1;
9827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
9837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
9847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
9857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Open first clip */
9867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->uiCurrentClip = 0;
9877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
9887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    // Decorrelate input and output encoding timestamp to handle encoder prefetch
9897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->ewc.dInputVidCts  = 0.0;
9907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->ewc.dOutputVidCts = 0.0;
9917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->ewc.dATo = 0.0;
9927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
9937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    err = M4VSS3GPP_intSwitchToNextClip(pC);
9947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /* RC: to know when a file has been processed */
9957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4NO_ERROR != err && err != M4VSS3GPP_WAR_SWITCH_CLIP )
9967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
9977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_1(
9987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            "M4VSS3GPP_editOpen: M4VSS3GPP_intSwitchToNextClip() returns 0x%x!",
9997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err);
10007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return err;
10017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
10027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
10037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
10047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Do the video stuff in 3GPP Audio/Video case */
10057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4VIDEOEDITING_kFileType_3GPP == outputFileType )
10067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
10077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
10087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Compute the Decoder Specific Info for the output video and audio streams */
10097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = M4VSS3GPP_intComputeOutputVideoAndAudioDsi(pC,
10107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pSettings->uiMasterClip);
10117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
10127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4NO_ERROR != err )
10137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
10147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1(
10157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_editOpen: M4VSS3GPP_intComputeOutputVideoAndAudioDsi() returns 0x%x!",
10167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err);
10177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return err;
10187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
10197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
10207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
10217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Compute the time increment for the transition file */
10227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        switch( pSettings->videoFrameRate )
10237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
10247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            case M4VIDEOEDITING_k5_FPS:
10257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->dOutputFrameDuration = 1000.0 / 5.0;
10267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                break;
10277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
10287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            case M4VIDEOEDITING_k7_5_FPS:
10297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->dOutputFrameDuration = 1000.0 / 7.5;
10307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                break;
10317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
10327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            case M4VIDEOEDITING_k10_FPS:
10337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->dOutputFrameDuration = 1000.0 / 10.0;
10347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                break;
10357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
10367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            case M4VIDEOEDITING_k12_5_FPS:
10377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->dOutputFrameDuration = 1000.0 / 12.5;
10387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                break;
10397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
10407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            case M4VIDEOEDITING_k15_FPS:
10417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->dOutputFrameDuration = 1000.0 / 15.0;
10427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                break;
10437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
10447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            case M4VIDEOEDITING_k20_FPS:
10457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->dOutputFrameDuration = 1000.0 / 20.0;
10467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                break;
10477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
10487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            case M4VIDEOEDITING_k25_FPS:
10497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->dOutputFrameDuration = 1000.0 / 25.0;
10507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                break;
10517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
10527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            case M4VIDEOEDITING_k30_FPS:
10537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->dOutputFrameDuration = 1000.0 / 30.0;
10547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                break;
10557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
10567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            default:
10577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4OSA_TRACE1_1(
10587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    "M4VSS3GPP_editOpen(): invalid videoFrameRate (0x%x),\
10597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    returning M4VSS3GPP_ERR_INVALID_VIDEO_ENCODING_FRAME_RATE",
10607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    pSettings->videoFrameRate);
10617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                return M4VSS3GPP_ERR_INVALID_VIDEO_ENCODING_FRAME_RATE;
10627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
10637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
10647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4SYS_kMPEG_4 == pC->ewc.VideoStreamType )
10657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
10667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_UInt32 uiAlpha;
10677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /**
10687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            * MPEG-4 case.
10697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            * Time scale of the transition encoder must be the same than the
10707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            * timescale of the input files.
10717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            * So the frame duration must be compatible with this time scale,
10727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            * but without beeing too short.
10737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            * For that, we must compute alpha (integer) so that:
10747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            *             (alpha x 1000)/EncoderTimeScale > MinFrameDuration
10757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            **/
10767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
10777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            uiAlpha = (M4OSA_UInt32)(( pC->dOutputFrameDuration
10787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                * pC->ewc.uiVideoTimeScale) / 1000.0 + 0.5);
10797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
10807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if( uiAlpha > 0 )
10817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
10827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->dOutputFrameDuration =
10837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    ( uiAlpha * 1000.0) / pC->ewc.uiVideoTimeScale;
10847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
10857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
10867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        else if( M4SYS_kH263 == pC->ewc.VideoStreamType )
10877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
10887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            switch( pSettings->videoFrameRate )
10897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
10907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                case M4VIDEOEDITING_k12_5_FPS:
10917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                case M4VIDEOEDITING_k20_FPS:
10927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                case M4VIDEOEDITING_k25_FPS:
10937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    M4OSA_TRACE1_0(
10947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                        "M4VSS3GPP_editOpen(): invalid videoFrameRate for H263,\
10957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                        returning M4VSS3GPP_ERR_INVALID_VIDEO_ENCODING_FRAME_RATE");
10967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    return M4VSS3GPP_ERR_INVALID_VIDEO_ENCODING_FRAME_RATE;
10977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi               default:
10987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                  break;
10997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
11007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
11017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
11027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
11037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
11047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Create the MP3 output file */
11057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4VIDEOEDITING_kFileType_MP3 == outputFileType )
11067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
11077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4READER_Buffer mp3tagBuffer;
11087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = M4VSS3GPP_intCreateMP3OutputFile(pC, pSettings->pOutputFile);
11097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
11107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4NO_ERROR != err )
11117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
11127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1(
11137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_editOpen: M4VSS3GPP_intCreateMP3OutputFile returns 0x%x",
11147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err);
11157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return err;
11167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
11177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
11187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /* The ID3v2 tag could be at any place in the mp3 file                             */
11197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /* The mp3 reader only checks few bytes in the beginning of
11207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi           stream to look for a ID3v2 tag  */
11217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /* It means that if the ID3v2 tag is not at the beginning of the file the reader do
11227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        as there is no these metadata */
11237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
11247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /* Retrieve the data of the ID3v2 Tag */
11257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = pC->pC1->ShellAPI.m_pReader->m_pFctGetOption(
11267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->pC1->pReaderContext, M4READER_kOptionID_Mp3Id3v2Tag,
11277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (M4OSA_DataOption) &mp3tagBuffer);
11287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
11297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4NO_ERROR != err )
11307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
11317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1("M4VSS3GPP_editOpen: M4MP3R_getOption returns 0x%x",
11327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err);
11337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return err;
11347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
11357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
11367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /* Write the data of the ID3v2 Tag in the output file */
11377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( 0 != mp3tagBuffer.m_uiBufferSize )
11387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
11397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err = pC->pOsaFileWritPtr->writeData(pC->ewc.p3gpWriterContext,
11407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                (M4OSA_MemAddr8)mp3tagBuffer.m_pData, mp3tagBuffer.m_uiBufferSize);
11417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
11427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /**
11437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            * Free before the error checking anyway */
11447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_free((M4OSA_MemAddr32)mp3tagBuffer.m_pData);
11457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
11467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /**
11477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            * Error checking */
11487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if( M4NO_ERROR != err )
11497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
11507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4OSA_TRACE1_1(
11517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    "M4VSS3GPP_editOpen: WriteData(ID3v2Tag) returns 0x%x",
11527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    err);
11537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                return err;
11547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
11557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
11567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            mp3tagBuffer.m_uiBufferSize = 0;
11577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            mp3tagBuffer.m_pData = M4OSA_NULL;
11587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
11597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
11607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
11617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Create the 3GPP output file */
11627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    else if( M4VIDEOEDITING_kFileType_3GPP == outputFileType )
11637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
11647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /* Compute an average bitrate from mixed bitrates of the input clips */
11657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4VSS3GPP_intComputeOutputAverageVideoBitrate(pC);
1166c6a88ac5d620a5cd47b2741a915d661aab8fe0b4Dharmaray Kundargi        pC->ewc.uiVideoBitrate = pSettings->xVSS.outputVideoBitrate;
11677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
11687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
11697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * 11/12/2008 CR3283 MMS use case in VideoArtist: Set max output file size if needed */
11707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( pC->bIsMMS == M4OSA_TRUE )
11717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
11727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err = M4VSS3GPP_intCreate3GPPOutputFile(&pC->ewc, &pC->ShellAPI,
11737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->pOsaFileWritPtr, pSettings->pOutputFile,
11747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->pOsaFileReadPtr, pSettings->pTemporaryFile,
11757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pSettings->xVSS.outputFileSize);
11767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
11777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        else
11787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
11797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err = M4VSS3GPP_intCreate3GPPOutputFile(&pC->ewc, &pC->ShellAPI,
11807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->pOsaFileWritPtr, pSettings->pOutputFile,
11817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->pOsaFileReadPtr, pSettings->pTemporaryFile, 0);
11827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
11837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
11847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4NO_ERROR != err )
11857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
11867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1(
11877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_editOpen: M4VSS3GPP_intCreate3GPPOutputFile returns 0x%x",
11887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err);
11897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return err;
11907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
11917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
11927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
11937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Default error case */
11947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    else
11957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
11967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_1(
11977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            "M4VSS3GPP_editOpen: invalid outputFileType = 0x%x,\
11987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            returning M4VSS3GPP_ERR_OUTPUT_FILE_TYPE_ERROR",
11997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            outputFileType);
12007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return
12017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4VSS3GPP_ERR_OUTPUT_FILE_TYPE_ERROR; /**< this is an internal error code
12027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                                  unknown to the user */
12037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
12047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
12057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
12067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Initialize state */
12077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4SYS_kMP3 == pC->ewc.AudioStreamType )
12087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
12097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
12107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * In the MP3 case we use a special audio state */
12117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->State = M4VSS3GPP_kEditState_MP3_JUMP;
12127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
12137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    else
12147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
12157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
12167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * We start with the video processing */
12177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->State = M4VSS3GPP_kEditState_VIDEO;
12187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
12197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
12207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
12217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Initialize state.
12227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * The first clip is independant to the "virtual previous clips",
12237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * so it's like if we where in Read/Write mode before it. */
12247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->Vstate = M4VSS3GPP_kEditVideoState_READ_WRITE;
12257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->Astate = M4VSS3GPP_kEditAudioState_READ_WRITE;
12267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
12277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
12287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Return with no error */
12297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_0("M4VSS3GPP_editOpen(): returning M4NO_ERROR");
12307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return M4NO_ERROR;
12317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
12327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
12337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
12347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
12357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4VSS3GPP_editStep()
12367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    Perform one step of editing.
12377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note
12387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param     pContext           (IN) VSS 3GPP edit context
12397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param     pProgress          (OUT) Progress percentage (0 to 100) of the editing operation
12407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4NO_ERROR:        No error
12417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4ERR_PARAMETER:   pContext is M4OSA_NULL (debug only)
12427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4ERR_STATE:       VSS 3GPP is not in an appropriate state for this
12437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *                               function to be called
12447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4VSS3GPP_WAR_EDITING_DONE: Edition is done, user should now call
12457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *            M4VSS3GPP_editClose()
12467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
12477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
12487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4VSS3GPP_editStep( M4VSS3GPP_EditContext pContext,
12497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                             M4OSA_UInt8 *pProgress )
12507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
12517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VSS3GPP_InternalEditContext *pC =
12527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        (M4VSS3GPP_InternalEditContext *)pContext;
12537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32 uiProgressAudio, uiProgressVideo, uiProgress;
12547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_ERR err;
12557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
12567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_1("M4VSS3GPP_editStep called with pContext=0x%x", pContext);
12577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
12587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
12597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    *    Check input parameter */
12607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF2((M4OSA_NULL == pContext), M4ERR_PARAMETER,
12617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "M4VSS3GPP_editStep: pContext is M4OSA_NULL");
12627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF2((M4OSA_NULL == pProgress), M4ERR_PARAMETER,
12637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "M4VSS3GPP_editStep: pProgress is M4OSA_NULL");
12647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
12657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
12667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Check state automaton and select correct processing */
12677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    switch( pC->State )
12687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
12697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_kEditState_VIDEO:
12707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err = M4VSS3GPP_intEditStepVideo(pC);
12717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
12727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
12737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_kEditState_AUDIO:
12747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err = M4VSS3GPP_intEditStepAudio(pC);
12757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
12767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
12777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_kEditState_MP3:
12787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err = M4VSS3GPP_intEditStepMP3(pC);
12797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
12807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
12817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_kEditState_MP3_JUMP:
12827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err = M4VSS3GPP_intEditJumpMP3(pC);
12837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
12847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
12857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        default:
12867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_0(
12877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_editStep(): invalid internal state (0x%x), returning M4ERR_STATE");
12887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return M4ERR_STATE;
12897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
12907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
12917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
12927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Compute progress.
12937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * We do the computing with 32bits precision because in some (very) extreme case, we may get
12947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * values higher than 256 (...) */
12957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    uiProgressAudio =
12967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        ( (M4OSA_UInt32)(pC->ewc.dATo * 100)) / pC->ewc.iOutputDuration;
12977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    // Decorrelate input and output encoding timestamp to handle encoder prefetch
12987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    uiProgressVideo = ((M4OSA_UInt32)(pC->ewc.dInputVidCts * 100)) / pC->ewc.iOutputDuration;
12997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
13007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    uiProgress = uiProgressAudio + uiProgressVideo;
13017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
13027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( ( pC->ewc.AudioStreamType != M4SYS_kAudioUnknown)
13037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        && (pC->ewc.VideoStreamType != M4SYS_kVideoUnknown) )
13047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        uiProgress /= 2;
13057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
13067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
13077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Sanity check */
13087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( uiProgress > 100 )
13097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
13107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        *pProgress = 100;
13117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
13127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    else
13137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
13147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        *pProgress = (M4OSA_UInt8)uiProgress;
13157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
13167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
13177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
13187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Return the error */
13197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_1("M4VSS3GPP_editStep(): returning 0x%x", err);
13207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return err;
13217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
13227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
13237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
13247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
13257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4VSS3GPP_editClose()
13267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    Finish the VSS edit operation.
13277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note    The output 3GPP file is ready to be played after this call
13287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param    pContext           (IN) VSS edit context
13297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4NO_ERROR:       No error
13307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4ERR_PARAMETER:  pContext is M4OSA_NULL (debug only)
13317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4ERR_STATE:      VSS is not in an appropriate state for this function to be called
13327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
13337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
13347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4VSS3GPP_editClose( M4VSS3GPP_EditContext pContext )
13357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
13367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VSS3GPP_InternalEditContext *pC =
13377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        (M4VSS3GPP_InternalEditContext *)pContext;
13387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_ERR err;
13397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_ERR returnedError = M4NO_ERROR;
13407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32 lastCTS;
13417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
13427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_1("M4VSS3GPP_editClose called with pContext=0x%x", pContext);
13437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
13447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
13457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    *    Check input parameter */
13467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF2((M4OSA_NULL == pContext), M4ERR_PARAMETER,
13477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "M4VSS3GPP_editClose: pContext is M4OSA_NULL");
13487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
13497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
13507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Check state automaton.
13517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * In "theory", we should not authorize closing if we are in CREATED state.
13527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * But in practice, in case the opening failed, it may have been partially done.
13537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * In that case we have to free some opened ressources by calling Close. */
13547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4VSS3GPP_kEditState_CLOSED == pC->State )
13557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
13567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_1(
13577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            "M4VSS3GPP_editClose: Wrong state (0x%x), returning M4ERR_STATE",
13587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->State);
13597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return M4ERR_STATE;
13607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
13617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
13627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
13637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * There may be an encoder to destroy */
13647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    err = M4VSS3GPP_intDestroyVideoEncoder(pC);
13657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
13667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4NO_ERROR != err )
13677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
13687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_1(
13697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            "M4VSS3GPP_editClose: M4VSS3GPP_editDestroyVideoEncoder() returns 0x%x!",
13707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err);
13717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**< We do not return the error here because we still have stuff to free */
13727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        returnedError = err;
13737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
13747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
13757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
13767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Close the output file */
13777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4SYS_kMP3 == pC->ewc.AudioStreamType )
13787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
13797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
13807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * MP3 case */
13817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4OSA_NULL != pC->ewc.p3gpWriterContext )
13827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
13837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err = pC->pOsaFileWritPtr->closeWrite(pC->ewc.p3gpWriterContext);
13847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->ewc.p3gpWriterContext = M4OSA_NULL;
13857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
13867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
13877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    else
13887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
13897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
13907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Close the output 3GPP clip, if it has been opened */
13917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4OSA_NULL != pC->ewc.p3gpWriterContext )
13927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
13937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /* Update last Video CTS */
13947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            lastCTS = pC->ewc.iOutputDuration;
13957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
13967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err = pC->ShellAPI.pWriterGlobalFcts->pFctSetOption(
13977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->ewc.p3gpWriterContext,
13987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                (M4OSA_UInt32)M4WRITER_kMaxFileDuration, &lastCTS);
13997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
14007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if( M4NO_ERROR != err )
14017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
14027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4OSA_TRACE1_1(
14037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    "M4VSS3GPP_editClose: SetOption(M4WRITER_kMaxFileDuration) returns 0x%x",
14047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    err);
14057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
14067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
14077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err = pC->ShellAPI.pWriterGlobalFcts->pFctCloseWrite(
14087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->ewc.p3gpWriterContext);
14097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
14107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if( M4NO_ERROR != err )
14117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
14127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4OSA_TRACE1_1(
14137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    "M4VSS3GPP_editClose: pFctCloseWrite(OUT) returns 0x%x!",
14147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    err);
14157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                /**< We do not return the error here because we still have stuff to free */
14167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                if( M4NO_ERROR
14177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    == returnedError ) /**< we return the first error that happened */
14187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                {
14197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    returnedError = err;
14207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                }
14217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
14227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->ewc.p3gpWriterContext = M4OSA_NULL;
14237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
14247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
14257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
14267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
14277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Free the output video DSI, if it has been created */
14287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL != pC->ewc.pVideoOutputDsi )
14297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
14307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_free((M4OSA_MemAddr32)pC->ewc.pVideoOutputDsi);
14317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->ewc.pVideoOutputDsi = M4OSA_NULL;
14327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
14337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
14347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
14357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Free the output audio DSI, if it has been created */
14367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL != pC->ewc.pAudioOutputDsi )
14377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
14387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_free((M4OSA_MemAddr32)pC->ewc.pAudioOutputDsi);
14397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->ewc.pAudioOutputDsi = M4OSA_NULL;
14407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
14417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
14427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
14437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Close clip1, if needed */
14447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL != pC->pC1 )
14457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
14467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = M4VSS3GPP_intClipCleanUp(pC->pC1);
14477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
14487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4NO_ERROR != err )
14497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
14507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1(
14517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_editClose: M4VSS3GPP_intClipCleanUp(C1) returns 0x%x!",
14527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err);
14537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /**< We do not return the error here because we still have stuff to free */
14547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if( M4NO_ERROR
14557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                == returnedError ) /**< we return the first error that happened */
14567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
14577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                returnedError = err;
14587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
14597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
14607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->pC1 = M4OSA_NULL;
14617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
14627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
14637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
14647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Close clip2, if needed */
14657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL != pC->pC2 )
14667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
14677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = M4VSS3GPP_intClipCleanUp(pC->pC2);
14687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
14697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4NO_ERROR != err )
14707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
14717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1(
14727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_editClose: M4VSS3GPP_intClipCleanUp(C2) returns 0x%x!",
14737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err);
14747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /**< We do not return the error here because we still have stuff to free */
14757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if( M4NO_ERROR
14767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                == returnedError ) /**< we return the first error that happened */
14777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
14787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                returnedError = err;
14797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
14807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
14817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->pC2 = M4OSA_NULL;
14827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
14837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
14847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
14857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Free the temporary YUV planes */
14867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL != pC->yuv1[0].pac_data )
14877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
14887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_free((M4OSA_MemAddr32)pC->yuv1[0].pac_data);
14897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->yuv1[0].pac_data = M4OSA_NULL;
14907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
14917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
14927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL != pC->yuv1[1].pac_data )
14937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
14947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_free((M4OSA_MemAddr32)pC->yuv1[1].pac_data);
14957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->yuv1[1].pac_data = M4OSA_NULL;
14967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
14977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
14987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL != pC->yuv1[2].pac_data )
14997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
15007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_free((M4OSA_MemAddr32)pC->yuv1[2].pac_data);
15017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->yuv1[2].pac_data = M4OSA_NULL;
15027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
15037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
15047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL != pC->yuv2[0].pac_data )
15057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
15067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_free((M4OSA_MemAddr32)pC->yuv2[0].pac_data);
15077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->yuv2[0].pac_data = M4OSA_NULL;
15087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
15097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
15107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL != pC->yuv2[1].pac_data )
15117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
15127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_free((M4OSA_MemAddr32)pC->yuv2[1].pac_data);
15137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->yuv2[1].pac_data = M4OSA_NULL;
15147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
15157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
15167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL != pC->yuv2[2].pac_data )
15177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
15187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_free((M4OSA_MemAddr32)pC->yuv2[2].pac_data);
15197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->yuv2[2].pac_data = M4OSA_NULL;
15207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
15217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
15227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /* RC */
15237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL != pC->yuv3[0].pac_data )
15247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
15257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_free((M4OSA_MemAddr32)pC->yuv3[0].pac_data);
15267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->yuv3[0].pac_data = M4OSA_NULL;
15277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
15287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
15297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL != pC->yuv3[1].pac_data )
15307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
15317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_free((M4OSA_MemAddr32)pC->yuv3[1].pac_data);
15327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->yuv3[1].pac_data = M4OSA_NULL;
15337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
15347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
15357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL != pC->yuv3[2].pac_data )
15367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
15377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_free((M4OSA_MemAddr32)pC->yuv3[2].pac_data);
15387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->yuv3[2].pac_data = M4OSA_NULL;
15397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
15407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
15417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /* RC */
15427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL != pC->yuv4[0].pac_data )
15437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
15447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_free((M4OSA_MemAddr32)pC->yuv4[0].pac_data);
15457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->yuv4[0].pac_data = M4OSA_NULL;
15467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
15477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
15487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL != pC->yuv4[1].pac_data )
15497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
15507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_free((M4OSA_MemAddr32)pC->yuv4[1].pac_data);
15517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->yuv4[1].pac_data = M4OSA_NULL;
15527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
15537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
15547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL != pC->yuv4[2].pac_data )
15557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
15567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_free((M4OSA_MemAddr32)pC->yuv4[2].pac_data);
15577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->yuv4[2].pac_data = M4OSA_NULL;
15587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
15597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
15607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
15617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * RC Free effects list */
15627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( pC->pEffectsList != M4OSA_NULL )
15637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
15647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_free((M4OSA_MemAddr32)pC->pEffectsList);
15657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->pEffectsList = M4OSA_NULL;
15667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
15677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
15687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
15697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * RC Free active effects list */
15707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( pC->pActiveEffectsList != M4OSA_NULL )
15717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
15727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_free((M4OSA_MemAddr32)pC->pActiveEffectsList);
15737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->pActiveEffectsList = M4OSA_NULL;
15747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
15757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
15767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     *  Free active effects list */
15777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if(pC->pActiveEffectsList1 != M4OSA_NULL)
15787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
15797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_free((M4OSA_MemAddr32)pC->pActiveEffectsList1);
15807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->pActiveEffectsList1 = M4OSA_NULL;
15817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
15827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
15837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Update state automaton */
15847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->State = M4VSS3GPP_kEditState_CLOSED;
15857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
15867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
15877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Return with no error */
15887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_1("M4VSS3GPP_editClose(): returning 0x%x", returnedError);
15897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return returnedError;
15907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
15917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
15927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
15937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
15947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4VSS3GPP_editCleanUp()
15957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    Free all resources used by the VSS edit operation.
15967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note    The context is no more valid after this call
15977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param    pContext            (IN) VSS edit context
15987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4NO_ERROR:            No error
15997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4ERR_PARAMETER:    pContext is M4OSA_NULL (debug only)
16007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
16017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
16027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4VSS3GPP_editCleanUp( M4VSS3GPP_EditContext pContext )
16037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
16047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_ERR err;
16057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VSS3GPP_InternalEditContext *pC =
16067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        (M4VSS3GPP_InternalEditContext *)pContext;
16077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
16087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_1("M4VSS3GPP_editCleanUp called with pContext=0x%x", pContext);
16097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
16107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
16117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    *    Check input parameter */
16127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL == pContext )
16137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
16147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_0(
16157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            "M4VSS3GPP_editCleanUp(): pContext is M4OSA_NULL, returning M4ERR_PARAMETER");
16167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return M4ERR_PARAMETER;
16177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
16187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
16197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
16207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Close, if needed.
16217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * In "theory", we should not close if we are in CREATED state.
16227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * But in practice, in case the opening failed, it may have been partially done.
16237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * In that case we have to free some opened ressources by calling Close. */
16247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4VSS3GPP_kEditState_CLOSED != pC->State )
16257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
16267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE3_0("M4VSS3GPP_editCleanUp(): calling M4VSS3GPP_editClose");
16277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = M4VSS3GPP_editClose(pC);
16287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
16297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4NO_ERROR != err )
16307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
16317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1(
16327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_editCleanUp(): M4VSS3GPP_editClose returns 0x%x",
16337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err);
16347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
16357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
16367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
16377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
16387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Free the video encoder dummy AU */
16397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL != pC->ewc.pDummyAuBuffer )
16407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
16417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_free((M4OSA_MemAddr32)pC->ewc.pDummyAuBuffer);
16427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->ewc.pDummyAuBuffer = M4OSA_NULL;
16437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
16447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
16457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
16467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Free the Audio encoder context */
16477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL != pC->ewc.pAudioEncCtxt )
16487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
16497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = pC->ShellAPI.pAudioEncoderGlobalFcts->pFctClose(
16507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->ewc.pAudioEncCtxt);
16517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
16527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4NO_ERROR != err )
16537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
16547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1(
16557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_editCleanUp: pAudioEncoderGlobalFcts->pFctClose returns 0x%x",
16567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err);
16577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /**< don't return, we still have stuff to free */
16587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
16597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
16607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = pC->ShellAPI.pAudioEncoderGlobalFcts->pFctCleanUp(
16617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->ewc.pAudioEncCtxt);
16627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
16637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4NO_ERROR != err )
16647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
16657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1(
16667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_editCleanUp: pAudioEncoderGlobalFcts->pFctCleanUp returns 0x%x",
16677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err);
16687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /**< don't return, we still have stuff to free */
16697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
16707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
16717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->ewc.pAudioEncCtxt = M4OSA_NULL;
16727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
16737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
16747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
16757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Free the shells interfaces */
16767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VSS3GPP_unRegisterAllWriters(&pC->ShellAPI);
16777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VSS3GPP_unRegisterAllEncoders(&pC->ShellAPI);
16787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VSS3GPP_unRegisterAllReaders(&pC->ShellAPI);
16797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VSS3GPP_unRegisterAllDecoders(&pC->ShellAPI);
16807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
16817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
16827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Free the settings copied in the internal context */
16837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VSS3GPP_intFreeSettingsList(pC);
16847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
16857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
16867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Finally, Free context */
16877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_free((M4OSA_MemAddr32)pC);
16887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC = M4OSA_NULL;
16897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
16907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
16917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Return with no error */
16927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_0("M4VSS3GPP_editCleanUp(): returning M4NO_ERROR");
16937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return M4NO_ERROR;
16947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
16957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
16967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR
16977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4VSS3GPP_editRegisterExternalVideoDecoder( M4VSS3GPP_EditContext pContext,
16987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                           M4VD_VideoType decoderType,
16997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                           M4VD_Interface *pDecoderInterface,
17007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                           M4OSA_Void *pUserData )
17017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
17027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef M4VSS_ENABLE_EXTERNAL_DECODERS
17037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
17047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VSS3GPP_InternalEditContext *pC =
17057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        (M4VSS3GPP_InternalEditContext *)pContext;
17067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /* Here the situation is a bit special: we need to record the registrations that are made,
17077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    so that we can replay them for each clip we create. */
17087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
17097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( decoderType >= M4VD_kVideoType_NB )
17107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
17117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return M4ERR_PARAMETER;
17127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
17137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
17147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->registeredExternalDecs[decoderType].pDecoderInterface
17157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        = pDecoderInterface;
17167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->registeredExternalDecs[decoderType].pUserData = pUserData;
17177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->registeredExternalDecs[decoderType].registered = M4OSA_TRUE;
17187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
17197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /* Notice it overwrites any HW decoder that may already have been registered for this type;
17207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    this is normal.*/
17217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
17227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return M4NO_ERROR;
17237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
17247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#else
17257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
17267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return M4ERR_NOT_IMPLEMENTED;
17277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
17287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif /* M4VSS_ENABLE_EXTERNAL_DECODERS */
17297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
17307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
17317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
17327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR
17337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4VSS3GPP_editRegisterExternalVideoEncoder( M4VSS3GPP_EditContext pContext,
17347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                           M4VE_EncoderType encoderType,
17357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                           M4VE_Interface *pEncoderInterface,
17367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                           M4OSA_Void *pUserData )
17377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
17387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef M4VSS_ENABLE_EXTERNAL_ENCODERS
17397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
17407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VSS3GPP_InternalEditContext *pC =
17417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        (M4VSS3GPP_InternalEditContext *)pContext;
17427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_ERR err = M4NO_ERROR;
17437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4ENCODER_GlobalInterface *shellInterface;
17447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4ENCODER_Format nativeType;
17457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
17467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    switch( encoderType )
17477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
17487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VE_kH263VideoEnc:
17497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err = M4EGE_H263_getInterfaces(&nativeType, &shellInterface,
17507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4ENCODER_OPEN_ADVANCED);
17517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
17527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
17537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
17547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VE_kMpeg4VideoEnc:
17557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err = M4EGE_MPEG4_getInterfaces(&nativeType, &shellInterface,
17567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4ENCODER_OPEN_ADVANCED);
17577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
17587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
17597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VE_kH264VideoEnc:
17607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_0(
17617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_editRegisterExternalVideoEncoder:\
17627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                H264 encoder type not implemented yet");
17637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return M4ERR_NOT_IMPLEMENTED;
17647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
17657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
17667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        default:
17677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1(
17687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_editRegisterExternalVideoEncoder: unknown encoderType %d",
17697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                encoderType);
17707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return M4ERR_PARAMETER;
17717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
17727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
17737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
17747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4NO_ERROR != err )
17757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
17767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_1(
17777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            "M4VSS3GPP_editRegisterExternalVideoEncoder:\
17787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4EGE_getInterface failed with error 0x%08X",
17797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err);
17807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return err;
17817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
17827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
17837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    err = M4VSS3GPP_registerVideoEncoder(&(pC->ShellAPI), nativeType,
17847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        shellInterface);
17857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
17867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4NO_ERROR != err )
17877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
17887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_1(
17897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            "M4VSS3GPP_editRegisterExternalVideoEncoder:\
17907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4VSS3GPP_registerVideoEncoder failed with error 0x%08X",
17917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err);
17927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_free((M4OSA_MemAddr32)shellInterface);
17937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return err;
17947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
17957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
17967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->ShellAPI.pVideoEncoderExternalAPITable[nativeType] = pEncoderInterface;
17977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->ShellAPI.pVideoEncoderUserDataTable[nativeType] = pUserData;
17987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
17997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return M4NO_ERROR;
18007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
18017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#else
18027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
18037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return M4ERR_NOT_IMPLEMENTED;
18047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
18057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif
18067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
18077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
18087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
18097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef WIN32
18107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
18117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
18127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4VSS3GPP_GetErrorMessage()
18137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    Return a string describing the given error code
18147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note    The input string must be already allocated (and long enough!)
18157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param    err                (IN) Error code to get the description from
18167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param    sMessage        (IN/OUT) Allocated string in which the description will be copied
18177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4NO_ERROR:        Input error is from the VSS3GPP module
18187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4ERR_PARAMETER:Input error is not from the VSS3GPP module
18197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
18207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
18217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
18227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4VSS3GPP_GetErrorMessage( M4OSA_ERR err, M4OSA_Char *sMessage )
18237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
18247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    switch( err )
18257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
18267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_WAR_EDITING_DONE:
18277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_WAR_EDITING_DONE");
18287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
18297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
18307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_WAR_END_OF_AUDIO_MIXING:
18317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_WAR_END_OF_AUDIO_MIXING");
18327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
18337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
18347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_WAR_END_OF_EXTRACT_PICTURE:
18357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_WAR_END_OF_EXTRACT_PICTURE");
18367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
18377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
18387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_INVALID_FILE_TYPE:
18397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_INVALID_FILE_TYPE");
18407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
18417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
18427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_INVALID_EFFECT_KIND:
18437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_INVALID_EFFECT_KIND");
18447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
18457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
18467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_INVALID_VIDEO_EFFECT_TYPE:
18477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_INVALID_VIDEO_EFFECT_TYPE");
18487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
18497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
18507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_INVALID_AUDIO_EFFECT_TYPE:
18517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_INVALID_AUDIO_EFFECT_TYPE");
18527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
18537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
18547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_INVALID_VIDEO_TRANSITION_TYPE:
18557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_INVALID_VIDEO_TRANSITION_TYPE");
18567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
18577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
18587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_INVALID_AUDIO_TRANSITION_TYPE:
18597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_INVALID_AUDIO_TRANSITION_TYPE");
18607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
18617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
18627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_INVALID_VIDEO_ENCODING_FRAME_RATE:
18637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_INVALID_VIDEO_ENCODING_FRAME_RATE");
18647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
18657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
18667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_EXTERNAL_EFFECT_NULL:
18677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_EXTERNAL_EFFECT_NULL");
18687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
18697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
18707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_EXTERNAL_TRANSITION_NULL:
18717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_EXTERNAL_TRANSITION_NULL");
18727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
18737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
18747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_BEGIN_CUT_LARGER_THAN_DURATION:
18757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_BEGIN_CUT_LARGER_THAN_DURATION");
18767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
18777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
18787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_BEGIN_CUT_LARGER_THAN_END_CUT:
18797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_BEGIN_CUT_LARGER_THAN_END_CUT");
18807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
18817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
18827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_OVERLAPPING_TRANSITIONS:
18837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_OVERLAPPING_TRANSITIONS");
18847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
18857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
18867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_INVALID_3GPP_FILE:
18877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_INVALID_3GPP_FILE");
18887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
18897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
18907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_UNSUPPORTED_INPUT_VIDEO_FORMAT:
18917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_UNSUPPORTED_INPUT_VIDEO_FORMAT");
18927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
18937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
18947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_UNSUPPORTED_INPUT_AUDIO_FORMAT:
18957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_UNSUPPORTED_INPUT_AUDIO_FORMAT");
18967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
18977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
18987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_AMR_EDITING_UNSUPPORTED:
18997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_AMR_EDITING_UNSUPPORTED");
19007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
19017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
19027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_INPUT_VIDEO_AU_TOO_LARGE:
19037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_INPUT_VIDEO_AU_TOO_LARGE");
19047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
19057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
19067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_INPUT_AUDIO_AU_TOO_LARGE:
19077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_INPUT_AUDIO_AU_TOO_LARGE");
19087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
19097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
19107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_INPUT_AUDIO_CORRUPTED_AU:
19117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_INPUT_AUDIO_CORRUPTED_AU");
19127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
19137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
19147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_ENCODER_ACCES_UNIT_ERROR:
19157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_ENCODER_ACCES_UNIT_ERROR");
19167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
19177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
19187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_EDITING_UNSUPPORTED_VIDEO_FORMAT:
19197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_EDITING_UNSUPPORTED_VIDEO_FORMAT");
19207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
19217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
19227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_EDITING_UNSUPPORTED_H263_PROFILE:
19237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_EDITING_UNSUPPORTED_H263_PROFILE");
19247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
19257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
19267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_EDITING_UNSUPPORTED_MPEG4_PROFILE:
19277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_EDITING_UNSUPPORTED_MPEG4_PROFILE");
19287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
19297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
19307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_EDITING_UNSUPPORTED_MPEG4_RVLC:
19317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_EDITING_UNSUPPORTED_MPEG4_RVLC");
19327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
19337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
19347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_EDITING_UNSUPPORTED_AUDIO_FORMAT:
19357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_EDITING_UNSUPPORTED_AUDIO_FORMAT");
19367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
19377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
19387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_EDITING_NO_SUPPORTED_STREAM_IN_FILE:
19397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage,
19407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_ERR_EDITING_NO_SUPPORTED_STREAM_IN_FILE");
19417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
19427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
19437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_EDITING_NO_SUPPORTED_VIDEO_STREAM_IN_FILE:
19447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage,
19457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_ERR_EDITING_NO_SUPPORTED_VIDEO_STREAM_IN_FILE");
19467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
19477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
19487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_INVALID_CLIP_ANALYSIS_VERSION:
19497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_INVALID_CLIP_ANALYSIS_VERSION");
19507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
19517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
19527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_INCOMPATIBLE_VIDEO_FORMAT:
19537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_INCOMPATIBLE_VIDEO_FORMAT");
19547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
19557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
19567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_INCOMPATIBLE_VIDEO_FRAME_SIZE:
19577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_INCOMPATIBLE_VIDEO_FRAME_SIZE");
19587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
19597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
19607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_INCOMPATIBLE_VIDEO_TIME_SCALE:
19617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_INCOMPATIBLE_VIDEO_TIME_SCALE");
19627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
19637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
19647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_INCOMPATIBLE_VIDEO_DATA_PARTITIONING:
19657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage,
19667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_ERR_INCOMPATIBLE_VIDEO_DATA_PARTITIONING");
19677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
19687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
19697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_UNSUPPORTED_MP3_ASSEMBLY:
19707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_UNSUPPORTED_MP3_ASSEMBLY");
19717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
19727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
19737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_WAR_INCOMPATIBLE_AUDIO_STREAM_TYPE:
19747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_WAR_INCOMPATIBLE_AUDIO_STREAM_TYPE");
19757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
19767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
19777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_WAR_INCOMPATIBLE_AUDIO_NB_OF_CHANNELS:
19787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_WAR_INCOMPATIBLE_AUDIO_NB_OF_CHANNELS");
19797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
19807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
19817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_WAR_INCOMPATIBLE_AUDIO_SAMPLING_FREQUENCY:
19827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage,
19837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_WAR_INCOMPATIBLE_AUDIO_SAMPLING_FREQUENCY");
19847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
19857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
19867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_NO_SUPPORTED_STREAM_IN_FILE:
19877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_NO_SUPPORTED_STREAM_IN_FILE");
19887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
19897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
19907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_ADDVOLUME_EQUALS_ZERO:
19917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_ADDVOLUME_EQUALS_ZERO");
19927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
19937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
19947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_ADDCTS_HIGHER_THAN_VIDEO_DURATION:
19957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_ADDCTS_HIGHER_THAN_VIDEO_DURATION");
19967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
19977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
19987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_UNDEFINED_AUDIO_TRACK_FILE_FORMAT:
19997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_UNDEFINED_AUDIO_TRACK_FILE_FORMAT");
20007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
20017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
20027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_UNSUPPORTED_ADDED_AUDIO_STREAM:
20037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_UNSUPPORTED_ADDED_AUDIO_STREAM");
20047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
20057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
20067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_AUDIO_MIXING_UNSUPPORTED:
20077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_AUDIO_MIXING_UNSUPPORTED");
20087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
20097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
20107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_FEATURE_UNSUPPORTED_WITH_AUDIO_TRACK:
20117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage,
20127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_ERR_FEATURE_UNSUPPORTED_WITH_AUDIO_TRACK");
20137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
20147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
20157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_AUDIO_CANNOT_BE_MIXED:
20167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_AUDIO_CANNOT_BE_MIXED");
20177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
20187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
20197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_INPUT_CLIP_IS_NOT_A_3GPP:
20207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_INPUT_CLIP_IS_NOT_A_3GPP");
20217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
20227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
20237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_BEGINLOOP_HIGHER_ENDLOOP:
20247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_BEGINLOOP_HIGHER_ENDLOOP");
20257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
20267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
20277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_H263_PROFILE_NOT_SUPPORTED:
20287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_H263_PROFILE_NOT_SUPPORTED");
20297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
20307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
20317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_NO_SUPPORTED_VIDEO_STREAM_IN_FILE:
20327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_NO_SUPPORTED_VIDEO_STREAM_IN_FILE");
20337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
20347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
20357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        default: /**< Not a VSS3GPP error */
20367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "");
20377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return M4ERR_PARAMETER;
20387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
20397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return M4NO_ERROR;
20407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
20417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
20427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif /* WIN32 */
20437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
20447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/********************************************************/
20457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/********************************************************/
20467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/********************************************************/
20477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/****************   STATIC FUNCTIONS   ******************/
20487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/********************************************************/
20497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/********************************************************/
20507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/********************************************************/
20517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
20527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
20537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
20547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4VSS3GPP_intClipSettingsSanityCheck()
20557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    Simplify the given clip settings
20567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note    This function may modify the given structure
20577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param   pClip    (IN/OUT) Clip settings
20587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4NO_ERROR:            No error
20597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4VSS3GPP_ERR_EXTERNAL_EFFECT_NULL:
20607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
20617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
20627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
20637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargistatic M4OSA_ERR M4VSS3GPP_intClipSettingsSanityCheck(
20647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VSS3GPP_ClipSettings *pClip )
20657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
20667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt8 uiFx;
20677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32
20687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        uiClipActualDuration; /**< the clip duration once the cuts are done */
20697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32 uiDuration;
20707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VSS3GPP_EffectSettings *pFx;
20717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
20727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
20737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * If begin cut is too far, return an error */
20747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    uiDuration = pClip->ClipProperties.uiClipDuration;
20757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
20767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( pClip->uiBeginCutTime > uiDuration )
20777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
20787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_2(
20797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            "M4VSS3GPP_intClipSettingsSanityCheck: %d > %d,\
20807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            returning M4VSS3GPP_ERR_BEGIN_CUT_LARGER_THAN_DURATION",
20817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pClip->uiBeginCutTime, uiDuration);
20827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return M4VSS3GPP_ERR_BEGIN_CUT_LARGER_THAN_DURATION;
20837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
20847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
20857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
20867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * If end cut is too far, set to zero (it means no end cut) */
20877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( pClip->uiEndCutTime > uiDuration )
20887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
20897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pClip->uiEndCutTime = 0;
20907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
20917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
20927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
20937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Compute actual clip duration (once cuts are done) */
20947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( 0 == pClip->uiEndCutTime )
20957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
20967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
20977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * No end cut */
20987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        uiClipActualDuration = uiDuration - pClip->uiBeginCutTime;
20997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
21007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    else
21017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
21027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( pClip->uiBeginCutTime >= pClip->uiEndCutTime )
21037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
21047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_2(
21057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_intClipSettingsSanityCheck: %d > %d,\
21067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                returning M4VSS3GPP_ERR_BEGIN_CUT_LARGER_THAN_END_CUT",
21077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pClip->uiBeginCutTime, pClip->uiEndCutTime);
21087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return M4VSS3GPP_ERR_BEGIN_CUT_LARGER_THAN_END_CUT;
21097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
21107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        uiClipActualDuration = pClip->uiEndCutTime - pClip->uiBeginCutTime;
21117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
21127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
21137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4VIDEOEDITING_kMP3 != pClip->ClipProperties.AudioStreamType )
21147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
21157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#if 0 /*RC*/
21167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
21177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Check the three effects */
21187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
21197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        for ( uiFx = 0; uiFx < pClip->nbEffects; uiFx++ )
21207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
21217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pFx = &(pClip->Effects[uiFx]); /**< shortcut */
21227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
21237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /**
21247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            * No effect cases */
21257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if( 0 == pFx->uiDuration )
21267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
21277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pFx->VideoEffectType = M4VSS3GPP_kVideoEffectType_None;
21287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pFx->AudioEffectType = M4VSS3GPP_kAudioEffectType_None;
21297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
21307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            else if( ( M4VSS3GPP_kVideoEffectType_None == pFx->VideoEffectType)
21317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                && (M4VSS3GPP_kAudioEffectType_None == pFx->AudioEffectType) )
21327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
21337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pFx->uiStartTime = 0;
21347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pFx->uiDuration = 0;
21357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
21367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
21377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /**
21387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            * We convert all the effects into middle effects, computing the corresponding
21397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            * start time and duration */
21407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if( M4VSS3GPP_kEffectKind_Begin == pFx->EffectKind )
21417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
21427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pFx->uiStartTime = 0;
21437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
21447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            else if( M4VSS3GPP_kEffectKind_End == pFx->EffectKind )
21457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
21467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                /**
21477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                * Duration sanity check */
21487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                if( pFx->uiDuration > uiClipActualDuration )
21497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                {
21507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    pFx->uiDuration = uiClipActualDuration;
21517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                }
21527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                /**
21537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                * Start time computing */
21547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pFx->uiStartTime = uiClipActualDuration - pFx->uiDuration;
21557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
21567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            else if( M4VSS3GPP_kEffectKind_Middle == pFx->EffectKind )
21577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
21587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                /**
21597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                * Duration sanity check */
21607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                if( pFx->uiDuration + pFx->uiStartTime > uiClipActualDuration )
21617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                {
21627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    pFx->uiDuration = uiClipActualDuration - pFx->uiStartTime;
21637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                }
21647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
21657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            else
21667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
21677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4OSA_TRACE1_1(
21687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    "M4VSS3GPP_intClipSettingsSanityCheck: unknown effect kind (0x%x),\
21697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    returning M4VSS3GPP_ERR_INVALID_EFFECT_KIND",
21707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    pFx->EffectKind);
21717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                return M4VSS3GPP_ERR_INVALID_EFFECT_KIND;
21727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
21737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
21747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /**
21757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            * Check external effect function is set */
21767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if( ( pFx->VideoEffectType >= M4VSS3GPP_kVideoEffectType_External)
21777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                && (M4OSA_NULL == pFx->ExtVideoEffectFct) )
21787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
21797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4OSA_TRACE1_0(
21807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    "M4VSS3GPP_intClipSettingsSanityCheck:\
21817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    returning M4VSS3GPP_ERR_EXTERNAL_EFFECT_NULL");
21827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                return M4VSS3GPP_ERR_EXTERNAL_EFFECT_NULL;
21837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
21847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
21857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
21867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif
21877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
21887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
21897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
21907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return M4NO_ERROR;
21917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
21927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
21937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
21947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
21957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4VSS3GPP_intTransitionSettingsSanityCheck()
21967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    Simplify the given transition settings
21977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note     This function may modify the given structure
21987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param    pTransition    (IN/OUT) Transition settings
21997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4NO_ERROR:            No error
22007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4VSS3GPP_ERR_EXTERNAL_TRANSITION_NULL:
22017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
22027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
22037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargistatic M4OSA_ERR M4VSS3GPP_intTransitionSettingsSanityCheck(
22047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VSS3GPP_TransitionSettings *pTransition )
22057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
22067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
22077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * No transition */
22087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( 0 == pTransition->uiTransitionDuration )
22097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
22107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pTransition->VideoTransitionType = M4VSS3GPP_kVideoTransitionType_None;
22117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pTransition->AudioTransitionType = M4VSS3GPP_kAudioTransitionType_None;
22127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
22137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    else if( ( M4VSS3GPP_kVideoTransitionType_None
22147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        == pTransition->VideoTransitionType)
22157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        && (M4VSS3GPP_kAudioTransitionType_None
22167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        == pTransition->AudioTransitionType) )
22177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
22187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pTransition->uiTransitionDuration = 0;
22197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
22207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
22217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
22227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Check external transition function is set */
22237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( ( pTransition->VideoTransitionType
22247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        >= M4VSS3GPP_kVideoTransitionType_External)
22257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        && (M4OSA_NULL == pTransition->ExtVideoTransitionFct) )
22267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
22277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return M4VSS3GPP_ERR_EXTERNAL_TRANSITION_NULL;
22287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
22297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
22307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
22317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Set minimal transition duration */
22327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( ( pTransition->uiTransitionDuration > 0)
22337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        && (pTransition->uiTransitionDuration
22347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        < M4VSS3GPP_MINIMAL_TRANSITION_DURATION) )
22357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
22367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pTransition->uiTransitionDuration =
22377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4VSS3GPP_MINIMAL_TRANSITION_DURATION;
22387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
22397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return M4NO_ERROR;
22407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
22417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
22427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
22437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
22447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4VSS3GPP_intFreeSettingsList()
22457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    Free the settings copied in the internal context
22467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param   pC    (IN/OUT) Internal edit context
22477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
22487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
22497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargistatic M4OSA_Void M4VSS3GPP_intFreeSettingsList(
22507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VSS3GPP_InternalEditContext *pC )
22517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
22527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32 i;
22537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
22547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
22557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Free the settings list */
22567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL != pC->pClipList )
22577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
22587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        for ( i = 0; i < pC->uiClipNumber; i++ )
22597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
22607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4VSS3GPP_editFreeClipSettings(&(pC->pClipList[i]));
22617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
22627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
22637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_free((M4OSA_MemAddr32)pC->pClipList);
22647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->pClipList = M4OSA_NULL;
22657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
22667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
22677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
22687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Free the transition list */
22697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL != pC->pTransitionList )
22707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
22717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_free((M4OSA_MemAddr32)pC->pTransitionList);
22727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->pTransitionList = M4OSA_NULL;
22737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
22747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
22757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
22767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
22777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4VSS3GPP_intCreateMP3OutputFile()
22787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief        Creates and prepare the output MP file
22797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param   pC    (IN/OUT) Internal edit context
22807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
22817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
22827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargistatic M4OSA_ERR
22837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4VSS3GPP_intCreateMP3OutputFile( M4VSS3GPP_InternalEditContext *pC,
22847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                 M4OSA_Void *pOutputFile )
22857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
22867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_ERR err;
22877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
22887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    err =
22897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->pOsaFileWritPtr->openWrite(&pC->ewc.p3gpWriterContext, pOutputFile,
22907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_kFileWrite);
22917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
22927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4NO_ERROR != err )
22937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
22947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_1(
22957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            "M4VSS3GPP_intCreateMP3OutputFile: WriteOpen returns 0x%x!", err);
22967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return err;
22977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
22987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
22997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return M4NO_ERROR;
23007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
23017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
23027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
23037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4VSS3GPP_intCreate3GPPOutputFile()
23047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief   Creates and prepare the output MP3 file
23057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note    Creates the writer, Creates the output file, Adds the streams,
23067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi           Readies the writing process
23077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param   pC    (IN/OUT) Internal edit context
23087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
23097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
23107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR
23117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4VSS3GPP_intCreate3GPPOutputFile( M4VSS3GPP_EncodeWriteContext *pC_ewc,
23127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                  M4VSS3GPP_MediaAndCodecCtxt *pC_ShellAPI,
23137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                  M4OSA_FileWriterPointer *pOsaFileWritPtr,
23147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                  M4OSA_Void *pOutputFile,
23157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                  M4OSA_FileReadPointer *pOsaFileReadPtr,
23167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                  M4OSA_Void *pTempFile,
23177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                  M4OSA_UInt32 maxOutputFileSize )
23187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
23197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_ERR err;
23207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32 uiVersion;
23217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4SYS_StreamIDValue temp;
23227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
23237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_2(
23247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "M4VSS3GPP_intCreate3GPPOutputFile called with pC_ewc=0x%x, pOutputFile=0x%x",
23257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc, pOutputFile);
23267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
23277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
23287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    *    Check input parameter */
23297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF2((M4OSA_NULL == pC_ewc), M4ERR_PARAMETER,
23307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "M4VSS3GPP_intCreate3GPPOutputFile: pC_ewc is M4OSA_NULL");
23317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF2((M4OSA_NULL == pOutputFile), M4ERR_PARAMETER,
23327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "M4VSS3GPP_intCreate3GPPOutputFile: pOutputFile is M4OSA_NULL");
23337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
23347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /* Set writer */
23357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    err =
23367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4VSS3GPP_setCurrentWriter(pC_ShellAPI, M4VIDEOEDITING_kFileType_3GPP);
23377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4ERR_CHECK_RETURN(err);
23387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
23397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
23407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Create the output file */
23417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    err = pC_ShellAPI->pWriterGlobalFcts->pFctOpen(&pC_ewc->p3gpWriterContext,
23427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pOutputFile, pOsaFileWritPtr, pTempFile, pOsaFileReadPtr);
23437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
23447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4NO_ERROR != err )
23457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
23467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_1(
23477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            "M4VSS3GPP_intCreate3GPPOutputFile: pWriterGlobalFcts->pFctOpen returns 0x%x!",
23487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err);
23497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return err;
23507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
23517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
23527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
23537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Set the signature option of the writer */
23547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    err =
23557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ShellAPI->pWriterGlobalFcts->pFctSetOption(pC_ewc->p3gpWriterContext,
23567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4WRITER_kEmbeddedString, (M4OSA_DataOption)"NXP-SW : VSS    ");
23577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
23587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( ( M4NO_ERROR != err) && (((M4OSA_UInt32)M4ERR_BAD_OPTION_ID)
23597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        != err) ) /* this option may not be implemented by some writers */
23607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
23617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_1(
23627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            "M4VSS3GPP_intCreate3GPPOutputFile:\
23637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pWriterGlobalFcts->pFctSetOption(M4WRITER_kEmbeddedString) returns 0x%x!",
23647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err);
23657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return err;
23667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
23677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
23687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /*11/12/2008 CR3283 MMS use case for VideoArtist:
23697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    Set the max output file size option in the writer so that the output file will be
23707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    smaller than the given file size limitation*/
23717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( maxOutputFileSize > 0 )
23727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
23737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = pC_ShellAPI->pWriterGlobalFcts->pFctSetOption(
23747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC_ewc->p3gpWriterContext,
23757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4WRITER_kMaxFileSize, &maxOutputFileSize);
23767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
23777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4NO_ERROR != err )
23787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
23797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1(
23807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_intCreate3GPPOutputFile:\
23817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                writer set option M4WRITER_kMaxFileSize returns 0x%x",
23827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err);
23837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return err;
23847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
23857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
23867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
23877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
23887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Set the version option of the writer */
23897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    uiVersion =
23907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        (M4VIDEOEDITING_VERSION_MAJOR * 100 + M4VIDEOEDITING_VERSION_MINOR * 10
23917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        + M4VIDEOEDITING_VERSION_REVISION);
23927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    err =
23937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ShellAPI->pWriterGlobalFcts->pFctSetOption(pC_ewc->p3gpWriterContext,
23947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4WRITER_kEmbeddedVersion, (M4OSA_DataOption) &uiVersion);
23957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
23967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( ( M4NO_ERROR != err) && (((M4OSA_UInt32)M4ERR_BAD_OPTION_ID)
23977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        != err) ) /* this option may not be implemented by some writers */
23987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
23997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_1(
24007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            "M4VSS3GPP_intCreate3GPPOutputFile:\
24017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pWriterGlobalFcts->pFctSetOption(M4WRITER_kEmbeddedVersion) returns 0x%x!",
24027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err);
24037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return err;
24047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
24057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
24067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
24077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * In case of EMP, we have to explicitely give an emp ftyp to the writer */
24087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_TRUE == pC_ewc->bActivateEmp )
24097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
24107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4VIDEOEDITING_FtypBox ftyp;
24117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
24127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        ftyp.major_brand = M4VIDEOEDITING_BRAND_3GP4;
24137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        ftyp.minor_version = M4VIDEOEDITING_BRAND_0000;
24147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        ftyp.nbCompatibleBrands = 2;
24157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        ftyp.compatible_brands[0] = M4VIDEOEDITING_BRAND_3GP4;
24167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        ftyp.compatible_brands[1] = M4VIDEOEDITING_BRAND_EMP;
24177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
24187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = pC_ShellAPI->pWriterGlobalFcts->pFctSetOption(
24197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC_ewc->p3gpWriterContext,
24207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4WRITER_kSetFtypBox, (M4OSA_DataOption) &ftyp);
24217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
24227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4NO_ERROR != err )
24237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
24247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1(
24257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_intCreate3GPPOutputFile:\
24267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pWriterGlobalFcts->pFctSetOption(M4WRITER_kSetFtypBox) returns 0x%x!",
24277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err);
24287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return err;
24297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
24307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
24317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
24327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4SYS_kVideoUnknown != pC_ewc->VideoStreamType )
24337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
24347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
24357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Set the video stream properties */
24367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterVideoStreamInfo.height = pC_ewc->uiVideoHeight;
24377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterVideoStreamInfo.width = pC_ewc->uiVideoWidth;
24387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterVideoStreamInfo.fps =
24397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            0.0; /**< Not used by the shell/core writer */
24407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterVideoStreamInfo.Header.pBuf =
24417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC_ewc->pVideoOutputDsi; /**< Previously computed output DSI */
24427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterVideoStreamInfo.Header.Size = pC_ewc->
24437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            uiVideoOutputDsiSize; /**< Previously computed output DSI size */
24447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
24457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterVideoStream.streamType = pC_ewc->VideoStreamType;
24467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
24477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        switch( pC_ewc->VideoStreamType )
24487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
24497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            case M4SYS_kMPEG_4:
24507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            case M4SYS_kH263:
24517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            case M4SYS_kH264:
24527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                /**< We HAVE to put a value here... */
24537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC_ewc->WriterVideoStream.averageBitrate =
24547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    pC_ewc->uiVideoBitrate;
24557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC_ewc->WriterVideoStream.maxBitrate = pC_ewc->uiVideoBitrate;
24567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                break;
24577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
24587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            default:
24597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4OSA_TRACE1_1(
24607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    "M4VSS3GPP_intCreate3GPPOutputFile: unknown input video format (0x%x),\
24617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    returning M4VSS3GPP_ERR_UNSUPPORTED_INPUT_VIDEO_FORMAT!",
24627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    pC_ewc->VideoStreamType);
24637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                return M4VSS3GPP_ERR_UNSUPPORTED_INPUT_VIDEO_FORMAT;
24647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
24657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
24667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterVideoStream.streamID = M4VSS3GPP_WRITER_VIDEO_STREAM_ID;
24677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterVideoStream.timeScale =
24687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            0; /**< Not used by the shell/core writer */
24697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterVideoStream.profileLevel =
24707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            0; /**< Not used by the shell/core writer */
24717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterVideoStream.duration =
24727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            0; /**< Not used by the shell/core writer */
24737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
24747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterVideoStream.decoderSpecificInfoSize =
24757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            sizeof(M4WRITER_StreamVideoInfos);
24767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterVideoStream.decoderSpecificInfo =
24777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (M4OSA_MemAddr32) &(pC_ewc->WriterVideoStreamInfo);
24787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
24797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
24807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Add the video stream */
24817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = pC_ShellAPI->pWriterGlobalFcts->pFctAddStream(
24827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC_ewc->p3gpWriterContext, &pC_ewc->WriterVideoStream);
24837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
24847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4NO_ERROR != err )
24857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
24867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1(
24877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_intCreate3GPPOutputFile:\
24887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pWriterGlobalFcts->pFctAddStream(video) returns 0x%x!",
24897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err);
24907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return err;
24917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
24927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
24937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
24947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Update AU properties for video stream */
24957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterVideoAU.attribute = AU_RAP;
24967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterVideoAU.CTS = 0;
24977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterVideoAU.DTS = 0;    /** Reset time */
24987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterVideoAU.frag = M4OSA_NULL;
24997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterVideoAU.nbFrag = 0; /** No fragment */
25007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterVideoAU.size = 0;
25017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterVideoAU.dataAddress = M4OSA_NULL;
25027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterVideoAU.stream = &(pC_ewc->WriterVideoStream);
25037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
25047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
25057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Set the writer max video AU size */
25067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->uiVideoMaxAuSize = (M4OSA_UInt32)(1.5F
25077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            *(M4OSA_Float)(pC_ewc->WriterVideoStreamInfo.width
25087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            * pC_ewc->WriterVideoStreamInfo.height)
25097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            * M4VSS3GPP_VIDEO_MIN_COMPRESSION_RATIO);
25107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        temp.streamID = M4VSS3GPP_WRITER_VIDEO_STREAM_ID;
25117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        temp.value = pC_ewc->uiVideoMaxAuSize;
25127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = pC_ShellAPI->pWriterGlobalFcts->pFctSetOption(
25137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC_ewc->p3gpWriterContext, (M4OSA_UInt32)M4WRITER_kMaxAUSize,
25147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (M4OSA_DataOption) &temp);
25157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
25167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4NO_ERROR != err )
25177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
25187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1(
25197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_intCreate3GPPOutputFile:\
25207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pWriterGlobalFcts->pFctSetOption(M4WRITER_kMaxAUSize, video) returns 0x%x!",
25217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err);
25227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return err;
25237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
25247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
25257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
25267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Set the writer max video chunk size */
25277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        temp.streamID = M4VSS3GPP_WRITER_VIDEO_STREAM_ID;
25287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        temp.value = (M4OSA_UInt32)(pC_ewc->uiVideoMaxAuSize \
25297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            * M4VSS3GPP_VIDEO_AU_SIZE_TO_CHUNCK_SIZE_RATIO); /**< from max AU size to
25307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                                                  max Chunck size */
25317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = pC_ShellAPI->pWriterGlobalFcts->pFctSetOption(
25327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC_ewc->p3gpWriterContext,
25337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (M4OSA_UInt32)M4WRITER_kMaxChunckSize,
25347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (M4OSA_DataOption) &temp);
25357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
25367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4NO_ERROR != err )
25377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
25387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1(
25397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_intCreate3GPPOutputFile:\
25407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pWriterGlobalFcts->pFctSetOption(M4WRITER_kMaxAUSize, video) returns 0x%x!",
25417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err);
25427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return err;
25437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
25447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
25457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
25467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4SYS_kAudioUnknown != pC_ewc->AudioStreamType )
25477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
25487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4WRITER_StreamAudioInfos streamAudioInfo;
25497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
25507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        streamAudioInfo.nbSamplesPerSec = 0; /**< unused by our shell writer */
25517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        streamAudioInfo.nbBitsPerSample = 0; /**< unused by our shell writer */
25527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        streamAudioInfo.nbChannels = 1;      /**< unused by our shell writer */
25537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
25547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( pC_ewc->pAudioOutputDsi != M4OSA_NULL )
25557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
25567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /* If we copy the stream from the input, we copy its DSI */
25577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            streamAudioInfo.Header.Size = pC_ewc->uiAudioOutputDsiSize;
25587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            streamAudioInfo.Header.pBuf = pC_ewc->pAudioOutputDsi;
25597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
25607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        else
25617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
25627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /* Writer will put a default DSI */
25637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            streamAudioInfo.Header.Size = 0;
25647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            streamAudioInfo.Header.pBuf = M4OSA_NULL;
25657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
25667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
25677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterAudioStream.streamID = M4VSS3GPP_WRITER_AUDIO_STREAM_ID;
25687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterAudioStream.streamType = pC_ewc->AudioStreamType;
25697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterAudioStream.duration =
25707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            0; /**< Not used by the shell/core writer */
25717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterAudioStream.profileLevel =
25727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            0; /**< Not used by the shell/core writer */
25737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterAudioStreamInfo.nbSamplesPerSec =
25747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC_ewc->uiSamplingFrequency;
25757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterAudioStream.timeScale = pC_ewc->uiSamplingFrequency;
25767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterAudioStreamInfo.nbChannels =
25777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (M4OSA_UInt16)pC_ewc->uiNbChannels;
25787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterAudioStreamInfo.nbBitsPerSample =
25797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            0; /**< Not used by the shell/core writer */
25807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
25817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
25827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Add the audio stream */
25837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        switch( pC_ewc->AudioStreamType )
25847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
25857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            case M4SYS_kAMR:
25867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC_ewc->WriterAudioStream.averageBitrate =
25877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    0; /**< It is not used by the shell, the DSI is taken into account instead */
25887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC_ewc->WriterAudioStream.maxBitrate =
25897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    0; /**< Not used by the shell/core writer */
25907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                break;
25917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
25927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            case M4SYS_kAAC:
25937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC_ewc->WriterAudioStream.averageBitrate =
25947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    pC_ewc->uiAudioBitrate;
25957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC_ewc->WriterAudioStream.maxBitrate = pC_ewc->uiAudioBitrate;
25967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                break;
25977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
25987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            case M4SYS_kEVRC:
25997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC_ewc->WriterAudioStream.averageBitrate =
26007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    0; /**< It is not used by the shell, the DSI is taken into account instead */
26017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC_ewc->WriterAudioStream.maxBitrate =
26027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    0; /**< Not used by the shell/core writer */
26037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                break;
26047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
26057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            case M4SYS_kMP3: /**< there can't be MP3 track in 3GPP file -> error */
26067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            default:
26077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4OSA_TRACE1_1(
26087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    "M4VSS3GPP_intCreate3GPPOutputFile: unknown output audio format (0x%x),\
26097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    returning M4VSS3GPP_ERR_UNSUPPORTED_INPUT_AUDIO_FORMAT!",
26107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    pC_ewc->AudioStreamType);
26117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                return M4VSS3GPP_ERR_UNSUPPORTED_INPUT_AUDIO_FORMAT;
26127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
26137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
26147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
26157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Our writer shell interface is a little tricky: we put M4WRITER_StreamAudioInfos
26167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        in the DSI pointer... */
26177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterAudioStream.decoderSpecificInfo =
26187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (M4OSA_MemAddr32) &streamAudioInfo;
26197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
26207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
26217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Link the AU and the stream */
26227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterAudioAU.stream = &(pC_ewc->WriterAudioStream);
26237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterAudioAU.dataAddress = M4OSA_NULL;
26247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterAudioAU.size = 0;
26257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterAudioAU.CTS =
26267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            -pC_ewc->iSilenceFrameDuration; /** Reset time */
26277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterAudioAU.DTS = 0;
26287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterAudioAU.attribute = 0;
26297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterAudioAU.nbFrag = 0; /** No fragment */
26307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterAudioAU.frag = M4OSA_NULL;
26317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
26327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = pC_ShellAPI->pWriterGlobalFcts->pFctAddStream(
26337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC_ewc->p3gpWriterContext, &pC_ewc->WriterAudioStream);
26347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
26357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4NO_ERROR != err )
26367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
26377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1(
26387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_intCreate3GPPOutputFile:\
26397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pWriterGlobalFcts->pFctAddStream(audio) returns 0x%x!",
26407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err);
26417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return err;
26427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
26437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
26447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
26457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Set the writer max audio AU size */
26467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->uiAudioMaxAuSize = M4VSS3GPP_AUDIO_MAX_AU_SIZE;
26477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        temp.streamID = M4VSS3GPP_WRITER_AUDIO_STREAM_ID;
26487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        temp.value = pC_ewc->uiAudioMaxAuSize;
26497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = pC_ShellAPI->pWriterGlobalFcts->pFctSetOption(
26507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC_ewc->p3gpWriterContext, (M4OSA_UInt32)M4WRITER_kMaxAUSize,
26517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (M4OSA_DataOption) &temp);
26527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
26537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4NO_ERROR != err )
26547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
26557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1(
26567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_intCreate3GPPOutputFile:\
26577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pWriterGlobalFcts->pFctSetOption(M4WRITER_kMaxAUSize, audio) returns 0x%x!",
26587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err);
26597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return err;
26607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
26617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
26627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
26637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Set the writer max audio chunck size */
26647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        temp.streamID = M4VSS3GPP_WRITER_AUDIO_STREAM_ID;
26657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        temp.value = M4VSS3GPP_AUDIO_MAX_CHUNCK_SIZE;
26667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = pC_ShellAPI->pWriterGlobalFcts->pFctSetOption(
26677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC_ewc->p3gpWriterContext,
26687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (M4OSA_UInt32)M4WRITER_kMaxChunckSize,
26697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (M4OSA_DataOption) &temp);
26707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
26717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4NO_ERROR != err )
26727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
26737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1(
26747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_intCreate3GPPOutputFile:\
26757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pWriterGlobalFcts->pFctSetOption(M4WRITER_kMaxAUSize, audio) returns 0x%x!",
26767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err);
26777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return err;
26787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
26797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
26807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
26817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
26827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * All streams added, we're now ready to write */
26837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    err = pC_ShellAPI->pWriterGlobalFcts->pFctStartWriting(
26847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->p3gpWriterContext);
26857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
26867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4NO_ERROR != err )
26877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
26887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_1(
26897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            "M4VSS3GPP_intCreate3GPPOutputFile:\
26907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pWriterGlobalFcts->pFctStartWriting() returns 0x%x!",
26917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err);
26927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return err;
26937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
26947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
26957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
26967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Return with no error */
26977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_0("M4VSS3GPP_intCreate3GPPOutputFile(): returning M4NO_ERROR");
26987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return M4NO_ERROR;
26997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
27007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
27017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
27027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
27037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR  M4VSS3GPP_intComputeOutputVideoAndAudioDsi()
27047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    Generate a H263 or MPEG-4 decoder specific info compatible with all input video
27057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *            tracks. Copy audio dsi from master clip.
27067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param   pC    (IN/OUT) Internal edit context
27077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
27087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
27097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargistatic M4OSA_ERR
27107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4VSS3GPP_intComputeOutputVideoAndAudioDsi( M4VSS3GPP_InternalEditContext *pC,
27117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                           M4OSA_UInt8 uiMasterClip )
27127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
27137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt8 uiCurrentLevel, uiNewLevel;
27147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt8 uiCurrentProf, uiNewProf;
27157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_Int32 iResynchMarkerDsiIndex;
27167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4_StreamHandler *pStreamForDsi;
27177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VSS3GPP_ClipContext *pClip;
27187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_ERR err;
27197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32 i;
27207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
27217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4ENCODER_Header *encHeader;
27227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4SYS_StreamIDmemAddr streamHeader;
27237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
27247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pStreamForDsi = M4OSA_NULL;
27257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClip = M4OSA_NULL;
27267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
27277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
27287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * H263 case */
27297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4SYS_kH263 == pC->ewc.VideoStreamType )
27307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
27317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
27327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * H263 output DSI is always 7 bytes */
27337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->ewc.uiVideoOutputDsiSize = 7;
27347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->ewc.pVideoOutputDsi =
27357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (M4OSA_MemAddr8)M4OSA_malloc(pC->ewc.uiVideoOutputDsiSize,
27367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4VSS3GPP, (M4OSA_Char *)"pC->ewc.pVideoOutputDsi (H263)");
27377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
27387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4OSA_NULL == pC->ewc.pVideoOutputDsi )
27397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
27407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_0(
27417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_intComputeOutputVideoAndAudioDsi():\
27427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                unable to allocate pVideoOutputDsi (H263), returning M4ERR_ALLOC");
27437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return M4ERR_ALLOC;
27447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
27457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
27467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
27477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * (We override the input vendor info.
27487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * At least we know that nothing special will be tried with PHLP-stamped
27497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi          edited streams...) */
27507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->ewc.pVideoOutputDsi[0] = 'P';
27517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->ewc.pVideoOutputDsi[1] = 'H';
27527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->ewc.pVideoOutputDsi[2] = 'L';
27537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->ewc.pVideoOutputDsi[3] = 'P';
27547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
27557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
27567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Decoder version is 0 */
27577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->ewc.pVideoOutputDsi[4] = 0;
27587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
27597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
27607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * We take the max level of all input streams, but 10 is the minimum */
27617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        uiCurrentLevel = 10;
27627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
27637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        for ( i = 0; i < pC->uiClipNumber; i++ )
27647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
27657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            uiNewLevel = pC->pClipList[i].ClipProperties.uiH263level;
27667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
27677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if( uiNewLevel > uiCurrentLevel )
27687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
27697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                uiCurrentLevel = uiNewLevel;
27707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
27717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
27727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
27737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
27747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Level is the sixth byte i the DSI */
27757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->ewc.pVideoOutputDsi[5] = uiCurrentLevel;
27767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
27777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
27787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Profile is always 0, and it's the seventh byte in the DSI */
27797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->ewc.pVideoOutputDsi[6] = 0;
27807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
27817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
27827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
27837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * MPEG-4 case */
27847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    else if( M4SYS_kMPEG_4 == pC->ewc.VideoStreamType )
27857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
27867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
27877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Profile combination rules:
27887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        *   8 and x -> x
27897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        *   1, 2 or 3 -> max
27907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        *   9 and 1 -> 2
27917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        *   9 and 2 -> 2
27927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        *   9 and 3 -> 3
27937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        */
27947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
27957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
27967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Note:
27977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        *   The part of the output video encoded by the VSS3GPP
27987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        *   have a profile of 8.
27997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        *   Since 8 is the less "strong" profile (8 and x --> x),
28007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        *   we can check only the input clips to compute the
28017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        *   profile of the output combined clip.
28027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        */
28037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
28047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
28057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Start with profile of the first clip */
28067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        uiCurrentProf = pC->pClipList[0].ClipProperties.uiVideoProfile;
28077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
28087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
28097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Combine current profile with the one of the next clip */
28107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        for ( i = 1; i < pC->uiClipNumber; i++ )
28117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
28127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            uiNewProf = pC->pClipList[i].ClipProperties.uiVideoProfile;
28137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
28147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            switch( uiNewProf )
28157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
28167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                case 8:
28177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    /**< 8 + x --> x */
28187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    /**< uiCurrentProf is not updated */
28197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    break;
28207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
28217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                case 1:
28227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                case 2:
28237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                case 3:
28247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    switch( uiCurrentProf )
28257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    {
28267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                        case 1:
28277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                        case 2:
28287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                        case 3:
28297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                        case 4:
28307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                        case 5:
28317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                            /**< 1, 2, 3, 4 or 5 -> max */
28327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                            uiCurrentProf = (uiCurrentProf > uiNewProf)
28337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                ? uiCurrentProf : uiNewProf;
28347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                            break;
28357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
28367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                        case 8: /**< 8 + x -> x */
28377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                            uiCurrentProf = uiNewProf;
28387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                            break;
28397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
28407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                        case 9:
28417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                            /**< 9 and 1 -> 2 */
28427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                            /**< 9 and 2 -> 2 */
28437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                            /**< 9 and 3 -> 3 */
28447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                            /**< 9 and 4 -> 4 */
28457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                            /**< 9 and 5 -> 5 */
28467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                            uiCurrentProf = (uiNewProf > 2) ? uiNewProf : 2;
28477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                            break;
28487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    }
28497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    break;
28507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
28517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                case 9:
28527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    switch( uiCurrentProf )
28537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    {
28547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                        case 1:
28557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                        case 2:
28567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                        case 3:
28577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                            /**< 9 and 1 -> 2 */
28587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                            /**< 9 and 2 -> 2 */
28597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                            /**< 9 and 3 -> 3 */
28607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                            uiCurrentProf =
28617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                (uiCurrentProf > 2) ? uiCurrentProf : 2;
28627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                            break;
28637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
28647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                        case 9: /**< 9 + x -> x */
28657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                        case 8: /**< 8 + x -> x */
28667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                            uiCurrentProf = uiNewProf;
28677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                            break;
28687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                }
28697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
28707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
28717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
28727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
28737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Look for the DSI of an input video stream which would use the Resynch. Marker tool */
28747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        i = 0;
28757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        iResynchMarkerDsiIndex =
28767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            0; /**< By default we take the first DSI (if we find no Resynch Marker DSI) */
28777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
28787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        while( i < pC->uiClipNumber )
28797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
28807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if( M4OSA_TRUE
28817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                == pC->pClipList[i].ClipProperties.bMPEG4resynchMarker )
28827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
28837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                iResynchMarkerDsiIndex = i;
28847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                break; /**< we found it, get out the while loop */
28857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
28867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            i++;
28877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
28887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
28897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
28907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Get the DSI of the clip found. If it is the first clip, it is already opened.
28917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Else we must open it (and later close it...) */
28927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( 0 == iResynchMarkerDsiIndex )
28937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
28947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pStreamForDsi = &(pC->pC1->pVideoStream->m_basicProperties);
28957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
28967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        else
28977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
28987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /**
28997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            * We can use the fast open mode and the skip audio mode to get the DSI */
29007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err = M4VSS3GPP_intClipInit(&pClip, pC->pOsaFileReadPtr);
29017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
29027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if( M4NO_ERROR != err )
29037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
29047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4OSA_TRACE1_1(
29057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    "M4VSS3GPP_intComputeOutputVideoAndAudioDsi:\
29067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    M4VSS3GPP_intClipInit() returns 0x%x!",
29077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    err);
29087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
29097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                if( M4OSA_NULL != pClip )
29107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                {
29117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    M4VSS3GPP_intClipCleanUp(pClip);
29127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                }
29137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                return err;
29147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
29157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
29167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err = M4VSS3GPP_intClipOpen(pClip,
29177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                &pC->pClipList[iResynchMarkerDsiIndex], M4OSA_TRUE,
29187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4OSA_TRUE, M4OSA_TRUE);
29197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
29207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if( M4NO_ERROR != err )
29217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
29227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4OSA_TRACE1_1(
29237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    "M4VSS3GPP_intComputeOutputVideoAndAudioDsi:\
29247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    M4VSS3GPP_intClipOpen() returns 0x%x!",
29257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    err);
29267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4VSS3GPP_intClipCleanUp(pClip);
29277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                return err;
29287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
29297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
29307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pStreamForDsi = &(pClip->pVideoStream->m_basicProperties);
29317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
29327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
29337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
29347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Allocate and copy the new DSI */
29357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->ewc.pVideoOutputDsi = (M4OSA_MemAddr8)M4OSA_malloc(
29367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pStreamForDsi->m_decoderSpecificInfoSize,
29377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4VSS3GPP, (M4OSA_Char *)"pC->ewc.pVideoOutputDsi (MPEG4)");
29387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
29397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4OSA_NULL == pC->ewc.pVideoOutputDsi )
29407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
29417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_0(
29427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_intComputeOutputVideoAndAudioDsi():\
29437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                unable to allocate pVideoOutputDsi (MPEG4), returning M4ERR_ALLOC");
29447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return M4ERR_ALLOC;
29457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
29467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->ewc.uiVideoOutputDsiSize =
29477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (M4OSA_UInt16)pStreamForDsi->m_decoderSpecificInfoSize;
29487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_memcpy(pC->ewc.pVideoOutputDsi,
29497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (M4OSA_MemAddr8)pStreamForDsi->m_pDecoderSpecificInfo,
29507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->ewc.uiVideoOutputDsiSize);
29517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
29527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
29537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * We rewrite the profile in the output DSI because it may not be the good one
29547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * The profile and level is always at byte number 4 */
29557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        (pC->ewc.pVideoOutputDsi)[4] = uiCurrentProf;
29567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
29577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
29587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * If a clip has been temporarily opened to get its DSI, close it */
29597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4OSA_NULL != pClip )
29607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
29617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err = M4VSS3GPP_intClipCleanUp(pClip);
29627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
29637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if( M4NO_ERROR != err )
29647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
29657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4OSA_TRACE1_1(
29667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    "M4VSS3GPP_intComputeOutputVideoAndAudioDsi:\
29677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    M4VSS3GPP_intClipCleanUp() returns 0x%x!",
29687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    err);
29697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                return err;
29707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
29717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
29727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
29737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    else if( M4SYS_kH264 == pC->ewc.VideoStreamType )
29747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
29757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
29767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /* For H.264 encoder case
29777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Fetch the DSI from the shell video encoder, and feed it to the writer before
29787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        closing it. */
29797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
29807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_0(
29817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            "M4VSS3GPP_intComputeOutputVideoAndAudioDsi: get DSI for H264 stream");
29827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
29837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4OSA_NULL == pC->ewc.pEncContext )
29847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
29857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_0(
29867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_intComputeOutputVideoAndAudioDsi: pC->ewc.pEncContext is NULL");
29877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err = M4VSS3GPP_intCreateVideoEncoder(pC);
29887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
29897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if( M4NO_ERROR != err )
29907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
29917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4OSA_TRACE1_1(
29927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    "M4VSS3GPP_intComputeOutputVideoAndAudioDsi:\
29937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    M4VSS3GPP_intCreateVideoEncoder returned error 0x%x",
29947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    err);
29957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
29967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
29977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
29987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4OSA_NULL != pC->ewc.pEncContext )
29997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
30007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err = pC->ShellAPI.pVideoEncoderGlobalFcts->pFctGetOption(
30017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->ewc.pEncContext, M4ENCODER_kOptionID_EncoderHeader,
30027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                (M4OSA_DataOption) &encHeader);
30037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
30047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if( ( M4NO_ERROR != err) || (M4OSA_NULL == encHeader->pBuf) )
30057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
30067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4OSA_TRACE1_1(
30077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    "M4VSS3GPP_intComputeOutputVideoAndAudioDsi:\
30087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    failed to get the encoder header (err 0x%x)",
30097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    err);
30107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4OSA_TRACE1_2(
30117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    "M4VSS3GPP_intComputeOutputVideoAndAudioDsi: encHeader->pBuf=0x%x, size=0x%x",
30127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    encHeader->pBuf, encHeader->Size);
30137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
30147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            else
30157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
30167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4OSA_TRACE1_0(
30177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    "M4VSS3GPP_intComputeOutputVideoAndAudioDsi:\
30187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    send DSI for H264 stream to 3GP writer");
30197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
30207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                /**
30217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                * Allocate and copy the new DSI */
30227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->ewc.pVideoOutputDsi =
30237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    (M4OSA_MemAddr8)M4OSA_malloc(encHeader->Size, M4VSS3GPP,
30247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    (M4OSA_Char *)"pC->ewc.pVideoOutputDsi (H264)");
30257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
30267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                if( M4OSA_NULL == pC->ewc.pVideoOutputDsi )
30277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                {
30287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    M4OSA_TRACE1_0(
30297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                        "M4VSS3GPP_intComputeOutputVideoAndAudioDsi():\
30307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                        unable to allocate pVideoOutputDsi (H264), returning M4ERR_ALLOC");
30317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    return M4ERR_ALLOC;
30327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                }
30337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->ewc.uiVideoOutputDsiSize = (M4OSA_UInt16)encHeader->Size;
30347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4OSA_memcpy(pC->ewc.pVideoOutputDsi, encHeader->pBuf,
30357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    encHeader->Size);
30367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
30377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
30387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err = M4VSS3GPP_intDestroyVideoEncoder(pC);
30397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
30407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if( M4NO_ERROR != err )
30417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
30427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4OSA_TRACE1_1(
30437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    "M4VSS3GPP_intComputeOutputVideoAndAudioDsi:\
30447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    M4VSS3GPP_intDestroyVideoEncoder returned error 0x%x",
30457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    err);
30467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
30477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
30487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        else
30497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
30507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_0(
30517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_intComputeOutputVideoAndAudioDsi:\
30527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->ewc.pEncContext is NULL, cannot get the DSI");
30537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
30547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
30557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
30567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pStreamForDsi = M4OSA_NULL;
30577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClip = M4OSA_NULL;
30587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
30597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /* Compute Audio DSI */
30607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4SYS_kAudioUnknown != pC->ewc.AudioStreamType )
30617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
30627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( uiMasterClip == 0 )
30637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
30647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /* Clip is already opened */
30657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pStreamForDsi = &(pC->pC1->pAudioStream->m_basicProperties);
30667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
30677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        else
30687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
30697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /**
30707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            * We can use the fast open mode to get the DSI */
30717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err = M4VSS3GPP_intClipInit(&pClip, pC->pOsaFileReadPtr);
30727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
30737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if( M4NO_ERROR != err )
30747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
30757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4OSA_TRACE1_1(
30767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    "M4VSS3GPP_intComputeOutputVideoAndAudioDsi:\
30777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    M4VSS3GPP_intClipInit() returns 0x%x!",
30787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    err);
30797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
30807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                if( pClip != M4OSA_NULL )
30817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                {
30827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    M4VSS3GPP_intClipCleanUp(pClip);
30837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                }
30847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                return err;
30857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
30867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
30877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err = M4VSS3GPP_intClipOpen(pClip, &pC->pClipList[uiMasterClip],
30887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4OSA_FALSE, M4OSA_TRUE, M4OSA_TRUE);
30897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
30907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if( M4NO_ERROR != err )
30917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
30927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4OSA_TRACE1_1(
30937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    "M4VSS3GPP_intComputeOutputVideoAndAudioDsi:\
30947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    M4VSS3GPP_intClipOpen() returns 0x%x!",
30957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    err);
30967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4VSS3GPP_intClipCleanUp(pClip);
30977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                return err;
30987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
30997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
31007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pStreamForDsi = &(pClip->pAudioStream->m_basicProperties);
31017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
31027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
31037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
31047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Allocate and copy the new DSI */
31057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->ewc.pAudioOutputDsi = (M4OSA_MemAddr8)M4OSA_malloc(
31067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pStreamForDsi->m_decoderSpecificInfoSize,
31077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4VSS3GPP, (M4OSA_Char *)"pC->ewc.pAudioOutputDsi");
31087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
31097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4OSA_NULL == pC->ewc.pAudioOutputDsi )
31107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
31117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_0(
31127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_intComputeOutputVideoAndAudioDsi():\
31137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                unable to allocate pAudioOutputDsi, returning M4ERR_ALLOC");
31147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return M4ERR_ALLOC;
31157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
31167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->ewc.uiAudioOutputDsiSize =
31177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (M4OSA_UInt16)pStreamForDsi->m_decoderSpecificInfoSize;
31187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_memcpy(pC->ewc.pAudioOutputDsi,
31197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (M4OSA_MemAddr8)pStreamForDsi->m_pDecoderSpecificInfo,
31207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->ewc.uiAudioOutputDsiSize);
31217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
31227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
31237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * If a clip has been temporarily opened to get its DSI, close it */
31247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4OSA_NULL != pClip )
31257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
31267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err = M4VSS3GPP_intClipCleanUp(pClip);
31277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
31287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if( M4NO_ERROR != err )
31297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
31307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4OSA_TRACE1_1(
31317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    "M4VSS3GPP_intComputeOutputVideoAndAudioDsi:\
31327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    M4VSS3GPP_intClipCleanUp() returns 0x%x!",
31337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    err);
31347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                return err;
31357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
31367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
31377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
31387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
31397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
31407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Return with no error */
31417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_0(
31427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "M4VSS3GPP_intComputeOutputVideoAndAudioDsi(): returning M4NO_ERROR");
31437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return M4NO_ERROR;
31447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
31457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
31467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
31477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
31487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4VSS3GPP_intSwitchToNextClip()
31497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    Switch from the current clip to the next one
31507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param   pC            (IN/OUT) Internal edit context
31517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
31527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
31537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargistatic M4OSA_ERR M4VSS3GPP_intSwitchToNextClip(
31547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VSS3GPP_InternalEditContext *pC )
31557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
31567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_ERR err;
31577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
31587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL != pC->pC1 )
31597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
31607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
31617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Close the current first clip */
31627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = M4VSS3GPP_intClipCleanUp(pC->pC1);
31637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
31647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4NO_ERROR != err )
31657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
31667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1(
31677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_intSwitchToNextClip: M4VSS3GPP_intClipCleanUp(C1) returns 0x%x!",
31687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err);
31697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return err;
31707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
31717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
31727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
31737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        *  increment clip counter */
31747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->uiCurrentClip++;
31757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
31767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
31777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
31787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Check if we reached the last clip */
31797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( pC->uiCurrentClip >= pC->uiClipNumber )
31807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
31817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->pC1 = M4OSA_NULL;
31827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->State = M4VSS3GPP_kEditState_FINISHED;
31837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
31847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_0(
31857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            "M4VSS3GPP_intSwitchToNextClip:\
31867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4VSS3GPP_intClipClose(C1) returns M4VSS3GPP_WAR_EDITING_DONE");
31877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return M4VSS3GPP_WAR_EDITING_DONE;
31887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
31897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
31907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
31917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * If the next clip has already be opened, set it as first clip */
31927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL != pC->pC2 )
31937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
31947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->pC1 = pC->pC2;
31957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->pC2 = M4OSA_NULL;
31967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
31977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
31987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * else open it */
31997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    else
32007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
32017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = M4VSS3GPP_intOpenClip(pC, &pC->pC1,
32027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            &pC->pClipList[pC->uiCurrentClip]);
32037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
32047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4NO_ERROR != err )
32057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
32067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1(
32077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_intSwitchToNextClip: M4VSS3GPP_intOpenClip() returns 0x%x!",
32087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err);
32097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return err;
32107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
32117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
32127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
32137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * If the second clip has not been opened yet,
32147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi          that means that there has been no transition.
32157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * So both output video and audio times are OK.
32167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * So we can set both video2 and audio offsets */
32177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
32187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
32197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Add current video output CTS to the clip video offset */
32207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
32217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        // Decorrelate input and output encoding timestamp to handle encoder prefetch
32227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->pC1->iVoffset += (M4OSA_UInt32)pC->ewc.dInputVidCts;
32237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
32247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Add current audio output CTS to the clip audio offset */
32257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->pC1->iAoffset +=
32267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (M4OSA_UInt32)(pC->ewc.dATo * pC->ewc.scale_audio + 0.5);
32277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
32287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
32297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * 2005-03-24: BugFix for audio-video synchro:
32307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * There may be a portion of the duration of an audio AU of desynchro at each assembly.
32317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * It leads to an audible desynchro when there are a lot of clips assembled.
32327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * This bug fix allows to resynch the audio track when the delta is higher
32337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * than one audio AU duration.
32347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * We Step one AU in the second clip and we change the audio offset accordingly. */
32357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( ( pC->pC1->iAoffset
32367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            - (M4OSA_Int32)(pC->pC1->iVoffset *pC->pC1->scale_audio + 0.5))
32377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        > pC->ewc.iSilenceFrameDuration )
32387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
32397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /**
32407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            * Advance one AMR frame */
32417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err = M4VSS3GPP_intClipReadNextAudioFrame(pC->pC1);
32427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
32437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if( M4OSA_ERR_IS_ERROR(err) )
32447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
32457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4OSA_TRACE1_1(
32467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    "M4VSS3GPP_intSwitchToNextClip:\
32477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    M4VSS3GPP_intClipReadNextAudioFrame returns 0x%x!",
32487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    err);
32497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                return err;
32507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
32517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /**
32527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            * Update audio offset accordingly*/
32537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->pC1->iAoffset -= pC->ewc.iSilenceFrameDuration;
32547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
32557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
32567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
32577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
32587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Init starting state for this clip processing */
32597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4SYS_kMP3 == pC->ewc.AudioStreamType )
32607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
32617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
32627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * In the MP3 case we use a special audio state */
32637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->State = M4VSS3GPP_kEditState_MP3_JUMP;
32647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
32657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    else
32667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
32677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
32687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * We start with the video processing */
32697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->State = M4VSS3GPP_kEditState_VIDEO;
32707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
32717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( pC->Vstate != M4VSS3GPP_kEditVideoState_TRANSITION )
32727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
32737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /* if not a transition then reset previous video state */
32747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->Vstate = M4VSS3GPP_kEditVideoState_READ_WRITE;
32757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
32767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if( pC->bIsMMS == M4OSA_FALSE ) /* RC */
32777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
32787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                /* There may be an encoder to destroy */
32797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err = M4VSS3GPP_intDestroyVideoEncoder(pC);
32807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
32817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                if( M4NO_ERROR != err )
32827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                {
32837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    M4OSA_TRACE1_1(
32847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                        "M4VSS3GPP_intSwitchToNextClip:\
32857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                        M4VSS3GPP_editDestroyVideoEncoder() returns 0x%x!",
32867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                        err);
32877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    return err;
32887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                }
32897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
32907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
32917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
3292bb337b471658b7c2264c6ff1bb613739db851baaSantosh Madhava    /* The flag is set to false at the beginning of every clip */
3293bb337b471658b7c2264c6ff1bb613739db851baaSantosh Madhava    pC->m_bClipExternalHasStarted = M4OSA_FALSE;
32947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
32957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
32967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Return with no error */
32977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_0("M4VSS3GPP_intSwitchToNextClip(): returning M4NO_ERROR");
32987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /* RC: to know when a file has been processed */
32997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return M4VSS3GPP_WAR_SWITCH_CLIP;
33007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
33017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
33027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
33037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
33047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4VSS3GPP_intReachedEndOfVideo()
33057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    Do what to do when the end of a clip video track is reached
33067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note    If there is audio on the current clip, process it, else switch to the next clip
33077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param   pC            (IN/OUT) Internal edit context
33087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
33097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
33107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4VSS3GPP_intReachedEndOfVideo( M4VSS3GPP_InternalEditContext *pC )
33117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
33127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_ERR err;
33137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
33147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
33157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Video is done for this clip, now we do the audio */
33167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4SYS_kAudioUnknown != pC->ewc.AudioStreamType )
33177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
33187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->State = M4VSS3GPP_kEditState_AUDIO;
33197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
33207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    else
33217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
33227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
33237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Clip done, do the next one */
33247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = M4VSS3GPP_intSwitchToNextClip(pC);
33257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
33267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4NO_ERROR != err )
33277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
33287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1(
33297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_intReachedEndOfVideo: M4VSS3GPP_intSwitchToNextClip() returns 0x%x",
33307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err);
33317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return err;
33327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
33337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
33347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
33357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
33367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Return with no error */
33377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_0("M4VSS3GPP_intReachedEndOfVideo(): returning M4NO_ERROR");
33387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return M4NO_ERROR;
33397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
33407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
33417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
33427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
33437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4VSS3GPP_intReachedEndOfAudio()
33447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    Do what to do when the end of a clip audio track is reached
33457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param   pC            (IN/OUT) Internal edit context
33467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
33477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
33487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4VSS3GPP_intReachedEndOfAudio( M4VSS3GPP_InternalEditContext *pC )
33497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
33507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_ERR err;
33517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
33527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
33537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Clip done, do the next one */
33547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    err = M4VSS3GPP_intSwitchToNextClip(pC);
33557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
33567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4NO_ERROR != err )
33577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
33587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_1(
33597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            "M4VSS3GPP_intReachedEndOfAudio: M4VSS3GPP_intSwitchToNextClip() returns 0x%x",
33607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err);
33617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return err;
33627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
33637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
33647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
33657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Start with the video */
33667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4SYS_kVideoUnknown != pC->ewc.VideoStreamType )
33677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
33687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->State = M4VSS3GPP_kEditState_VIDEO;
33697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
33707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
33717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
33727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Return with no error */
33737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_0("M4VSS3GPP_intReachedEndOfAudio(): returning M4NO_ERROR");
33747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return M4NO_ERROR;
33757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
33767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
33777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
33787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
33797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4VSS3GPP_intOpenClip()
33807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    Open next clip
33817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param   pC            (IN/OUT) Internal edit context
33827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
33837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
33847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4VSS3GPP_intOpenClip( M4VSS3GPP_InternalEditContext *pC,
33857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                M4VSS3GPP_ClipContext ** hClip,
33867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                M4VSS3GPP_ClipSettings *pClipSettings )
33877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
33887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_ERR err;
33897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VSS3GPP_ClipContext *pClip; /**< shortcut */
33907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VIDEOEDITING_ClipProperties *pClipProperties;
33917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_Int32 iCts;
33927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32 i;
33937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
33947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE2_1("M4VSS3GPP_intOpenClip: \"%s\"",
33957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        (M4OSA_Char *)pClipSettings->pFile);
33967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
33977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    err = M4VSS3GPP_intClipInit(hClip, pC->pOsaFileReadPtr);
33987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
33997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4NO_ERROR != err )
34007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
34017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_1(
34027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            "M4VSS3GPP_intOpenClip: M4VSS3GPP_intClipInit() returns 0x%x!",
34037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err);
34047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
34057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( *hClip != M4OSA_NULL )
34067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
34077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4VSS3GPP_intClipCleanUp(*hClip);
34087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
34097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return err;
34107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
34117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
34127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
34137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Set shortcut */
34147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClip = *hClip;
34157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
34167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef M4VSS_ENABLE_EXTERNAL_DECODERS
34177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /* replay recorded external decoder registrations on the clip */
34187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
34197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    for ( i = 0; i < M4VD_kVideoType_NB; i++ )
34207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
34217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( pC->registeredExternalDecs[i].registered )
34227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
34237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err = M4VSS3GPP_intClipRegisterExternalVideoDecoder(pClip, i,
34247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->registeredExternalDecs[i].pDecoderInterface,
34257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->registeredExternalDecs[i].pUserData);
34267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
34277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if( M4NO_ERROR != err )
34287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
34297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4OSA_TRACE1_1(
34307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    "M4VSS3GPP_intOpenClip:\
34317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    M4VSS3GPP_intClipRegisterExternalVideoDecoder() returns 0x%x!",
34327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    err);
34337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4VSS3GPP_intClipCleanUp(pClip);
34347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                return err;
34357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
34367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
34377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
34387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
34397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif /* M4VSS_ENABLE_EXTERNAL_DECODERS */
34407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
34417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef M4VSS_SUPPORT_OMX_CODECS
34427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
34437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_1("M4VSS3GPP_intOpenClip: pClip->ShellAPI = 0x%x",
34447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        &pClip->ShellAPI);
34457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    err = M4VSS3GPP_intSubscribeExternalCodecs((M4VSS3GPP_EditContext *)pC,
34467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        (M4OSA_Context) &pClip->ShellAPI);
34477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
34487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4NO_ERROR != err )
34497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
34507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_1(
34517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            "M4VSS3GPP_intOpenClip: M4VSS3GPP_intSubscribeExternalCodecs returned err 0x%x",
34527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err);
34537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
34547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_1(
34557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "M4VSS3GPP_intOpenClip: M4VSS3GPP_intSubscribeExternalCodecs returned 0x%x",
34567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err);
34577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif /* M4VSS_SUPPORT_OMX_CODECS */
34587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
34597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    err = M4VSS3GPP_intClipOpen(pClip, pClipSettings, M4OSA_FALSE, M4OSA_FALSE,
34607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_FALSE);
34617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
34627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4NO_ERROR != err )
34637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
34647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_1(
34657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            "M4VSS3GPP_intOpenClip: M4VSS3GPP_intClipOpen() returns 0x%x!",
34667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err);
34677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4VSS3GPP_intClipCleanUp(pClip);
34687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        *hClip = M4OSA_NULL;
34697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return err;
34707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
34717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
34727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipProperties = &pClip->pSettings->ClipProperties;
34737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
34747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
34757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Copy common 'silence frame stuff' to ClipContext */
34767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClip->uiSilencePcmSize = pC->ewc.uiSilencePcmSize;
34777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClip->pSilenceFrameData = pC->ewc.pSilenceFrameData;
34787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClip->uiSilenceFrameSize = pC->ewc.uiSilenceFrameSize;
34797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClip->iSilenceFrameDuration = pC->ewc.iSilenceFrameDuration;
34807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClip->scale_audio = pC->ewc.scale_audio;
34817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
34827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClip->iAudioFrameCts = -pClip->iSilenceFrameDuration; /* Reset time */
34837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
34847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
34857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * If the audio track is not compatible with the output audio format,
34867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * we remove it. So it will be replaced by silence */
34877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_FALSE == pClipProperties->bAudioIsCompatibleWithMasterClip )
34887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
34897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4VSS3GPP_intClipDeleteAudioTrack(pClip);
34907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
34917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
34927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
34937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Actual begin cut */
34947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( 0 == pClipSettings->uiBeginCutTime )
34957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
34967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pClip->iVoffset = 0;
34977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pClip->iAoffset = 0;
34987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pClip->iActualVideoBeginCut = 0;
34997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pClip->iActualAudioBeginCut = 0;
35007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
35017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    else
35027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
35037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4SYS_kVideoUnknown != pC->ewc.VideoStreamType )
35047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
35057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /**
35067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            * Jump the video to the target begin cut to get the actual begin cut value */
35077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pClip->iActualVideoBeginCut =
35087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                (M4OSA_Int32)pClipSettings->uiBeginCutTime;
35097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            iCts = pClip->iActualVideoBeginCut;
35107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
35117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err = pClip->ShellAPI.m_pReader->m_pFctJump(pClip->pReaderContext,
35127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                (M4_StreamHandler *)pClip->pVideoStream, &iCts);
35137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
35147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if( M4NO_ERROR != err )
35157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
35167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4OSA_TRACE1_1(
35177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    "M4VSS3GPP_intOpenClip: m_pFctJump(V) returns 0x%x!", err);
35187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                return err;
35197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
35207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
35217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /**
35227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            * Update clip offset with the video begin cut */
35237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pClip->iVoffset = -pClip->iActualVideoBeginCut;
35247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
35257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
35267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4SYS_kAudioUnknown != pC->ewc.AudioStreamType )
35277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
35287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /**
35297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            * Jump the audio to the video actual begin cut */
35307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if( M4VIDEOEDITING_kMP3 != pClipProperties->AudioStreamType )
35317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
35327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pClip->iActualAudioBeginCut = pClip->iActualVideoBeginCut;
35337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                iCts = (M4OSA_Int32)(pClip->iActualAudioBeginCut
35347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    * pClip->scale_audio + 0.5);
35357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
35367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err = M4VSS3GPP_intClipJumpAudioAt(pClip, &iCts);
35377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
35387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                if( M4NO_ERROR != err )
35397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                {
35407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    M4OSA_TRACE1_1(
35417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                        "M4VSS3GPP_intOpenClip: M4VSS3GPP_intClipJumpAudioAt(A) returns 0x%x!",
35427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                        err);
35437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    return err;
35447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                }
35457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                /**
35467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                * Update clip offset with the audio begin cut */
35477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pClip->iAoffset = -iCts;
35487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
35497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            else
35507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
35517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                /**
35527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                * For the MP3, the jump is not done because of the VBR,
35537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                  it could be not enough accurate */
35547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pClip->iActualAudioBeginCut =
35557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    (M4OSA_Int32)pClipSettings->uiBeginCutTime;
35567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
35577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
35587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
35597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
35607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4SYS_kVideoUnknown != pC->ewc.VideoStreamType )
35617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
35627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
35637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Read the first Video AU of the clip */
35647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = pClip->ShellAPI.m_pReaderDataIt->m_pFctGetNextAu(
35657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pClip->pReaderContext,
35667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (M4_StreamHandler *)pClip->pVideoStream, &pClip->VideoAU);
35677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
35687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4WAR_NO_MORE_AU == err )
35697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
35707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /**
35717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            * If we (already!) reach the end of the clip, we filter the error.
35727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            * It will be correctly managed at the first step. */
35737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err = M4NO_ERROR;
35747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
35757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        else if( M4NO_ERROR != err )
35767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
35777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1(
35787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_intOpenClip: m_pReaderDataIt->m_pFctGetNextAu() returns 0x%x!",
35797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err);
35807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return err;
35817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
35827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
35837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
35847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * The video is currently in reading mode */
35857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pClip->Vstatus = M4VSS3GPP_kClipStatus_READ;
35867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
35877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
35887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( ( M4SYS_kAudioUnknown != pC->ewc.AudioStreamType)
35897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        && (M4VIDEOEDITING_kMP3 != pClipProperties->AudioStreamType) )
35907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
35917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
35927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Read the first Audio AU of the clip */
35937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = M4VSS3GPP_intClipReadNextAudioFrame(pClip);
35947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
35957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4OSA_ERR_IS_ERROR(err) )
35967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
35977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1(
35987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_intOpenClip: M4VSS3GPP_intClipReadNextAudioFrame returns 0x%x!",
35997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err);
36007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return err;
36017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
36027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
36037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
36047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * The audio is currently in reading mode */
36057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pClip->Astatus = M4VSS3GPP_kClipStatus_READ;
36067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
36077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
36087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
36097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Return with no error */
36107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_0("M4VSS3GPP_intOpenClip(): returning M4NO_ERROR");
36117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return M4NO_ERROR;
36127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
36137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
36147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
36157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
36167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR  M4VSS3GPP_intComputeOutputAverageVideoBitrate()
36177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    Average bitrate of the output file, computed from input bitrates,
36187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *          durations, transitions and cuts.
36197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param   pC    (IN/OUT) Internal edit context
36207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
36217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
36227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargistatic M4OSA_Void M4VSS3GPP_intComputeOutputAverageVideoBitrate(
36237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VSS3GPP_InternalEditContext *pC )
36247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
36257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VSS3GPP_ClipSettings *pCS_0, *pCS_1, *pCS_2;
36267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VSS3GPP_TransitionSettings *pT0, *pT2;
36277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_Int32 i;
36287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
36297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32 t0_duration, t2_duration;
36307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32 t0_bitrate, t2_bitrate;
36317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32 c1_duration;
36327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
36337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32 total_duration;
36347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32 total_bitsum;
36357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
36367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    total_duration = 0;
36377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    total_bitsum = 0;
36387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
36397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /* Loop on the number of clips */
36407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    for ( i = 0; i < pC->uiClipNumber; i++ )
36417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
36427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pCS_1 = &pC->pClipList[i];
36437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
36447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        t0_duration = 0;
36457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        t0_bitrate = pCS_1->ClipProperties.uiVideoBitrate;
36467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        t2_duration = 0;
36477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        t2_bitrate = pCS_1->ClipProperties.uiVideoBitrate;
36487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
36497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /* Transition with the previous clip */
36507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( i > 0 )
36517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
36527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pCS_0 = &pC->pClipList[i - 1];
36537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pT0 = &pC->pTransitionList[i - 1];
36547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
36557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if( pT0->VideoTransitionType
36567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                != M4VSS3GPP_kVideoTransitionType_None )
36577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
36587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                t0_duration = pT0->uiTransitionDuration;
36597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
36607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                if( pCS_0->ClipProperties.uiVideoBitrate > t0_bitrate )
36617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                {
36627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    t0_bitrate = pCS_0->ClipProperties.uiVideoBitrate;
36637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                }
36647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
36657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
36667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
36677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /* Transition with the next clip */
36687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( i < pC->uiClipNumber - 1 )
36697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
36707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pCS_2 = &pC->pClipList[i + 1];
36717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pT2 = &pC->pTransitionList[i];
36727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
36737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if( pT2->VideoTransitionType
36747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                != M4VSS3GPP_kVideoTransitionType_None )
36757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
36767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                t2_duration = pT2->uiTransitionDuration;
36777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
36787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                if( pCS_2->ClipProperties.uiVideoBitrate > t2_bitrate )
36797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                {
36807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    t2_bitrate = pCS_2->ClipProperties.uiVideoBitrate;
36817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                }
36827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
36837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
36847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
36857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /* Check for cut times */
36867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( pCS_1->uiEndCutTime > 0 )
36877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            c1_duration = pCS_1->uiEndCutTime;
36887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        else
36897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            c1_duration = pCS_1->ClipProperties.uiClipVideoDuration;
36907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
36917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( pCS_1->uiBeginCutTime > 0 )
36927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            c1_duration -= pCS_1->uiBeginCutTime;
36937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
36947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        c1_duration -= t0_duration + t2_duration;
36957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
36967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /* Compute bitsum and duration */
36977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        total_duration += c1_duration + t0_duration / 2 + t2_duration / 2;
36987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
36997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        total_bitsum +=
37007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            c1_duration * (pCS_1->ClipProperties.uiVideoBitrate / 1000)
37017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            + (t0_bitrate / 1000) * t0_duration / 2
37027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            + (t2_bitrate / 1000) * t2_duration / 2;
37037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
37047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
37057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->ewc.uiVideoBitrate = ( total_bitsum / total_duration) * 1000;
37067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
37077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
37087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef M4VSS_SUPPORT_OMX_CODECS
37097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
37107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
37117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
37127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4VSS3GPP_editRegisterExternalCodec(M4VSS3GPP_EditContext pContext,
37137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *                                               M4VSS3GPP_codecType   codecType,
37147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *                                               M4OSA_Context pCodecInterface,
37157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *                                               M4OSA_Void* pUserData)
37167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    Registers an external Video/Audio codec with VSS3GPP
37177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note This is much different from the other external codec registration API to cope
37187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *      up with specific requirement of OMX codec implementation.
37197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
37207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param  pContext           (IN) VSS3GPP context
37217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param  codecType        (IN) Type of codec (MPEG4 ...)
37227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param  pCodecInterface  (IN) Codec interface
37237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param  pUserData          (IN) Pointer on a user data to give to external codec
37247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return  M4NO_ERROR:         No error
37257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return  M4ERR_PARAMETER:    At least one parameter is M4OSA_NULL (debug only)
37267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return  M4ERR_STATE:       VSS3GPP is not in an appropriate state for
37277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *                             this function to be called
37287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
37297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
37307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
37317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4VSS3GPP_editRegisterExternalCodec( M4VSS3GPP_EditContext pContext,
37327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                              M4VSS3GPP_codecType codecType,
37337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                              M4OSA_Context pCodecInterface,
37347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                              M4OSA_Void *pUserData )
37357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
37367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VSS3GPP_InternalEditContext *pC =
37377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        (M4VSS3GPP_InternalEditContext *)pContext;
37387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_ERR err = M4NO_ERROR;
37397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
37407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( ( M4OSA_NULL == pContext) || (M4OSA_NULL == pCodecInterface) )
37417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
37427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_2(
37437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            "M4VSS3GPP_editRegisterExternalCodec: NULL input parameter; pContext=0x%x,\
37447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pCodecInterface=0x%x",
37457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pContext, pCodecInterface);
37467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return M4ERR_PARAMETER;
37477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
37487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
37497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( codecType >= M4VSS3GPP_kCodecType_NB )
37507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
37517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_1(
37527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            "M4VSS3GPP_editRegisterExternalCodec: invalid codec Type; codecType=0x%x",
37537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            codecType);
37547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return M4ERR_PARAMETER;
37557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
37567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
37577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->m_codecInterface[codecType] = pCodecInterface;
37587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->pOMXUserData = pUserData;
37597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
37607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_2(
37617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "M4VSS3GPP_editRegisterExternalCodec: pC->m_codecInterface[%d] = 0x%x",
37627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        codecType, pCodecInterface);
37637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_1(
37647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "M4VSS3GPP_editRegisterExternalCodec: pC->pOMXUserDatat = 0x%x",
37657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pUserData);
37667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
37677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return M4NO_ERROR;
37687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
37697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
37707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
37717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
37727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4VSS3GPP_editSubscribeExternalCodecs(M4VSS3GPP_EditContext    pContext)
37737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    Subscribes to previously registered external Video/Audio codec
37747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note This is much different from the other external codec registration API to cope
37757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *       up with specific    requirement of OMX codec implementation.
37767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
37777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param  pContext           (IN) VSS3GPP context
37787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return  M4NO_ERROR:         No error
37797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return  M4ERR_PARAMETER:    At least one parameter is M4OSA_NULL (debug only)
37807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return  M4ERR_STATE:       VSS3GPP is not in an appropriate state for
37817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *                             this function to be called
37827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
37837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
37847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4VSS3GPP_editSubscribeExternalCodecs(
37857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VSS3GPP_EditContext pContext )
37867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
37877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VSS3GPP_InternalEditContext *pC =
37887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        (M4VSS3GPP_InternalEditContext *)pContext;
37897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_ERR err = M4NO_ERROR;
37907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
37917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL == pContext )
37927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
37937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_1(
37947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            "M4VSS3GPP_editSubscribeExternalCodecs: NULL input parameter; pContext=0x%x",
37957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pContext);
37967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return M4ERR_PARAMETER;
37977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
37987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
37997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_1(
38007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "M4VSS3GPP_editSubscribeExternalCodecs: &pC->ShellAPI = 0x%x",
38017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        &pC->ShellAPI);
38027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    err = M4VSS3GPP_intSubscribeExternalCodecs(pContext,
38037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        (M4OSA_Context) &pC->ShellAPI);
38047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_1(
38057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "M4VSS3GPP_editSubscribeExternalCodecs:\
38067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4VSS3GPP_intSubscribeExternalCodecs returns 0x%x",
38077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err);
38087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return err;
38097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
38107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
38117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
38127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
38137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4VSS3GPP_intSubscribeExternalCodecs(M4VSS3GPP_EditContext    pContext,
38147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *                                                 M4OSA_Context pShellCtxt)
38157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    Subscribes to previously registered external Video/Audio codec
38167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note This is much different from the other external codec registration API to cope
38177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *       up with specific requirement of OMX codec implementation.
38187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
38197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param  pContext           (IN) VSS3GPP context
38207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pShellContext    (IN) Media Codec shell context
38217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return  M4NO_ERROR:         No error
38227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return  M4ERR_PARAMETER:    At least one parameter is M4OSA_NULL (debug only)
38237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return  M4ERR_STATE:       VSS3GPP is not in an appropriate state for
38247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *                             this function to be called
38257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
38267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
38277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4VSS3GPP_intSubscribeExternalCodecs( M4VSS3GPP_EditContext pContext,
38287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                               M4OSA_Context pShellCtxt )
38297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
38307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VSS3GPP_InternalEditContext *pC =
38317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        (M4VSS3GPP_InternalEditContext *)pContext;
38327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VSS3GPP_MediaAndCodecCtxt *pShellContext =
38337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        (M4VSS3GPP_MediaAndCodecCtxt *)pShellCtxt;
38347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_ERR err = M4NO_ERROR;
38357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
38367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( ( M4OSA_NULL == pContext) || (M4OSA_NULL == pShellContext) )
38377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
38387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_2(
38397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            "M4VSS3GPP_intSubscribeExternalCodecs: NULL input parameter; pContext=0x%x,\
38407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pShellContext=0x%x",
38417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pContext, pShellContext);
38427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return M4ERR_PARAMETER;
38437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
38447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
38457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_1("M4VSS3GPP_intSubscribeExternalCodecs: pShellContext=0x%x",
38467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pShellContext);
38477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
38487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef M4VSS_SUPPORT_VIDEC_3GP
38497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
38507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL != pC->m_codecInterface[M4VSS3GPP_kVideoDecMPEG4] )
38517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
38527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = M4VSS3GPP_registerVideoDecoder(pShellContext,
38537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4DECODER_kVideoTypeMPEG4, (M4DECODER_VideoInterface
38547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            *)pC->m_codecInterface[M4VSS3GPP_kVideoDecMPEG4]);
38557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
38567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4NO_ERROR != err )
38577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
38587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1(
38597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_intSubscribeExternalCodecs:\
38607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4VSS3GPP_registerVideoDecoder(Mpeg4) returned err 0x%x",
38617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err);
38627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return err;
38637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
38647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /** Provide the application user data back to the interface functions. **
38657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        **/
38667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pShellContext->m_pVideoDecoderUserDataTable[M4DECODER_kVideoTypeMPEG4] =
38677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->pOMXUserData;
38687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE3_1(
38697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            "M4VSS3GPP_intSubscribeExternalCodecs:\
38707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi             M4VSS3GPP_registerVideoDecoder(Mpeg4) OK: 0x%x",
38717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (M4DECODER_VideoInterface
38727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            *)pC->m_codecInterface[M4VSS3GPP_kVideoDecMPEG4]);
38737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
38747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
38757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif /* M4VSS_SUPPORT_VIDEC_3GP */
38767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
38777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef M4VSS_SUPPORT_VIDEO_AVC
38787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
38797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL != pC->m_codecInterface[M4VSS3GPP_kVideoDecH264] )
38807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
38817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = M4VSS3GPP_registerVideoDecoder(pShellContext,
38827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4DECODER_kVideoTypeAVC, (M4DECODER_VideoInterface
38837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            *)pC->m_codecInterface[M4VSS3GPP_kVideoDecH264]);
38847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
38857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4NO_ERROR != err )
38867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
38877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1(
38887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_intSubscribeExternalCodecs:\
38897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4VSS3GPP_registerVideoDecoder(AVC) returned err 0x%x",
38907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err);
38917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return err;
38927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
38937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /** Provide the application user data back to the interface functions. **
38947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        **/
38957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pShellContext->m_pVideoDecoderUserDataTable[M4DECODER_kVideoTypeAVC] =
38967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->pOMXUserData;
38977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE3_1(
38987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            "M4VSS3GPP_intSubscribeExternalCodecs: M4VSS3GPP_registerVideoDecoder(H264) OK: 0x%x",
38997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (M4DECODER_VideoInterface
39007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            *)pC->m_codecInterface[M4VSS3GPP_kVideoDecH264]);
39017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
39027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
39037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif /* M4VSS_SUPPORT_VIDEO_AVC*/
39047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
39057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef M4VSS_SUPPORT_ENCODER_MPEG4
39067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
39077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL != pC->m_codecInterface[M4VSS3GPP_kVideoEncMPEG4] )
39087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
39097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = M4VSS3GPP_registerVideoEncoder(pShellContext, M4ENCODER_kMPEG4,
39107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (M4ENCODER_GlobalInterface
39117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            *)pC->m_codecInterface[M4VSS3GPP_kVideoEncMPEG4]);
39127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
39137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4NO_ERROR != err )
39147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
39157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1(
39167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_intSubscribeExternalCodecs:\
39177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4VSS3GPP_registerVideoEncoder(Mpeg4) returned err 0x%x",
39187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err);
39197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return err;
39207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
39217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /** Provide the application user data back to the interface functions. **
39227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        **/
39237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pShellContext->pVideoEncoderUserDataTable[M4ENCODER_kMPEG4] =
39247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->pOMXUserData;
39257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pShellContext->pVideoEncoderExternalAPITable[M4ENCODER_kMPEG4] =
39267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->m_codecInterface[M4VSS3GPP_kVideoEncMPEG4];
39277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE3_1(
39287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            "M4VSS3GPP_intSubscribeExternalCodecs:\
39297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4VSS3GPP_registerVideoEncoder(Mpeg4) OK: 0x%x",
39307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (M4ENCODER_GlobalInterface
39317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            *)pC->m_codecInterface[M4VSS3GPP_kVideoEncMPEG4]);
39327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
39337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
39347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL != pC->m_codecInterface[M4VSS3GPP_kVideoEncH263] )
39357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
39367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = M4VSS3GPP_registerVideoEncoder(pShellContext, M4ENCODER_kH263,
39377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (M4ENCODER_GlobalInterface
39387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            *)pC->m_codecInterface[M4VSS3GPP_kVideoEncH263]);
39397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
39407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4NO_ERROR != err )
39417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
39427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1(
39437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_intSubscribeExternalCodecs:\
39447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4VSS3GPP_registerVideoEncoder(H263) returned err 0x%x",
39457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err);
39467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return err;
39477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
39487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /** Provide the application user data back to the interface functions. **
39497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        **/
39507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pShellContext->pVideoEncoderUserDataTable[M4ENCODER_kH263] =
39517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->pOMXUserData;
39527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pShellContext->pVideoEncoderExternalAPITable[M4ENCODER_kH263] =
39537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->m_codecInterface[M4VSS3GPP_kVideoEncH263];
39547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE3_1(
39557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            "M4VSS3GPP_intSubscribeExternalCodecs: M4VSS3GPP_registerVideoEncoder(H263) OK: 0x%x",
39567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (M4ENCODER_GlobalInterface
39577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            *)pC->m_codecInterface[M4VSS3GPP_kVideoEncH263]);
39587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
39597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
39607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif /* M4VSS_SUPPORT_ENCODER_MPEG4 */
39617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
39627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef M4VSS_SUPPORT_ENCODER_AVC
39637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
39647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL != pC->m_codecInterface[M4VSS3GPP_kVideoEncH264] )
39657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
39667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = M4VSS3GPP_registerVideoEncoder(pShellContext, M4ENCODER_kH264,
39677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (M4ENCODER_GlobalInterface
39687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            *)pC->m_codecInterface[M4VSS3GPP_kVideoEncH264]);
39697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
39707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4NO_ERROR != err )
39717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
39727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1(
39737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_intSubscribeExternalCodecs:\
39747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4VSS3GPP_registerVideoEncoder(H264) returned err 0x%x",
39757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err);
39767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return err;
39777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
39787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /** Provide the application user data back to the interface functions. **
39797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        **/
39807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pShellContext->pVideoEncoderUserDataTable[M4ENCODER_kH264] =
39817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->pOMXUserData;
39827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pShellContext->pVideoEncoderExternalAPITable[M4ENCODER_kH264] =
39837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->m_codecInterface[M4VSS3GPP_kVideoEncH264];
39847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE3_1(
39857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            "M4VSS3GPP_intSubscribeExternalCodecs: M4VSS3GPP_registerVideoEncoder(H264) OK: 0x%x",
39867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (M4ENCODER_GlobalInterface
39877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            *)pC->m_codecInterface[M4VSS3GPP_kVideoEncH264]);
39887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
39897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
39907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif /* M4VSS_SUPPORT_ENCODER_AVC */
39917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
39927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef M4VSS_SUPPORT_AUDEC_AAC
39937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
39947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL != pC->m_codecInterface[M4VSS3GPP_kAudioDecAAC] )
39957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
39967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = M4VSS3GPP_registerAudioDecoder(pShellContext, M4AD_kTypeAAC,
39977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (M4AD_Interface *)pC->m_codecInterface[M4VSS3GPP_kAudioDecAAC]);
39987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
39997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4NO_ERROR != err )
40007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
40017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1(
40027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_intSubscribeExternalCodecs:\
40037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4VSS3GPP_registerAudioDecoder(AAC) returned err 0x%x",
40047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err);
40057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return err;
40067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
40077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pShellContext->pAudioDecoderUserDataTable[M4AD_kTypeAAC] =
40087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->pOMXUserData;
40097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE3_1(
40107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            "M4VSS3GPP_intSubscribeExternalCodecs: M4VSS3GPP_registerAudioDecoder(AAC) OK: 0x%x",
40117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (M4AD_Interface *)pC->m_codecInterface[M4VSS3GPP_kAudioDecAAC]);
40127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
40137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
40147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif /* M4VSS_SUPPORT_AUDEC_AAC*/
40157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
40167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef M4VSS_SUPPORT_AUDEC_AMRNB
40177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
40187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL != pC->m_codecInterface[M4VSS3GPP_kAudioDecAMRNB] )
40197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
40207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = M4VSS3GPP_registerAudioDecoder(pShellContext, M4AD_kTypeAMRNB,
40217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (M4AD_Interface
40227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            *)pC->m_codecInterface[M4VSS3GPP_kAudioDecAMRNB]);
40237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
40247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4NO_ERROR != err )
40257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
40267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1(
40277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_intSubscribeExternalCodecs:\
40287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4VSS3GPP_registerAudioDecoder(AMRNB) returned err 0x%x",
40297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err);
40307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return err;
40317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
40327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pShellContext->pAudioDecoderUserDataTable[M4AD_kTypeAMRNB] =
40337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->pOMXUserData;
40347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE3_1(
40357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            "M4VSS3GPP_intSubscribeExternalCodecs:\
40367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4VSS3GPP_registerAudioDecoder(AMRNB) OK: 0x%x",
40377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (M4AD_Interface *)pC->m_codecInterface[M4VSS3GPP_kAudioDecAMRNB]);
40387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
40397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
40407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif /* M4VSS_SUPPORT_AUDEC_AMRNB*/
40417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
40427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef M4VSS_SUPPORT_AUDEC_MP3
40437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
40447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL != pC->m_codecInterface[M4VSS3GPP_kAudioDecMP3] )
40457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
40467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = M4VSS3GPP_registerAudioDecoder(pShellContext, M4AD_kTypeMP3,
40477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (M4AD_Interface *)pC->m_codecInterface[M4VSS3GPP_kAudioDecMP3]);
40487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
40497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4NO_ERROR != err )
40507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
40517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1(
40527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_intSubscribeExternalCodecs:\
40537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4VSS3GPP_registerAudioDecoder(MP3) returned err 0x%x",
40547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err);
40557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return err;
40567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
40577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pShellContext->pAudioDecoderUserDataTable[M4AD_kTypeMP3] =
40587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->pOMXUserData;
40597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE3_1(
40607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            "M4VSS3GPP_intSubscribeExternalCodecs: M4VSS3GPP_registerAudioDecoder(MP3) OK: 0x%x",
40617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (M4AD_Interface *)pC->m_codecInterface[M4VSS3GPP_kAudioDecMP3]);
40627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
40637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
40647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif /* M4VSS_SUPPORT_AUDEC_MP3*/
40657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
40667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef M4VSS_SUPPORT_ENCODER_AAC
40677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
40687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL != pC->m_codecInterface[M4VSS3GPP_kAudioEncAAC] )
40697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
40707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = M4VSS3GPP_registerAudioEncoder(pShellContext, M4ENCODER_kAAC,
40717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (M4ENCODER_AudioGlobalInterface
40727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            *)pC->m_codecInterface[M4VSS3GPP_kAudioEncAAC]);
40737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
40747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4NO_ERROR != err )
40757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
40767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1(
40777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_intSubscribeExternalCodecs:\
40787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4VSS3GPP_registerAudioEncoder(AAC) returned err 0x%x",
40797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err);
40807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return err;
40817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
40827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pShellContext->pAudioEncoderUserDataTable[M4ENCODER_kAAC] =
40837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->pOMXUserData;
40847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE3_1(
40857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            "M4VSS3GPP_intSubscribeExternalCodecs: M4VSS3GPP_registerAudioEncoder(AAC) OK: 0x%x",
40867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (M4ENCODER_AudioGlobalInterface
40877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            *)pC->m_codecInterface[M4VSS3GPP_kAudioEncAAC]);
40887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
40897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
40907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif /* M4VSS_SUPPORT_ENCODER_AAC*/
40917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
40927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef M4VSS_SUPPORT_ENCODER_AMR
40937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
40947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL != pC->m_codecInterface[M4VSS3GPP_kAudioEncAMRNB] )
40957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
40967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = M4VSS3GPP_registerAudioEncoder(pShellContext, M4ENCODER_kAMRNB,
40977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (M4ENCODER_AudioGlobalInterface
40987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            *)pC->m_codecInterface[M4VSS3GPP_kAudioEncAMRNB]);
40997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
41007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4NO_ERROR != err )
41017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
41027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1(
41037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_intSubscribeExternalCodecs:\
41047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4VSS3GPP_registerAudioEncoder(AMRNB) returned err 0x%x",
41057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err);
41067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return err;
41077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
41087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pShellContext->pAudioEncoderUserDataTable[M4ENCODER_kAMRNB] =
41097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->pOMXUserData;
41107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE3_1(
41117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            "M4VSS3GPP_intSubscribeExternalCodecs:\
41127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4VSS3GPP_registerAudioEncoder(AMRNB) OK: 0x%x",
41137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (M4ENCODER_AudioGlobalInterface
41147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            *)pC->m_codecInterface[M4VSS3GPP_kAudioEncAMRNB]);
41157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
41167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
41177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif /* M4VSS_SUPPORT_ENCODER_AMR*/
41187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
41197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL != pC->pOMXUserData )
41207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
41217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /* If external OMX codecs are already registered with VSS3GPP internal context
41227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * and are being subscribed by application, *
41237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * then set boolean to prevent unregistration of external codec interfaces. *
41247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * This is to prevent external codec interfaces from being reset
41257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi          during VSS3GPP step function. *
41267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * External OMX codecs are registered only once by application.
41277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi          So pointers should remain valid*
41287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * throughout life cycle of the application */
41297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
41307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pShellContext->bAllowFreeingOMXCodecInterface = M4OSA_FALSE;
41317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
41327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
41337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return M4NO_ERROR;
41347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
41357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif /* M4VSS_SUPPORT_OMX_CODECS */
4136