10c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/*
20c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Copyright (C) 2011 The Android Open Source Project
30c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *
40c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Licensed under the Apache License, Version 2.0 (the "License");
50c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * you may not use this file except in compliance with the License.
60c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * You may obtain a copy of the License at
70c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *
80c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *      http://www.apache.org/licenses/LICENSE-2.0
90c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *
100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Unless required by applicable law or agreed to in writing, software
110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * distributed under the License is distributed on an "AS IS" BASIS,
120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * See the License for the specific language governing permissions and
140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * limitations under the License.
150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */
160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/**
170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ******************************************************************************
180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @file    M4VSS3GPP_Edit.c
190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief    Video Studio Service 3GPP edit API implementation.
200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @note
210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ******************************************************************************
220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */
230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/****************/
250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/*** Includes ***/
260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/****************/
270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#include "NXPSW_CompilerSwitches.h"
290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/**
300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Our headers */
310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#include "M4VSS3GPP_API.h"
320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#include "M4VSS3GPP_InternalTypes.h"
330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#include "M4VSS3GPP_InternalFunctions.h"
340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#include "M4VSS3GPP_InternalConfig.h"
350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#include "M4VSS3GPP_ErrorCodes.h"
360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/**
390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * OSAL headers */
400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#include "M4OSA_Memory.h"   /**< OSAL memory management */
410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#include "M4OSA_Debug.h"    /**< OSAL debug management */
420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#include "M4OSA_CharStar.h" /**< OSAL string management */
430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#ifdef WIN32
450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#include "string.h"         /**< for strcpy (Don't want to get dependencies
460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                                 with M4OSA_String...) */
470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#endif                      /* WIN32 */
4939beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury#ifdef M4VSS_ENABLE_EXTERNAL_DECODERS
5039beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury#include "M4VD_EXTERNAL_Interface.h"
5139beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury#endif
520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/************************************************************************/
540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/* Static local functions                                               */
550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/************************************************************************/
560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4OSA_ERR M4VSS3GPP_intClipSettingsSanityCheck(
570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4VSS3GPP_ClipSettings *pClip );
580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4OSA_ERR M4VSS3GPP_intTransitionSettingsSanityCheck(
590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4VSS3GPP_TransitionSettings *pTransition );
600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4OSA_Void M4VSS3GPP_intFreeSettingsList(
610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4VSS3GPP_InternalEditContext *pC );
620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4OSA_ERR
630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4VSS3GPP_intCreateMP3OutputFile( M4VSS3GPP_InternalEditContext *pC,
640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                                 M4OSA_Void *pOutputFile );
650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4OSA_ERR M4VSS3GPP_intSwitchToNextClip(
660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4VSS3GPP_InternalEditContext *pC );
670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4OSA_ERR
680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4VSS3GPP_intComputeOutputVideoAndAudioDsi( M4VSS3GPP_InternalEditContext *pC,
690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                                           M4OSA_UInt8 uiMasterClip );
700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4OSA_Void M4VSS3GPP_intComputeOutputAverageVideoBitrate(
710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4VSS3GPP_InternalEditContext *pC );
720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/**
740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ******************************************************************************
750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_ERR M4VSS3GPP_GetVersion()
760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief    Get the VSS 3GPP version.
770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @note    Can be called anytime. Do not need any context.
780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param    pVersionInfo        (OUT) Pointer to a version info structure
790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return    M4NO_ERROR:            No error
800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return    M4ERR_PARAMETER:    pVersionInfo is M4OSA_NULL (If Debug Level >= 2)
810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ******************************************************************************
820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */
830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR M4VSS3GPP_GetVersion( M4_VersionInfo *pVersionInfo )
840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{
850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_TRACE3_1("M4VSS3GPP_GetVersion called with pVersionInfo=0x%x",
860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pVersionInfo);
870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    *    Check input parameters */
900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_DEBUG_IF2((M4OSA_NULL == pVersionInfo), M4ERR_PARAMETER,
910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        "M4VSS3GPP_GetVersion: pVersionInfo is M4OSA_NULL");
920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pVersionInfo->m_major = M4VSS_VERSION_MAJOR;
940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pVersionInfo->m_minor = M4VSS_VERSION_MINOR;
950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pVersionInfo->m_revision = M4VSS_VERSION_REVISION;
960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    return M4NO_ERROR;
980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi}
990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
1000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/**
1010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ******************************************************************************
1020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_ERR M4VSS3GPP_editInit()
1030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief    Initializes the VSS 3GPP edit operation (allocates an execution context).
1040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @note
1050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param    pContext            (OUT) Pointer on the VSS 3GPP edit context to allocate
1060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param    pFileReadPtrFct        (IN) Pointer to OSAL file reader functions
1070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param   pFileWritePtrFct    (IN) Pointer to OSAL file writer functions
1080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return    M4NO_ERROR:            No error
1090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return    M4ERR_PARAMETER:    At least one parameter is M4OSA_NULL
1100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return    M4ERR_ALLOC:        There is no more available memory
1110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ******************************************************************************
1120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */
1130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR M4VSS3GPP_editInit( M4VSS3GPP_EditContext *pContext,
1140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                             M4OSA_FileReadPointer *pFileReadPtrFct,
1150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                             M4OSA_FileWriterPointer *pFileWritePtrFct )
1160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{
1170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4VSS3GPP_InternalEditContext *pC;
1180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_ERR err;
1190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_UInt32 i;
1200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
1210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_TRACE3_3(
1220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        "M4VSS3GPP_editInit called with pContext=0x%x, \
1230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pFileReadPtrFct=0x%x, pFileWritePtrFct=0x%x",
1240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pContext, pFileReadPtrFct, pFileWritePtrFct);
1250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
1260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
1270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Check input parameters */
1280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_DEBUG_IF2((M4OSA_NULL == pContext), M4ERR_PARAMETER,
1290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        "M4VSS3GPP_editInit: pContext is M4OSA_NULL");
1300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_DEBUG_IF2((M4OSA_NULL == pFileReadPtrFct), M4ERR_PARAMETER,
1310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        "M4VSS3GPP_editInit: pFileReadPtrFct is M4OSA_NULL");
1320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_DEBUG_IF2((M4OSA_NULL == pFileWritePtrFct), M4ERR_PARAMETER,
1330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        "M4VSS3GPP_editInit: pFileWritePtrFct is M4OSA_NULL");
1340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
1350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
1360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Allocate the VSS context and return it to the user */
1370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pC = (M4VSS3GPP_InternalEditContext
1382ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu        *)M4OSA_32bitAlignedMalloc(sizeof(M4VSS3GPP_InternalEditContext),
1390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        M4VSS3GPP, (M4OSA_Char *)"M4VSS3GPP_InternalContext");
1400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    *pContext = pC;
1410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /* Inialization of context Variables */
1429d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu    memset((void *)pC, 0,sizeof(M4VSS3GPP_InternalEditContext));
1430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
1440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( M4OSA_NULL == pC )
1450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
1460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        M4OSA_TRACE1_0(
1470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            "M4VSS3GPP_editInit(): unable to allocate M4VSS3GPP_InternalContext,\
1480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            returning M4ERR_ALLOC");
1490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        return M4ERR_ALLOC;
1500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
1510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
1520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
1530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /* Init the context. */
15439beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury    pC->uiClipNumber = 0;
1550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pC->pClipList = M4OSA_NULL;
1560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pC->pTransitionList = M4OSA_NULL;
1570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pC->pEffectsList = M4OSA_NULL;
1580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pC->pActiveEffectsList = M4OSA_NULL;
1590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pC->pActiveEffectsList1 = M4OSA_NULL;
160711849272b603a88f751c1758b51a1dfbec315dfHong Teng    pC->bClip1ActiveFramingEffect = M4OSA_FALSE;
161711849272b603a88f751c1758b51a1dfbec315dfHong Teng    pC->bClip2ActiveFramingEffect = M4OSA_FALSE;
16239beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury    pC->uiCurrentClip = 0;
1630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pC->pC1 = M4OSA_NULL;
1640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pC->pC2 = M4OSA_NULL;
1650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pC->yuv1[0].pac_data = pC->yuv1[1].pac_data = pC->
1660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        yuv1[2].pac_data = M4OSA_NULL;
1670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pC->yuv2[0].pac_data = pC->yuv2[1].pac_data = pC->
1680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        yuv2[2].pac_data = M4OSA_NULL;
1690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pC->yuv3[0].pac_data = pC->yuv3[1].pac_data = pC->
1700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        yuv3[2].pac_data = M4OSA_NULL;
1710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pC->yuv4[0].pac_data = pC->yuv4[1].pac_data = pC->
1720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        yuv4[2].pac_data = M4OSA_NULL;
1730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pC->bClip1AtBeginCut = M4OSA_FALSE;
17439beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury    pC->iClip1ActiveEffect = 0;
17539beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury    pC->iClip2ActiveEffect = 0;
1760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pC->bTransitionEffect = M4OSA_FALSE;
1770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pC->bSupportSilence = M4OSA_FALSE;
1780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
1790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
1800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Init PC->ewc members */
1810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    // Decorrelate input and output encoding timestamp to handle encoder prefetch
18239beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury    pC->ewc.dInputVidCts  = 0.0;
18339beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury    pC->ewc.dOutputVidCts = 0.0;
18439beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury    pC->ewc.dATo = 0.0;
18539beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury    pC->ewc.iOutputDuration = 0;
1860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pC->ewc.VideoStreamType = M4SYS_kVideoUnknown;
18739beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury    pC->ewc.uiVideoBitrate = 0;
18839beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury    pC->ewc.uiVideoWidth = 0;
18939beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury    pC->ewc.uiVideoHeight = 0;
19039beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury    pC->ewc.uiVideoTimeScale = 0;
1910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pC->ewc.bVideoDataPartitioning = M4OSA_FALSE;
1920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pC->ewc.pVideoOutputDsi = M4OSA_NULL;
19339beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury    pC->ewc.uiVideoOutputDsiSize = 0;
1940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pC->ewc.AudioStreamType = M4SYS_kAudioUnknown;
1950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pC->ewc.uiNbChannels = 1;
19639beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury    pC->ewc.uiAudioBitrate = 0;
19739beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury    pC->ewc.uiSamplingFrequency = 0;
1980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pC->ewc.pAudioOutputDsi = M4OSA_NULL;
19939beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury    pC->ewc.uiAudioOutputDsiSize = 0;
2000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pC->ewc.pAudioEncCtxt = M4OSA_NULL;
20139beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury    pC->ewc.pAudioEncDSI.infoSize = 0;
2020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pC->ewc.pAudioEncDSI.pInfo = M4OSA_NULL;
20339beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury    pC->ewc.uiSilencePcmSize = 0;
2040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pC->ewc.pSilenceFrameData = M4OSA_NULL;
20539beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury    pC->ewc.uiSilenceFrameSize = 0;
20639beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury    pC->ewc.iSilenceFrameDuration = 0;
20739beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury    pC->ewc.scale_audio = 0.0;
2080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pC->ewc.pEncContext = M4OSA_NULL;
2090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pC->ewc.pDummyAuBuffer = M4OSA_NULL;
21039beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury    pC->ewc.iMpeg4GovOffset = 0;
21139beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury    pC->ewc.VppError = 0;
2120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pC->ewc.encoderState = M4VSS3GPP_kNoEncoder;
2130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pC->ewc.p3gpWriterContext = M4OSA_NULL;
21439beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury    pC->ewc.uiVideoMaxAuSize = 0;
21539beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury    pC->ewc.uiAudioMaxAuSize = 0;
2160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
2170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Keep the OSAL file functions pointer set in our context */
2180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pC->pOsaFileReadPtr = pFileReadPtrFct;
2190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pC->pOsaFileWritPtr = pFileWritePtrFct;
2200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
2210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /*
2220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Reset pointers for media and codecs interfaces */
2230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
2240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    err = M4VSS3GPP_clearInterfaceTables(&pC->ShellAPI);
2250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4ERR_CHECK_RETURN(err);
2260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
2270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /*
2280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    *  Call the media and codecs subscription module */
2290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    err = M4VSS3GPP_subscribeMediaAndCodec(&pC->ShellAPI);
2300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4ERR_CHECK_RETURN(err);
2310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
2320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
2330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Update main state automaton */
2340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pC->State = M4VSS3GPP_kEditState_CREATED;
2350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pC->Vstate = M4VSS3GPP_kEditVideoState_READ_WRITE;
2360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pC->Astate = M4VSS3GPP_kEditAudioState_READ_WRITE;
237ec6d65f6c23188ee0b3187a4ba664c51987816ddSantosh Madhava    /* The flag is set to false at the beginning of every clip */
238ec6d65f6c23188ee0b3187a4ba664c51987816ddSantosh Madhava    pC->m_bClipExternalHasStarted = M4OSA_FALSE;
2390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
2400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pC->bIsMMS = M4OSA_FALSE;
2410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
242ec04d4508eab02e0bd419cc21e9072c0caa8088cDanny Fernandes    pC->iInOutTimeOffset = 0;
24312e6559a6995ccfce0df1aabfd741440f05a4dd9Danny Fernandes    pC->bEncodeTillEoF = M4OSA_FALSE;
24439beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury    pC->nbActiveEffects = 0;
24539beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury    pC->nbActiveEffects1 = 0;
24639beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury    pC->bIssecondClip = M4OSA_FALSE;
24739beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury    pC->m_air_context = M4OSA_NULL;
2480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
2490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Return with no error */
2500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_TRACE3_0("M4VSS3GPP_editInit(): returning M4NO_ERROR");
2510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    return M4NO_ERROR;
2520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi}
2530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
2540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/**
2550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ******************************************************************************
2560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_ERR M4VSS3GPP_editCreateClipSettings()
2570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief    Allows filling a clip settings structure with default values
2580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *
2590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @note    WARNING: pClipSettings->Effects[ ] will be allocated in this function.
2600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *                   pClipSettings->pFile      will be allocated in this function.
2610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *
2620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param    pClipSettings        (IN) Pointer to a valid M4VSS3GPP_ClipSettings structure
2630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param   pFile               (IN) Clip file name
2640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param   filePathSize        (IN) Clip path size (needed for UTF 16 conversion)
2650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param    nbEffects           (IN) Nb of effect settings to allocate
2660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return    M4NO_ERROR:            No error
2670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return    M4ERR_PARAMETER:    pClipSettings is M4OSA_NULL (debug only)
2680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ******************************************************************************
2690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */
2700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR
2710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4VSS3GPP_editCreateClipSettings( M4VSS3GPP_ClipSettings *pClipSettings,
2720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                                 M4OSA_Void *pFile, M4OSA_UInt32 filePathSize,
2730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                                 M4OSA_UInt8 nbEffects )
2740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{
2750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_UInt8 uiFx;
2760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
2770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_TRACE3_1(
2780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        "M4VSS3GPP_editCreateClipSettings called with pClipSettings=0x%p",
2790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pClipSettings);
2800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
2810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
2820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    *    Check input parameter */
2830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_DEBUG_IF2((M4OSA_NULL == pClipSettings), M4ERR_PARAMETER,
2840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        "M4VSS3GPP_editCreateClipSettings: pClipSettings is NULL");
2850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
2860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
2870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Set the clip settings to default */
2880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pClipSettings->pFile = M4OSA_NULL;        /**< no file */
2890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pClipSettings->FileType =
2900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        M4VIDEOEDITING_kFileType_Unsupported; /**< undefined */
2910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
2920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( M4OSA_NULL != pFile )
2930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
2942ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu        //pClipSettings->pFile = (M4OSA_Char*) M4OSA_32bitAlignedMalloc(strlen(pFile)+1, M4VSS3GPP,
2950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        // "pClipSettings->pFile");
2960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /*FB: add clip path size because of utf 16 conversion*/
2970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pClipSettings->pFile =
2982ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu            (M4OSA_Void *)M4OSA_32bitAlignedMalloc(filePathSize + 1, M4VSS3GPP,
2990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            (M4OSA_Char *)"pClipSettings->pFile");
3000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
3010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        if( M4OSA_NULL == pClipSettings->pFile )
3020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
3030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            M4OSA_TRACE1_0(
3040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                "M4VSS3GPP_editCreateClipSettings : ERROR allocating filename");
3050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            return M4ERR_ALLOC;
3060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
3079d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu        //memcpy(pClipSettings->pFile, pFile, strlen(pFile)+1);
3080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /*FB: add clip path size because of utf 16 conversion*/
3099d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu        memcpy((void *)pClipSettings->pFile, (void *)pFile, filePathSize + 1);
3100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
3110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
3120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /*FB: add file path size to support UTF16 conversion*/
3130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pClipSettings->filePathSize = filePathSize + 1;
3140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**/
3150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pClipSettings->ClipProperties.bAnalysed = M4OSA_FALSE;
3160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pClipSettings->ClipProperties.FileType = 0;
3170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pClipSettings->ClipProperties.Version[0] = 0;
3180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pClipSettings->ClipProperties.Version[1] = 0;
3190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pClipSettings->ClipProperties.Version[2] = 0;
3200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pClipSettings->ClipProperties.uiClipDuration = 0;
3210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
3220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pClipSettings->uiBeginCutTime = 0; /**< no begin cut */
3230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pClipSettings->uiEndCutTime = 0;   /**< no end cut */
32439beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury    pClipSettings->ClipProperties.bSetImageData = M4OSA_FALSE;
3250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
3260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
3270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Reset video characteristics */
3280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pClipSettings->ClipProperties.VideoStreamType = M4VIDEOEDITING_kNoneVideo;
3290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pClipSettings->ClipProperties.uiClipVideoDuration = 0;
3300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pClipSettings->ClipProperties.uiVideoBitrate = 0;
3310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pClipSettings->ClipProperties.uiVideoMaxAuSize = 0;
3320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pClipSettings->ClipProperties.uiVideoWidth = 0;
3330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pClipSettings->ClipProperties.uiVideoHeight = 0;
3340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pClipSettings->ClipProperties.uiVideoTimeScale = 0;
3350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pClipSettings->ClipProperties.fAverageFrameRate = 0.0;
336803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury    pClipSettings->ClipProperties.uiVideoProfile =
337803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury        M4VIDEOEDITING_VIDEO_UNKNOWN_PROFILE;
338803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury    pClipSettings->ClipProperties.uiVideoLevel =
339803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury        M4VIDEOEDITING_VIDEO_UNKNOWN_LEVEL;
3400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pClipSettings->ClipProperties.bMPEG4dataPartition = M4OSA_FALSE;
3410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pClipSettings->ClipProperties.bMPEG4rvlc = M4OSA_FALSE;
3420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pClipSettings->ClipProperties.bMPEG4resynchMarker = M4OSA_FALSE;
3430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
3440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
3450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Reset audio characteristics */
3460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pClipSettings->ClipProperties.AudioStreamType = M4VIDEOEDITING_kNoneAudio;
3470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pClipSettings->ClipProperties.uiClipAudioDuration = 0;
3480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pClipSettings->ClipProperties.uiAudioBitrate = 0;
3490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pClipSettings->ClipProperties.uiAudioMaxAuSize = 0;
3500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pClipSettings->ClipProperties.uiNbChannels = 0;
3510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pClipSettings->ClipProperties.uiSamplingFrequency = 0;
3520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pClipSettings->ClipProperties.uiExtendedSamplingFrequency = 0;
3530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pClipSettings->ClipProperties.uiDecodedPcmSize = 0;
3540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
3550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
3560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Return with no error */
3570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_TRACE3_0("M4VSS3GPP_editSetDefaultSettings(): returning M4NO_ERROR");
3580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
3590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    return M4NO_ERROR;
3600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi}
3610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
3620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/**
3630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ******************************************************************************
3640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_ERR M4VSS3GPP_editDuplicateClipSettings()
3650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief    Duplicates a clip settings structure, performing allocations if required
3660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *
3670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param    pClipSettingsDest    (IN) Pointer to a valid M4VSS3GPP_ClipSettings structure
3680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param    pClipSettingsOrig    (IN) Pointer to a valid M4VSS3GPP_ClipSettings structure
3690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param   bCopyEffects        (IN) Flag to know if we have to duplicate effects
3700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return    M4NO_ERROR:            No error
3710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return    M4ERR_PARAMETER:    pClipSettings is M4OSA_NULL (debug only)
3720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ******************************************************************************
3730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */
3740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR
3750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4VSS3GPP_editDuplicateClipSettings( M4VSS3GPP_ClipSettings *pClipSettingsDest,
3760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                                    M4VSS3GPP_ClipSettings *pClipSettingsOrig,
3770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                                    M4OSA_Bool bCopyEffects )
3780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{
3790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_UInt8 uiFx;
3800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
3810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_TRACE3_2(
3820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        "M4VSS3GPP_editDuplicateClipSettings called with dest=0x%p src=0x%p",
3830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pClipSettingsDest, pClipSettingsOrig);
3840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
3850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /* Check input parameter */
3860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_DEBUG_IF2((M4OSA_NULL == pClipSettingsDest), M4ERR_PARAMETER,
3870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        "M4VSS3GPP_editDuplicateClipSettings: pClipSettingsDest is NULL");
3880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_DEBUG_IF2((M4OSA_NULL == pClipSettingsOrig), M4ERR_PARAMETER,
3890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        "M4VSS3GPP_editDuplicateClipSettings: pClipSettingsOrig is NULL");
3900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
3910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /* Copy plain structure */
3929d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu    memcpy((void *)pClipSettingsDest,
3939d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu        (void *)pClipSettingsOrig, sizeof(M4VSS3GPP_ClipSettings));
3940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
3950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /* Duplicate filename */
3960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( M4OSA_NULL != pClipSettingsOrig->pFile )
3970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
3980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        //pClipSettingsDest->pFile =
3992ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu        // (M4OSA_Char*) M4OSA_32bitAlignedMalloc(strlen(pClipSettingsOrig->pFile)+1, M4VSS3GPP,
4000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        // "pClipSettingsDest->pFile");
4010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /*FB: clip path size is needed for utf 16 conversion*/
4020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /*FB 2008/10/16: bad allocation size which raises a crash*/
4030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pClipSettingsDest->pFile =
4042ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu            (M4OSA_Char *)M4OSA_32bitAlignedMalloc(pClipSettingsOrig->filePathSize + 1,
4050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            M4VSS3GPP, (M4OSA_Char *)"pClipSettingsDest->pFile");
4060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
4070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        if( M4OSA_NULL == pClipSettingsDest->pFile )
4080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
4090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            M4OSA_TRACE1_0(
4100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                "M4VSS3GPP_editDuplicateClipSettings : ERROR allocating filename");
4110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            return M4ERR_ALLOC;
4120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
4130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /*FB: clip path size is needed for utf 16 conversion*/
4149d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu        //memcpy(pClipSettingsDest->pFile, pClipSettingsOrig->pFile,
4159d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu        // strlen(pClipSettingsOrig->pFile)+1);
4160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /*FB 2008/10/16: bad allocation size which raises a crash*/
4179d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu        memcpy((void *)pClipSettingsDest->pFile, (void *)pClipSettingsOrig->pFile,
4180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            pClipSettingsOrig->filePathSize/*+1*/);
4190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        ( (M4OSA_Char
4200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            *)pClipSettingsDest->pFile)[pClipSettingsOrig->filePathSize] = '\0';
4210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
4220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
4230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /* Duplicate effects */
4240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /* Return with no error */
4250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
4260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_TRACE3_0(
4270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        "M4VSS3GPP_editDuplicateClipSettings(): returning M4NO_ERROR");
4280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
4290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    return M4NO_ERROR;
4300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi}
4310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
4320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/**
4330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ******************************************************************************
4340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_ERR M4VSS3GPP_editFreeClipSettings()
4350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief    Free the pointers allocated in the ClipSetting structure (pFile, Effects).
4360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *
4370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param    pClipSettings        (IN) Pointer to a valid M4VSS3GPP_ClipSettings structure
4380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return    M4NO_ERROR:            No error
4390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return    M4ERR_PARAMETER:    pClipSettings is M4OSA_NULL (debug only)
4400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ******************************************************************************
4410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */
4420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR M4VSS3GPP_editFreeClipSettings(
4430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4VSS3GPP_ClipSettings *pClipSettings )
4440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{
4450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
4460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    *    Check input parameter */
4470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_DEBUG_IF2((M4OSA_NULL == pClipSettings), M4ERR_PARAMETER,
4480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        "M4VSS3GPP_editFreeClipSettings: pClipSettings is NULL");
4490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
4500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /* free filename */
4510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( M4OSA_NULL != pClipSettings->pFile )
4520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
4532ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu        free(pClipSettings->pFile);
4540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pClipSettings->pFile = M4OSA_NULL;
4550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
4560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
4570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /* free effects settings */
4580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /*    if(M4OSA_NULL != pClipSettings->Effects)
4590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
4602ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu    free(pClipSettings->Effects);
4610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pClipSettings->Effects = M4OSA_NULL;
4620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pClipSettings->nbEffects = 0;
4630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    } RC */
4640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
4650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    return M4NO_ERROR;
4660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi}
4670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
4680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/**
4690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ******************************************************************************
4700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_ERR M4VSS3GPP_editOpen()
4710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief     Set the VSS input and output files.
4720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @note      It opens the input file, but the output file may not be created yet.
4730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param     pContext           (IN) VSS edit context
4740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param     pSettings           (IN) Edit settings
4750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return    M4NO_ERROR:       No error
4760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return    M4ERR_PARAMETER:  At least one parameter is M4OSA_NULL (debug only)
4770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return    M4ERR_STATE:      VSS is not in an appropriate state for this function to be called
4780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return    M4ERR_ALLOC:      There is no more available memory
4790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ******************************************************************************
4800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */
4810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR M4VSS3GPP_editOpen( M4VSS3GPP_EditContext pContext,
4820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                             M4VSS3GPP_EditSettings *pSettings )
4830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{
4840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4VSS3GPP_InternalEditContext *pC =
4850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        (M4VSS3GPP_InternalEditContext *)pContext;
4860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
4870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_ERR err;
4880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_Int32 i;
4890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4VIDEOEDITING_FileType outputFileType =
4900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        M4VIDEOEDITING_kFileType_Unsupported; /**< 3GPP or MP3 (we don't do AMR output) */
4910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_UInt32 uiC1duration, uiC2duration;
4920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
4930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_TRACE3_2(
4940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        "M4VSS3GPP_editOpen called with pContext=0x%x, pSettings=0x%x",
4950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pContext, pSettings);
4960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
4970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
4980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    *    Check input parameters */
4990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_DEBUG_IF2((M4OSA_NULL == pContext), M4ERR_PARAMETER,
5000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        "M4VSS3GPP_editOpen: pContext is M4OSA_NULL");
5010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_DEBUG_IF2((M4OSA_NULL == pSettings), M4ERR_PARAMETER,
5020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        "M4VSS3GPP_editOpen: pSettings is M4OSA_NULL");
5030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_DEBUG_IF2((M4OSA_NULL == pSettings->pClipList), M4ERR_PARAMETER,
5040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        "M4VSS3GPP_editOpen: pSettings->pClipList is M4OSA_NULL");
5050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_DEBUG_IF2(( pSettings->uiClipNumber > 1)
5060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        && (M4OSA_NULL == pSettings->pTransitionList), M4ERR_PARAMETER,
5070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        "M4VSS3GPP_editOpen: pSettings->pTransitionList is M4OSA_NULL");
5080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
5090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
5100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Check state automaton */
5110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( ( pC->State != M4VSS3GPP_kEditState_CREATED)
5120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        && (pC->State != M4VSS3GPP_kEditState_CLOSED) )
5130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
5140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        M4OSA_TRACE1_1(
5150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            "M4VSS3GPP_editOpen: State error (0x%x)! Returning M4ERR_STATE",
5160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            pC->State);
5170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        return M4ERR_STATE;
5180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
5190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
5200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
5210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Free any previously allocated internal settings list */
5220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4VSS3GPP_intFreeSettingsList(pC);
5230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
5240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
5250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Copy the user settings in our context */
5260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pC->uiClipNumber = pSettings->uiClipNumber;
5270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
5280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
5290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Copy the clip list */
5300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pC->pClipList =
5312ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu        (M4VSS3GPP_ClipSettings *)M4OSA_32bitAlignedMalloc(sizeof(M4VSS3GPP_ClipSettings)
5320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        * pC->uiClipNumber, M4VSS3GPP, (M4OSA_Char *)"pC->pClipList");
5330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
5340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( M4OSA_NULL == pC->pClipList )
5350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
5360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        M4OSA_TRACE1_0(
5370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            "M4VSS3GPP_editOpen: unable to allocate pC->Settings.pClipList,\
5380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            returning M4ERR_ALLOC");
5390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        return M4ERR_ALLOC;
5400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
5410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
5420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    for ( i = 0; i < pSettings->uiClipNumber; i++ )
5430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
5440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        M4VSS3GPP_editDuplicateClipSettings(&(pC->pClipList[i]),
5450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            pSettings->pClipList[i], M4OSA_TRUE);
5460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
5470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
5480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
5490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Copy effects list RC */
5500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
5510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /*FB bug fix 19.03.2008 if the number of effects is 0 -> crash*/
5520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( pSettings->nbEffects > 0 )
5530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
5540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC->nbEffects = pSettings->nbEffects;
5550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC->pEffectsList = (M4VSS3GPP_EffectSettings
5562ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu            *)M4OSA_32bitAlignedMalloc(sizeof(M4VSS3GPP_EffectSettings) * pC->nbEffects,
5570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            M4VSS3GPP, (M4OSA_Char *)"pC->pEffectsList");
5580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
5590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        if( M4OSA_NULL == pC->pEffectsList )
5600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
5610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            M4OSA_TRACE1_0(
5620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                "M4VSS3GPP_editOpen: unable to allocate pC->pEffectsList, returning M4ERR_ALLOC");
5630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            return M4ERR_ALLOC;
5640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
5650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
5660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        for ( i = 0; i < pC->nbEffects; i++ )
5670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
5689d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu            memcpy((void *) &(pC->pEffectsList[i]),
5699d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu                (void *) &(pSettings->Effects[i]),
5700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                sizeof(M4VSS3GPP_EffectSettings));
5710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
5720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
5730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /**
5740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        * Allocate active effects list RC */
5750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC->pActiveEffectsList =
5762ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu            (M4OSA_UInt8 *)M4OSA_32bitAlignedMalloc(sizeof(M4OSA_UInt8) * pC->nbEffects,
5770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            M4VSS3GPP, (M4OSA_Char *)"pC->pActiveEffectsList");
5780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
5790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        if( M4OSA_NULL == pC->pActiveEffectsList )
5800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
5810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            M4OSA_TRACE1_0(
5820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                "M4VSS3GPP_editOpen: unable to allocate pC->pActiveEffectsList,\
5830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                returning M4ERR_ALLOC");
5840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            return M4ERR_ALLOC;
5850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
5860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /**
5870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi         * Allocate active effects list */
5880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC->pActiveEffectsList1 =
5892ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu            (M4OSA_UInt8 *)M4OSA_32bitAlignedMalloc(sizeof(M4OSA_UInt8) * pC->nbEffects,
5900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            M4VSS3GPP, (M4OSA_Char *)"pC->pActiveEffectsList");
5910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        if (M4OSA_NULL == pC->pActiveEffectsList1)
5920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
5930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            M4OSA_TRACE1_0("M4VSS3GPP_editOpen: unable to allocate pC->pActiveEffectsList, \
5940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                           returning M4ERR_ALLOC");
5950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            return M4ERR_ALLOC;
5960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
5970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
5980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
5990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    else
6000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
6010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC->nbEffects = 0;
6020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC->nbActiveEffects = 0;
6030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC->nbActiveEffects1 = 0;
6040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC->pEffectsList = M4OSA_NULL;
6050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC->pActiveEffectsList = M4OSA_NULL;
6060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC->pActiveEffectsList1 = M4OSA_NULL;
607711849272b603a88f751c1758b51a1dfbec315dfHong Teng        pC->bClip1ActiveFramingEffect = M4OSA_FALSE;
608711849272b603a88f751c1758b51a1dfbec315dfHong Teng        pC->bClip2ActiveFramingEffect = M4OSA_FALSE;
6090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
6100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
6110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
6120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Test the clip analysis data, if it is not provided, analyse the clips by ourselves. */
6130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    for ( i = 0; i < pC->uiClipNumber; i++ )
6140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
6150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        if( M4OSA_FALSE == pC->pClipList[i].ClipProperties.bAnalysed )
6160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
6170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            /**< Analysis not provided by the integrator */
6180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            err = M4VSS3GPP_editAnalyseClip(pC->pClipList[i].pFile,
6190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                pC->pClipList[i].FileType, &pC->pClipList[i].ClipProperties,
6200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                pC->pOsaFileReadPtr);
6210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
6220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            if( M4NO_ERROR != err )
6230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            {
6240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                M4OSA_TRACE1_1(
6250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    "M4VSS3GPP_editOpen: M4VSS3GPP_editAnalyseClip returns 0x%x!",
6260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    err);
6270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                return err;
6280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            }
6290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
6300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
6310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
6320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
6330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Check clip compatibility */
6340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    for ( i = 0; i < pC->uiClipNumber; i++ )
6350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
63639beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury        if (pC->pClipList[i].FileType !=M4VIDEOEDITING_kFileType_ARGB8888) {
63739beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            /**
63839beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            * Check all the clips are compatible with VSS 3GPP */
63939beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            err = M4VSS3GPP_intCheckClipCompatibleWithVssEditing(
64039beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                &pC->pClipList[i].ClipProperties);
6410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
64239beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            if( M4NO_ERROR != err )
64339beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            {
64439beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                M4OSA_TRACE1_2(
64539beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                    "M4VSS3GPP_editOpen:\
64639beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                    M4VSS3GPP_intCheckClipCompatibleWithVssEditing(%d) returns 0x%x!",
64739beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                    i, err);
64839beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                return err;
64939beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            }
6500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
6510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
6520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /**
6530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        * Check the master clip versus all the other ones.
6540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        (including master clip with itself, else variables for master clip
6550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        are not properly setted) */
65639beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury        if(pC->pClipList[i].FileType != M4VIDEOEDITING_kFileType_ARGB8888) {
65739beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury
65839beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            err = M4VSS3GPP_editCheckClipCompatibility(
65939beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                &pC->pClipList[pSettings->uiMasterClip].ClipProperties,
66039beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                &pC->pClipList[i].ClipProperties);
66139beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            /* in case of warning regarding audio incompatibility,
66239beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                editing continues */
66339beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            if( M4OSA_ERR_IS_ERROR(err) )
66439beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            {
66539beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                M4OSA_TRACE1_2(
66639beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                    "M4VSS3GPP_editOpen: M4VSS3GPP_editCheckClipCompatibility \
66739beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                        (%d) returns 0x%x!", i, err);
66839beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                return err;
66939beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            }
67039beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury        } else {
67139beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            pC->pClipList[i].ClipProperties.bAudioIsCompatibleWithMasterClip =
67239beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury             M4OSA_FALSE;
6730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
6740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
6750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /* Search audio tracks that cannot be edited :
6760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    *   - delete all audio effects for the clip
6770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    *   - if master clip is editable let the transition
6780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    (bad track will be replaced later with silence)
6790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    *   - if master clip is not editable switch to a dummy transition (only copy/paste) */
6800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    for ( i = 0; i < pC->uiClipNumber; i++ )
6810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
6820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        if( M4OSA_FALSE == pC->pClipList[i].ClipProperties.bAudioIsEditable )
6830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
6840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            M4OSA_UInt8 uiFx;
6850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
6860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            for ( uiFx = 0; uiFx < pC->nbEffects; uiFx++ )
6870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            {
6880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                pC->pEffectsList[uiFx].AudioEffectType
6890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    = M4VSS3GPP_kAudioEffectType_None;
6900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            }
6910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
6920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            if( ( i < (pC->uiClipNumber - 1))
6930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                && (M4OSA_NULL != pSettings->pTransitionList[i])
6940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                && (M4OSA_FALSE == pC->pClipList[pSettings->
6950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                uiMasterClip].ClipProperties.bAudioIsEditable) )
6960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            {
6970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                pSettings->pTransitionList[i]->AudioTransitionType
6980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    = M4VSS3GPP_kAudioTransitionType_None;
6990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            }
7000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
7010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
7020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
7030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
7040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * We add a transition of duration 0 at the end of the last clip.
7050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * It will suppress a whole bunch a test latter in the processing... */
7060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pC->pTransitionList = (M4VSS3GPP_TransitionSettings
7072ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu        *)M4OSA_32bitAlignedMalloc(sizeof(M4VSS3GPP_TransitionSettings)
7080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        * (pC->uiClipNumber), M4VSS3GPP, (M4OSA_Char *)"pC->pTransitionList");
7090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
7100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( M4OSA_NULL == pC->pTransitionList )
7110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
7120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        M4OSA_TRACE1_0(
7130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            "M4VSS3GPP_editOpen: unable to allocate pC->Settings.pTransitionList,\
7140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            returning M4ERR_ALLOC");
7150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        return M4ERR_ALLOC;
7160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
7170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
7180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**< copy transition settings */
7190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    for ( i = 0; i < (pSettings->uiClipNumber - 1); i++ )
7200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
7219d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu        memcpy((void *) &(pC->pTransitionList[i]),
7229d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu            (void *)pSettings->pTransitionList[i],
7230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            sizeof(M4VSS3GPP_TransitionSettings));
7240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
7250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
7260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**< We fill the last "dummy" transition */
7270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pC->pTransitionList[pC->uiClipNumber - 1].uiTransitionDuration = 0;
7280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pC->pTransitionList[pC->uiClipNumber
7290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        - 1].VideoTransitionType = M4VSS3GPP_kVideoTransitionType_None;
7300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pC->pTransitionList[pC->uiClipNumber
7310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        - 1].AudioTransitionType = M4VSS3GPP_kAudioTransitionType_None;
7320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
7330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
7340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Avoid weird clip settings */
7350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    for ( i = 0; i < pSettings->uiClipNumber; i++ )
7360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
73739beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury        if (pC->pClipList[i].FileType !=M4VIDEOEDITING_kFileType_ARGB8888) {
73839beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            err = M4VSS3GPP_intClipSettingsSanityCheck(&pC->pClipList[i]);
7390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
74039beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            if( M4NO_ERROR != err )
74139beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            {
74239beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                M4OSA_TRACE1_1(
74339beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                    "M4VSS3GPP_editOpen: M4VSS3GPP_intClipSettingsSanityCheck returns 0x%x!",
74439beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                    err);
74539beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                return err;
74639beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            }
7470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
7480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
7490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
7500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    for ( i = 0; i < (pSettings->uiClipNumber - 1); i++ )
7510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
75239beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury        if (pC->pTransitionList[i].uiTransitionDuration != 0) {
75339beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury             if (pC->pClipList[i].FileType == M4VIDEOEDITING_kFileType_ARGB8888) {
75439beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                 pC->pClipList[i].uiBeginCutTime = 0;
75539beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                 pC->pClipList[i].uiEndCutTime =
75639beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                     pC->pTransitionList[i].uiTransitionDuration;
75739beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury             }
75839beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury
75939beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury             if (pC->pClipList[i+1].FileType == M4VIDEOEDITING_kFileType_ARGB8888) {
76039beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                 pC->pClipList[i+1].uiBeginCutTime = 0;
76139beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                 pC->pClipList[i+1].uiEndCutTime =
76239beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                     pC->pTransitionList[i].uiTransitionDuration;
76339beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury             }
76439beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury        } else {
76539beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury
76639beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury             if (pC->pClipList[i].FileType == M4VIDEOEDITING_kFileType_ARGB8888) {
76739beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                 pC->pClipList[i].uiEndCutTime =
76839beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                     pC->pClipList[i].uiEndCutTime - pC->pClipList[i].uiBeginCutTime;
76939beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                 pC->pClipList[i].uiBeginCutTime = 0;
77039beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury             }
77139beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury
77239beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury             if (pC->pClipList[i+1].FileType == M4VIDEOEDITING_kFileType_ARGB8888) {
77339beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                 pC->pClipList[i+1].uiEndCutTime =
77439beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                     pC->pClipList[i+1].uiEndCutTime - pC->pClipList[i+1].uiBeginCutTime;
77539beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                 pC->pClipList[i+1].uiBeginCutTime = 0;
77639beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury             }
77739beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury
77839beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury        }
77939beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury
7800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /**
7810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        * Maximum transition duration between clip n and clip n+1 is the duration
7820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        * of the shortest clip */
7830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        if( 0 == pC->pClipList[i].uiEndCutTime )
7840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
7850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            uiC1duration = pC->pClipList[i].ClipProperties.uiClipVideoDuration;
7860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
7870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        else
7880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
7890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            /**< duration of clip n is the end cut time */
7900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            uiC1duration = pC->pClipList[i].uiEndCutTime;
7910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
7920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
7930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /**< Substract begin cut */
7940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        uiC1duration -= pC->pClipList[i].uiBeginCutTime;
7950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
7960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /**< Check that the transition is shorter than clip n */
7970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        if( pC->pTransitionList[i].uiTransitionDuration > uiC1duration )
7980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
7990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            pC->pTransitionList[i].uiTransitionDuration = uiC1duration - 1;
8000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
8010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
8020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        if( 0 == pC->pClipList[i + 1].uiEndCutTime )
8030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
8040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            uiC2duration =
8050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                pC->pClipList[i + 1].ClipProperties.uiClipVideoDuration;
8060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
8070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        else
8080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
8090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            /**< duration of clip n+1 is the end cut time */
8100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            uiC2duration = pC->pClipList[i + 1].uiEndCutTime;
8110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
8120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
8130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /**< Substract begin cut */
8140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        uiC2duration -= pC->pClipList[i + 1].uiBeginCutTime;
8150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
8160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /**< Check that the transition is shorter than clip n+1 */
8170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        if( pC->pTransitionList[i].uiTransitionDuration > uiC2duration )
8180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
8190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            pC->pTransitionList[i].uiTransitionDuration = uiC2duration - 1;
8200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
8210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
8220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /**
8230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        * Avoid weird transition settings */
8240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        err =
8250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            M4VSS3GPP_intTransitionSettingsSanityCheck(&pC->pTransitionList[i]);
8260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
8270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        if( M4NO_ERROR != err )
8280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
8290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            M4OSA_TRACE1_1(
8300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                "M4VSS3GPP_editOpen: M4VSS3GPP_intClipSettingsSanityCheck returns 0x%x!",
8310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                err);
8320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            return err;
8330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
8340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
8350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /**
8360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        * Check that two transitions are not overlapping
8370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi          (no overlapping possible for first clip) */
8380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        if( i > 0 )
8390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
8400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            /**
8410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            * There is a transition overlap if the sum of the duration of
8420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi              two consecutive transitions
8430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            * is higher than the duration of the clip in-between. */
8440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            if( ( pC->pTransitionList[i - 1].uiTransitionDuration
8450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                + pC->pTransitionList[i].uiTransitionDuration) >= uiC1duration )
8460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            {
8470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                M4OSA_TRACE1_1(
8480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    "M4VSS3GPP_editOpen: Overlapping transitions on clip %d,\
8490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    returning M4VSS3GPP_ERR_OVERLAPPING_TRANSITIONS",
8500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    i);
8510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                return M4VSS3GPP_ERR_OVERLAPPING_TRANSITIONS;
8520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            }
8530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
8540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
8550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
8560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
8570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Output clip duration */
8580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    for ( i = 0; i < pC->uiClipNumber; i++ )
8590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
8600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /**
8610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        * Compute the sum of the clip duration */
8620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        if( 0 == pC->pClipList[i].uiEndCutTime )
8630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
8640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            pC->ewc.iOutputDuration +=
8650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                pC->
8660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                pClipList[
8670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    i].ClipProperties.
8680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                        uiClipVideoDuration; /* Only video track duration is important to
8690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                                             avoid deviation if audio track is longer */
8700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
8710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        else
8720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
8730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            pC->ewc.iOutputDuration +=
8740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                pC->pClipList[i].uiEndCutTime; /**< Add end cut */
8750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
8760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
8770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC->ewc.iOutputDuration -=
8780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            pC->pClipList[i].uiBeginCutTime; /**< Remove begin cut */
8790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
8800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /**
8810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        * Remove the duration of the transition (it is counted twice) */
8820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC->ewc.iOutputDuration -= pC->pTransitionList[i].uiTransitionDuration;
8830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
8840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
88539beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury    /* Get video properties from output properties */
8860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
88739beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury    /* Get output width and height */
88839beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury    switch(pC->xVSS.outputVideoSize) {
88939beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury        case M4VIDEOEDITING_kSQCIF:
89039beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            pC->ewc.uiVideoWidth = 128;
89139beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            pC->ewc.uiVideoHeight = 96;
89239beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            break;
89339beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury        case M4VIDEOEDITING_kQQVGA:
89439beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            pC->ewc.uiVideoWidth = 160;
89539beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            pC->ewc.uiVideoHeight = 120;
89639beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            break;
89739beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury        case M4VIDEOEDITING_kQCIF:
89839beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            pC->ewc.uiVideoWidth = 176;
89939beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            pC->ewc.uiVideoHeight = 144;
90039beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            break;
90139beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury        case M4VIDEOEDITING_kQVGA:
90239beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            pC->ewc.uiVideoWidth = 320;
90339beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            pC->ewc.uiVideoHeight = 240;
90439beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            break;
90539beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury        case M4VIDEOEDITING_kCIF:
90639beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            pC->ewc.uiVideoWidth = 352;
90739beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            pC->ewc.uiVideoHeight = 288;
90839beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            break;
90939beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury        case M4VIDEOEDITING_kVGA:
91039beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            pC->ewc.uiVideoWidth = 640;
91139beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            pC->ewc.uiVideoHeight = 480;
91239beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            break;
91339beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            /* +PR LV5807 */
91439beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury        case M4VIDEOEDITING_kWVGA:
91539beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            pC->ewc.uiVideoWidth = 800;
91639beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            pC->ewc.uiVideoHeight = 480;
91739beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            break;
91839beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury        case M4VIDEOEDITING_kNTSC:
91939beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            pC->ewc.uiVideoWidth = 720;
92039beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            pC->ewc.uiVideoHeight = 480;
92139beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            break;
92239beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            /* -PR LV5807 */
92339beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            /* +CR Google */
92439beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury        case M4VIDEOEDITING_k640_360:
92539beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            pC->ewc.uiVideoWidth = 640;
92639beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            pC->ewc.uiVideoHeight = 360;
92739beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            break;
92839beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury
92939beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury        case M4VIDEOEDITING_k854_480:
93039beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            pC->ewc.uiVideoWidth = M4ENCODER_854_480_Width;
93139beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            pC->ewc.uiVideoHeight = 480;
93239beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            break;
93339beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury
93439beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury        case M4VIDEOEDITING_k1280_720:
93539beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            pC->ewc.uiVideoWidth = 1280;
93639beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            pC->ewc.uiVideoHeight = 720;
93739beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            break;
93839beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury        case M4VIDEOEDITING_k1080_720:
93939beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            pC->ewc.uiVideoWidth = M4ENCODER_1080_720_Width;
94039beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury
94139beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            pC->ewc.uiVideoHeight = 720;
94239beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            break;
94339beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury        case M4VIDEOEDITING_k960_720:
94439beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            pC->ewc.uiVideoWidth = 960;
94539beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            pC->ewc.uiVideoHeight = 720;
94639beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            break;
9474a5d8c671172fbafe9964d2d71137e7f69a26df9Chih-Chung Chang        case M4VIDEOEDITING_k1920_1080:
9484a5d8c671172fbafe9964d2d71137e7f69a26df9Chih-Chung Chang            pC->ewc.uiVideoWidth = 1920;
9494a5d8c671172fbafe9964d2d71137e7f69a26df9Chih-Chung Chang            pC->ewc.uiVideoHeight = 1088; // need to be multiples of 16
9504a5d8c671172fbafe9964d2d71137e7f69a26df9Chih-Chung Chang            break;
95139beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury
95239beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury        default: /* If output video size is not given, we take QCIF size */
9534a5d8c671172fbafe9964d2d71137e7f69a26df9Chih-Chung Chang            M4OSA_TRACE1_0(
9544a5d8c671172fbafe9964d2d71137e7f69a26df9Chih-Chung Chang                "M4VSS3GPP_editOpen: no output video size given, default to QCIF!");
95539beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            pC->ewc.uiVideoWidth = 176;
95639beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            pC->ewc.uiVideoHeight = 144;
95739beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            pC->xVSS.outputVideoSize = M4VIDEOEDITING_kQCIF;
9580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
95939beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury    }
9600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
96139beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury    pC->ewc.uiVideoTimeScale        = 30;
96239beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury    pC->ewc.bVideoDataPartitioning  = 0;
963803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury    /* Set output video profile and level */
964803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury    pC->ewc.outputVideoProfile = pC->xVSS.outputVideoProfile;
965803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury    pC->ewc.outputVideoLevel = pC->xVSS.outputVideoLevel;
9660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
96739beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury    switch(pC->xVSS.outputVideoFormat) {
96839beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury        case M4VIDEOEDITING_kH263:
96939beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            pC->ewc.VideoStreamType = M4SYS_kH263;
97039beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            break;
9710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VIDEOEDITING_kMPEG4:
9720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            pC->ewc.VideoStreamType = M4SYS_kMPEG_4;
9730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
9740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VIDEOEDITING_kH264:
9750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            pC->ewc.VideoStreamType = M4SYS_kH264;
9760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
9770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        default:
9780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            pC->ewc.VideoStreamType = M4SYS_kVideoUnknown;
9790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
9800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
9810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
9820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
9830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Copy the audio properties of the master clip to the output properties */
9840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pC->ewc.uiNbChannels =
9850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC->pClipList[pSettings->uiMasterClip].ClipProperties.uiNbChannels;
9860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pC->ewc.uiAudioBitrate =
9870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC->pClipList[pSettings->uiMasterClip].ClipProperties.uiAudioBitrate;
9880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pC->ewc.uiSamplingFrequency = pC->pClipList[pSettings->
9890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        uiMasterClip].ClipProperties.uiSamplingFrequency;
9900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pC->ewc.uiSilencePcmSize =
9910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC->pClipList[pSettings->uiMasterClip].ClipProperties.uiDecodedPcmSize;
9920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pC->ewc.scale_audio = pC->ewc.uiSamplingFrequency / 1000.0;
9930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
9940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    switch( pC->pClipList[pSettings->uiMasterClip].ClipProperties.AudioStreamType )
9950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
9960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VIDEOEDITING_kAMR_NB:
9970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            pC->ewc.AudioStreamType = M4SYS_kAMR;
9980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            pC->ewc.pSilenceFrameData =
9990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                (M4OSA_UInt8 *)M4VSS3GPP_AMR_AU_SILENCE_FRAME_048;
10000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            pC->ewc.uiSilenceFrameSize =
10010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                M4VSS3GPP_AMR_AU_SILENCE_FRAME_048_SIZE;
10020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            pC->ewc.iSilenceFrameDuration =
10030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                M4VSS3GPP_AMR_AU_SILENCE_FRAME_048_DURATION;
10040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            pC->bSupportSilence = M4OSA_TRUE;
10050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
10060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
10070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VIDEOEDITING_kAAC:
10080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VIDEOEDITING_kAACplus:
10090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VIDEOEDITING_keAACplus:
10100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            pC->ewc.AudioStreamType = M4SYS_kAAC;
10110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
10120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            if( pC->ewc.uiNbChannels == 1 )
10130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            {
10140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                pC->ewc.pSilenceFrameData =
10150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    (M4OSA_UInt8 *)M4VSS3GPP_AAC_AU_SILENCE_MONO;
10160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                pC->ewc.uiSilenceFrameSize = M4VSS3GPP_AAC_AU_SILENCE_MONO_SIZE;
10170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                pC->bSupportSilence = M4OSA_TRUE;
10180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            }
10190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            else
10200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            {
10210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                pC->ewc.pSilenceFrameData =
10220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    (M4OSA_UInt8 *)M4VSS3GPP_AAC_AU_SILENCE_STEREO;
10230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                pC->ewc.uiSilenceFrameSize =
10240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    M4VSS3GPP_AAC_AU_SILENCE_STEREO_SIZE;
10250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                pC->bSupportSilence = M4OSA_TRUE;
10260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            }
10270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            pC->ewc.iSilenceFrameDuration =
10280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                1024; /* AAC is always 1024/Freq sample duration */
10290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
10300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
10310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VIDEOEDITING_kMP3:
10320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            pC->ewc.AudioStreamType = M4SYS_kMP3;
10330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            pC->ewc.pSilenceFrameData = M4OSA_NULL;
10340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            pC->ewc.uiSilenceFrameSize = 0;
10350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            pC->ewc.iSilenceFrameDuration = 0;
10360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            /* Special case, mp3 core reader return a time in ms */
10370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            pC->ewc.scale_audio = 1.0;
10380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
10390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
10400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VIDEOEDITING_kEVRC:
10410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            pC->ewc.AudioStreamType = M4SYS_kEVRC;
10420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            pC->ewc.pSilenceFrameData = M4OSA_NULL;
10430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            pC->ewc.uiSilenceFrameSize = 0;
10440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            pC->ewc.iSilenceFrameDuration = 160; /* EVRC frames are 20 ms at 8000 Hz
10450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                                             (makes it easier to factorize amr and evrc code) */
10460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
10470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
10480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        default:
10490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            pC->ewc.AudioStreamType = M4SYS_kAudioUnknown;
10500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
10510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
10520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
105339beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury    for (i=0; i<pC->uiClipNumber; i++) {
1054f0f8d4e8be30dc154714a0aeb7608a8468321211Rajneesh Chowdury        if (pC->pClipList[i].bTranscodingRequired == M4OSA_FALSE) {
1055f0f8d4e8be30dc154714a0aeb7608a8468321211Rajneesh Chowdury            /** If not transcoded in Analysis phase, check
1056f0f8d4e8be30dc154714a0aeb7608a8468321211Rajneesh Chowdury             * if transcoding required now
1057f0f8d4e8be30dc154714a0aeb7608a8468321211Rajneesh Chowdury             */
1058f0f8d4e8be30dc154714a0aeb7608a8468321211Rajneesh Chowdury            if ((pC->pClipList[i].ClipProperties.VideoStreamType !=
1059f0f8d4e8be30dc154714a0aeb7608a8468321211Rajneesh Chowdury                  pC->xVSS.outputVideoFormat)||
1060f0f8d4e8be30dc154714a0aeb7608a8468321211Rajneesh Chowdury                  (pC->pClipList[i].ClipProperties.uiVideoWidth !=
1061f0f8d4e8be30dc154714a0aeb7608a8468321211Rajneesh Chowdury                   pC->ewc.uiVideoWidth) ||
1062f0f8d4e8be30dc154714a0aeb7608a8468321211Rajneesh Chowdury                  (pC->pClipList[i].ClipProperties.uiVideoHeight !=
1063f0f8d4e8be30dc154714a0aeb7608a8468321211Rajneesh Chowdury                   pC->ewc.uiVideoHeight) ||
1064f0f8d4e8be30dc154714a0aeb7608a8468321211Rajneesh Chowdury                  (pC->pClipList[i].ClipProperties.VideoStreamType ==
1065f0f8d4e8be30dc154714a0aeb7608a8468321211Rajneesh Chowdury                   M4VIDEOEDITING_kH264) ||
1066f0f8d4e8be30dc154714a0aeb7608a8468321211Rajneesh Chowdury                  (pC->pClipList[i].ClipProperties.VideoStreamType ==
1067f0f8d4e8be30dc154714a0aeb7608a8468321211Rajneesh Chowdury                   M4VIDEOEDITING_kMPEG4 &&
1068f0f8d4e8be30dc154714a0aeb7608a8468321211Rajneesh Chowdury                   pC->pClipList[i].ClipProperties.uiVideoTimeScale !=
1069f0f8d4e8be30dc154714a0aeb7608a8468321211Rajneesh Chowdury                    pC->ewc.uiVideoTimeScale)) {
1070f0f8d4e8be30dc154714a0aeb7608a8468321211Rajneesh Chowdury                pC->pClipList[i].bTranscodingRequired = M4OSA_TRUE;
1071f0f8d4e8be30dc154714a0aeb7608a8468321211Rajneesh Chowdury            }
1072f0f8d4e8be30dc154714a0aeb7608a8468321211Rajneesh Chowdury        } else {
1073f0f8d4e8be30dc154714a0aeb7608a8468321211Rajneesh Chowdury            /** If bTranscodingRequired is true, it means the clip has
1074f0f8d4e8be30dc154714a0aeb7608a8468321211Rajneesh Chowdury             * been transcoded in Analysis phase.
1075f0f8d4e8be30dc154714a0aeb7608a8468321211Rajneesh Chowdury             */
1076f0f8d4e8be30dc154714a0aeb7608a8468321211Rajneesh Chowdury            pC->pClipList[i].bTranscodingRequired = M4OSA_FALSE;
107739beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury        }
107839beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury    }
10790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
10800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * We produce a 3gpp file, unless it is mp3 */
10810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( M4VIDEOEDITING_kMP3 == pC->
10820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pClipList[pSettings->uiMasterClip].ClipProperties.AudioStreamType )
10830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        outputFileType = M4VIDEOEDITING_kFileType_MP3;
10840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    else
10850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        outputFileType = M4VIDEOEDITING_kFileType_3GPP;
10860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
10870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
10880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Beware, a null duration would lead to a divide by zero error (better safe than sorry...) */
10890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( 0 == pC->ewc.iOutputDuration )
10900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
10910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC->ewc.iOutputDuration = 1;
10920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
10930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
10940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
10950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Open first clip */
10960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pC->uiCurrentClip = 0;
10970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
10980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    // Decorrelate input and output encoding timestamp to handle encoder prefetch
10990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pC->ewc.dInputVidCts  = 0.0;
11000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pC->ewc.dOutputVidCts = 0.0;
11010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pC->ewc.dATo = 0.0;
11020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
11030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    err = M4VSS3GPP_intSwitchToNextClip(pC);
11040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /* RC: to know when a file has been processed */
11050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( M4NO_ERROR != err && err != M4VSS3GPP_WAR_SWITCH_CLIP )
11060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
11070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        M4OSA_TRACE1_1(
11080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            "M4VSS3GPP_editOpen: M4VSS3GPP_intSwitchToNextClip() returns 0x%x!",
11090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            err);
11100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        return err;
11110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
11120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
11130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
11140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Do the video stuff in 3GPP Audio/Video case */
11150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( M4VIDEOEDITING_kFileType_3GPP == outputFileType )
11160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
11170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /**
11180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        * Compute the Decoder Specific Info for the output video and audio streams */
11190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        err = M4VSS3GPP_intComputeOutputVideoAndAudioDsi(pC,
11200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            pSettings->uiMasterClip);
11210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
11220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        if( M4NO_ERROR != err )
11230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
11240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            M4OSA_TRACE1_1(
11250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                "M4VSS3GPP_editOpen: M4VSS3GPP_intComputeOutputVideoAndAudioDsi() returns 0x%x!",
11260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                err);
11270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            return err;
11280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
11290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
11300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /**
11310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        * Compute the time increment for the transition file */
11320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        switch( pSettings->videoFrameRate )
11330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
11340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            case M4VIDEOEDITING_k5_FPS:
11350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                pC->dOutputFrameDuration = 1000.0 / 5.0;
11360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                break;
11370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
11380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            case M4VIDEOEDITING_k7_5_FPS:
11390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                pC->dOutputFrameDuration = 1000.0 / 7.5;
11400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                break;
11410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
11420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            case M4VIDEOEDITING_k10_FPS:
11430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                pC->dOutputFrameDuration = 1000.0 / 10.0;
11440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                break;
11450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
11460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            case M4VIDEOEDITING_k12_5_FPS:
11470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                pC->dOutputFrameDuration = 1000.0 / 12.5;
11480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                break;
11490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
11500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            case M4VIDEOEDITING_k15_FPS:
11510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                pC->dOutputFrameDuration = 1000.0 / 15.0;
11520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                break;
11530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
11540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            case M4VIDEOEDITING_k20_FPS:
11550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                pC->dOutputFrameDuration = 1000.0 / 20.0;
11560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                break;
11570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
11580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            case M4VIDEOEDITING_k25_FPS:
11590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                pC->dOutputFrameDuration = 1000.0 / 25.0;
11600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                break;
11610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
11620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            case M4VIDEOEDITING_k30_FPS:
11630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                pC->dOutputFrameDuration = 1000.0 / 30.0;
11640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                break;
11650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
11660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            default:
11670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                M4OSA_TRACE1_1(
11680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    "M4VSS3GPP_editOpen(): invalid videoFrameRate (0x%x),\
11690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    returning M4VSS3GPP_ERR_INVALID_VIDEO_ENCODING_FRAME_RATE",
11700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    pSettings->videoFrameRate);
11710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                return M4VSS3GPP_ERR_INVALID_VIDEO_ENCODING_FRAME_RATE;
11720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
11730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
11740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        if( M4SYS_kMPEG_4 == pC->ewc.VideoStreamType )
11750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
11760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            M4OSA_UInt32 uiAlpha;
11770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            /**
11780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            * MPEG-4 case.
11790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            * Time scale of the transition encoder must be the same than the
11800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            * timescale of the input files.
11810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            * So the frame duration must be compatible with this time scale,
11820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            * but without beeing too short.
11830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            * For that, we must compute alpha (integer) so that:
11840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            *             (alpha x 1000)/EncoderTimeScale > MinFrameDuration
11850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            **/
11860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
11870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            uiAlpha = (M4OSA_UInt32)(( pC->dOutputFrameDuration
11880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                * pC->ewc.uiVideoTimeScale) / 1000.0 + 0.5);
11890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
11900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            if( uiAlpha > 0 )
11910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            {
11920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                pC->dOutputFrameDuration =
11930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    ( uiAlpha * 1000.0) / pC->ewc.uiVideoTimeScale;
11940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            }
11950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
11960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        else if( M4SYS_kH263 == pC->ewc.VideoStreamType )
11970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
11980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            switch( pSettings->videoFrameRate )
11990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            {
12000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                case M4VIDEOEDITING_k12_5_FPS:
12010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                case M4VIDEOEDITING_k20_FPS:
12020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                case M4VIDEOEDITING_k25_FPS:
12030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    M4OSA_TRACE1_0(
12040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                        "M4VSS3GPP_editOpen(): invalid videoFrameRate for H263,\
12050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                        returning M4VSS3GPP_ERR_INVALID_VIDEO_ENCODING_FRAME_RATE");
12060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    return M4VSS3GPP_ERR_INVALID_VIDEO_ENCODING_FRAME_RATE;
12070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi               default:
12080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                  break;
12090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            }
12100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
12110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
12120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
12130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
12140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Create the MP3 output file */
12150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( M4VIDEOEDITING_kFileType_MP3 == outputFileType )
12160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
12170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        M4READER_Buffer mp3tagBuffer;
12180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        err = M4VSS3GPP_intCreateMP3OutputFile(pC, pSettings->pOutputFile);
12190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
12200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        if( M4NO_ERROR != err )
12210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
12220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            M4OSA_TRACE1_1(
12230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                "M4VSS3GPP_editOpen: M4VSS3GPP_intCreateMP3OutputFile returns 0x%x",
12240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                err);
12250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            return err;
12260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
12270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
12280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /* The ID3v2 tag could be at any place in the mp3 file                             */
12290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /* The mp3 reader only checks few bytes in the beginning of
12300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi           stream to look for a ID3v2 tag  */
12310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /* It means that if the ID3v2 tag is not at the beginning of the file the reader do
12320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        as there is no these metadata */
12330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
12340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /* Retrieve the data of the ID3v2 Tag */
12350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        err = pC->pC1->ShellAPI.m_pReader->m_pFctGetOption(
12360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            pC->pC1->pReaderContext, M4READER_kOptionID_Mp3Id3v2Tag,
12370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            (M4OSA_DataOption) &mp3tagBuffer);
12380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
12390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        if( M4NO_ERROR != err )
12400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
12410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            M4OSA_TRACE1_1("M4VSS3GPP_editOpen: M4MP3R_getOption returns 0x%x",
12420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                err);
12430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            return err;
12440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
12450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
12460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /* Write the data of the ID3v2 Tag in the output file */
12470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        if( 0 != mp3tagBuffer.m_uiBufferSize )
12480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
12490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            err = pC->pOsaFileWritPtr->writeData(pC->ewc.p3gpWriterContext,
12500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                (M4OSA_MemAddr8)mp3tagBuffer.m_pData, mp3tagBuffer.m_uiBufferSize);
12510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
12520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            /**
12530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            * Free before the error checking anyway */
12542ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu            free(mp3tagBuffer.m_pData);
12550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
12560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            /**
12570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            * Error checking */
12580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            if( M4NO_ERROR != err )
12590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            {
12600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                M4OSA_TRACE1_1(
12610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    "M4VSS3GPP_editOpen: WriteData(ID3v2Tag) returns 0x%x",
12620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    err);
12630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                return err;
12640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            }
12650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
12660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            mp3tagBuffer.m_uiBufferSize = 0;
12670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            mp3tagBuffer.m_pData = M4OSA_NULL;
12680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
12690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
12700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
12710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Create the 3GPP output file */
12720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    else if( M4VIDEOEDITING_kFileType_3GPP == outputFileType )
12730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
1274af4b53216b45e73b5414e1136658595ee77ff06fDharmaray Kundargi        pC->ewc.uiVideoBitrate = pSettings->xVSS.outputVideoBitrate;
12750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
12760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /**
12770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        * 11/12/2008 CR3283 MMS use case in VideoArtist: Set max output file size if needed */
12780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        if( pC->bIsMMS == M4OSA_TRUE )
12790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
12800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            err = M4VSS3GPP_intCreate3GPPOutputFile(&pC->ewc, &pC->ShellAPI,
12810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                pC->pOsaFileWritPtr, pSettings->pOutputFile,
12820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                pC->pOsaFileReadPtr, pSettings->pTemporaryFile,
12830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                pSettings->xVSS.outputFileSize);
12840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
12850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        else
12860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
12870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            err = M4VSS3GPP_intCreate3GPPOutputFile(&pC->ewc, &pC->ShellAPI,
12880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                pC->pOsaFileWritPtr, pSettings->pOutputFile,
12890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                pC->pOsaFileReadPtr, pSettings->pTemporaryFile, 0);
12900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
12910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
12920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        if( M4NO_ERROR != err )
12930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
12940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            M4OSA_TRACE1_1(
12950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                "M4VSS3GPP_editOpen: M4VSS3GPP_intCreate3GPPOutputFile returns 0x%x",
12960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                err);
12970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            return err;
12980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
12990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
13000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
13010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Default error case */
13020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    else
13030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
13040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        M4OSA_TRACE1_1(
13050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            "M4VSS3GPP_editOpen: invalid outputFileType = 0x%x,\
13060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            returning M4VSS3GPP_ERR_OUTPUT_FILE_TYPE_ERROR",
13070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            outputFileType);
13080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        return
13090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            M4VSS3GPP_ERR_OUTPUT_FILE_TYPE_ERROR; /**< this is an internal error code
13100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                                                  unknown to the user */
13110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
13120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
13130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
13140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Initialize state */
13150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( M4SYS_kMP3 == pC->ewc.AudioStreamType )
13160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
13170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /**
13180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        * In the MP3 case we use a special audio state */
13190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC->State = M4VSS3GPP_kEditState_MP3_JUMP;
13200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
13210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    else
13220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
13230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /**
13240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        * We start with the video processing */
13250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC->State = M4VSS3GPP_kEditState_VIDEO;
13260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
13270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
13280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
13290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Initialize state.
13300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * The first clip is independant to the "virtual previous clips",
13310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * so it's like if we where in Read/Write mode before it. */
13320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pC->Vstate = M4VSS3GPP_kEditVideoState_READ_WRITE;
13330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pC->Astate = M4VSS3GPP_kEditAudioState_READ_WRITE;
13340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
13350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
13360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Return with no error */
13370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_TRACE3_0("M4VSS3GPP_editOpen(): returning M4NO_ERROR");
13380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    return M4NO_ERROR;
13390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi}
13400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
13410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/**
13420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ******************************************************************************
13430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_ERR M4VSS3GPP_editStep()
13440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief    Perform one step of editing.
13450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @note
13460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param     pContext           (IN) VSS 3GPP edit context
13470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param     pProgress          (OUT) Progress percentage (0 to 100) of the editing operation
13480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return    M4NO_ERROR:        No error
13490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return    M4ERR_PARAMETER:   pContext is M4OSA_NULL (debug only)
13500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return    M4ERR_STATE:       VSS 3GPP is not in an appropriate state for this
13510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *                               function to be called
13520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return    M4VSS3GPP_WAR_EDITING_DONE: Edition is done, user should now call
13530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *            M4VSS3GPP_editClose()
13540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ******************************************************************************
13550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */
13560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR M4VSS3GPP_editStep( M4VSS3GPP_EditContext pContext,
13570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                             M4OSA_UInt8 *pProgress )
13580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{
13590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4VSS3GPP_InternalEditContext *pC =
13600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        (M4VSS3GPP_InternalEditContext *)pContext;
13610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_UInt32 uiProgressAudio, uiProgressVideo, uiProgress;
13620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_ERR err;
13630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
13640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_TRACE3_1("M4VSS3GPP_editStep called with pContext=0x%x", pContext);
13650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
13660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
13670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    *    Check input parameter */
13680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_DEBUG_IF2((M4OSA_NULL == pContext), M4ERR_PARAMETER,
13690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        "M4VSS3GPP_editStep: pContext is M4OSA_NULL");
13700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_DEBUG_IF2((M4OSA_NULL == pProgress), M4ERR_PARAMETER,
13710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        "M4VSS3GPP_editStep: pProgress is M4OSA_NULL");
13720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
13730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
13740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Check state automaton and select correct processing */
13750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    switch( pC->State )
13760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
13770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VSS3GPP_kEditState_VIDEO:
13780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            err = M4VSS3GPP_intEditStepVideo(pC);
13790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
13800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
13810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VSS3GPP_kEditState_AUDIO:
13820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            err = M4VSS3GPP_intEditStepAudio(pC);
13830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
13840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
13850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VSS3GPP_kEditState_MP3:
13860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            err = M4VSS3GPP_intEditStepMP3(pC);
13870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
13880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
13890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VSS3GPP_kEditState_MP3_JUMP:
13900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            err = M4VSS3GPP_intEditJumpMP3(pC);
13910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
13920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
13930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        default:
13940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            M4OSA_TRACE1_0(
13950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                "M4VSS3GPP_editStep(): invalid internal state (0x%x), returning M4ERR_STATE");
13960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            return M4ERR_STATE;
13970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
13980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
13990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
14000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Compute progress.
14010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * We do the computing with 32bits precision because in some (very) extreme case, we may get
14020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * values higher than 256 (...) */
14030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    uiProgressAudio =
14040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        ( (M4OSA_UInt32)(pC->ewc.dATo * 100)) / pC->ewc.iOutputDuration;
14050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    // Decorrelate input and output encoding timestamp to handle encoder prefetch
14060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    uiProgressVideo = ((M4OSA_UInt32)(pC->ewc.dInputVidCts * 100)) / pC->ewc.iOutputDuration;
14070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
14080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    uiProgress = uiProgressAudio + uiProgressVideo;
14090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
14100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( ( pC->ewc.AudioStreamType != M4SYS_kAudioUnknown)
14110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        && (pC->ewc.VideoStreamType != M4SYS_kVideoUnknown) )
14120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        uiProgress /= 2;
14130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
14140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
14150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Sanity check */
14160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( uiProgress > 100 )
14170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
14180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        *pProgress = 100;
14190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
14200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    else
14210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
14220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        *pProgress = (M4OSA_UInt8)uiProgress;
14230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
14240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
14250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
14260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Return the error */
14270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_TRACE3_1("M4VSS3GPP_editStep(): returning 0x%x", err);
14280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    return err;
14290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi}
14300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
14310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/**
14320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ******************************************************************************
14330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_ERR M4VSS3GPP_editClose()
14340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief    Finish the VSS edit operation.
14350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @note    The output 3GPP file is ready to be played after this call
14360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param    pContext           (IN) VSS edit context
14370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return    M4NO_ERROR:       No error
14380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return    M4ERR_PARAMETER:  pContext is M4OSA_NULL (debug only)
14390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return    M4ERR_STATE:      VSS is not in an appropriate state for this function to be called
14400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ******************************************************************************
14410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */
14420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR M4VSS3GPP_editClose( M4VSS3GPP_EditContext pContext )
14430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{
14440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4VSS3GPP_InternalEditContext *pC =
14450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        (M4VSS3GPP_InternalEditContext *)pContext;
14460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_ERR err;
14470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_ERR returnedError = M4NO_ERROR;
14480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_UInt32 lastCTS;
14490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
14500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_TRACE3_1("M4VSS3GPP_editClose called with pContext=0x%x", pContext);
14510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
14520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
14530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    *    Check input parameter */
14540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_DEBUG_IF2((M4OSA_NULL == pContext), M4ERR_PARAMETER,
14550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        "M4VSS3GPP_editClose: pContext is M4OSA_NULL");
14560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
14570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
14580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Check state automaton.
14590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * In "theory", we should not authorize closing if we are in CREATED state.
14600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * But in practice, in case the opening failed, it may have been partially done.
14610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * In that case we have to free some opened ressources by calling Close. */
14620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( M4VSS3GPP_kEditState_CLOSED == pC->State )
14630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
14640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        M4OSA_TRACE1_1(
14650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            "M4VSS3GPP_editClose: Wrong state (0x%x), returning M4ERR_STATE",
14660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            pC->State);
14670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        return M4ERR_STATE;
14680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
14690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
14700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
14710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * There may be an encoder to destroy */
14720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    err = M4VSS3GPP_intDestroyVideoEncoder(pC);
14730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
14740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( M4NO_ERROR != err )
14750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
14760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        M4OSA_TRACE1_1(
14770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            "M4VSS3GPP_editClose: M4VSS3GPP_editDestroyVideoEncoder() returns 0x%x!",
14780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            err);
14790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /**< We do not return the error here because we still have stuff to free */
14800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        returnedError = err;
14810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
14820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
14830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
14840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Close the output file */
14850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( M4SYS_kMP3 == pC->ewc.AudioStreamType )
14860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
14870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /**
14880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        * MP3 case */
14890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        if( M4OSA_NULL != pC->ewc.p3gpWriterContext )
14900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
14910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            err = pC->pOsaFileWritPtr->closeWrite(pC->ewc.p3gpWriterContext);
14920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            pC->ewc.p3gpWriterContext = M4OSA_NULL;
14930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
14940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
14950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    else
14960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
14970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /**
14980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        * Close the output 3GPP clip, if it has been opened */
14990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        if( M4OSA_NULL != pC->ewc.p3gpWriterContext )
15000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
15010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            /* Update last Video CTS */
15020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            lastCTS = pC->ewc.iOutputDuration;
15030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
15040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            err = pC->ShellAPI.pWriterGlobalFcts->pFctSetOption(
15050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                pC->ewc.p3gpWriterContext,
15060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                (M4OSA_UInt32)M4WRITER_kMaxFileDuration, &lastCTS);
15070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
15080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            if( M4NO_ERROR != err )
15090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            {
15100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                M4OSA_TRACE1_1(
15110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    "M4VSS3GPP_editClose: SetOption(M4WRITER_kMaxFileDuration) returns 0x%x",
15120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    err);
15130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            }
15140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
15150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            err = pC->ShellAPI.pWriterGlobalFcts->pFctCloseWrite(
15160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                pC->ewc.p3gpWriterContext);
15170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
15180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            if( M4NO_ERROR != err )
15190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            {
15200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                M4OSA_TRACE1_1(
15210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    "M4VSS3GPP_editClose: pFctCloseWrite(OUT) returns 0x%x!",
15220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    err);
15230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                /**< We do not return the error here because we still have stuff to free */
15240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                if( M4NO_ERROR
15250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    == returnedError ) /**< we return the first error that happened */
15260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                {
15270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    returnedError = err;
15280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                }
15290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            }
15300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            pC->ewc.p3gpWriterContext = M4OSA_NULL;
15310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
15320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
15330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
15340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
15350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Free the output video DSI, if it has been created */
15360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( M4OSA_NULL != pC->ewc.pVideoOutputDsi )
15370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
15382ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu        free(pC->ewc.pVideoOutputDsi);
15390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC->ewc.pVideoOutputDsi = M4OSA_NULL;
15400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
15410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
15420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
15430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Free the output audio DSI, if it has been created */
15440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( M4OSA_NULL != pC->ewc.pAudioOutputDsi )
15450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
15462ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu        free(pC->ewc.pAudioOutputDsi);
15470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC->ewc.pAudioOutputDsi = M4OSA_NULL;
15480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
15490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
15500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
15510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Close clip1, if needed */
15520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( M4OSA_NULL != pC->pC1 )
15530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
15540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        err = M4VSS3GPP_intClipCleanUp(pC->pC1);
15550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
15560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        if( M4NO_ERROR != err )
15570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
15580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            M4OSA_TRACE1_1(
15590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                "M4VSS3GPP_editClose: M4VSS3GPP_intClipCleanUp(C1) returns 0x%x!",
15600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                err);
15610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            /**< We do not return the error here because we still have stuff to free */
15620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            if( M4NO_ERROR
15630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                == returnedError ) /**< we return the first error that happened */
15640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            {
15650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                returnedError = err;
15660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            }
15670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
15680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC->pC1 = M4OSA_NULL;
15690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
15700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
15710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
15720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Close clip2, if needed */
15730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( M4OSA_NULL != pC->pC2 )
15740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
15750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        err = M4VSS3GPP_intClipCleanUp(pC->pC2);
15760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
15770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        if( M4NO_ERROR != err )
15780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
15790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            M4OSA_TRACE1_1(
15800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                "M4VSS3GPP_editClose: M4VSS3GPP_intClipCleanUp(C2) returns 0x%x!",
15810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                err);
15820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            /**< We do not return the error here because we still have stuff to free */
15830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            if( M4NO_ERROR
15840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                == returnedError ) /**< we return the first error that happened */
15850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            {
15860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                returnedError = err;
15870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            }
15880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
15890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC->pC2 = M4OSA_NULL;
15900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
15910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
15920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
15930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Free the temporary YUV planes */
15940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( M4OSA_NULL != pC->yuv1[0].pac_data )
15950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
15962ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu        free(pC->yuv1[0].pac_data);
15970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC->yuv1[0].pac_data = M4OSA_NULL;
15980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
15990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
16000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( M4OSA_NULL != pC->yuv1[1].pac_data )
16010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
16022ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu        free(pC->yuv1[1].pac_data);
16030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC->yuv1[1].pac_data = M4OSA_NULL;
16040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
16050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
16060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( M4OSA_NULL != pC->yuv1[2].pac_data )
16070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
16082ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu        free(pC->yuv1[2].pac_data);
16090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC->yuv1[2].pac_data = M4OSA_NULL;
16100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
16110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
16120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( M4OSA_NULL != pC->yuv2[0].pac_data )
16130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
16142ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu        free(pC->yuv2[0].pac_data);
16150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC->yuv2[0].pac_data = M4OSA_NULL;
16160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
16170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
16180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( M4OSA_NULL != pC->yuv2[1].pac_data )
16190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
16202ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu        free(pC->yuv2[1].pac_data);
16210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC->yuv2[1].pac_data = M4OSA_NULL;
16220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
16230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
16240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( M4OSA_NULL != pC->yuv2[2].pac_data )
16250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
16262ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu        free(pC->yuv2[2].pac_data);
16270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC->yuv2[2].pac_data = M4OSA_NULL;
16280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
16290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
16300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /* RC */
16310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( M4OSA_NULL != pC->yuv3[0].pac_data )
16320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
16332ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu        free(pC->yuv3[0].pac_data);
16340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC->yuv3[0].pac_data = M4OSA_NULL;
16350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
16360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
16370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( M4OSA_NULL != pC->yuv3[1].pac_data )
16380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
16392ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu        free(pC->yuv3[1].pac_data);
16400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC->yuv3[1].pac_data = M4OSA_NULL;
16410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
16420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
16430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( M4OSA_NULL != pC->yuv3[2].pac_data )
16440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
16452ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu        free(pC->yuv3[2].pac_data);
16460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC->yuv3[2].pac_data = M4OSA_NULL;
16470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
16480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
16490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /* RC */
16500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( M4OSA_NULL != pC->yuv4[0].pac_data )
16510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
16522ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu        free(pC->yuv4[0].pac_data);
16530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC->yuv4[0].pac_data = M4OSA_NULL;
16540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
16550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
16560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( M4OSA_NULL != pC->yuv4[1].pac_data )
16570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
16582ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu        free(pC->yuv4[1].pac_data);
16590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC->yuv4[1].pac_data = M4OSA_NULL;
16600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
16610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
16620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( M4OSA_NULL != pC->yuv4[2].pac_data )
16630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
16642ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu        free(pC->yuv4[2].pac_data);
16650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC->yuv4[2].pac_data = M4OSA_NULL;
16660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
16670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
16680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
16690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * RC Free effects list */
16700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( pC->pEffectsList != M4OSA_NULL )
16710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
16722ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu        free(pC->pEffectsList);
16730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC->pEffectsList = M4OSA_NULL;
16740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
16750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
16760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
16770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * RC Free active effects list */
16780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( pC->pActiveEffectsList != M4OSA_NULL )
16790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
16802ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu        free(pC->pActiveEffectsList);
16810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC->pActiveEffectsList = M4OSA_NULL;
16820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
16830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
16840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi     *  Free active effects list */
16850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if(pC->pActiveEffectsList1 != M4OSA_NULL)
16860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
16872ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu        free(pC->pActiveEffectsList1);
16880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC->pActiveEffectsList1 = M4OSA_NULL;
16890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
169039beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury    if(pC->m_air_context != M4OSA_NULL) {
169139beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury        free(pC->m_air_context);
169239beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury        pC->m_air_context = M4OSA_NULL;
169339beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury    }
16940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
16950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Update state automaton */
16960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pC->State = M4VSS3GPP_kEditState_CLOSED;
16970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
16980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
16990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Return with no error */
17000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_TRACE3_1("M4VSS3GPP_editClose(): returning 0x%x", returnedError);
17010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    return returnedError;
17020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi}
17030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
17040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/**
17050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ******************************************************************************
17060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_ERR M4VSS3GPP_editCleanUp()
17070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief    Free all resources used by the VSS edit operation.
17080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @note    The context is no more valid after this call
17090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param    pContext            (IN) VSS edit context
17100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return    M4NO_ERROR:            No error
17110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return    M4ERR_PARAMETER:    pContext is M4OSA_NULL (debug only)
17120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ******************************************************************************
17130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */
17140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR M4VSS3GPP_editCleanUp( M4VSS3GPP_EditContext pContext )
17150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{
17160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_ERR err;
17170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4VSS3GPP_InternalEditContext *pC =
17180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        (M4VSS3GPP_InternalEditContext *)pContext;
17190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
17200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_TRACE3_1("M4VSS3GPP_editCleanUp called with pContext=0x%x", pContext);
17210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
17220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
17230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    *    Check input parameter */
17240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( M4OSA_NULL == pContext )
17250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
17260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        M4OSA_TRACE1_0(
17270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            "M4VSS3GPP_editCleanUp(): pContext is M4OSA_NULL, returning M4ERR_PARAMETER");
17280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        return M4ERR_PARAMETER;
17290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
17300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
17310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
17320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Close, if needed.
17330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * In "theory", we should not close if we are in CREATED state.
17340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * But in practice, in case the opening failed, it may have been partially done.
17350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * In that case we have to free some opened ressources by calling Close. */
17360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( M4VSS3GPP_kEditState_CLOSED != pC->State )
17370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
17380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        M4OSA_TRACE3_0("M4VSS3GPP_editCleanUp(): calling M4VSS3GPP_editClose");
17390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        err = M4VSS3GPP_editClose(pC);
17400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
17410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        if( M4NO_ERROR != err )
17420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
17430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            M4OSA_TRACE1_1(
17440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                "M4VSS3GPP_editCleanUp(): M4VSS3GPP_editClose returns 0x%x",
17450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                err);
17460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
17470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
17480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
17490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
17500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Free the video encoder dummy AU */
17510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( M4OSA_NULL != pC->ewc.pDummyAuBuffer )
17520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
17532ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu        free(pC->ewc.pDummyAuBuffer);
17540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC->ewc.pDummyAuBuffer = M4OSA_NULL;
17550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
17560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
17570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
17580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Free the Audio encoder context */
17590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( M4OSA_NULL != pC->ewc.pAudioEncCtxt )
17600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
17610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        err = pC->ShellAPI.pAudioEncoderGlobalFcts->pFctClose(
17620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            pC->ewc.pAudioEncCtxt);
17630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
17640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        if( M4NO_ERROR != err )
17650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
17660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            M4OSA_TRACE1_1(
17670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                "M4VSS3GPP_editCleanUp: pAudioEncoderGlobalFcts->pFctClose returns 0x%x",
17680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                err);
17690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            /**< don't return, we still have stuff to free */
17700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
17710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
17720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        err = pC->ShellAPI.pAudioEncoderGlobalFcts->pFctCleanUp(
17730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            pC->ewc.pAudioEncCtxt);
17740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
17750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        if( M4NO_ERROR != err )
17760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
17770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            M4OSA_TRACE1_1(
17780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                "M4VSS3GPP_editCleanUp: pAudioEncoderGlobalFcts->pFctCleanUp returns 0x%x",
17790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                err);
17800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            /**< don't return, we still have stuff to free */
17810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
17820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
17830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC->ewc.pAudioEncCtxt = M4OSA_NULL;
17840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
17850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
17860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
17870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Free the shells interfaces */
17880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4VSS3GPP_unRegisterAllWriters(&pC->ShellAPI);
17890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4VSS3GPP_unRegisterAllEncoders(&pC->ShellAPI);
17900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4VSS3GPP_unRegisterAllReaders(&pC->ShellAPI);
17910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4VSS3GPP_unRegisterAllDecoders(&pC->ShellAPI);
17920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
17930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
17940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Free the settings copied in the internal context */
17950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4VSS3GPP_intFreeSettingsList(pC);
17960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
17970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
17980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Finally, Free context */
17992ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu    free(pC);
18000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pC = M4OSA_NULL;
18010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
18020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
18030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Return with no error */
18040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_TRACE3_0("M4VSS3GPP_editCleanUp(): returning M4NO_ERROR");
18050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    return M4NO_ERROR;
18060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi}
18070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
18080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#ifdef WIN32
18090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/**
18100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ******************************************************************************
18110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_ERR M4VSS3GPP_GetErrorMessage()
18120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief    Return a string describing the given error code
18130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @note    The input string must be already allocated (and long enough!)
18140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param    err                (IN) Error code to get the description from
18150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param    sMessage        (IN/OUT) Allocated string in which the description will be copied
18160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return    M4NO_ERROR:        Input error is from the VSS3GPP module
18170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return    M4ERR_PARAMETER:Input error is not from the VSS3GPP module
18180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ******************************************************************************
18190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */
18200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
18210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR M4VSS3GPP_GetErrorMessage( M4OSA_ERR err, M4OSA_Char *sMessage )
18220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{
18230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    switch( err )
18240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
18250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VSS3GPP_WAR_EDITING_DONE:
18260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_WAR_EDITING_DONE");
18270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
18280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
18290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VSS3GPP_WAR_END_OF_AUDIO_MIXING:
18300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_WAR_END_OF_AUDIO_MIXING");
18310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
18320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
18330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VSS3GPP_WAR_END_OF_EXTRACT_PICTURE:
18340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_WAR_END_OF_EXTRACT_PICTURE");
18350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
18360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
18370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VSS3GPP_ERR_INVALID_FILE_TYPE:
18380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_INVALID_FILE_TYPE");
18390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
18400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
18410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VSS3GPP_ERR_INVALID_EFFECT_KIND:
18420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_INVALID_EFFECT_KIND");
18430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
18440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
18450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VSS3GPP_ERR_INVALID_VIDEO_EFFECT_TYPE:
18460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_INVALID_VIDEO_EFFECT_TYPE");
18470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
18480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
18490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VSS3GPP_ERR_INVALID_AUDIO_EFFECT_TYPE:
18500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_INVALID_AUDIO_EFFECT_TYPE");
18510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
18520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
18530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VSS3GPP_ERR_INVALID_VIDEO_TRANSITION_TYPE:
18540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_INVALID_VIDEO_TRANSITION_TYPE");
18550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
18560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
18570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VSS3GPP_ERR_INVALID_AUDIO_TRANSITION_TYPE:
18580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_INVALID_AUDIO_TRANSITION_TYPE");
18590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
18600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
18610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VSS3GPP_ERR_INVALID_VIDEO_ENCODING_FRAME_RATE:
18620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_INVALID_VIDEO_ENCODING_FRAME_RATE");
18630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
18640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
18650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VSS3GPP_ERR_EXTERNAL_EFFECT_NULL:
18660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_EXTERNAL_EFFECT_NULL");
18670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
18680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
18690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VSS3GPP_ERR_EXTERNAL_TRANSITION_NULL:
18700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_EXTERNAL_TRANSITION_NULL");
18710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
18720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
18730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VSS3GPP_ERR_BEGIN_CUT_LARGER_THAN_DURATION:
18740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_BEGIN_CUT_LARGER_THAN_DURATION");
18750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
18760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
18770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VSS3GPP_ERR_BEGIN_CUT_LARGER_THAN_END_CUT:
18780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_BEGIN_CUT_LARGER_THAN_END_CUT");
18790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
18800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
18810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VSS3GPP_ERR_OVERLAPPING_TRANSITIONS:
18820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_OVERLAPPING_TRANSITIONS");
18830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
18840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
18850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VSS3GPP_ERR_INVALID_3GPP_FILE:
18860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_INVALID_3GPP_FILE");
18870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
18880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
18890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VSS3GPP_ERR_UNSUPPORTED_INPUT_VIDEO_FORMAT:
18900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_UNSUPPORTED_INPUT_VIDEO_FORMAT");
18910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
18920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
18930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VSS3GPP_ERR_UNSUPPORTED_INPUT_AUDIO_FORMAT:
18940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_UNSUPPORTED_INPUT_AUDIO_FORMAT");
18950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
18960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
18970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VSS3GPP_ERR_AMR_EDITING_UNSUPPORTED:
18980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_AMR_EDITING_UNSUPPORTED");
18990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
19000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
19010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VSS3GPP_ERR_INPUT_VIDEO_AU_TOO_LARGE:
19020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_INPUT_VIDEO_AU_TOO_LARGE");
19030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
19040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
19050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VSS3GPP_ERR_INPUT_AUDIO_AU_TOO_LARGE:
19060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_INPUT_AUDIO_AU_TOO_LARGE");
19070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
19080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
19090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VSS3GPP_ERR_INPUT_AUDIO_CORRUPTED_AU:
19100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_INPUT_AUDIO_CORRUPTED_AU");
19110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
19120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
19130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VSS3GPP_ERR_ENCODER_ACCES_UNIT_ERROR:
19140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_ENCODER_ACCES_UNIT_ERROR");
19150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
19160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
19170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VSS3GPP_ERR_EDITING_UNSUPPORTED_VIDEO_FORMAT:
19180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_EDITING_UNSUPPORTED_VIDEO_FORMAT");
19190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
19200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
19210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VSS3GPP_ERR_EDITING_UNSUPPORTED_H263_PROFILE:
19220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_EDITING_UNSUPPORTED_H263_PROFILE");
19230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
19240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
19250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VSS3GPP_ERR_EDITING_UNSUPPORTED_MPEG4_PROFILE:
19260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_EDITING_UNSUPPORTED_MPEG4_PROFILE");
19270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
19280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
19290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VSS3GPP_ERR_EDITING_UNSUPPORTED_MPEG4_RVLC:
19300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_EDITING_UNSUPPORTED_MPEG4_RVLC");
19310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
19320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
19330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VSS3GPP_ERR_EDITING_UNSUPPORTED_AUDIO_FORMAT:
19340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_EDITING_UNSUPPORTED_AUDIO_FORMAT");
19350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
19360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
19370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VSS3GPP_ERR_EDITING_NO_SUPPORTED_STREAM_IN_FILE:
19380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            strcpy(sMessage,
19390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                "M4VSS3GPP_ERR_EDITING_NO_SUPPORTED_STREAM_IN_FILE");
19400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
19410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
19420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VSS3GPP_ERR_EDITING_NO_SUPPORTED_VIDEO_STREAM_IN_FILE:
19430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            strcpy(sMessage,
19440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                "M4VSS3GPP_ERR_EDITING_NO_SUPPORTED_VIDEO_STREAM_IN_FILE");
19450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
19460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
19470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VSS3GPP_ERR_INVALID_CLIP_ANALYSIS_VERSION:
19480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_INVALID_CLIP_ANALYSIS_VERSION");
19490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
19500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
19510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VSS3GPP_ERR_INCOMPATIBLE_VIDEO_FORMAT:
19520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_INCOMPATIBLE_VIDEO_FORMAT");
19530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
19540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
19550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VSS3GPP_ERR_INCOMPATIBLE_VIDEO_FRAME_SIZE:
19560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_INCOMPATIBLE_VIDEO_FRAME_SIZE");
19570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
19580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
19590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VSS3GPP_ERR_INCOMPATIBLE_VIDEO_TIME_SCALE:
19600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_INCOMPATIBLE_VIDEO_TIME_SCALE");
19610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
19620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
19630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VSS3GPP_ERR_INCOMPATIBLE_VIDEO_DATA_PARTITIONING:
19640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            strcpy(sMessage,
19650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                "M4VSS3GPP_ERR_INCOMPATIBLE_VIDEO_DATA_PARTITIONING");
19660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
19670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
19680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VSS3GPP_ERR_UNSUPPORTED_MP3_ASSEMBLY:
19690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_UNSUPPORTED_MP3_ASSEMBLY");
19700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
19710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
19720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VSS3GPP_WAR_INCOMPATIBLE_AUDIO_STREAM_TYPE:
19730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_WAR_INCOMPATIBLE_AUDIO_STREAM_TYPE");
19740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
19750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
19760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VSS3GPP_WAR_INCOMPATIBLE_AUDIO_NB_OF_CHANNELS:
19770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_WAR_INCOMPATIBLE_AUDIO_NB_OF_CHANNELS");
19780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
19790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
19800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VSS3GPP_WAR_INCOMPATIBLE_AUDIO_SAMPLING_FREQUENCY:
19810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            strcpy(sMessage,
19820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                "M4VSS3GPP_WAR_INCOMPATIBLE_AUDIO_SAMPLING_FREQUENCY");
19830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
19840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
19850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VSS3GPP_ERR_NO_SUPPORTED_STREAM_IN_FILE:
19860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_NO_SUPPORTED_STREAM_IN_FILE");
19870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
19880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
19890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VSS3GPP_ERR_ADDVOLUME_EQUALS_ZERO:
19900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_ADDVOLUME_EQUALS_ZERO");
19910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
19920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
19930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VSS3GPP_ERR_ADDCTS_HIGHER_THAN_VIDEO_DURATION:
19940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_ADDCTS_HIGHER_THAN_VIDEO_DURATION");
19950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
19960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
19970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VSS3GPP_ERR_UNDEFINED_AUDIO_TRACK_FILE_FORMAT:
19980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_UNDEFINED_AUDIO_TRACK_FILE_FORMAT");
19990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
20000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
20010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VSS3GPP_ERR_UNSUPPORTED_ADDED_AUDIO_STREAM:
20020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_UNSUPPORTED_ADDED_AUDIO_STREAM");
20030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
20040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
20050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VSS3GPP_ERR_AUDIO_MIXING_UNSUPPORTED:
20060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_AUDIO_MIXING_UNSUPPORTED");
20070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
20080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
20090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VSS3GPP_ERR_FEATURE_UNSUPPORTED_WITH_AUDIO_TRACK:
20100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            strcpy(sMessage,
20110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                "M4VSS3GPP_ERR_FEATURE_UNSUPPORTED_WITH_AUDIO_TRACK");
20120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
20130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
20140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VSS3GPP_ERR_AUDIO_CANNOT_BE_MIXED:
20150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_AUDIO_CANNOT_BE_MIXED");
20160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
20170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
20180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VSS3GPP_ERR_INPUT_CLIP_IS_NOT_A_3GPP:
20190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_INPUT_CLIP_IS_NOT_A_3GPP");
20200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
20210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
20220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VSS3GPP_ERR_BEGINLOOP_HIGHER_ENDLOOP:
20230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_BEGINLOOP_HIGHER_ENDLOOP");
20240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
20250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
20260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VSS3GPP_ERR_H263_PROFILE_NOT_SUPPORTED:
20270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_H263_PROFILE_NOT_SUPPORTED");
20280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
20290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
20300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        case M4VSS3GPP_ERR_NO_SUPPORTED_VIDEO_STREAM_IN_FILE:
20310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_NO_SUPPORTED_VIDEO_STREAM_IN_FILE");
20320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            break;
20330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
20340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        default: /**< Not a VSS3GPP error */
20350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            strcpy(sMessage, "");
20360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            return M4ERR_PARAMETER;
20370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
20380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    return M4NO_ERROR;
20390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi}
20400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
20410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#endif /* WIN32 */
20420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
20430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/********************************************************/
20440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/********************************************************/
20450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/********************************************************/
20460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/****************   STATIC FUNCTIONS   ******************/
20470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/********************************************************/
20480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/********************************************************/
20490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/********************************************************/
20500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
20510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/**
20520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ******************************************************************************
20530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_ERR M4VSS3GPP_intClipSettingsSanityCheck()
20540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief    Simplify the given clip settings
20550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @note    This function may modify the given structure
20560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param   pClip    (IN/OUT) Clip settings
20570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return    M4NO_ERROR:            No error
20580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return    M4VSS3GPP_ERR_EXTERNAL_EFFECT_NULL:
20590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ******************************************************************************
20600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */
20610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
20620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4OSA_ERR M4VSS3GPP_intClipSettingsSanityCheck(
20630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4VSS3GPP_ClipSettings *pClip )
20640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{
20650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_UInt8 uiFx;
20660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_UInt32
20670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        uiClipActualDuration; /**< the clip duration once the cuts are done */
20680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_UInt32 uiDuration;
20690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4VSS3GPP_EffectSettings *pFx;
20700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
20710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
20720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * If begin cut is too far, return an error */
20730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    uiDuration = pClip->ClipProperties.uiClipDuration;
20740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
20750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( pClip->uiBeginCutTime > uiDuration )
20760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
20770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        M4OSA_TRACE1_2(
20780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            "M4VSS3GPP_intClipSettingsSanityCheck: %d > %d,\
20790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            returning M4VSS3GPP_ERR_BEGIN_CUT_LARGER_THAN_DURATION",
20800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            pClip->uiBeginCutTime, uiDuration);
20810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        return M4VSS3GPP_ERR_BEGIN_CUT_LARGER_THAN_DURATION;
20820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
20830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
20840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
20850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * If end cut is too far, set to zero (it means no end cut) */
20860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( pClip->uiEndCutTime > uiDuration )
20870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
20880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pClip->uiEndCutTime = 0;
20890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
20900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
20910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
20920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Compute actual clip duration (once cuts are done) */
20930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( 0 == pClip->uiEndCutTime )
20940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
20950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /**
20960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        * No end cut */
20970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        uiClipActualDuration = uiDuration - pClip->uiBeginCutTime;
20980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
20990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    else
21000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
21010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        if( pClip->uiBeginCutTime >= pClip->uiEndCutTime )
21020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
21030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            M4OSA_TRACE1_2(
21040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                "M4VSS3GPP_intClipSettingsSanityCheck: %d > %d,\
21050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                returning M4VSS3GPP_ERR_BEGIN_CUT_LARGER_THAN_END_CUT",
21060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                pClip->uiBeginCutTime, pClip->uiEndCutTime);
21070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            return M4VSS3GPP_ERR_BEGIN_CUT_LARGER_THAN_END_CUT;
21080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
21090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        uiClipActualDuration = pClip->uiEndCutTime - pClip->uiBeginCutTime;
21100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
21110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
21120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    return M4NO_ERROR;
21130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi}
21140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
21150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/**
21160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ******************************************************************************
21170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_ERR M4VSS3GPP_intTransitionSettingsSanityCheck()
21180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief    Simplify the given transition settings
21190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @note     This function may modify the given structure
21200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param    pTransition    (IN/OUT) Transition settings
21210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return    M4NO_ERROR:            No error
21220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return    M4VSS3GPP_ERR_EXTERNAL_TRANSITION_NULL:
21230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ******************************************************************************
21240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */
21250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4OSA_ERR M4VSS3GPP_intTransitionSettingsSanityCheck(
21260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4VSS3GPP_TransitionSettings *pTransition )
21270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{
21280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
21290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * No transition */
21300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( 0 == pTransition->uiTransitionDuration )
21310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
21320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pTransition->VideoTransitionType = M4VSS3GPP_kVideoTransitionType_None;
21330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pTransition->AudioTransitionType = M4VSS3GPP_kAudioTransitionType_None;
21340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
21350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    else if( ( M4VSS3GPP_kVideoTransitionType_None
21360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        == pTransition->VideoTransitionType)
21370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        && (M4VSS3GPP_kAudioTransitionType_None
21380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        == pTransition->AudioTransitionType) )
21390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
21400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pTransition->uiTransitionDuration = 0;
21410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
21420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
21430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
21440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Check external transition function is set */
21450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( ( pTransition->VideoTransitionType
21460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        >= M4VSS3GPP_kVideoTransitionType_External)
21470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        && (M4OSA_NULL == pTransition->ExtVideoTransitionFct) )
21480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
21490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        return M4VSS3GPP_ERR_EXTERNAL_TRANSITION_NULL;
21500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
21510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
21520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
21530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Set minimal transition duration */
21540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( ( pTransition->uiTransitionDuration > 0)
21550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        && (pTransition->uiTransitionDuration
21560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        < M4VSS3GPP_MINIMAL_TRANSITION_DURATION) )
21570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
21580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pTransition->uiTransitionDuration =
21590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            M4VSS3GPP_MINIMAL_TRANSITION_DURATION;
21600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
21610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    return M4NO_ERROR;
21620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi}
21630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
21640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/**
21650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ******************************************************************************
21660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_ERR M4VSS3GPP_intFreeSettingsList()
21670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief    Free the settings copied in the internal context
21680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param   pC    (IN/OUT) Internal edit context
21690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ******************************************************************************
21700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */
21710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4OSA_Void M4VSS3GPP_intFreeSettingsList(
21720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4VSS3GPP_InternalEditContext *pC )
21730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{
21740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_UInt32 i;
21750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
21760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
21770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Free the settings list */
21780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( M4OSA_NULL != pC->pClipList )
21790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
21800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        for ( i = 0; i < pC->uiClipNumber; i++ )
21810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
21820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            M4VSS3GPP_editFreeClipSettings(&(pC->pClipList[i]));
21830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
21840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
21852ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu        free(pC->pClipList);
21860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC->pClipList = M4OSA_NULL;
21870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
21880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
21890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
21900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Free the transition list */
21910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( M4OSA_NULL != pC->pTransitionList )
21920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
21932ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu        free(pC->pTransitionList);
21940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC->pTransitionList = M4OSA_NULL;
21950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
21960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi}
21970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/**
21980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ******************************************************************************
21990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_ERR M4VSS3GPP_intCreateMP3OutputFile()
22000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief        Creates and prepare the output MP file
22010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param   pC    (IN/OUT) Internal edit context
22020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ******************************************************************************
22030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */
22040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4OSA_ERR
22050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4VSS3GPP_intCreateMP3OutputFile( M4VSS3GPP_InternalEditContext *pC,
22060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                                 M4OSA_Void *pOutputFile )
22070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{
22080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_ERR err;
22090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
22100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    err =
22110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC->pOsaFileWritPtr->openWrite(&pC->ewc.p3gpWriterContext, pOutputFile,
22120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        M4OSA_kFileWrite);
22130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
22140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( M4NO_ERROR != err )
22150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
22160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        M4OSA_TRACE1_1(
22170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            "M4VSS3GPP_intCreateMP3OutputFile: WriteOpen returns 0x%x!", err);
22180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        return err;
22190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
22200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
22210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    return M4NO_ERROR;
22220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi}
22230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/**
22240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ******************************************************************************
22250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_ERR M4VSS3GPP_intCreate3GPPOutputFile()
22260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief   Creates and prepare the output MP3 file
22270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @note    Creates the writer, Creates the output file, Adds the streams,
22280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi           Readies the writing process
22290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param   pC    (IN/OUT) Internal edit context
22300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ******************************************************************************
22310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */
22320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR
22330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4VSS3GPP_intCreate3GPPOutputFile( M4VSS3GPP_EncodeWriteContext *pC_ewc,
22340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                                  M4VSS3GPP_MediaAndCodecCtxt *pC_ShellAPI,
22350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                                  M4OSA_FileWriterPointer *pOsaFileWritPtr,
22360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                                  M4OSA_Void *pOutputFile,
22370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                                  M4OSA_FileReadPointer *pOsaFileReadPtr,
22380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                                  M4OSA_Void *pTempFile,
22390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                                  M4OSA_UInt32 maxOutputFileSize )
22400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{
22410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_ERR err;
22420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_UInt32 uiVersion;
22430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4SYS_StreamIDValue temp;
22440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
22450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_TRACE3_2(
22460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        "M4VSS3GPP_intCreate3GPPOutputFile called with pC_ewc=0x%x, pOutputFile=0x%x",
22470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC_ewc, pOutputFile);
22480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
22490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
22500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    *    Check input parameter */
22510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_DEBUG_IF2((M4OSA_NULL == pC_ewc), M4ERR_PARAMETER,
22520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        "M4VSS3GPP_intCreate3GPPOutputFile: pC_ewc is M4OSA_NULL");
22530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_DEBUG_IF2((M4OSA_NULL == pOutputFile), M4ERR_PARAMETER,
22540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        "M4VSS3GPP_intCreate3GPPOutputFile: pOutputFile is M4OSA_NULL");
22550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
22560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /* Set writer */
22570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    err =
22580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        M4VSS3GPP_setCurrentWriter(pC_ShellAPI, M4VIDEOEDITING_kFileType_3GPP);
22590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4ERR_CHECK_RETURN(err);
22600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
22610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
22620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Create the output file */
22630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    err = pC_ShellAPI->pWriterGlobalFcts->pFctOpen(&pC_ewc->p3gpWriterContext,
22640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pOutputFile, pOsaFileWritPtr, pTempFile, pOsaFileReadPtr);
22650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
22660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( M4NO_ERROR != err )
22670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
22680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        M4OSA_TRACE1_1(
22690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            "M4VSS3GPP_intCreate3GPPOutputFile: pWriterGlobalFcts->pFctOpen returns 0x%x!",
22700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            err);
22710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        return err;
22720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
22730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
22740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
22750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Set the signature option of the writer */
22760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    err =
22770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC_ShellAPI->pWriterGlobalFcts->pFctSetOption(pC_ewc->p3gpWriterContext,
22780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        M4WRITER_kEmbeddedString, (M4OSA_DataOption)"NXP-SW : VSS    ");
22790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
22800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( ( M4NO_ERROR != err) && (((M4OSA_UInt32)M4ERR_BAD_OPTION_ID)
22810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        != err) ) /* this option may not be implemented by some writers */
22820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
22830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        M4OSA_TRACE1_1(
22840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            "M4VSS3GPP_intCreate3GPPOutputFile:\
22850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            pWriterGlobalFcts->pFctSetOption(M4WRITER_kEmbeddedString) returns 0x%x!",
22860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            err);
22870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        return err;
22880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
22890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
22900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /*11/12/2008 CR3283 MMS use case for VideoArtist:
22910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    Set the max output file size option in the writer so that the output file will be
22920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    smaller than the given file size limitation*/
22930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( maxOutputFileSize > 0 )
22940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
22950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        err = pC_ShellAPI->pWriterGlobalFcts->pFctSetOption(
22960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            pC_ewc->p3gpWriterContext,
22970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            M4WRITER_kMaxFileSize, &maxOutputFileSize);
22980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
22990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        if( M4NO_ERROR != err )
23000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
23010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            M4OSA_TRACE1_1(
23020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                "M4VSS3GPP_intCreate3GPPOutputFile:\
23030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                writer set option M4WRITER_kMaxFileSize returns 0x%x",
23040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                err);
23050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            return err;
23060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
23070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
23080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
23090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
23100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Set the version option of the writer */
23110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    uiVersion =
23120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        (M4VIDEOEDITING_VERSION_MAJOR * 100 + M4VIDEOEDITING_VERSION_MINOR * 10
23130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        + M4VIDEOEDITING_VERSION_REVISION);
23140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    err =
23150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC_ShellAPI->pWriterGlobalFcts->pFctSetOption(pC_ewc->p3gpWriterContext,
23160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        M4WRITER_kEmbeddedVersion, (M4OSA_DataOption) &uiVersion);
23170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
23180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( ( M4NO_ERROR != err) && (((M4OSA_UInt32)M4ERR_BAD_OPTION_ID)
23190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        != err) ) /* this option may not be implemented by some writers */
23200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
23210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        M4OSA_TRACE1_1(
23220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            "M4VSS3GPP_intCreate3GPPOutputFile:\
23230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            pWriterGlobalFcts->pFctSetOption(M4WRITER_kEmbeddedVersion) returns 0x%x!",
23240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            err);
23250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        return err;
23260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
23270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
23280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( M4SYS_kVideoUnknown != pC_ewc->VideoStreamType )
23290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
23300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /**
23310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        * Set the video stream properties */
23320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC_ewc->WriterVideoStreamInfo.height = pC_ewc->uiVideoHeight;
23330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC_ewc->WriterVideoStreamInfo.width = pC_ewc->uiVideoWidth;
23340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC_ewc->WriterVideoStreamInfo.fps =
23350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            0.0; /**< Not used by the shell/core writer */
23360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC_ewc->WriterVideoStreamInfo.Header.pBuf =
23370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            pC_ewc->pVideoOutputDsi; /**< Previously computed output DSI */
23380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC_ewc->WriterVideoStreamInfo.Header.Size = pC_ewc->
23390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            uiVideoOutputDsiSize; /**< Previously computed output DSI size */
23400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
23410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC_ewc->WriterVideoStream.streamType = pC_ewc->VideoStreamType;
23420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
23430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        switch( pC_ewc->VideoStreamType )
23440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
23450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            case M4SYS_kMPEG_4:
23460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            case M4SYS_kH263:
23470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            case M4SYS_kH264:
23480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                /**< We HAVE to put a value here... */
23490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                pC_ewc->WriterVideoStream.averageBitrate =
23500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    pC_ewc->uiVideoBitrate;
23510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                pC_ewc->WriterVideoStream.maxBitrate = pC_ewc->uiVideoBitrate;
23520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                break;
23530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
23540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            default:
23550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                M4OSA_TRACE1_1(
23560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    "M4VSS3GPP_intCreate3GPPOutputFile: unknown input video format (0x%x),\
23570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    returning M4VSS3GPP_ERR_UNSUPPORTED_INPUT_VIDEO_FORMAT!",
23580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    pC_ewc->VideoStreamType);
23590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                return M4VSS3GPP_ERR_UNSUPPORTED_INPUT_VIDEO_FORMAT;
23600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
23610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
23620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC_ewc->WriterVideoStream.streamID = M4VSS3GPP_WRITER_VIDEO_STREAM_ID;
23630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC_ewc->WriterVideoStream.timeScale =
23640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            0; /**< Not used by the shell/core writer */
23650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC_ewc->WriterVideoStream.profileLevel =
23660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            0; /**< Not used by the shell/core writer */
23670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC_ewc->WriterVideoStream.duration =
23680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            0; /**< Not used by the shell/core writer */
23690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
23700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC_ewc->WriterVideoStream.decoderSpecificInfoSize =
23710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            sizeof(M4WRITER_StreamVideoInfos);
23720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC_ewc->WriterVideoStream.decoderSpecificInfo =
23730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            (M4OSA_MemAddr32) &(pC_ewc->WriterVideoStreamInfo);
23740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
23750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /**
23760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        * Add the video stream */
23770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        err = pC_ShellAPI->pWriterGlobalFcts->pFctAddStream(
23780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            pC_ewc->p3gpWriterContext, &pC_ewc->WriterVideoStream);
23790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
23800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        if( M4NO_ERROR != err )
23810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
23820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            M4OSA_TRACE1_1(
23830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                "M4VSS3GPP_intCreate3GPPOutputFile:\
23840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                pWriterGlobalFcts->pFctAddStream(video) returns 0x%x!",
23850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                err);
23860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            return err;
23870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
23880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
23890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /**
23900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        * Update AU properties for video stream */
23910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC_ewc->WriterVideoAU.attribute = AU_RAP;
23920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC_ewc->WriterVideoAU.CTS = 0;
23930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC_ewc->WriterVideoAU.DTS = 0;    /** Reset time */
23940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC_ewc->WriterVideoAU.frag = M4OSA_NULL;
23950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC_ewc->WriterVideoAU.nbFrag = 0; /** No fragment */
23960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC_ewc->WriterVideoAU.size = 0;
23970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC_ewc->WriterVideoAU.dataAddress = M4OSA_NULL;
23980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC_ewc->WriterVideoAU.stream = &(pC_ewc->WriterVideoStream);
23990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
24000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /**
24010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        * Set the writer max video AU size */
24020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC_ewc->uiVideoMaxAuSize = (M4OSA_UInt32)(1.5F
24030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            *(M4OSA_Float)(pC_ewc->WriterVideoStreamInfo.width
24040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            * pC_ewc->WriterVideoStreamInfo.height)
24050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            * M4VSS3GPP_VIDEO_MIN_COMPRESSION_RATIO);
24060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        temp.streamID = M4VSS3GPP_WRITER_VIDEO_STREAM_ID;
24070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        temp.value = pC_ewc->uiVideoMaxAuSize;
24080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        err = pC_ShellAPI->pWriterGlobalFcts->pFctSetOption(
24090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            pC_ewc->p3gpWriterContext, (M4OSA_UInt32)M4WRITER_kMaxAUSize,
24100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            (M4OSA_DataOption) &temp);
24110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
24120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        if( M4NO_ERROR != err )
24130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
24140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            M4OSA_TRACE1_1(
24150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                "M4VSS3GPP_intCreate3GPPOutputFile:\
24160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                pWriterGlobalFcts->pFctSetOption(M4WRITER_kMaxAUSize, video) returns 0x%x!",
24170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                err);
24180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            return err;
24190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
24200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
24210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /**
24220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        * Set the writer max video chunk size */
24230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        temp.streamID = M4VSS3GPP_WRITER_VIDEO_STREAM_ID;
24240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        temp.value = (M4OSA_UInt32)(pC_ewc->uiVideoMaxAuSize \
24250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            * M4VSS3GPP_VIDEO_AU_SIZE_TO_CHUNCK_SIZE_RATIO); /**< from max AU size to
24260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                                                                  max Chunck size */
24270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        err = pC_ShellAPI->pWriterGlobalFcts->pFctSetOption(
24280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            pC_ewc->p3gpWriterContext,
24290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            (M4OSA_UInt32)M4WRITER_kMaxChunckSize,
24300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            (M4OSA_DataOption) &temp);
24310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
24320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        if( M4NO_ERROR != err )
24330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
24340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            M4OSA_TRACE1_1(
24350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                "M4VSS3GPP_intCreate3GPPOutputFile:\
24360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                pWriterGlobalFcts->pFctSetOption(M4WRITER_kMaxAUSize, video) returns 0x%x!",
24370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                err);
24380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            return err;
24390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
24400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
24410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
24420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( M4SYS_kAudioUnknown != pC_ewc->AudioStreamType )
24430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
24440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        M4WRITER_StreamAudioInfos streamAudioInfo;
24450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
24460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        streamAudioInfo.nbSamplesPerSec = 0; /**< unused by our shell writer */
24470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        streamAudioInfo.nbBitsPerSample = 0; /**< unused by our shell writer */
24480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        streamAudioInfo.nbChannels = 1;      /**< unused by our shell writer */
24490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
24500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        if( pC_ewc->pAudioOutputDsi != M4OSA_NULL )
24510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
24520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            /* If we copy the stream from the input, we copy its DSI */
24530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            streamAudioInfo.Header.Size = pC_ewc->uiAudioOutputDsiSize;
24540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            streamAudioInfo.Header.pBuf = pC_ewc->pAudioOutputDsi;
24550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
24560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        else
24570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
24580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            /* Writer will put a default DSI */
24590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            streamAudioInfo.Header.Size = 0;
24600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            streamAudioInfo.Header.pBuf = M4OSA_NULL;
24610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
24620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
24630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC_ewc->WriterAudioStream.streamID = M4VSS3GPP_WRITER_AUDIO_STREAM_ID;
24640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC_ewc->WriterAudioStream.streamType = pC_ewc->AudioStreamType;
24650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC_ewc->WriterAudioStream.duration =
24660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            0; /**< Not used by the shell/core writer */
24670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC_ewc->WriterAudioStream.profileLevel =
24680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            0; /**< Not used by the shell/core writer */
24690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC_ewc->WriterAudioStreamInfo.nbSamplesPerSec =
24700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            pC_ewc->uiSamplingFrequency;
24710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC_ewc->WriterAudioStream.timeScale = pC_ewc->uiSamplingFrequency;
24720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC_ewc->WriterAudioStreamInfo.nbChannels =
24730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            (M4OSA_UInt16)pC_ewc->uiNbChannels;
24740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC_ewc->WriterAudioStreamInfo.nbBitsPerSample =
24750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            0; /**< Not used by the shell/core writer */
24760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
24770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /**
24780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        * Add the audio stream */
24790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        switch( pC_ewc->AudioStreamType )
24800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
24810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            case M4SYS_kAMR:
24820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                pC_ewc->WriterAudioStream.averageBitrate =
24830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    0; /**< It is not used by the shell, the DSI is taken into account instead */
24840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                pC_ewc->WriterAudioStream.maxBitrate =
24850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    0; /**< Not used by the shell/core writer */
24860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                break;
24870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
24880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            case M4SYS_kAAC:
24890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                pC_ewc->WriterAudioStream.averageBitrate =
24900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    pC_ewc->uiAudioBitrate;
24910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                pC_ewc->WriterAudioStream.maxBitrate = pC_ewc->uiAudioBitrate;
24920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                break;
24930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
24940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            case M4SYS_kEVRC:
24950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                pC_ewc->WriterAudioStream.averageBitrate =
24960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    0; /**< It is not used by the shell, the DSI is taken into account instead */
24970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                pC_ewc->WriterAudioStream.maxBitrate =
24980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    0; /**< Not used by the shell/core writer */
24990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                break;
25000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
25010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            case M4SYS_kMP3: /**< there can't be MP3 track in 3GPP file -> error */
25020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            default:
25030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                M4OSA_TRACE1_1(
25040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    "M4VSS3GPP_intCreate3GPPOutputFile: unknown output audio format (0x%x),\
25050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    returning M4VSS3GPP_ERR_UNSUPPORTED_INPUT_AUDIO_FORMAT!",
25060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    pC_ewc->AudioStreamType);
25070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                return M4VSS3GPP_ERR_UNSUPPORTED_INPUT_AUDIO_FORMAT;
25080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
25090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
25100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /**
25110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        * Our writer shell interface is a little tricky: we put M4WRITER_StreamAudioInfos
25120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        in the DSI pointer... */
25130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC_ewc->WriterAudioStream.decoderSpecificInfo =
25140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            (M4OSA_MemAddr32) &streamAudioInfo;
25150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
25160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /**
25170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        * Link the AU and the stream */
25180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC_ewc->WriterAudioAU.stream = &(pC_ewc->WriterAudioStream);
25190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC_ewc->WriterAudioAU.dataAddress = M4OSA_NULL;
25200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC_ewc->WriterAudioAU.size = 0;
25210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC_ewc->WriterAudioAU.CTS =
25220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            -pC_ewc->iSilenceFrameDuration; /** Reset time */
25230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC_ewc->WriterAudioAU.DTS = 0;
25240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC_ewc->WriterAudioAU.attribute = 0;
25250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC_ewc->WriterAudioAU.nbFrag = 0; /** No fragment */
25260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC_ewc->WriterAudioAU.frag = M4OSA_NULL;
25270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
25280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        err = pC_ShellAPI->pWriterGlobalFcts->pFctAddStream(
25290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            pC_ewc->p3gpWriterContext, &pC_ewc->WriterAudioStream);
25300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
25310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        if( M4NO_ERROR != err )
25320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
25330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            M4OSA_TRACE1_1(
25340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                "M4VSS3GPP_intCreate3GPPOutputFile:\
25350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                pWriterGlobalFcts->pFctAddStream(audio) returns 0x%x!",
25360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                err);
25370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            return err;
25380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
25390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
25400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /**
25410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        * Set the writer max audio AU size */
25420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC_ewc->uiAudioMaxAuSize = M4VSS3GPP_AUDIO_MAX_AU_SIZE;
25430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        temp.streamID = M4VSS3GPP_WRITER_AUDIO_STREAM_ID;
25440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        temp.value = pC_ewc->uiAudioMaxAuSize;
25450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        err = pC_ShellAPI->pWriterGlobalFcts->pFctSetOption(
25460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            pC_ewc->p3gpWriterContext, (M4OSA_UInt32)M4WRITER_kMaxAUSize,
25470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            (M4OSA_DataOption) &temp);
25480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
25490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        if( M4NO_ERROR != err )
25500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
25510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            M4OSA_TRACE1_1(
25520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                "M4VSS3GPP_intCreate3GPPOutputFile:\
25530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                pWriterGlobalFcts->pFctSetOption(M4WRITER_kMaxAUSize, audio) returns 0x%x!",
25540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                err);
25550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            return err;
25560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
25570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
25580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /**
25590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        * Set the writer max audio chunck size */
25600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        temp.streamID = M4VSS3GPP_WRITER_AUDIO_STREAM_ID;
25610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        temp.value = M4VSS3GPP_AUDIO_MAX_CHUNCK_SIZE;
25620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        err = pC_ShellAPI->pWriterGlobalFcts->pFctSetOption(
25630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            pC_ewc->p3gpWriterContext,
25640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            (M4OSA_UInt32)M4WRITER_kMaxChunckSize,
25650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            (M4OSA_DataOption) &temp);
25660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
25670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        if( M4NO_ERROR != err )
25680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
25690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            M4OSA_TRACE1_1(
25700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                "M4VSS3GPP_intCreate3GPPOutputFile:\
25710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                pWriterGlobalFcts->pFctSetOption(M4WRITER_kMaxAUSize, audio) returns 0x%x!",
25720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                err);
25730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            return err;
25740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
25750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
25760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
25770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
25780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * All streams added, we're now ready to write */
25790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    err = pC_ShellAPI->pWriterGlobalFcts->pFctStartWriting(
25800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC_ewc->p3gpWriterContext);
25810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
25820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( M4NO_ERROR != err )
25830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
25840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        M4OSA_TRACE1_1(
25850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            "M4VSS3GPP_intCreate3GPPOutputFile:\
25860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            pWriterGlobalFcts->pFctStartWriting() returns 0x%x!",
25870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            err);
25880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        return err;
25890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
25900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
25910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
25920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Return with no error */
25930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_TRACE3_0("M4VSS3GPP_intCreate3GPPOutputFile(): returning M4NO_ERROR");
25940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    return M4NO_ERROR;
25950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi}
25960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
25970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/**
25980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ******************************************************************************
25990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_ERR  M4VSS3GPP_intComputeOutputVideoAndAudioDsi()
26000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief    Generate a H263 or MPEG-4 decoder specific info compatible with all input video
26010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *            tracks. Copy audio dsi from master clip.
26020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param   pC    (IN/OUT) Internal edit context
26030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ******************************************************************************
26040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */
26050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4OSA_ERR
26060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4VSS3GPP_intComputeOutputVideoAndAudioDsi( M4VSS3GPP_InternalEditContext *pC,
26070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                                           M4OSA_UInt8 uiMasterClip )
26080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{
26090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_Int32 iResynchMarkerDsiIndex;
26100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4_StreamHandler *pStreamForDsi;
26110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4VSS3GPP_ClipContext *pClip;
26120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_ERR err;
26130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_UInt32 i;
261439beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury    M4DECODER_MPEG4_DecoderConfigInfo DecConfigInfo;
261539beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury    M4DECODER_VideoSize dummySize;
261639beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury    M4OSA_Bool bGetDSiFromEncoder = M4OSA_FALSE;
26170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
26180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4ENCODER_Header *encHeader;
26190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4SYS_StreamIDmemAddr streamHeader;
26200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
26210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pStreamForDsi = M4OSA_NULL;
26220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pClip = M4OSA_NULL;
26230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
26240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
26250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * H263 case */
26260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( M4SYS_kH263 == pC->ewc.VideoStreamType )
26270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
26280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /**
26290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        * H263 output DSI is always 7 bytes */
26300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC->ewc.uiVideoOutputDsiSize = 7;
26310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC->ewc.pVideoOutputDsi =
26322ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu            (M4OSA_MemAddr8)M4OSA_32bitAlignedMalloc(pC->ewc.uiVideoOutputDsiSize,
26330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            M4VSS3GPP, (M4OSA_Char *)"pC->ewc.pVideoOutputDsi (H263)");
26340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
26350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        if( M4OSA_NULL == pC->ewc.pVideoOutputDsi )
26360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
26370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            M4OSA_TRACE1_0(
26380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                "M4VSS3GPP_intComputeOutputVideoAndAudioDsi():\
26390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                unable to allocate pVideoOutputDsi (H263), returning M4ERR_ALLOC");
26400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            return M4ERR_ALLOC;
26410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
26420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
26430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /**
26440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        * (We override the input vendor info.
26450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        * At least we know that nothing special will be tried with PHLP-stamped
26460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi          edited streams...) */
26470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC->ewc.pVideoOutputDsi[0] = 'P';
26480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC->ewc.pVideoOutputDsi[1] = 'H';
26490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC->ewc.pVideoOutputDsi[2] = 'L';
26500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC->ewc.pVideoOutputDsi[3] = 'P';
26510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
26520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /**
26530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        * Decoder version is 0 */
26540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC->ewc.pVideoOutputDsi[4] = 0;
26550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
26560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /**
2657803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury        * Level is the sixth byte in the DSI */
2658803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury        pC->ewc.pVideoOutputDsi[5] = pC->xVSS.outputVideoLevel;
26590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
26600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /**
2661803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury        * Profile is the seventh byte in the DSI*/
2662803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury        pC->ewc.pVideoOutputDsi[6] = pC->xVSS.outputVideoProfile;
26630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
26640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
26650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
26660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * MPEG-4 case */
2667803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury    else if( M4SYS_kMPEG_4 == pC->ewc.VideoStreamType ||
2668803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury        M4SYS_kH264 == pC->ewc.VideoStreamType) {
26690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
2670803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury        /* For MPEG4 and H.264 encoder case
26710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        * Fetch the DSI from the shell video encoder, and feed it to the writer before
26720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        closing it. */
26730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
26740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        M4OSA_TRACE1_0(
26750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            "M4VSS3GPP_intComputeOutputVideoAndAudioDsi: get DSI for H264 stream");
26760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
26770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        if( M4OSA_NULL == pC->ewc.pEncContext )
26780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
26790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            M4OSA_TRACE1_0(
26800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                "M4VSS3GPP_intComputeOutputVideoAndAudioDsi: pC->ewc.pEncContext is NULL");
26810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            err = M4VSS3GPP_intCreateVideoEncoder(pC);
26820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
26830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            if( M4NO_ERROR != err )
26840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            {
26850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                M4OSA_TRACE1_1(
26860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    "M4VSS3GPP_intComputeOutputVideoAndAudioDsi:\
26870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    M4VSS3GPP_intCreateVideoEncoder returned error 0x%x",
26880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    err);
26890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            }
26900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
26910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
26920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        if( M4OSA_NULL != pC->ewc.pEncContext )
26930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
26940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            err = pC->ShellAPI.pVideoEncoderGlobalFcts->pFctGetOption(
26950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                pC->ewc.pEncContext, M4ENCODER_kOptionID_EncoderHeader,
26960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                (M4OSA_DataOption) &encHeader);
26970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
26980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            if( ( M4NO_ERROR != err) || (M4OSA_NULL == encHeader->pBuf) )
26990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            {
27000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                M4OSA_TRACE1_1(
27010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    "M4VSS3GPP_intComputeOutputVideoAndAudioDsi:\
27020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    failed to get the encoder header (err 0x%x)",
27030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    err);
27040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                M4OSA_TRACE1_2(
27050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    "M4VSS3GPP_intComputeOutputVideoAndAudioDsi: encHeader->pBuf=0x%x, size=0x%x",
27060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    encHeader->pBuf, encHeader->Size);
27070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            }
27080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            else
27090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            {
27100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                M4OSA_TRACE1_0(
27110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    "M4VSS3GPP_intComputeOutputVideoAndAudioDsi:\
2712803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury                     send DSI for video stream to 3GP writer");
27130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
27140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                /**
27150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                * Allocate and copy the new DSI */
27160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                pC->ewc.pVideoOutputDsi =
27172ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu                    (M4OSA_MemAddr8)M4OSA_32bitAlignedMalloc(encHeader->Size, M4VSS3GPP,
27180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    (M4OSA_Char *)"pC->ewc.pVideoOutputDsi (H264)");
27190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
27200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                if( M4OSA_NULL == pC->ewc.pVideoOutputDsi )
27210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                {
27220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    M4OSA_TRACE1_0(
27230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                        "M4VSS3GPP_intComputeOutputVideoAndAudioDsi():\
2724803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury                         unable to allocate pVideoOutputDsi, returning M4ERR_ALLOC");
27250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    return M4ERR_ALLOC;
27260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                }
27270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                pC->ewc.uiVideoOutputDsiSize = (M4OSA_UInt16)encHeader->Size;
27289d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu                memcpy((void *)pC->ewc.pVideoOutputDsi, (void *)encHeader->pBuf,
27290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    encHeader->Size);
27300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            }
27310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
27320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            err = M4VSS3GPP_intDestroyVideoEncoder(pC);
27330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
27340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            if( M4NO_ERROR != err )
27350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            {
27360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                M4OSA_TRACE1_1(
27370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    "M4VSS3GPP_intComputeOutputVideoAndAudioDsi:\
27380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    M4VSS3GPP_intDestroyVideoEncoder returned error 0x%x",
27390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    err);
27400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            }
27410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
27420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        else
27430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
27440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            M4OSA_TRACE1_0(
27450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                "M4VSS3GPP_intComputeOutputVideoAndAudioDsi:\
27460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                pC->ewc.pEncContext is NULL, cannot get the DSI");
27470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
27480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
27490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
27500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pStreamForDsi = M4OSA_NULL;
27510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pClip = M4OSA_NULL;
27520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
27530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /* Compute Audio DSI */
27540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( M4SYS_kAudioUnknown != pC->ewc.AudioStreamType )
27550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
27560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        if( uiMasterClip == 0 )
27570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
27580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            /* Clip is already opened */
27590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            pStreamForDsi = &(pC->pC1->pAudioStream->m_basicProperties);
27600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
27610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        else
27620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
27630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            /**
27640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            * We can use the fast open mode to get the DSI */
27650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            err = M4VSS3GPP_intClipInit(&pClip, pC->pOsaFileReadPtr);
27660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
27670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            if( M4NO_ERROR != err )
27680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            {
27690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                M4OSA_TRACE1_1(
27700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    "M4VSS3GPP_intComputeOutputVideoAndAudioDsi:\
27710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    M4VSS3GPP_intClipInit() returns 0x%x!",
27720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    err);
27730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
27740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                if( pClip != M4OSA_NULL )
27750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                {
27760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    M4VSS3GPP_intClipCleanUp(pClip);
27770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                }
27780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                return err;
27790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            }
27800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
27810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            err = M4VSS3GPP_intClipOpen(pClip, &pC->pClipList[uiMasterClip],
27820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                M4OSA_FALSE, M4OSA_TRUE, M4OSA_TRUE);
27830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
27840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            if( M4NO_ERROR != err )
27850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            {
27860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                M4OSA_TRACE1_1(
27870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    "M4VSS3GPP_intComputeOutputVideoAndAudioDsi:\
27880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    M4VSS3GPP_intClipOpen() returns 0x%x!",
27890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    err);
27900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                M4VSS3GPP_intClipCleanUp(pClip);
27910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                return err;
27920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            }
27930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
27940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            pStreamForDsi = &(pClip->pAudioStream->m_basicProperties);
27950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
27960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
27970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /**
27980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        * Allocate and copy the new DSI */
27992ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu        pC->ewc.pAudioOutputDsi = (M4OSA_MemAddr8)M4OSA_32bitAlignedMalloc(
28000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            pStreamForDsi->m_decoderSpecificInfoSize,
28010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            M4VSS3GPP, (M4OSA_Char *)"pC->ewc.pAudioOutputDsi");
28020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
28030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        if( M4OSA_NULL == pC->ewc.pAudioOutputDsi )
28040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
28050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            M4OSA_TRACE1_0(
28060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                "M4VSS3GPP_intComputeOutputVideoAndAudioDsi():\
28070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                unable to allocate pAudioOutputDsi, returning M4ERR_ALLOC");
28080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            return M4ERR_ALLOC;
28090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
28100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC->ewc.uiAudioOutputDsiSize =
28110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            (M4OSA_UInt16)pStreamForDsi->m_decoderSpecificInfoSize;
28129d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu        memcpy((void *)pC->ewc.pAudioOutputDsi,
28139d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu            (void *)pStreamForDsi->m_pDecoderSpecificInfo,
28140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            pC->ewc.uiAudioOutputDsiSize);
28150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
28160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /**
28170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        * If a clip has been temporarily opened to get its DSI, close it */
28180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        if( M4OSA_NULL != pClip )
28190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
28200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            err = M4VSS3GPP_intClipCleanUp(pClip);
28210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
28220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            if( M4NO_ERROR != err )
28230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            {
28240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                M4OSA_TRACE1_1(
28250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    "M4VSS3GPP_intComputeOutputVideoAndAudioDsi:\
28260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    M4VSS3GPP_intClipCleanUp() returns 0x%x!",
28270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    err);
28280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                return err;
28290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            }
28300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
28310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
28320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
28330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
28340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Return with no error */
28350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_TRACE3_0(
28360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        "M4VSS3GPP_intComputeOutputVideoAndAudioDsi(): returning M4NO_ERROR");
28370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    return M4NO_ERROR;
28380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi}
28390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
28400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/**
28410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ******************************************************************************
28420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_ERR M4VSS3GPP_intSwitchToNextClip()
28430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief    Switch from the current clip to the next one
28440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param   pC            (IN/OUT) Internal edit context
28450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ******************************************************************************
28460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */
28470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4OSA_ERR M4VSS3GPP_intSwitchToNextClip(
28480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4VSS3GPP_InternalEditContext *pC )
28490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{
28500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_ERR err;
28510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
28520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( M4OSA_NULL != pC->pC1 )
28530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
285439beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury        if (M4OSA_NULL != pC->pC1->m_pPreResizeFrame) {
285539beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            if (M4OSA_NULL != pC->pC1->m_pPreResizeFrame[0].pac_data) {
285639beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                free(pC->pC1->m_pPreResizeFrame[0].pac_data);
285739beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                pC->pC1->m_pPreResizeFrame[0].pac_data = M4OSA_NULL;
285839beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            }
285939beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            if (M4OSA_NULL != pC->pC1->m_pPreResizeFrame[1].pac_data) {
286039beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                free(pC->pC1->m_pPreResizeFrame[1].pac_data);
286139beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                pC->pC1->m_pPreResizeFrame[1].pac_data = M4OSA_NULL;
286239beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            }
286339beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            if (M4OSA_NULL != pC->pC1->m_pPreResizeFrame[2].pac_data) {
286439beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                free(pC->pC1->m_pPreResizeFrame[2].pac_data);
286539beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                pC->pC1->m_pPreResizeFrame[2].pac_data = M4OSA_NULL;
286639beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            }
286739beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            free(pC->pC1->m_pPreResizeFrame);
286839beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            pC->pC1->m_pPreResizeFrame = M4OSA_NULL;
286939beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury        }
28700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /**
28710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        * Close the current first clip */
28720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        err = M4VSS3GPP_intClipCleanUp(pC->pC1);
28730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
28740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        if( M4NO_ERROR != err )
28750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
28760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            M4OSA_TRACE1_1(
28770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                "M4VSS3GPP_intSwitchToNextClip: M4VSS3GPP_intClipCleanUp(C1) returns 0x%x!",
28780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                err);
28790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            return err;
28800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
28810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
28820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /**
28830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        *  increment clip counter */
28840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC->uiCurrentClip++;
28850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
28860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
28870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
28880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Check if we reached the last clip */
28890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( pC->uiCurrentClip >= pC->uiClipNumber )
28900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
28910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC->pC1 = M4OSA_NULL;
28920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC->State = M4VSS3GPP_kEditState_FINISHED;
28930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
28940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        M4OSA_TRACE1_0(
28950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            "M4VSS3GPP_intSwitchToNextClip:\
28960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            M4VSS3GPP_intClipClose(C1) returns M4VSS3GPP_WAR_EDITING_DONE");
28970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        return M4VSS3GPP_WAR_EDITING_DONE;
28980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
28990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
29000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
29010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * If the next clip has already be opened, set it as first clip */
29020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( M4OSA_NULL != pC->pC2 )
29030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
29040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC->pC1 = pC->pC2;
290539beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury        if(M4OSA_NULL != pC->pC2->m_pPreResizeFrame) {
290639beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            pC->pC1->m_pPreResizeFrame = pC->pC2->m_pPreResizeFrame;
290739beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury        }
29080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC->pC2 = M4OSA_NULL;
2909711849272b603a88f751c1758b51a1dfbec315dfHong Teng        pC->bClip1ActiveFramingEffect = pC->bClip2ActiveFramingEffect;
2910711849272b603a88f751c1758b51a1dfbec315dfHong Teng        pC->bClip2ActiveFramingEffect = M4OSA_FALSE;
29110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
29120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
29130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * else open it */
29140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    else
29150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
29160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        err = M4VSS3GPP_intOpenClip(pC, &pC->pC1,
29170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            &pC->pClipList[pC->uiCurrentClip]);
29180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
29190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        if( M4NO_ERROR != err )
29200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
29210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            M4OSA_TRACE1_1(
29220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                "M4VSS3GPP_intSwitchToNextClip: M4VSS3GPP_intOpenClip() returns 0x%x!",
29230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                err);
29240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            return err;
29250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
29260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
29270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /**
29280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        * If the second clip has not been opened yet,
29290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi          that means that there has been no transition.
29300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        * So both output video and audio times are OK.
29310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        * So we can set both video2 and audio offsets */
29320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
29330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /**
29340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        * Add current video output CTS to the clip video offset */
29350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
29360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        // Decorrelate input and output encoding timestamp to handle encoder prefetch
29370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC->pC1->iVoffset += (M4OSA_UInt32)pC->ewc.dInputVidCts;
29380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /**
29390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        * Add current audio output CTS to the clip audio offset */
29400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC->pC1->iAoffset +=
29410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            (M4OSA_UInt32)(pC->ewc.dATo * pC->ewc.scale_audio + 0.5);
29420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
29430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /**
29440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        * 2005-03-24: BugFix for audio-video synchro:
29450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        * There may be a portion of the duration of an audio AU of desynchro at each assembly.
29460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        * It leads to an audible desynchro when there are a lot of clips assembled.
29470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        * This bug fix allows to resynch the audio track when the delta is higher
29480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        * than one audio AU duration.
29490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        * We Step one AU in the second clip and we change the audio offset accordingly. */
29500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        if( ( pC->pC1->iAoffset
29510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            - (M4OSA_Int32)(pC->pC1->iVoffset *pC->pC1->scale_audio + 0.5))
29520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        > pC->ewc.iSilenceFrameDuration )
29530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
29540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            /**
29550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            * Advance one AMR frame */
29560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            err = M4VSS3GPP_intClipReadNextAudioFrame(pC->pC1);
29570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
29580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            if( M4OSA_ERR_IS_ERROR(err) )
29590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            {
29600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                M4OSA_TRACE1_1(
29610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    "M4VSS3GPP_intSwitchToNextClip:\
29620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    M4VSS3GPP_intClipReadNextAudioFrame returns 0x%x!",
29630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    err);
29640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                return err;
29650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            }
29660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            /**
29670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            * Update audio offset accordingly*/
29680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            pC->pC1->iAoffset -= pC->ewc.iSilenceFrameDuration;
29690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
29700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
29710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
29720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
29730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Init starting state for this clip processing */
29740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( M4SYS_kMP3 == pC->ewc.AudioStreamType )
29750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
29760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /**
29770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        * In the MP3 case we use a special audio state */
29780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC->State = M4VSS3GPP_kEditState_MP3_JUMP;
29790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
29800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    else
29810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
29820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /**
29830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        * We start with the video processing */
29840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC->State = M4VSS3GPP_kEditState_VIDEO;
29850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
29860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        if( pC->Vstate != M4VSS3GPP_kEditVideoState_TRANSITION )
29870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
29880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            /* if not a transition then reset previous video state */
29890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            pC->Vstate = M4VSS3GPP_kEditVideoState_READ_WRITE;
29900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
29910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
299212e6559a6995ccfce0df1aabfd741440f05a4dd9Danny Fernandes    /* The flags are set to false at the beginning of every clip */
2993ec6d65f6c23188ee0b3187a4ba664c51987816ddSantosh Madhava    pC->m_bClipExternalHasStarted = M4OSA_FALSE;
299412e6559a6995ccfce0df1aabfd741440f05a4dd9Danny Fernandes    pC->bEncodeTillEoF = M4OSA_FALSE;
29950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
29960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
29970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Return with no error */
29980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_TRACE3_0("M4VSS3GPP_intSwitchToNextClip(): returning M4NO_ERROR");
29990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /* RC: to know when a file has been processed */
30000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    return M4VSS3GPP_WAR_SWITCH_CLIP;
30010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi}
30020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
30030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/**
30040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ******************************************************************************
30050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_ERR M4VSS3GPP_intReachedEndOfVideo()
30060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief    Do what to do when the end of a clip video track is reached
30070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @note    If there is audio on the current clip, process it, else switch to the next clip
30080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param   pC            (IN/OUT) Internal edit context
30090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ******************************************************************************
30100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */
30110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR M4VSS3GPP_intReachedEndOfVideo( M4VSS3GPP_InternalEditContext *pC )
30120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{
30130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_ERR err;
30140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
30150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
30160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Video is done for this clip, now we do the audio */
30170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( M4SYS_kAudioUnknown != pC->ewc.AudioStreamType )
30180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
30190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC->State = M4VSS3GPP_kEditState_AUDIO;
30200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
30210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    else
30220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
30230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /**
30240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        * Clip done, do the next one */
30250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        err = M4VSS3GPP_intSwitchToNextClip(pC);
30260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
30270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        if( M4NO_ERROR != err )
30280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
30290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            M4OSA_TRACE1_1(
30300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                "M4VSS3GPP_intReachedEndOfVideo: M4VSS3GPP_intSwitchToNextClip() returns 0x%x",
30310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                err);
30320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            return err;
30330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
30340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
30350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
30360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
30370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Return with no error */
30380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_TRACE3_0("M4VSS3GPP_intReachedEndOfVideo(): returning M4NO_ERROR");
30390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    return M4NO_ERROR;
30400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi}
30410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
30420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/**
30430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ******************************************************************************
30440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_ERR M4VSS3GPP_intReachedEndOfAudio()
30450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief    Do what to do when the end of a clip audio track is reached
30460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param   pC            (IN/OUT) Internal edit context
30470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ******************************************************************************
30480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */
30490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR M4VSS3GPP_intReachedEndOfAudio( M4VSS3GPP_InternalEditContext *pC )
30500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{
30510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_ERR err;
30520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
30530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
30540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Clip done, do the next one */
30550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    err = M4VSS3GPP_intSwitchToNextClip(pC);
30560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
30570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( M4NO_ERROR != err )
30580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
30590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        M4OSA_TRACE1_1(
30600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            "M4VSS3GPP_intReachedEndOfAudio: M4VSS3GPP_intSwitchToNextClip() returns 0x%x",
30610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            err);
30620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        return err;
30630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
30640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
30650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
30660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Start with the video */
30670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( M4SYS_kVideoUnknown != pC->ewc.VideoStreamType )
30680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
30690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pC->State = M4VSS3GPP_kEditState_VIDEO;
30700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
30710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
30720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
30730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Return with no error */
30740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_TRACE3_0("M4VSS3GPP_intReachedEndOfAudio(): returning M4NO_ERROR");
30750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    return M4NO_ERROR;
30760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi}
30770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
30780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/**
30790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ******************************************************************************
30800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_ERR M4VSS3GPP_intOpenClip()
30810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief    Open next clip
30820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param   pC            (IN/OUT) Internal edit context
30830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ******************************************************************************
30840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */
30850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR M4VSS3GPP_intOpenClip( M4VSS3GPP_InternalEditContext *pC,
30860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                                M4VSS3GPP_ClipContext ** hClip,
30870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                                M4VSS3GPP_ClipSettings *pClipSettings )
30880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{
30890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_ERR err;
30900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4VSS3GPP_ClipContext *pClip; /**< shortcut */
309139beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury    M4VIDEOEDITING_ClipProperties *pClipProperties = M4OSA_NULL;
30920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_Int32 iCts;
30930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_UInt32 i;
30940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
30950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_TRACE2_1("M4VSS3GPP_intOpenClip: \"%s\"",
30960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        (M4OSA_Char *)pClipSettings->pFile);
30970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
30980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    err = M4VSS3GPP_intClipInit(hClip, pC->pOsaFileReadPtr);
30990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
31000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( M4NO_ERROR != err )
31010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
31020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        M4OSA_TRACE1_1(
31030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            "M4VSS3GPP_intOpenClip: M4VSS3GPP_intClipInit() returns 0x%x!",
31040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            err);
31050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
31060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        if( *hClip != M4OSA_NULL )
31070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
31080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            M4VSS3GPP_intClipCleanUp(*hClip);
31090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
31100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        return err;
31110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
31120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
31130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
31140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Set shortcut */
31150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pClip = *hClip;
31160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
311739beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury    if (pClipSettings->FileType == M4VIDEOEDITING_kFileType_ARGB8888 ) {
311839beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury        pClipProperties = &pClipSettings->ClipProperties;
311939beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury        pClip->pSettings = pClipSettings;
312039beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury        pClip->iEndTime = pClipSettings->uiEndCutTime;
312139beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury    }
31220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
312339beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury    err = M4VSS3GPP_intClipOpen(pClip, pClipSettings,
312439beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury              M4OSA_FALSE, M4OSA_FALSE, M4OSA_FALSE);
312539beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury    if (M4NO_ERROR != err) {
312639beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury        M4OSA_TRACE1_1("M4VSS3GPP_intOpenClip: \
312739beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            M4VSS3GPP_intClipOpen() returns 0x%x!", err);
31280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        M4VSS3GPP_intClipCleanUp(pClip);
31290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        *hClip = M4OSA_NULL;
31300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        return err;
31310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
31320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
313339beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury    if (pClipSettings->FileType != M4VIDEOEDITING_kFileType_ARGB8888 ) {
313439beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury        pClipProperties = &pClip->pSettings->ClipProperties;
313539beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury    }
31360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
31370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
31380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Copy common 'silence frame stuff' to ClipContext */
31390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pClip->uiSilencePcmSize = pC->ewc.uiSilencePcmSize;
31400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pClip->pSilenceFrameData = pC->ewc.pSilenceFrameData;
31410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pClip->uiSilenceFrameSize = pC->ewc.uiSilenceFrameSize;
31420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pClip->iSilenceFrameDuration = pC->ewc.iSilenceFrameDuration;
31430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pClip->scale_audio = pC->ewc.scale_audio;
31440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
31450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pClip->iAudioFrameCts = -pClip->iSilenceFrameDuration; /* Reset time */
31460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
31470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
31480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * If the audio track is not compatible with the output audio format,
31490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * we remove it. So it will be replaced by silence */
31500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( M4OSA_FALSE == pClipProperties->bAudioIsCompatibleWithMasterClip )
31510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
31520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        M4VSS3GPP_intClipDeleteAudioTrack(pClip);
31530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
31540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
31550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
31560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Actual begin cut */
31570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( 0 == pClipSettings->uiBeginCutTime )
31580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
31590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pClip->iVoffset = 0;
31600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pClip->iAoffset = 0;
31610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pClip->iActualVideoBeginCut = 0;
31620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pClip->iActualAudioBeginCut = 0;
31630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
316439beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury    else if(pClipSettings->FileType != M4VIDEOEDITING_kFileType_ARGB8888) {
31650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        if( M4SYS_kVideoUnknown != pC->ewc.VideoStreamType )
31660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
31670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            /**
31680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            * Jump the video to the target begin cut to get the actual begin cut value */
31690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            pClip->iActualVideoBeginCut =
31700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                (M4OSA_Int32)pClipSettings->uiBeginCutTime;
31710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            iCts = pClip->iActualVideoBeginCut;
31720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
31730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            err = pClip->ShellAPI.m_pReader->m_pFctJump(pClip->pReaderContext,
31740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                (M4_StreamHandler *)pClip->pVideoStream, &iCts);
31750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
31760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            if( M4NO_ERROR != err )
31770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            {
31780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                M4OSA_TRACE1_1(
31790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    "M4VSS3GPP_intOpenClip: m_pFctJump(V) returns 0x%x!", err);
31800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                return err;
31810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            }
31820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
31830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            /**
31840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            * Update clip offset with the video begin cut */
31850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            pClip->iVoffset = -pClip->iActualVideoBeginCut;
31860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
31870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
31880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        if( M4SYS_kAudioUnknown != pC->ewc.AudioStreamType )
31890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
31900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            /**
31910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            * Jump the audio to the video actual begin cut */
31920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            if( M4VIDEOEDITING_kMP3 != pClipProperties->AudioStreamType )
31930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            {
31940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                pClip->iActualAudioBeginCut = pClip->iActualVideoBeginCut;
31950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                iCts = (M4OSA_Int32)(pClip->iActualAudioBeginCut
31960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    * pClip->scale_audio + 0.5);
31970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
31980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                err = M4VSS3GPP_intClipJumpAudioAt(pClip, &iCts);
31990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
32000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                if( M4NO_ERROR != err )
32010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                {
32020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    M4OSA_TRACE1_1(
32030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                        "M4VSS3GPP_intOpenClip: M4VSS3GPP_intClipJumpAudioAt(A) returns 0x%x!",
32040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                        err);
32050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    return err;
32060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                }
32070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                /**
32080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                * Update clip offset with the audio begin cut */
32090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                pClip->iAoffset = -iCts;
32100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            }
32110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            else
32120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            {
32130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                /**
32140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                * For the MP3, the jump is not done because of the VBR,
32150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                  it could be not enough accurate */
32160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                pClip->iActualAudioBeginCut =
32170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    (M4OSA_Int32)pClipSettings->uiBeginCutTime;
32180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            }
32190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
32200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
32210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
32220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( M4SYS_kVideoUnknown != pC->ewc.VideoStreamType )
32230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
322439beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury        if ((pClipSettings->FileType != M4VIDEOEDITING_kFileType_ARGB8888 )) {
32250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
32260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            /**
322739beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            * Read the first Video AU of the clip */
322839beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            err = pClip->ShellAPI.m_pReaderDataIt->m_pFctGetNextAu(
322939beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                pClip->pReaderContext,
323039beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                (M4_StreamHandler *)pClip->pVideoStream, &pClip->VideoAU);
323139beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury
323239beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            if( M4WAR_NO_MORE_AU == err )
323339beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            {
323439beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                /**
323539beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                * If we (already!) reach the end of the clip, we filter the error.
323639beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                * It will be correctly managed at the first step. */
323739beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                err = M4NO_ERROR;
323839beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            }
323939beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            else if( M4NO_ERROR != err )
324039beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            {
324139beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                M4OSA_TRACE1_1("M4VSS3GPP_intOpenClip: \
324239beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                    m_pReaderDataIt->m_pFctGetNextAu() returns 0x%x!", err);
324339beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                return err;
324439beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            }
324539beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury        } else {
324639beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            pClipProperties->uiVideoWidth  = pClipProperties->uiStillPicWidth;
324739beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            pClipProperties->uiVideoHeight = pClipProperties->uiStillPicHeight;
32480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
324939beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury        /* state check not to allocate buffer during save start */
325039beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury
325139beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury
325239beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury        /******************************/
325339beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury        /* Video resize management   */
325439beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury        /******************************/
325539beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury        /**
3256711849272b603a88f751c1758b51a1dfbec315dfHong Teng        * If the input clip is a rotate video or the output resolution is different
3257711849272b603a88f751c1758b51a1dfbec315dfHong Teng        * from the input resolution, then the video frame needs to be rotated
3258711849272b603a88f751c1758b51a1dfbec315dfHong Teng        * or resized, force to resize mode */
325939beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury        if (((M4OSA_UInt32)pC->ewc.uiVideoWidth !=
326039beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                 pClipProperties->uiVideoWidth) ||
326139beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            ((M4OSA_UInt32)pC->ewc.uiVideoHeight !=
3262711849272b603a88f751c1758b51a1dfbec315dfHong Teng                 pClipProperties->uiVideoHeight) ||
3263711849272b603a88f751c1758b51a1dfbec315dfHong Teng            pClipProperties->videoRotationDegrees != 0) {
3264711849272b603a88f751c1758b51a1dfbec315dfHong Teng
3265711849272b603a88f751c1758b51a1dfbec315dfHong Teng            if (pClip->m_pPreResizeFrame == M4OSA_NULL) {
326639beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                /**
326739beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                * Allocate the intermediate video plane that will
326839beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                  receive the decoded image before resizing */
326939beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                pClip->m_pPreResizeFrame =
327039beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                 (M4VIFI_ImagePlane*)M4OSA_32bitAlignedMalloc(
327139beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                     3*sizeof(M4VIFI_ImagePlane), M4VSS3GPP,
327239beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                     (M4OSA_Char *)"pPreResizeFrame");
327339beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                if (M4OSA_NULL == pClip->m_pPreResizeFrame) {
327439beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                    M4OSA_TRACE1_0("M4MCS_intPrepareVideoEncoder(): \
327539beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                        unable to allocate m_pPreResizeFrame");
327639beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                    return M4ERR_ALLOC;
327739beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                }
327839beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury
327939beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                pClip->m_pPreResizeFrame[0].pac_data = M4OSA_NULL;
328039beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                pClip->m_pPreResizeFrame[1].pac_data = M4OSA_NULL;
328139beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                pClip->m_pPreResizeFrame[2].pac_data = M4OSA_NULL;
328239beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury
328339beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                /**
328439beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                * Allocate the Y plane */
328539beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                pClip->m_pPreResizeFrame[0].u_topleft = 0;
328639beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                pClip->m_pPreResizeFrame[0].u_width  =
328739beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                    pClipProperties->uiVideoWidth;
328839beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                pClip->m_pPreResizeFrame[0].u_height =
328939beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                    pClipProperties->uiVideoHeight;
329039beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                pClip->m_pPreResizeFrame[0].u_stride =
329139beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                    pClip->m_pPreResizeFrame[0].u_width;
329239beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury
329339beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                pClip->m_pPreResizeFrame[0].pac_data =
329439beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                 (M4VIFI_UInt8*)M4OSA_32bitAlignedMalloc (
329539beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                   pClip->m_pPreResizeFrame[0].u_stride * pClip->m_pPreResizeFrame[0].u_height,
329639beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                   M4MCS, (M4OSA_Char *)"m_pPreResizeFrame[0].pac_data");
329739beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                if (M4OSA_NULL == pClip->m_pPreResizeFrame[0].pac_data) {
329839beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                    M4OSA_TRACE1_0("M4MCS_intPrepareVideoEncoder(): \
329939beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                        unable to allocate m_pPreResizeFrame[0].pac_data");
330039beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                    free(pClip->m_pPreResizeFrame);
330139beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                    return M4ERR_ALLOC;
330239beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                }
330339beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury
330439beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                /**
330539beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                * Allocate the U plane */
330639beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                pClip->m_pPreResizeFrame[1].u_topleft = 0;
330739beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                pClip->m_pPreResizeFrame[1].u_width  =
330839beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                    pClip->m_pPreResizeFrame[0].u_width >> 1;
330939beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                pClip->m_pPreResizeFrame[1].u_height =
331039beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                    pClip->m_pPreResizeFrame[0].u_height >> 1;
331139beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                pClip->m_pPreResizeFrame[1].u_stride =
331239beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                    pClip->m_pPreResizeFrame[1].u_width;
331339beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury
331439beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                pClip->m_pPreResizeFrame[1].pac_data =
331539beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                 (M4VIFI_UInt8*)M4OSA_32bitAlignedMalloc (
331639beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                   pClip->m_pPreResizeFrame[1].u_stride * pClip->m_pPreResizeFrame[1].u_height,
331739beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                   M4MCS, (M4OSA_Char *)"m_pPreResizeFrame[1].pac_data");
331839beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                if (M4OSA_NULL == pClip->m_pPreResizeFrame[1].pac_data) {
331939beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                    M4OSA_TRACE1_0("M4MCS_intPrepareVideoEncoder(): \
332039beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                        unable to allocate m_pPreResizeFrame[1].pac_data");
332139beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                    free(pClip->m_pPreResizeFrame[0].pac_data);
332239beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                    free(pClip->m_pPreResizeFrame);
332339beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                    return M4ERR_ALLOC;
332439beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                }
332539beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury
332639beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                /**
332739beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                * Allocate the V plane */
332839beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                pClip->m_pPreResizeFrame[2].u_topleft = 0;
332939beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                pClip->m_pPreResizeFrame[2].u_width =
333039beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                    pClip->m_pPreResizeFrame[1].u_width;
333139beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                pClip->m_pPreResizeFrame[2].u_height =
333239beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                    pClip->m_pPreResizeFrame[1].u_height;
333339beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                pClip->m_pPreResizeFrame[2].u_stride =
333439beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                    pClip->m_pPreResizeFrame[2].u_width;
333539beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury
333639beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                pClip->m_pPreResizeFrame[2].pac_data =
333739beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                 (M4VIFI_UInt8*)M4OSA_32bitAlignedMalloc (
333839beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                   pClip->m_pPreResizeFrame[2].u_stride * pClip->m_pPreResizeFrame[2].u_height,
333939beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                   M4MCS, (M4OSA_Char *)"m_pPreResizeFrame[2].pac_data");
334039beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                if (M4OSA_NULL == pClip->m_pPreResizeFrame[2].pac_data) {
334139beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                    M4OSA_TRACE1_0("M4MCS_intPrepareVideoEncoder(): \
334239beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                        unable to allocate m_pPreResizeFrame[2].pac_data");
334339beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                    free(pClip->m_pPreResizeFrame[0].pac_data);
334439beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                    free(pClip->m_pPreResizeFrame[1].pac_data);
334539beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                    free(pClip->m_pPreResizeFrame);
334639beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                    return M4ERR_ALLOC;
334739beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury                }
334839beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury            }
33490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
33500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
33510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /**
33520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        * The video is currently in reading mode */
33530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pClip->Vstatus = M4VSS3GPP_kClipStatus_READ;
33540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
33550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
33560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    if( ( M4SYS_kAudioUnknown != pC->ewc.AudioStreamType)
33570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        && (M4VIDEOEDITING_kMP3 != pClipProperties->AudioStreamType) )
33580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
33590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /**
33600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        * Read the first Audio AU of the clip */
33610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        err = M4VSS3GPP_intClipReadNextAudioFrame(pClip);
33620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
33630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        if( M4OSA_ERR_IS_ERROR(err) )
33640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
33650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            M4OSA_TRACE1_1(
33660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                "M4VSS3GPP_intOpenClip: M4VSS3GPP_intClipReadNextAudioFrame returns 0x%x!",
33670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                err);
33680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            return err;
33690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
33700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
33710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /**
33720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        * The audio is currently in reading mode */
33730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pClip->Astatus = M4VSS3GPP_kClipStatus_READ;
33740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
33750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
33760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /**
33770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    * Return with no error */
33780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_TRACE3_0("M4VSS3GPP_intOpenClip(): returning M4NO_ERROR");
33790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    return M4NO_ERROR;
33800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi}
33810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
33820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/**
33830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ******************************************************************************
33840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_ERR  M4VSS3GPP_intComputeOutputAverageVideoBitrate()
33850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief    Average bitrate of the output file, computed from input bitrates,
33860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *          durations, transitions and cuts.
33870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param   pC    (IN/OUT) Internal edit context
33880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ******************************************************************************
33890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */
33900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4OSA_Void M4VSS3GPP_intComputeOutputAverageVideoBitrate(
33910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4VSS3GPP_InternalEditContext *pC )
33920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{
33930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4VSS3GPP_ClipSettings *pCS_0, *pCS_1, *pCS_2;
33940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4VSS3GPP_TransitionSettings *pT0, *pT2;
33950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_Int32 i;
33960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
33970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_UInt32 t0_duration, t2_duration;
33980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_UInt32 t0_bitrate, t2_bitrate;
33990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_UInt32 c1_duration;
34000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
34010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_UInt32 total_duration;
34020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    M4OSA_UInt32 total_bitsum;
34030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
34040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    total_duration = 0;
34050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    total_bitsum = 0;
34060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
34070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    /* Loop on the number of clips */
34080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    for ( i = 0; i < pC->uiClipNumber; i++ )
34090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    {
34100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        pCS_1 = &pC->pClipList[i];
34110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
34120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        t0_duration = 0;
34130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        t0_bitrate = pCS_1->ClipProperties.uiVideoBitrate;
34140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        t2_duration = 0;
34150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        t2_bitrate = pCS_1->ClipProperties.uiVideoBitrate;
34160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
34170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /* Transition with the previous clip */
34180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        if( i > 0 )
34190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
34200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            pCS_0 = &pC->pClipList[i - 1];
34210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            pT0 = &pC->pTransitionList[i - 1];
34220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
34230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            if( pT0->VideoTransitionType
34240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                != M4VSS3GPP_kVideoTransitionType_None )
34250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            {
34260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                t0_duration = pT0->uiTransitionDuration;
34270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
34280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                if( pCS_0->ClipProperties.uiVideoBitrate > t0_bitrate )
34290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                {
34300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    t0_bitrate = pCS_0->ClipProperties.uiVideoBitrate;
34310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                }
34320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            }
34330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
34340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
34350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /* Transition with the next clip */
34360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        if( i < pC->uiClipNumber - 1 )
34370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        {
34380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            pCS_2 = &pC->pClipList[i + 1];
34390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            pT2 = &pC->pTransitionList[i];
34400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
34410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            if( pT2->VideoTransitionType
34420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                != M4VSS3GPP_kVideoTransitionType_None )
34430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            {
34440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                t2_duration = pT2->uiTransitionDuration;
34450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
34460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                if( pCS_2->ClipProperties.uiVideoBitrate > t2_bitrate )
34470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                {
34480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                    t2_bitrate = pCS_2->ClipProperties.uiVideoBitrate;
34490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi                }
34500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            }
34510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        }
34520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
34530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /* Check for cut times */
34540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        if( pCS_1->uiEndCutTime > 0 )
34550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            c1_duration = pCS_1->uiEndCutTime;
34560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        else
34570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            c1_duration = pCS_1->ClipProperties.uiClipVideoDuration;
34580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
34590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        if( pCS_1->uiBeginCutTime > 0 )
34600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            c1_duration -= pCS_1->uiBeginCutTime;
34610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
34620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        c1_duration -= t0_duration + t2_duration;
34630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
34640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        /* Compute bitsum and duration */
34650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        total_duration += c1_duration + t0_duration / 2 + t2_duration / 2;
34660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
34670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi        total_bitsum +=
34680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            c1_duration * (pCS_1->ClipProperties.uiVideoBitrate / 1000)
34690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            + (t0_bitrate / 1000) * t0_duration / 2
34700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi            + (t2_bitrate / 1000) * t2_duration / 2;
34710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    }
34720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
34730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi    pC->ewc.uiVideoBitrate = ( total_bitsum / total_duration) * 1000;
34740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi}
34750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi
3476