17c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*
27c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Copyright (C) 2011 The Android Open Source Project
37c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
47c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Licensed under the Apache License, Version 2.0 (the "License");
57c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * you may not use this file except in compliance with the License.
67c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * You may obtain a copy of the License at
77c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
87c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *      http://www.apache.org/licenses/LICENSE-2.0
97c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Unless required by applicable law or agreed to in writing, software
117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * distributed under the License is distributed on an "AS IS" BASIS,
127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * See the License for the specific language governing permissions and
147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * limitations under the License.
157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @file    M4VSS3GPP_Edit.c
197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    Video Studio Service 3GPP edit API implementation.
207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note
217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/****************/
257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*** Includes ***/
267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/****************/
277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "NXPSW_CompilerSwitches.h"
297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Our headers */
317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4VSS3GPP_API.h"
327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4VSS3GPP_InternalTypes.h"
337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4VSS3GPP_InternalFunctions.h"
347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4VSS3GPP_InternalConfig.h"
357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4VSS3GPP_ErrorCodes.h"
367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * OSAL headers */
407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4OSA_Memory.h"   /**< OSAL memory management */
417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4OSA_Debug.h"    /**< OSAL debug management */
427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4OSA_CharStar.h" /**< OSAL string management */
437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef WIN32
457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "string.h"         /**< for strcpy (Don't want to get dependencies
467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                 with M4OSA_String...) */
477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif                      /* WIN32 */
496e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury#ifdef M4VSS_ENABLE_EXTERNAL_DECODERS
506e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury#include "M4VD_EXTERNAL_Interface.h"
516e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury#endif
527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/************************************************************************/
547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* Static local functions                                               */
557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/************************************************************************/
567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargistatic M4OSA_ERR M4VSS3GPP_intClipSettingsSanityCheck(
577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VSS3GPP_ClipSettings *pClip );
587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargistatic M4OSA_ERR M4VSS3GPP_intTransitionSettingsSanityCheck(
597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VSS3GPP_TransitionSettings *pTransition );
607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargistatic M4OSA_Void M4VSS3GPP_intFreeSettingsList(
617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VSS3GPP_InternalEditContext *pC );
627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargistatic M4OSA_ERR
637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4VSS3GPP_intCreateMP3OutputFile( M4VSS3GPP_InternalEditContext *pC,
647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                 M4OSA_Void *pOutputFile );
657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargistatic M4OSA_ERR M4VSS3GPP_intSwitchToNextClip(
667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VSS3GPP_InternalEditContext *pC );
677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargistatic M4OSA_ERR
687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4VSS3GPP_intComputeOutputVideoAndAudioDsi( M4VSS3GPP_InternalEditContext *pC,
697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                           M4OSA_UInt8 uiMasterClip );
707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargistatic M4OSA_Void M4VSS3GPP_intComputeOutputAverageVideoBitrate(
717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VSS3GPP_InternalEditContext *pC );
727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4VSS3GPP_GetVersion()
767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    Get the VSS 3GPP version.
777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note    Can be called anytime. Do not need any context.
787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param    pVersionInfo        (OUT) Pointer to a version info structure
797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4NO_ERROR:            No error
807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4ERR_PARAMETER:    pVersionInfo is M4OSA_NULL (If Debug Level >= 2)
817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4VSS3GPP_GetVersion( M4_VersionInfo *pVersionInfo )
847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_1("M4VSS3GPP_GetVersion called with pVersionInfo=0x%x",
867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pVersionInfo);
877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    *    Check input parameters */
907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF2((M4OSA_NULL == pVersionInfo), M4ERR_PARAMETER,
917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "M4VSS3GPP_GetVersion: pVersionInfo is M4OSA_NULL");
927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pVersionInfo->m_major = M4VSS_VERSION_MAJOR;
947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pVersionInfo->m_minor = M4VSS_VERSION_MINOR;
957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pVersionInfo->m_revision = M4VSS_VERSION_REVISION;
967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return M4NO_ERROR;
987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
1017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
1027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4VSS3GPP_editInit()
1037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    Initializes the VSS 3GPP edit operation (allocates an execution context).
1047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note
1057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param    pContext            (OUT) Pointer on the VSS 3GPP edit context to allocate
1067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param    pFileReadPtrFct        (IN) Pointer to OSAL file reader functions
1077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param   pFileWritePtrFct    (IN) Pointer to OSAL file writer functions
1087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4NO_ERROR:            No error
1097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4ERR_PARAMETER:    At least one parameter is M4OSA_NULL
1107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4ERR_ALLOC:        There is no more available memory
1117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
1127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
1137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4VSS3GPP_editInit( M4VSS3GPP_EditContext *pContext,
1147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                             M4OSA_FileReadPointer *pFileReadPtrFct,
1157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                             M4OSA_FileWriterPointer *pFileWritePtrFct )
1167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
1177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VSS3GPP_InternalEditContext *pC;
1187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_ERR err;
1197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32 i;
1207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_3(
1227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "M4VSS3GPP_editInit called with pContext=0x%x, \
1237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pFileReadPtrFct=0x%x, pFileWritePtrFct=0x%x",
1247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pContext, pFileReadPtrFct, pFileWritePtrFct);
1257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
1277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Check input parameters */
1287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF2((M4OSA_NULL == pContext), M4ERR_PARAMETER,
1297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "M4VSS3GPP_editInit: pContext is M4OSA_NULL");
1307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF2((M4OSA_NULL == pFileReadPtrFct), M4ERR_PARAMETER,
1317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "M4VSS3GPP_editInit: pFileReadPtrFct is M4OSA_NULL");
1327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF2((M4OSA_NULL == pFileWritePtrFct), M4ERR_PARAMETER,
1337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "M4VSS3GPP_editInit: pFileWritePtrFct is M4OSA_NULL");
1347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
1367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Allocate the VSS context and return it to the user */
1377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC = (M4VSS3GPP_InternalEditContext
138694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu        *)M4OSA_32bitAlignedMalloc(sizeof(M4VSS3GPP_InternalEditContext),
1397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4VSS3GPP, (M4OSA_Char *)"M4VSS3GPP_InternalContext");
1407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    *pContext = pC;
1417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /* Inialization of context Variables */
14232ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu    memset((void *)pC, 0,sizeof(M4VSS3GPP_InternalEditContext));
1437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL == pC )
1457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
1467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_0(
1477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            "M4VSS3GPP_editInit(): unable to allocate M4VSS3GPP_InternalContext,\
1487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            returning M4ERR_ALLOC");
1497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return M4ERR_ALLOC;
1507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
1517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /* Init the context. */
1546e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    pC->uiClipNumber = 0;
1557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->pClipList = M4OSA_NULL;
1567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->pTransitionList = M4OSA_NULL;
1577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->pEffectsList = M4OSA_NULL;
1587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->pActiveEffectsList = M4OSA_NULL;
1597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->pActiveEffectsList1 = M4OSA_NULL;
160eac28ab858dc4ecdfd25b6d8851219e6787d1222Hong Teng    pC->bClip1ActiveFramingEffect = M4OSA_FALSE;
161eac28ab858dc4ecdfd25b6d8851219e6787d1222Hong Teng    pC->bClip2ActiveFramingEffect = M4OSA_FALSE;
1626e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    pC->uiCurrentClip = 0;
1637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->pC1 = M4OSA_NULL;
1647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->pC2 = M4OSA_NULL;
1657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->yuv1[0].pac_data = pC->yuv1[1].pac_data = pC->
1667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        yuv1[2].pac_data = M4OSA_NULL;
1677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->yuv2[0].pac_data = pC->yuv2[1].pac_data = pC->
1687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        yuv2[2].pac_data = M4OSA_NULL;
1697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->yuv3[0].pac_data = pC->yuv3[1].pac_data = pC->
1707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        yuv3[2].pac_data = M4OSA_NULL;
1717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->yuv4[0].pac_data = pC->yuv4[1].pac_data = pC->
1727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        yuv4[2].pac_data = M4OSA_NULL;
1737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->bClip1AtBeginCut = M4OSA_FALSE;
1746e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    pC->iClip1ActiveEffect = 0;
1756e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    pC->iClip2ActiveEffect = 0;
1767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->bTransitionEffect = M4OSA_FALSE;
1777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->bSupportSilence = M4OSA_FALSE;
1787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
1807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Init PC->ewc members */
1817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    // Decorrelate input and output encoding timestamp to handle encoder prefetch
1826e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    pC->ewc.dInputVidCts  = 0.0;
1836e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    pC->ewc.dOutputVidCts = 0.0;
1846e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    pC->ewc.dATo = 0.0;
1856e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    pC->ewc.iOutputDuration = 0;
1867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->ewc.VideoStreamType = M4SYS_kVideoUnknown;
1876e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    pC->ewc.uiVideoBitrate = 0;
1886e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    pC->ewc.uiVideoWidth = 0;
1896e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    pC->ewc.uiVideoHeight = 0;
1906e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    pC->ewc.uiVideoTimeScale = 0;
1917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->ewc.bVideoDataPartitioning = M4OSA_FALSE;
1927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->ewc.pVideoOutputDsi = M4OSA_NULL;
1936e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    pC->ewc.uiVideoOutputDsiSize = 0;
1947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->ewc.AudioStreamType = M4SYS_kAudioUnknown;
1957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->ewc.uiNbChannels = 1;
1966e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    pC->ewc.uiAudioBitrate = 0;
1976e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    pC->ewc.uiSamplingFrequency = 0;
1987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->ewc.pAudioOutputDsi = M4OSA_NULL;
1996e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    pC->ewc.uiAudioOutputDsiSize = 0;
2007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->ewc.pAudioEncCtxt = M4OSA_NULL;
2016e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    pC->ewc.pAudioEncDSI.infoSize = 0;
2027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->ewc.pAudioEncDSI.pInfo = M4OSA_NULL;
2036e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    pC->ewc.uiSilencePcmSize = 0;
2047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->ewc.pSilenceFrameData = M4OSA_NULL;
2056e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    pC->ewc.uiSilenceFrameSize = 0;
2066e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    pC->ewc.iSilenceFrameDuration = 0;
2076e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    pC->ewc.scale_audio = 0.0;
2087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->ewc.pEncContext = M4OSA_NULL;
2097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->ewc.pDummyAuBuffer = M4OSA_NULL;
2106e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    pC->ewc.iMpeg4GovOffset = 0;
2116e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    pC->ewc.VppError = 0;
2127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->ewc.encoderState = M4VSS3GPP_kNoEncoder;
2137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->ewc.p3gpWriterContext = M4OSA_NULL;
2146e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    pC->ewc.uiVideoMaxAuSize = 0;
2156e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    pC->ewc.uiAudioMaxAuSize = 0;
2167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
2177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Keep the OSAL file functions pointer set in our context */
2187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->pOsaFileReadPtr = pFileReadPtrFct;
2197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->pOsaFileWritPtr = pFileWritePtrFct;
2207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /*
2227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Reset pointers for media and codecs interfaces */
2237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    err = M4VSS3GPP_clearInterfaceTables(&pC->ShellAPI);
2257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4ERR_CHECK_RETURN(err);
2267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /*
2287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    *  Call the media and codecs subscription module */
2297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    err = M4VSS3GPP_subscribeMediaAndCodec(&pC->ShellAPI);
2307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4ERR_CHECK_RETURN(err);
2317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
2337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Update main state automaton */
2347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->State = M4VSS3GPP_kEditState_CREATED;
2357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->Vstate = M4VSS3GPP_kEditVideoState_READ_WRITE;
2367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->Astate = M4VSS3GPP_kEditAudioState_READ_WRITE;
237bb337b471658b7c2264c6ff1bb613739db851baaSantosh Madhava    /* The flag is set to false at the beginning of every clip */
238bb337b471658b7c2264c6ff1bb613739db851baaSantosh Madhava    pC->m_bClipExternalHasStarted = M4OSA_FALSE;
2397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->bIsMMS = M4OSA_FALSE;
2417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
242f58e4c332ecf8c0cd6037b010256d0b4c56e6a17Danny Fernandes    pC->iInOutTimeOffset = 0;
243ac9dde5945fd00a6fb882bd171ee8a42a091fb86Danny Fernandes    pC->bEncodeTillEoF = M4OSA_FALSE;
2446e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    pC->nbActiveEffects = 0;
2456e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    pC->nbActiveEffects1 = 0;
2466e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    pC->bIssecondClip = M4OSA_FALSE;
2476e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    pC->m_air_context = M4OSA_NULL;
2487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
2497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Return with no error */
2507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_0("M4VSS3GPP_editInit(): returning M4NO_ERROR");
2517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return M4NO_ERROR;
2527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
2537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
2557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
2567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4VSS3GPP_editCreateClipSettings()
2577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    Allows filling a clip settings structure with default values
2587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
2597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note    WARNING: pClipSettings->Effects[ ] will be allocated in this function.
2607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *                   pClipSettings->pFile      will be allocated in this function.
2617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
2627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param    pClipSettings        (IN) Pointer to a valid M4VSS3GPP_ClipSettings structure
2637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param   pFile               (IN) Clip file name
2647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param   filePathSize        (IN) Clip path size (needed for UTF 16 conversion)
2657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param    nbEffects           (IN) Nb of effect settings to allocate
2667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4NO_ERROR:            No error
2677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4ERR_PARAMETER:    pClipSettings is M4OSA_NULL (debug only)
2687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
2697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
2707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR
2717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4VSS3GPP_editCreateClipSettings( M4VSS3GPP_ClipSettings *pClipSettings,
2727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                 M4OSA_Void *pFile, M4OSA_UInt32 filePathSize,
2737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                 M4OSA_UInt8 nbEffects )
2747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
2757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt8 uiFx;
2767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_1(
2787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "M4VSS3GPP_editCreateClipSettings called with pClipSettings=0x%p",
2797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pClipSettings);
2807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
2827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    *    Check input parameter */
2837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF2((M4OSA_NULL == pClipSettings), M4ERR_PARAMETER,
2847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "M4VSS3GPP_editCreateClipSettings: pClipSettings is NULL");
2857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
2877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Set the clip settings to default */
2887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->pFile = M4OSA_NULL;        /**< no file */
2897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->FileType =
2907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4VIDEOEDITING_kFileType_Unsupported; /**< undefined */
2917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL != pFile )
2937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
294694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu        //pClipSettings->pFile = (M4OSA_Char*) M4OSA_32bitAlignedMalloc(strlen(pFile)+1, M4VSS3GPP,
2957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        // "pClipSettings->pFile");
2967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /*FB: add clip path size because of utf 16 conversion*/
2977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pClipSettings->pFile =
298694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu            (M4OSA_Void *)M4OSA_32bitAlignedMalloc(filePathSize + 1, M4VSS3GPP,
2997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (M4OSA_Char *)"pClipSettings->pFile");
3007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
3017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4OSA_NULL == pClipSettings->pFile )
3027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
3037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_0(
3047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_editCreateClipSettings : ERROR allocating filename");
3057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return M4ERR_ALLOC;
3067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
30732ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu        //memcpy(pClipSettings->pFile, pFile, strlen(pFile)+1);
3087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /*FB: add clip path size because of utf 16 conversion*/
30932ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu        memcpy((void *)pClipSettings->pFile, (void *)pFile, filePathSize + 1);
3107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
3117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
3127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /*FB: add file path size to support UTF16 conversion*/
3137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->filePathSize = filePathSize + 1;
3147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**/
3157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->ClipProperties.bAnalysed = M4OSA_FALSE;
3167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->ClipProperties.FileType = 0;
3177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->ClipProperties.Version[0] = 0;
3187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->ClipProperties.Version[1] = 0;
3197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->ClipProperties.Version[2] = 0;
3207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->ClipProperties.uiClipDuration = 0;
3217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
3227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->uiBeginCutTime = 0; /**< no begin cut */
3237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->uiEndCutTime = 0;   /**< no end cut */
3246e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    pClipSettings->ClipProperties.bSetImageData = M4OSA_FALSE;
3257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
3267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
3277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Reset video characteristics */
3287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->ClipProperties.VideoStreamType = M4VIDEOEDITING_kNoneVideo;
3297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->ClipProperties.uiClipVideoDuration = 0;
3307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->ClipProperties.uiVideoBitrate = 0;
3317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->ClipProperties.uiVideoMaxAuSize = 0;
3327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->ClipProperties.uiVideoWidth = 0;
3337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->ClipProperties.uiVideoHeight = 0;
3347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->ClipProperties.uiVideoTimeScale = 0;
3357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->ClipProperties.fAverageFrameRate = 0.0;
3360a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury    pClipSettings->ClipProperties.uiVideoProfile =
3370a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury        M4VIDEOEDITING_VIDEO_UNKNOWN_PROFILE;
3380a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury    pClipSettings->ClipProperties.uiVideoLevel =
3390a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury        M4VIDEOEDITING_VIDEO_UNKNOWN_LEVEL;
3407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->ClipProperties.bMPEG4dataPartition = M4OSA_FALSE;
3417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->ClipProperties.bMPEG4rvlc = M4OSA_FALSE;
3427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->ClipProperties.bMPEG4resynchMarker = M4OSA_FALSE;
3437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
3447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
3457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Reset audio characteristics */
3467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->ClipProperties.AudioStreamType = M4VIDEOEDITING_kNoneAudio;
3477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->ClipProperties.uiClipAudioDuration = 0;
3487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->ClipProperties.uiAudioBitrate = 0;
3497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->ClipProperties.uiAudioMaxAuSize = 0;
3507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->ClipProperties.uiNbChannels = 0;
3517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->ClipProperties.uiSamplingFrequency = 0;
3527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->ClipProperties.uiExtendedSamplingFrequency = 0;
3537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->ClipProperties.uiDecodedPcmSize = 0;
3547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
3557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
3567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Return with no error */
3577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_0("M4VSS3GPP_editSetDefaultSettings(): returning M4NO_ERROR");
3587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
3597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return M4NO_ERROR;
3607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
3617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
3627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
3637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
3647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4VSS3GPP_editDuplicateClipSettings()
3657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    Duplicates a clip settings structure, performing allocations if required
3667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
3677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param    pClipSettingsDest    (IN) Pointer to a valid M4VSS3GPP_ClipSettings structure
3687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param    pClipSettingsOrig    (IN) Pointer to a valid M4VSS3GPP_ClipSettings structure
3697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param   bCopyEffects        (IN) Flag to know if we have to duplicate effects
3707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4NO_ERROR:            No error
3717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4ERR_PARAMETER:    pClipSettings is M4OSA_NULL (debug only)
3727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
3737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
3747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR
3757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4VSS3GPP_editDuplicateClipSettings( M4VSS3GPP_ClipSettings *pClipSettingsDest,
3767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                    M4VSS3GPP_ClipSettings *pClipSettingsOrig,
3777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                    M4OSA_Bool bCopyEffects )
3787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
3797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt8 uiFx;
3807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
3817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_2(
3827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "M4VSS3GPP_editDuplicateClipSettings called with dest=0x%p src=0x%p",
3837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pClipSettingsDest, pClipSettingsOrig);
3847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
3857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /* Check input parameter */
3867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF2((M4OSA_NULL == pClipSettingsDest), M4ERR_PARAMETER,
3877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "M4VSS3GPP_editDuplicateClipSettings: pClipSettingsDest is NULL");
3887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF2((M4OSA_NULL == pClipSettingsOrig), M4ERR_PARAMETER,
3897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "M4VSS3GPP_editDuplicateClipSettings: pClipSettingsOrig is NULL");
3907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
3917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /* Copy plain structure */
39232ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu    memcpy((void *)pClipSettingsDest,
39332ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu        (void *)pClipSettingsOrig, sizeof(M4VSS3GPP_ClipSettings));
3947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
3957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /* Duplicate filename */
3967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL != pClipSettingsOrig->pFile )
3977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
3987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        //pClipSettingsDest->pFile =
399694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu        // (M4OSA_Char*) M4OSA_32bitAlignedMalloc(strlen(pClipSettingsOrig->pFile)+1, M4VSS3GPP,
4007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        // "pClipSettingsDest->pFile");
4017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /*FB: clip path size is needed for utf 16 conversion*/
4027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /*FB 2008/10/16: bad allocation size which raises a crash*/
4037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pClipSettingsDest->pFile =
404694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu            (M4OSA_Char *)M4OSA_32bitAlignedMalloc(pClipSettingsOrig->filePathSize + 1,
4057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4VSS3GPP, (M4OSA_Char *)"pClipSettingsDest->pFile");
4067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
4077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4OSA_NULL == pClipSettingsDest->pFile )
4087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
4097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_0(
4107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_editDuplicateClipSettings : ERROR allocating filename");
4117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return M4ERR_ALLOC;
4127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
4137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /*FB: clip path size is needed for utf 16 conversion*/
41432ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu        //memcpy(pClipSettingsDest->pFile, pClipSettingsOrig->pFile,
41532ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu        // strlen(pClipSettingsOrig->pFile)+1);
4167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /*FB 2008/10/16: bad allocation size which raises a crash*/
41732ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu        memcpy((void *)pClipSettingsDest->pFile, (void *)pClipSettingsOrig->pFile,
4187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pClipSettingsOrig->filePathSize/*+1*/);
4197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        ( (M4OSA_Char
4207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            *)pClipSettingsDest->pFile)[pClipSettingsOrig->filePathSize] = '\0';
4217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
4227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
4237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /* Duplicate effects */
4247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /* Return with no error */
4257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
4267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_0(
4277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "M4VSS3GPP_editDuplicateClipSettings(): returning M4NO_ERROR");
4287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
4297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return M4NO_ERROR;
4307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
4317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
4327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
4337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
4347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4VSS3GPP_editFreeClipSettings()
4357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    Free the pointers allocated in the ClipSetting structure (pFile, Effects).
4367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
4377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param    pClipSettings        (IN) Pointer to a valid M4VSS3GPP_ClipSettings structure
4387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4NO_ERROR:            No error
4397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4ERR_PARAMETER:    pClipSettings is M4OSA_NULL (debug only)
4407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
4417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
4427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4VSS3GPP_editFreeClipSettings(
4437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VSS3GPP_ClipSettings *pClipSettings )
4447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
4457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
4467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    *    Check input parameter */
4477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF2((M4OSA_NULL == pClipSettings), M4ERR_PARAMETER,
4487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "M4VSS3GPP_editFreeClipSettings: pClipSettings is NULL");
4497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
4507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /* free filename */
4517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL != pClipSettings->pFile )
4527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
453694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu        free(pClipSettings->pFile);
4547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pClipSettings->pFile = M4OSA_NULL;
4557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
4567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
4577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /* free effects settings */
4587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /*    if(M4OSA_NULL != pClipSettings->Effects)
4597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
460694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu    free(pClipSettings->Effects);
4617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->Effects = M4OSA_NULL;
4627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClipSettings->nbEffects = 0;
4637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    } RC */
4647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
4657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return M4NO_ERROR;
4667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
4677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
4687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
4697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
4707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4VSS3GPP_editOpen()
4717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief     Set the VSS input and output files.
4727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note      It opens the input file, but the output file may not be created yet.
4737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param     pContext           (IN) VSS edit context
4747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param     pSettings           (IN) Edit settings
4757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4NO_ERROR:       No error
4767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4ERR_PARAMETER:  At least one parameter is M4OSA_NULL (debug only)
4777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4ERR_STATE:      VSS is not in an appropriate state for this function to be called
4787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4ERR_ALLOC:      There is no more available memory
4797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
4807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
4817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4VSS3GPP_editOpen( M4VSS3GPP_EditContext pContext,
4827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                             M4VSS3GPP_EditSettings *pSettings )
4837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
4847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VSS3GPP_InternalEditContext *pC =
4857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        (M4VSS3GPP_InternalEditContext *)pContext;
4867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
4877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_ERR err;
4887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_Int32 i;
4897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VIDEOEDITING_FileType outputFileType =
4907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4VIDEOEDITING_kFileType_Unsupported; /**< 3GPP or MP3 (we don't do AMR output) */
4917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32 uiC1duration, uiC2duration;
4927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
4937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_2(
4947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "M4VSS3GPP_editOpen called with pContext=0x%x, pSettings=0x%x",
4957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pContext, pSettings);
4967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
4977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
4987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    *    Check input parameters */
4997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF2((M4OSA_NULL == pContext), M4ERR_PARAMETER,
5007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "M4VSS3GPP_editOpen: pContext is M4OSA_NULL");
5017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF2((M4OSA_NULL == pSettings), M4ERR_PARAMETER,
5027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "M4VSS3GPP_editOpen: pSettings is M4OSA_NULL");
5037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF2((M4OSA_NULL == pSettings->pClipList), M4ERR_PARAMETER,
5047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "M4VSS3GPP_editOpen: pSettings->pClipList is M4OSA_NULL");
5057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF2(( pSettings->uiClipNumber > 1)
5067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        && (M4OSA_NULL == pSettings->pTransitionList), M4ERR_PARAMETER,
5077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "M4VSS3GPP_editOpen: pSettings->pTransitionList is M4OSA_NULL");
5087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
5097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
5107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Check state automaton */
5117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( ( pC->State != M4VSS3GPP_kEditState_CREATED)
5127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        && (pC->State != M4VSS3GPP_kEditState_CLOSED) )
5137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
5147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_1(
5157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            "M4VSS3GPP_editOpen: State error (0x%x)! Returning M4ERR_STATE",
5167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->State);
5177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return M4ERR_STATE;
5187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
5197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
5207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
5217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Free any previously allocated internal settings list */
5227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VSS3GPP_intFreeSettingsList(pC);
5237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
5247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
5257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Copy the user settings in our context */
5267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->uiClipNumber = pSettings->uiClipNumber;
5277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
5287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
5297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Copy the clip list */
5307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->pClipList =
531694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu        (M4VSS3GPP_ClipSettings *)M4OSA_32bitAlignedMalloc(sizeof(M4VSS3GPP_ClipSettings)
5327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * pC->uiClipNumber, M4VSS3GPP, (M4OSA_Char *)"pC->pClipList");
5337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
5347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL == pC->pClipList )
5357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
5367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_0(
5377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            "M4VSS3GPP_editOpen: unable to allocate pC->Settings.pClipList,\
5387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            returning M4ERR_ALLOC");
5397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return M4ERR_ALLOC;
5407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
5417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
5427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    for ( i = 0; i < pSettings->uiClipNumber; i++ )
5437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
5447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4VSS3GPP_editDuplicateClipSettings(&(pC->pClipList[i]),
5457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pSettings->pClipList[i], M4OSA_TRUE);
5467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
5477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
5487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
5497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Copy effects list RC */
5507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
5517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /*FB bug fix 19.03.2008 if the number of effects is 0 -> crash*/
5527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( pSettings->nbEffects > 0 )
5537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
5547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->nbEffects = pSettings->nbEffects;
5557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->pEffectsList = (M4VSS3GPP_EffectSettings
556694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu            *)M4OSA_32bitAlignedMalloc(sizeof(M4VSS3GPP_EffectSettings) * pC->nbEffects,
5577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4VSS3GPP, (M4OSA_Char *)"pC->pEffectsList");
5587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
5597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4OSA_NULL == pC->pEffectsList )
5607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
5617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_0(
5627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_editOpen: unable to allocate pC->pEffectsList, returning M4ERR_ALLOC");
5637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return M4ERR_ALLOC;
5647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
5657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
5667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        for ( i = 0; i < pC->nbEffects; i++ )
5677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
56832ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu            memcpy((void *) &(pC->pEffectsList[i]),
56932ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu                (void *) &(pSettings->Effects[i]),
5707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                sizeof(M4VSS3GPP_EffectSettings));
5717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
5727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
5737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
5747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Allocate active effects list RC */
5757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->pActiveEffectsList =
576694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu            (M4OSA_UInt8 *)M4OSA_32bitAlignedMalloc(sizeof(M4OSA_UInt8) * pC->nbEffects,
5777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4VSS3GPP, (M4OSA_Char *)"pC->pActiveEffectsList");
5787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
5797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4OSA_NULL == pC->pActiveEffectsList )
5807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
5817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_0(
5827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_editOpen: unable to allocate pC->pActiveEffectsList,\
5837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                returning M4ERR_ALLOC");
5847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return M4ERR_ALLOC;
5857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
5867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
5877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi         * Allocate active effects list */
5887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->pActiveEffectsList1 =
589694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu            (M4OSA_UInt8 *)M4OSA_32bitAlignedMalloc(sizeof(M4OSA_UInt8) * pC->nbEffects,
5907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4VSS3GPP, (M4OSA_Char *)"pC->pActiveEffectsList");
5917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if (M4OSA_NULL == pC->pActiveEffectsList1)
5927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
5937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_0("M4VSS3GPP_editOpen: unable to allocate pC->pActiveEffectsList, \
5947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                           returning M4ERR_ALLOC");
5957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return M4ERR_ALLOC;
5967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
5977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
5987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
5997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    else
6007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
6017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->nbEffects = 0;
6027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->nbActiveEffects = 0;
6037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->nbActiveEffects1 = 0;
6047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->pEffectsList = M4OSA_NULL;
6057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->pActiveEffectsList = M4OSA_NULL;
6067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->pActiveEffectsList1 = M4OSA_NULL;
607eac28ab858dc4ecdfd25b6d8851219e6787d1222Hong Teng        pC->bClip1ActiveFramingEffect = M4OSA_FALSE;
608eac28ab858dc4ecdfd25b6d8851219e6787d1222Hong Teng        pC->bClip2ActiveFramingEffect = M4OSA_FALSE;
6097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
6107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
6117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
6127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Test the clip analysis data, if it is not provided, analyse the clips by ourselves. */
6137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    for ( i = 0; i < pC->uiClipNumber; i++ )
6147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
6157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4OSA_FALSE == pC->pClipList[i].ClipProperties.bAnalysed )
6167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
6177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /**< Analysis not provided by the integrator */
6187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err = M4VSS3GPP_editAnalyseClip(pC->pClipList[i].pFile,
6197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->pClipList[i].FileType, &pC->pClipList[i].ClipProperties,
6207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->pOsaFileReadPtr);
6217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
6227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if( M4NO_ERROR != err )
6237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
6247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4OSA_TRACE1_1(
6257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    "M4VSS3GPP_editOpen: M4VSS3GPP_editAnalyseClip returns 0x%x!",
6267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    err);
6277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                return err;
6287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
6297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
6307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
6317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
6327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
6337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Check clip compatibility */
6347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    for ( i = 0; i < pC->uiClipNumber; i++ )
6357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
6366e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        if (pC->pClipList[i].FileType !=M4VIDEOEDITING_kFileType_ARGB8888) {
6376e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            /**
6386e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            * Check all the clips are compatible with VSS 3GPP */
6396e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            err = M4VSS3GPP_intCheckClipCompatibleWithVssEditing(
6406e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                &pC->pClipList[i].ClipProperties);
6417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
6426e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            if( M4NO_ERROR != err )
6436e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            {
6446e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                M4OSA_TRACE1_2(
6456e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                    "M4VSS3GPP_editOpen:\
6466e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                    M4VSS3GPP_intCheckClipCompatibleWithVssEditing(%d) returns 0x%x!",
6476e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                    i, err);
6486e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                return err;
6496e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            }
6507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
6517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
6527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
6537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Check the master clip versus all the other ones.
6547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        (including master clip with itself, else variables for master clip
6557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        are not properly setted) */
6566e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        if(pC->pClipList[i].FileType != M4VIDEOEDITING_kFileType_ARGB8888) {
6576e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
6586e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            err = M4VSS3GPP_editCheckClipCompatibility(
6596e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                &pC->pClipList[pSettings->uiMasterClip].ClipProperties,
6606e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                &pC->pClipList[i].ClipProperties);
6616e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            /* in case of warning regarding audio incompatibility,
6626e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                editing continues */
6636e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            if( M4OSA_ERR_IS_ERROR(err) )
6646e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            {
6656e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                M4OSA_TRACE1_2(
6666e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                    "M4VSS3GPP_editOpen: M4VSS3GPP_editCheckClipCompatibility \
6676e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                        (%d) returns 0x%x!", i, err);
6686e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                return err;
6696e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            }
6706e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        } else {
6716e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            pC->pClipList[i].ClipProperties.bAudioIsCompatibleWithMasterClip =
6726e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury             M4OSA_FALSE;
6737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
6747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
6757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /* Search audio tracks that cannot be edited :
6767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    *   - delete all audio effects for the clip
6777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    *   - if master clip is editable let the transition
6787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    (bad track will be replaced later with silence)
6797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    *   - if master clip is not editable switch to a dummy transition (only copy/paste) */
6807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    for ( i = 0; i < pC->uiClipNumber; i++ )
6817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
6827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4OSA_FALSE == pC->pClipList[i].ClipProperties.bAudioIsEditable )
6837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
6847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_UInt8 uiFx;
6857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
6867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            for ( uiFx = 0; uiFx < pC->nbEffects; uiFx++ )
6877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
6887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->pEffectsList[uiFx].AudioEffectType
6897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    = M4VSS3GPP_kAudioEffectType_None;
6907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
6917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
6927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if( ( i < (pC->uiClipNumber - 1))
6937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                && (M4OSA_NULL != pSettings->pTransitionList[i])
6947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                && (M4OSA_FALSE == pC->pClipList[pSettings->
6957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                uiMasterClip].ClipProperties.bAudioIsEditable) )
6967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
6977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pSettings->pTransitionList[i]->AudioTransitionType
6987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    = M4VSS3GPP_kAudioTransitionType_None;
6997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
7007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
7017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
7027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
7037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
7047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * We add a transition of duration 0 at the end of the last clip.
7057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * It will suppress a whole bunch a test latter in the processing... */
7067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->pTransitionList = (M4VSS3GPP_TransitionSettings
707694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu        *)M4OSA_32bitAlignedMalloc(sizeof(M4VSS3GPP_TransitionSettings)
7087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * (pC->uiClipNumber), M4VSS3GPP, (M4OSA_Char *)"pC->pTransitionList");
7097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
7107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL == pC->pTransitionList )
7117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
7127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_0(
7137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            "M4VSS3GPP_editOpen: unable to allocate pC->Settings.pTransitionList,\
7147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            returning M4ERR_ALLOC");
7157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return M4ERR_ALLOC;
7167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
7177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
7187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**< copy transition settings */
7197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    for ( i = 0; i < (pSettings->uiClipNumber - 1); i++ )
7207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
72132ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu        memcpy((void *) &(pC->pTransitionList[i]),
72232ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu            (void *)pSettings->pTransitionList[i],
7237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            sizeof(M4VSS3GPP_TransitionSettings));
7247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
7257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
7267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**< We fill the last "dummy" transition */
7277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->pTransitionList[pC->uiClipNumber - 1].uiTransitionDuration = 0;
7287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->pTransitionList[pC->uiClipNumber
7297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        - 1].VideoTransitionType = M4VSS3GPP_kVideoTransitionType_None;
7307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->pTransitionList[pC->uiClipNumber
7317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        - 1].AudioTransitionType = M4VSS3GPP_kAudioTransitionType_None;
7327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
7337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
7347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Avoid weird clip settings */
7357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    for ( i = 0; i < pSettings->uiClipNumber; i++ )
7367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
7376e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        if (pC->pClipList[i].FileType !=M4VIDEOEDITING_kFileType_ARGB8888) {
7386e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            err = M4VSS3GPP_intClipSettingsSanityCheck(&pC->pClipList[i]);
7397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
7406e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            if( M4NO_ERROR != err )
7416e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            {
7426e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                M4OSA_TRACE1_1(
7436e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                    "M4VSS3GPP_editOpen: M4VSS3GPP_intClipSettingsSanityCheck returns 0x%x!",
7446e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                    err);
7456e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                return err;
7466e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            }
7477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
7487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
7497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
7507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    for ( i = 0; i < (pSettings->uiClipNumber - 1); i++ )
7517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
7526e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        if (pC->pTransitionList[i].uiTransitionDuration != 0) {
7536e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury             if (pC->pClipList[i].FileType == M4VIDEOEDITING_kFileType_ARGB8888) {
7546e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                 pC->pClipList[i].uiBeginCutTime = 0;
7556e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                 pC->pClipList[i].uiEndCutTime =
7566e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                     pC->pTransitionList[i].uiTransitionDuration;
7576e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury             }
7586e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
7596e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury             if (pC->pClipList[i+1].FileType == M4VIDEOEDITING_kFileType_ARGB8888) {
7606e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                 pC->pClipList[i+1].uiBeginCutTime = 0;
7616e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                 pC->pClipList[i+1].uiEndCutTime =
7626e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                     pC->pTransitionList[i].uiTransitionDuration;
7636e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury             }
7646e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        } else {
7656e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
7666e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury             if (pC->pClipList[i].FileType == M4VIDEOEDITING_kFileType_ARGB8888) {
7676e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                 pC->pClipList[i].uiEndCutTime =
7686e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                     pC->pClipList[i].uiEndCutTime - pC->pClipList[i].uiBeginCutTime;
7696e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                 pC->pClipList[i].uiBeginCutTime = 0;
7706e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury             }
7716e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
7726e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury             if (pC->pClipList[i+1].FileType == M4VIDEOEDITING_kFileType_ARGB8888) {
7736e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                 pC->pClipList[i+1].uiEndCutTime =
7746e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                     pC->pClipList[i+1].uiEndCutTime - pC->pClipList[i+1].uiBeginCutTime;
7756e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                 pC->pClipList[i+1].uiBeginCutTime = 0;
7766e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury             }
7776e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
7786e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        }
7796e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
7807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
7817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Maximum transition duration between clip n and clip n+1 is the duration
7827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * of the shortest clip */
7837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( 0 == pC->pClipList[i].uiEndCutTime )
7847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
7857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            uiC1duration = pC->pClipList[i].ClipProperties.uiClipVideoDuration;
7867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
7877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        else
7887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
7897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /**< duration of clip n is the end cut time */
7907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            uiC1duration = pC->pClipList[i].uiEndCutTime;
7917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
7927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
7937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**< Substract begin cut */
7947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        uiC1duration -= pC->pClipList[i].uiBeginCutTime;
7957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
7967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**< Check that the transition is shorter than clip n */
7977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( pC->pTransitionList[i].uiTransitionDuration > uiC1duration )
7987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
7997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->pTransitionList[i].uiTransitionDuration = uiC1duration - 1;
8007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
8017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
8027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( 0 == pC->pClipList[i + 1].uiEndCutTime )
8037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
8047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            uiC2duration =
8057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->pClipList[i + 1].ClipProperties.uiClipVideoDuration;
8067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
8077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        else
8087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
8097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /**< duration of clip n+1 is the end cut time */
8107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            uiC2duration = pC->pClipList[i + 1].uiEndCutTime;
8117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
8127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
8137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**< Substract begin cut */
8147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        uiC2duration -= pC->pClipList[i + 1].uiBeginCutTime;
8157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
8167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**< Check that the transition is shorter than clip n+1 */
8177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( pC->pTransitionList[i].uiTransitionDuration > uiC2duration )
8187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
8197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->pTransitionList[i].uiTransitionDuration = uiC2duration - 1;
8207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
8217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
8227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
8237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Avoid weird transition settings */
8247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err =
8257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4VSS3GPP_intTransitionSettingsSanityCheck(&pC->pTransitionList[i]);
8267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
8277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4NO_ERROR != err )
8287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
8297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1(
8307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_editOpen: M4VSS3GPP_intClipSettingsSanityCheck returns 0x%x!",
8317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err);
8327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return err;
8337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
8347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
8357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
8367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Check that two transitions are not overlapping
8377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi          (no overlapping possible for first clip) */
8387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( i > 0 )
8397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
8407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /**
8417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            * There is a transition overlap if the sum of the duration of
8427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi              two consecutive transitions
8437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            * is higher than the duration of the clip in-between. */
8447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if( ( pC->pTransitionList[i - 1].uiTransitionDuration
8457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                + pC->pTransitionList[i].uiTransitionDuration) >= uiC1duration )
8467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
8477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4OSA_TRACE1_1(
8487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    "M4VSS3GPP_editOpen: Overlapping transitions on clip %d,\
8497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    returning M4VSS3GPP_ERR_OVERLAPPING_TRANSITIONS",
8507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    i);
8517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                return M4VSS3GPP_ERR_OVERLAPPING_TRANSITIONS;
8527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
8537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
8547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
8557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
8567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
8577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Output clip duration */
8587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    for ( i = 0; i < pC->uiClipNumber; i++ )
8597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
8607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
8617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Compute the sum of the clip duration */
8627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( 0 == pC->pClipList[i].uiEndCutTime )
8637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
8647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->ewc.iOutputDuration +=
8657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->
8667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pClipList[
8677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    i].ClipProperties.
8687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                        uiClipVideoDuration; /* Only video track duration is important to
8697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                             avoid deviation if audio track is longer */
8707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
8717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        else
8727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
8737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->ewc.iOutputDuration +=
8747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->pClipList[i].uiEndCutTime; /**< Add end cut */
8757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
8767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
8777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->ewc.iOutputDuration -=
8787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->pClipList[i].uiBeginCutTime; /**< Remove begin cut */
8797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
8807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
8817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Remove the duration of the transition (it is counted twice) */
8827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->ewc.iOutputDuration -= pC->pTransitionList[i].uiTransitionDuration;
8837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
8847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
8856e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    /* Get video properties from output properties */
8867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
8876e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    /* Get output width and height */
8886e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    switch(pC->xVSS.outputVideoSize) {
8896e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        case M4VIDEOEDITING_kSQCIF:
8906e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            pC->ewc.uiVideoWidth = 128;
8916e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            pC->ewc.uiVideoHeight = 96;
8926e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            break;
8936e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        case M4VIDEOEDITING_kQQVGA:
8946e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            pC->ewc.uiVideoWidth = 160;
8956e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            pC->ewc.uiVideoHeight = 120;
8966e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            break;
8976e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        case M4VIDEOEDITING_kQCIF:
8986e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            pC->ewc.uiVideoWidth = 176;
8996e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            pC->ewc.uiVideoHeight = 144;
9006e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            break;
9016e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        case M4VIDEOEDITING_kQVGA:
9026e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            pC->ewc.uiVideoWidth = 320;
9036e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            pC->ewc.uiVideoHeight = 240;
9046e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            break;
9056e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        case M4VIDEOEDITING_kCIF:
9066e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            pC->ewc.uiVideoWidth = 352;
9076e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            pC->ewc.uiVideoHeight = 288;
9086e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            break;
9096e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        case M4VIDEOEDITING_kVGA:
9106e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            pC->ewc.uiVideoWidth = 640;
9116e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            pC->ewc.uiVideoHeight = 480;
9126e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            break;
9136e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            /* +PR LV5807 */
9146e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        case M4VIDEOEDITING_kWVGA:
9156e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            pC->ewc.uiVideoWidth = 800;
9166e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            pC->ewc.uiVideoHeight = 480;
9176e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            break;
9186e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        case M4VIDEOEDITING_kNTSC:
9196e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            pC->ewc.uiVideoWidth = 720;
9206e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            pC->ewc.uiVideoHeight = 480;
9216e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            break;
9226e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            /* -PR LV5807 */
9236e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            /* +CR Google */
9246e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        case M4VIDEOEDITING_k640_360:
9256e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            pC->ewc.uiVideoWidth = 640;
9266e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            pC->ewc.uiVideoHeight = 360;
9276e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            break;
9286e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
9296e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        case M4VIDEOEDITING_k854_480:
9306e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            pC->ewc.uiVideoWidth = M4ENCODER_854_480_Width;
9316e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            pC->ewc.uiVideoHeight = 480;
9326e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            break;
9336e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
9346e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        case M4VIDEOEDITING_k1280_720:
9356e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            pC->ewc.uiVideoWidth = 1280;
9366e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            pC->ewc.uiVideoHeight = 720;
9376e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            break;
9386e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        case M4VIDEOEDITING_k1080_720:
9396e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            pC->ewc.uiVideoWidth = M4ENCODER_1080_720_Width;
9406e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
9416e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            pC->ewc.uiVideoHeight = 720;
9426e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            break;
9436e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        case M4VIDEOEDITING_k960_720:
9446e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            pC->ewc.uiVideoWidth = 960;
9456e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            pC->ewc.uiVideoHeight = 720;
9466e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            break;
947e02eee1a408656be9beaf1b0ba656dd1ee103799Chih-Chung Chang        case M4VIDEOEDITING_k1920_1080:
948e02eee1a408656be9beaf1b0ba656dd1ee103799Chih-Chung Chang            pC->ewc.uiVideoWidth = 1920;
949e02eee1a408656be9beaf1b0ba656dd1ee103799Chih-Chung Chang            pC->ewc.uiVideoHeight = 1088; // need to be multiples of 16
950e02eee1a408656be9beaf1b0ba656dd1ee103799Chih-Chung Chang            break;
9516e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
9526e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        default: /* If output video size is not given, we take QCIF size */
953e02eee1a408656be9beaf1b0ba656dd1ee103799Chih-Chung Chang            M4OSA_TRACE1_0(
954e02eee1a408656be9beaf1b0ba656dd1ee103799Chih-Chung Chang                "M4VSS3GPP_editOpen: no output video size given, default to QCIF!");
9556e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            pC->ewc.uiVideoWidth = 176;
9566e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            pC->ewc.uiVideoHeight = 144;
9576e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            pC->xVSS.outputVideoSize = M4VIDEOEDITING_kQCIF;
9587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
9596e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    }
9607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
9616e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    pC->ewc.uiVideoTimeScale        = 30;
9626e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    pC->ewc.bVideoDataPartitioning  = 0;
9630a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury    /* Set output video profile and level */
9640a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury    pC->ewc.outputVideoProfile = pC->xVSS.outputVideoProfile;
9650a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury    pC->ewc.outputVideoLevel = pC->xVSS.outputVideoLevel;
9667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
9676e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    switch(pC->xVSS.outputVideoFormat) {
9686e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        case M4VIDEOEDITING_kH263:
9696e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            pC->ewc.VideoStreamType = M4SYS_kH263;
9706e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            break;
9717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_kMPEG4:
9727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->ewc.VideoStreamType = M4SYS_kMPEG_4;
9737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
9747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_kH264:
9757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->ewc.VideoStreamType = M4SYS_kH264;
9767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
9777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        default:
9787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->ewc.VideoStreamType = M4SYS_kVideoUnknown;
9797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
9807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
9817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
9827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
9837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Copy the audio properties of the master clip to the output properties */
9847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->ewc.uiNbChannels =
9857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->pClipList[pSettings->uiMasterClip].ClipProperties.uiNbChannels;
9867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->ewc.uiAudioBitrate =
9877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->pClipList[pSettings->uiMasterClip].ClipProperties.uiAudioBitrate;
9887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->ewc.uiSamplingFrequency = pC->pClipList[pSettings->
9897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        uiMasterClip].ClipProperties.uiSamplingFrequency;
9907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->ewc.uiSilencePcmSize =
9917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->pClipList[pSettings->uiMasterClip].ClipProperties.uiDecodedPcmSize;
9927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->ewc.scale_audio = pC->ewc.uiSamplingFrequency / 1000.0;
9937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
9947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    switch( pC->pClipList[pSettings->uiMasterClip].ClipProperties.AudioStreamType )
9957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
9967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_kAMR_NB:
9977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->ewc.AudioStreamType = M4SYS_kAMR;
9987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->ewc.pSilenceFrameData =
9997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                (M4OSA_UInt8 *)M4VSS3GPP_AMR_AU_SILENCE_FRAME_048;
10007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->ewc.uiSilenceFrameSize =
10017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4VSS3GPP_AMR_AU_SILENCE_FRAME_048_SIZE;
10027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->ewc.iSilenceFrameDuration =
10037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4VSS3GPP_AMR_AU_SILENCE_FRAME_048_DURATION;
10047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->bSupportSilence = M4OSA_TRUE;
10057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
10067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
10077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_kAAC:
10087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_kAACplus:
10097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_keAACplus:
10107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->ewc.AudioStreamType = M4SYS_kAAC;
10117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
10127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if( pC->ewc.uiNbChannels == 1 )
10137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
10147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->ewc.pSilenceFrameData =
10157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    (M4OSA_UInt8 *)M4VSS3GPP_AAC_AU_SILENCE_MONO;
10167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->ewc.uiSilenceFrameSize = M4VSS3GPP_AAC_AU_SILENCE_MONO_SIZE;
10177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->bSupportSilence = M4OSA_TRUE;
10187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
10197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            else
10207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
10217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->ewc.pSilenceFrameData =
10227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    (M4OSA_UInt8 *)M4VSS3GPP_AAC_AU_SILENCE_STEREO;
10237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->ewc.uiSilenceFrameSize =
10247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    M4VSS3GPP_AAC_AU_SILENCE_STEREO_SIZE;
10257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->bSupportSilence = M4OSA_TRUE;
10267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
10277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->ewc.iSilenceFrameDuration =
10287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                1024; /* AAC is always 1024/Freq sample duration */
10297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
10307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
10317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_kMP3:
10327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->ewc.AudioStreamType = M4SYS_kMP3;
10337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->ewc.pSilenceFrameData = M4OSA_NULL;
10347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->ewc.uiSilenceFrameSize = 0;
10357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->ewc.iSilenceFrameDuration = 0;
10367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /* Special case, mp3 core reader return a time in ms */
10377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->ewc.scale_audio = 1.0;
10387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
10397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
10407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VIDEOEDITING_kEVRC:
10417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->ewc.AudioStreamType = M4SYS_kEVRC;
10427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->ewc.pSilenceFrameData = M4OSA_NULL;
10437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->ewc.uiSilenceFrameSize = 0;
10447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->ewc.iSilenceFrameDuration = 160; /* EVRC frames are 20 ms at 8000 Hz
10457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                             (makes it easier to factorize amr and evrc code) */
10467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
10477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
10487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        default:
10497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->ewc.AudioStreamType = M4SYS_kAudioUnknown;
10507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
10517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
10527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
10536e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    for (i=0; i<pC->uiClipNumber; i++) {
1054eaf349aaffc89c3ff754ddef856c80097b5a79a2Rajneesh Chowdury        if (pC->pClipList[i].bTranscodingRequired == M4OSA_FALSE) {
1055eaf349aaffc89c3ff754ddef856c80097b5a79a2Rajneesh Chowdury            /** If not transcoded in Analysis phase, check
1056eaf349aaffc89c3ff754ddef856c80097b5a79a2Rajneesh Chowdury             * if transcoding required now
1057eaf349aaffc89c3ff754ddef856c80097b5a79a2Rajneesh Chowdury             */
1058eaf349aaffc89c3ff754ddef856c80097b5a79a2Rajneesh Chowdury            if ((pC->pClipList[i].ClipProperties.VideoStreamType !=
1059eaf349aaffc89c3ff754ddef856c80097b5a79a2Rajneesh Chowdury                  pC->xVSS.outputVideoFormat)||
1060eaf349aaffc89c3ff754ddef856c80097b5a79a2Rajneesh Chowdury                  (pC->pClipList[i].ClipProperties.uiVideoWidth !=
1061eaf349aaffc89c3ff754ddef856c80097b5a79a2Rajneesh Chowdury                   pC->ewc.uiVideoWidth) ||
1062eaf349aaffc89c3ff754ddef856c80097b5a79a2Rajneesh Chowdury                  (pC->pClipList[i].ClipProperties.uiVideoHeight !=
1063eaf349aaffc89c3ff754ddef856c80097b5a79a2Rajneesh Chowdury                   pC->ewc.uiVideoHeight) ||
1064eaf349aaffc89c3ff754ddef856c80097b5a79a2Rajneesh Chowdury                  (pC->pClipList[i].ClipProperties.VideoStreamType ==
1065eaf349aaffc89c3ff754ddef856c80097b5a79a2Rajneesh Chowdury                   M4VIDEOEDITING_kH264) ||
1066eaf349aaffc89c3ff754ddef856c80097b5a79a2Rajneesh Chowdury                  (pC->pClipList[i].ClipProperties.VideoStreamType ==
1067eaf349aaffc89c3ff754ddef856c80097b5a79a2Rajneesh Chowdury                   M4VIDEOEDITING_kMPEG4 &&
1068eaf349aaffc89c3ff754ddef856c80097b5a79a2Rajneesh Chowdury                   pC->pClipList[i].ClipProperties.uiVideoTimeScale !=
1069eaf349aaffc89c3ff754ddef856c80097b5a79a2Rajneesh Chowdury                    pC->ewc.uiVideoTimeScale)) {
1070eaf349aaffc89c3ff754ddef856c80097b5a79a2Rajneesh Chowdury                pC->pClipList[i].bTranscodingRequired = M4OSA_TRUE;
1071eaf349aaffc89c3ff754ddef856c80097b5a79a2Rajneesh Chowdury            }
1072eaf349aaffc89c3ff754ddef856c80097b5a79a2Rajneesh Chowdury        } else {
1073eaf349aaffc89c3ff754ddef856c80097b5a79a2Rajneesh Chowdury            /** If bTranscodingRequired is true, it means the clip has
1074eaf349aaffc89c3ff754ddef856c80097b5a79a2Rajneesh Chowdury             * been transcoded in Analysis phase.
1075eaf349aaffc89c3ff754ddef856c80097b5a79a2Rajneesh Chowdury             */
1076eaf349aaffc89c3ff754ddef856c80097b5a79a2Rajneesh Chowdury            pC->pClipList[i].bTranscodingRequired = M4OSA_FALSE;
10776e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        }
10786e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    }
10797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
10807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * We produce a 3gpp file, unless it is mp3 */
10817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4VIDEOEDITING_kMP3 == pC->
10827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pClipList[pSettings->uiMasterClip].ClipProperties.AudioStreamType )
10837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        outputFileType = M4VIDEOEDITING_kFileType_MP3;
10847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    else
10857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        outputFileType = M4VIDEOEDITING_kFileType_3GPP;
10867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
10877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
10887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Beware, a null duration would lead to a divide by zero error (better safe than sorry...) */
10897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( 0 == pC->ewc.iOutputDuration )
10907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
10917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->ewc.iOutputDuration = 1;
10927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
10937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
10947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
10957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Open first clip */
10967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->uiCurrentClip = 0;
10977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
10987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    // Decorrelate input and output encoding timestamp to handle encoder prefetch
10997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->ewc.dInputVidCts  = 0.0;
11007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->ewc.dOutputVidCts = 0.0;
11017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->ewc.dATo = 0.0;
11027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
11037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    err = M4VSS3GPP_intSwitchToNextClip(pC);
11047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /* RC: to know when a file has been processed */
11057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4NO_ERROR != err && err != M4VSS3GPP_WAR_SWITCH_CLIP )
11067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
11077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_1(
11087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            "M4VSS3GPP_editOpen: M4VSS3GPP_intSwitchToNextClip() returns 0x%x!",
11097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err);
11107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return err;
11117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
11127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
11137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
11147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Do the video stuff in 3GPP Audio/Video case */
11157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4VIDEOEDITING_kFileType_3GPP == outputFileType )
11167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
11177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
11187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Compute the Decoder Specific Info for the output video and audio streams */
11197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = M4VSS3GPP_intComputeOutputVideoAndAudioDsi(pC,
11207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pSettings->uiMasterClip);
11217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
11227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4NO_ERROR != err )
11237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
11247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1(
11257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_editOpen: M4VSS3GPP_intComputeOutputVideoAndAudioDsi() returns 0x%x!",
11267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err);
11277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return err;
11287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
11297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
11307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
11317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Compute the time increment for the transition file */
11327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        switch( pSettings->videoFrameRate )
11337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
11347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            case M4VIDEOEDITING_k5_FPS:
11357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->dOutputFrameDuration = 1000.0 / 5.0;
11367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                break;
11377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
11387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            case M4VIDEOEDITING_k7_5_FPS:
11397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->dOutputFrameDuration = 1000.0 / 7.5;
11407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                break;
11417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
11427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            case M4VIDEOEDITING_k10_FPS:
11437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->dOutputFrameDuration = 1000.0 / 10.0;
11447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                break;
11457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
11467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            case M4VIDEOEDITING_k12_5_FPS:
11477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->dOutputFrameDuration = 1000.0 / 12.5;
11487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                break;
11497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
11507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            case M4VIDEOEDITING_k15_FPS:
11517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->dOutputFrameDuration = 1000.0 / 15.0;
11527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                break;
11537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
11547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            case M4VIDEOEDITING_k20_FPS:
11557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->dOutputFrameDuration = 1000.0 / 20.0;
11567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                break;
11577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
11587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            case M4VIDEOEDITING_k25_FPS:
11597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->dOutputFrameDuration = 1000.0 / 25.0;
11607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                break;
11617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
11627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            case M4VIDEOEDITING_k30_FPS:
11637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->dOutputFrameDuration = 1000.0 / 30.0;
11647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                break;
11657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
11667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            default:
11677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4OSA_TRACE1_1(
11687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    "M4VSS3GPP_editOpen(): invalid videoFrameRate (0x%x),\
11697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    returning M4VSS3GPP_ERR_INVALID_VIDEO_ENCODING_FRAME_RATE",
11707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    pSettings->videoFrameRate);
11717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                return M4VSS3GPP_ERR_INVALID_VIDEO_ENCODING_FRAME_RATE;
11727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
11737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
11747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4SYS_kMPEG_4 == pC->ewc.VideoStreamType )
11757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
11767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_UInt32 uiAlpha;
11777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /**
11787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            * MPEG-4 case.
11797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            * Time scale of the transition encoder must be the same than the
11807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            * timescale of the input files.
11817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            * So the frame duration must be compatible with this time scale,
11827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            * but without beeing too short.
11837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            * For that, we must compute alpha (integer) so that:
11847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            *             (alpha x 1000)/EncoderTimeScale > MinFrameDuration
11857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            **/
11867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
11877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            uiAlpha = (M4OSA_UInt32)(( pC->dOutputFrameDuration
11887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                * pC->ewc.uiVideoTimeScale) / 1000.0 + 0.5);
11897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
11907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if( uiAlpha > 0 )
11917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
11927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->dOutputFrameDuration =
11937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    ( uiAlpha * 1000.0) / pC->ewc.uiVideoTimeScale;
11947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
11957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
11967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        else if( M4SYS_kH263 == pC->ewc.VideoStreamType )
11977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
11987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            switch( pSettings->videoFrameRate )
11997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
12007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                case M4VIDEOEDITING_k12_5_FPS:
12017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                case M4VIDEOEDITING_k20_FPS:
12027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                case M4VIDEOEDITING_k25_FPS:
12037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    M4OSA_TRACE1_0(
12047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                        "M4VSS3GPP_editOpen(): invalid videoFrameRate for H263,\
12057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                        returning M4VSS3GPP_ERR_INVALID_VIDEO_ENCODING_FRAME_RATE");
12067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    return M4VSS3GPP_ERR_INVALID_VIDEO_ENCODING_FRAME_RATE;
12077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi               default:
12087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                  break;
12097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
12107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
12117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
12127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
12137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
12147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Create the MP3 output file */
12157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4VIDEOEDITING_kFileType_MP3 == outputFileType )
12167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
12177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4READER_Buffer mp3tagBuffer;
12187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = M4VSS3GPP_intCreateMP3OutputFile(pC, pSettings->pOutputFile);
12197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
12207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4NO_ERROR != err )
12217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
12227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1(
12237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_editOpen: M4VSS3GPP_intCreateMP3OutputFile returns 0x%x",
12247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err);
12257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return err;
12267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
12277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
12287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /* The ID3v2 tag could be at any place in the mp3 file                             */
12297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /* The mp3 reader only checks few bytes in the beginning of
12307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi           stream to look for a ID3v2 tag  */
12317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /* It means that if the ID3v2 tag is not at the beginning of the file the reader do
12327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        as there is no these metadata */
12337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
12347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /* Retrieve the data of the ID3v2 Tag */
12357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = pC->pC1->ShellAPI.m_pReader->m_pFctGetOption(
12367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->pC1->pReaderContext, M4READER_kOptionID_Mp3Id3v2Tag,
12377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (M4OSA_DataOption) &mp3tagBuffer);
12387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
12397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4NO_ERROR != err )
12407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
12417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1("M4VSS3GPP_editOpen: M4MP3R_getOption returns 0x%x",
12427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err);
12437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return err;
12447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
12457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
12467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /* Write the data of the ID3v2 Tag in the output file */
12477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( 0 != mp3tagBuffer.m_uiBufferSize )
12487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
12497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err = pC->pOsaFileWritPtr->writeData(pC->ewc.p3gpWriterContext,
12507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                (M4OSA_MemAddr8)mp3tagBuffer.m_pData, mp3tagBuffer.m_uiBufferSize);
12517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
12527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /**
12537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            * Free before the error checking anyway */
1254694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu            free(mp3tagBuffer.m_pData);
12557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
12567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /**
12577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            * Error checking */
12587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if( M4NO_ERROR != err )
12597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
12607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4OSA_TRACE1_1(
12617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    "M4VSS3GPP_editOpen: WriteData(ID3v2Tag) returns 0x%x",
12627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    err);
12637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                return err;
12647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
12657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
12667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            mp3tagBuffer.m_uiBufferSize = 0;
12677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            mp3tagBuffer.m_pData = M4OSA_NULL;
12687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
12697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
12707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
12717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Create the 3GPP output file */
12727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    else if( M4VIDEOEDITING_kFileType_3GPP == outputFileType )
12737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
1274c6a88ac5d620a5cd47b2741a915d661aab8fe0b4Dharmaray Kundargi        pC->ewc.uiVideoBitrate = pSettings->xVSS.outputVideoBitrate;
12757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
12767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
12777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * 11/12/2008 CR3283 MMS use case in VideoArtist: Set max output file size if needed */
12787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( pC->bIsMMS == M4OSA_TRUE )
12797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
12807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err = M4VSS3GPP_intCreate3GPPOutputFile(&pC->ewc, &pC->ShellAPI,
12817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->pOsaFileWritPtr, pSettings->pOutputFile,
12827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->pOsaFileReadPtr, pSettings->pTemporaryFile,
12837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pSettings->xVSS.outputFileSize);
12847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
12857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        else
12867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
12877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err = M4VSS3GPP_intCreate3GPPOutputFile(&pC->ewc, &pC->ShellAPI,
12887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->pOsaFileWritPtr, pSettings->pOutputFile,
12897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->pOsaFileReadPtr, pSettings->pTemporaryFile, 0);
12907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
12917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
12927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4NO_ERROR != err )
12937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
12947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1(
12957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_editOpen: M4VSS3GPP_intCreate3GPPOutputFile returns 0x%x",
12967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err);
12977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return err;
12987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
12997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
13007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
13017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Default error case */
13027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    else
13037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
13047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_1(
13057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            "M4VSS3GPP_editOpen: invalid outputFileType = 0x%x,\
13067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            returning M4VSS3GPP_ERR_OUTPUT_FILE_TYPE_ERROR",
13077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            outputFileType);
13087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return
13097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4VSS3GPP_ERR_OUTPUT_FILE_TYPE_ERROR; /**< this is an internal error code
13107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                                  unknown to the user */
13117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
13127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
13137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
13147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Initialize state */
13157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4SYS_kMP3 == pC->ewc.AudioStreamType )
13167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
13177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
13187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * In the MP3 case we use a special audio state */
13197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->State = M4VSS3GPP_kEditState_MP3_JUMP;
13207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
13217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    else
13227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
13237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
13247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * We start with the video processing */
13257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->State = M4VSS3GPP_kEditState_VIDEO;
13267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
13277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
13287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
13297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Initialize state.
13307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * The first clip is independant to the "virtual previous clips",
13317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * so it's like if we where in Read/Write mode before it. */
13327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->Vstate = M4VSS3GPP_kEditVideoState_READ_WRITE;
13337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->Astate = M4VSS3GPP_kEditAudioState_READ_WRITE;
13347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
13357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
13367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Return with no error */
13377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_0("M4VSS3GPP_editOpen(): returning M4NO_ERROR");
13387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return M4NO_ERROR;
13397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
13407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
13417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
13427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
13437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4VSS3GPP_editStep()
13447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    Perform one step of editing.
13457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note
13467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param     pContext           (IN) VSS 3GPP edit context
13477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param     pProgress          (OUT) Progress percentage (0 to 100) of the editing operation
13487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4NO_ERROR:        No error
13497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4ERR_PARAMETER:   pContext is M4OSA_NULL (debug only)
13507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4ERR_STATE:       VSS 3GPP is not in an appropriate state for this
13517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *                               function to be called
13527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4VSS3GPP_WAR_EDITING_DONE: Edition is done, user should now call
13537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *            M4VSS3GPP_editClose()
13547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
13557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
13567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4VSS3GPP_editStep( M4VSS3GPP_EditContext pContext,
13577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                             M4OSA_UInt8 *pProgress )
13587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
13597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VSS3GPP_InternalEditContext *pC =
13607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        (M4VSS3GPP_InternalEditContext *)pContext;
13617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32 uiProgressAudio, uiProgressVideo, uiProgress;
13627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_ERR err;
13637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
13647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_1("M4VSS3GPP_editStep called with pContext=0x%x", pContext);
13657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
13667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
13677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    *    Check input parameter */
13687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF2((M4OSA_NULL == pContext), M4ERR_PARAMETER,
13697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "M4VSS3GPP_editStep: pContext is M4OSA_NULL");
13707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF2((M4OSA_NULL == pProgress), M4ERR_PARAMETER,
13717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "M4VSS3GPP_editStep: pProgress is M4OSA_NULL");
13727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
13737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
13747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Check state automaton and select correct processing */
13757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    switch( pC->State )
13767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
13777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_kEditState_VIDEO:
13787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err = M4VSS3GPP_intEditStepVideo(pC);
13797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
13807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
13817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_kEditState_AUDIO:
13827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err = M4VSS3GPP_intEditStepAudio(pC);
13837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
13847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
13857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_kEditState_MP3:
13867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err = M4VSS3GPP_intEditStepMP3(pC);
13877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
13887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
13897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_kEditState_MP3_JUMP:
13907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err = M4VSS3GPP_intEditJumpMP3(pC);
13917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
13927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
13937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        default:
13947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_0(
13957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_editStep(): invalid internal state (0x%x), returning M4ERR_STATE");
13967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return M4ERR_STATE;
13977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
13987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
13997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
14007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Compute progress.
14017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * We do the computing with 32bits precision because in some (very) extreme case, we may get
14027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * values higher than 256 (...) */
14037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    uiProgressAudio =
14047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        ( (M4OSA_UInt32)(pC->ewc.dATo * 100)) / pC->ewc.iOutputDuration;
14057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    // Decorrelate input and output encoding timestamp to handle encoder prefetch
14067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    uiProgressVideo = ((M4OSA_UInt32)(pC->ewc.dInputVidCts * 100)) / pC->ewc.iOutputDuration;
14077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
14087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    uiProgress = uiProgressAudio + uiProgressVideo;
14097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
14107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( ( pC->ewc.AudioStreamType != M4SYS_kAudioUnknown)
14117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        && (pC->ewc.VideoStreamType != M4SYS_kVideoUnknown) )
14127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        uiProgress /= 2;
14137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
14147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
14157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Sanity check */
14167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( uiProgress > 100 )
14177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
14187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        *pProgress = 100;
14197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
14207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    else
14217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
14227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        *pProgress = (M4OSA_UInt8)uiProgress;
14237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
14247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
14257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
14267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Return the error */
14277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_1("M4VSS3GPP_editStep(): returning 0x%x", err);
14287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return err;
14297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
14307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
14317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
14327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
14337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4VSS3GPP_editClose()
14347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    Finish the VSS edit operation.
14357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note    The output 3GPP file is ready to be played after this call
14367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param    pContext           (IN) VSS edit context
14377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4NO_ERROR:       No error
14387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4ERR_PARAMETER:  pContext is M4OSA_NULL (debug only)
14397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4ERR_STATE:      VSS is not in an appropriate state for this function to be called
14407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
14417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
14427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4VSS3GPP_editClose( M4VSS3GPP_EditContext pContext )
14437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
14447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VSS3GPP_InternalEditContext *pC =
14457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        (M4VSS3GPP_InternalEditContext *)pContext;
14467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_ERR err;
14477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_ERR returnedError = M4NO_ERROR;
14487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32 lastCTS;
14497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
14507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_1("M4VSS3GPP_editClose called with pContext=0x%x", pContext);
14517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
14527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
14537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    *    Check input parameter */
14547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF2((M4OSA_NULL == pContext), M4ERR_PARAMETER,
14557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "M4VSS3GPP_editClose: pContext is M4OSA_NULL");
14567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
14577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
14587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Check state automaton.
14597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * In "theory", we should not authorize closing if we are in CREATED state.
14607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * But in practice, in case the opening failed, it may have been partially done.
14617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * In that case we have to free some opened ressources by calling Close. */
14627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4VSS3GPP_kEditState_CLOSED == pC->State )
14637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
14647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_1(
14657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            "M4VSS3GPP_editClose: Wrong state (0x%x), returning M4ERR_STATE",
14667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->State);
14677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return M4ERR_STATE;
14687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
14697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
14707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
14717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * There may be an encoder to destroy */
14727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    err = M4VSS3GPP_intDestroyVideoEncoder(pC);
14737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
14747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4NO_ERROR != err )
14757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
14767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_1(
14777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            "M4VSS3GPP_editClose: M4VSS3GPP_editDestroyVideoEncoder() returns 0x%x!",
14787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err);
14797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**< We do not return the error here because we still have stuff to free */
14807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        returnedError = err;
14817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
14827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
14837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
14847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Close the output file */
14857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4SYS_kMP3 == pC->ewc.AudioStreamType )
14867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
14877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
14887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * MP3 case */
14897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4OSA_NULL != pC->ewc.p3gpWriterContext )
14907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
14917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err = pC->pOsaFileWritPtr->closeWrite(pC->ewc.p3gpWriterContext);
14927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->ewc.p3gpWriterContext = M4OSA_NULL;
14937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
14947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
14957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    else
14967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
14977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
14987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Close the output 3GPP clip, if it has been opened */
14997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4OSA_NULL != pC->ewc.p3gpWriterContext )
15007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
15017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /* Update last Video CTS */
15027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            lastCTS = pC->ewc.iOutputDuration;
15037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
15047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err = pC->ShellAPI.pWriterGlobalFcts->pFctSetOption(
15057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->ewc.p3gpWriterContext,
15067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                (M4OSA_UInt32)M4WRITER_kMaxFileDuration, &lastCTS);
15077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
15087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if( M4NO_ERROR != err )
15097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
15107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4OSA_TRACE1_1(
15117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    "M4VSS3GPP_editClose: SetOption(M4WRITER_kMaxFileDuration) returns 0x%x",
15127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    err);
15137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
15147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
15157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err = pC->ShellAPI.pWriterGlobalFcts->pFctCloseWrite(
15167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->ewc.p3gpWriterContext);
15177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
15187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if( M4NO_ERROR != err )
15197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
15207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4OSA_TRACE1_1(
15217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    "M4VSS3GPP_editClose: pFctCloseWrite(OUT) returns 0x%x!",
15227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    err);
15237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                /**< We do not return the error here because we still have stuff to free */
15247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                if( M4NO_ERROR
15257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    == returnedError ) /**< we return the first error that happened */
15267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                {
15277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    returnedError = err;
15287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                }
15297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
15307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->ewc.p3gpWriterContext = M4OSA_NULL;
15317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
15327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
15337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
15347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
15357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Free the output video DSI, if it has been created */
15367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL != pC->ewc.pVideoOutputDsi )
15377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
1538694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu        free(pC->ewc.pVideoOutputDsi);
15397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->ewc.pVideoOutputDsi = M4OSA_NULL;
15407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
15417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
15427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
15437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Free the output audio DSI, if it has been created */
15447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL != pC->ewc.pAudioOutputDsi )
15457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
1546694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu        free(pC->ewc.pAudioOutputDsi);
15477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->ewc.pAudioOutputDsi = M4OSA_NULL;
15487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
15497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
15507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
15517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Close clip1, if needed */
15527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL != pC->pC1 )
15537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
15547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = M4VSS3GPP_intClipCleanUp(pC->pC1);
15557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
15567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4NO_ERROR != err )
15577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
15587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1(
15597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_editClose: M4VSS3GPP_intClipCleanUp(C1) returns 0x%x!",
15607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err);
15617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /**< We do not return the error here because we still have stuff to free */
15627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if( M4NO_ERROR
15637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                == returnedError ) /**< we return the first error that happened */
15647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
15657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                returnedError = err;
15667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
15677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
15687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->pC1 = M4OSA_NULL;
15697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
15707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
15717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
15727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Close clip2, if needed */
15737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL != pC->pC2 )
15747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
15757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = M4VSS3GPP_intClipCleanUp(pC->pC2);
15767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
15777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4NO_ERROR != err )
15787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
15797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1(
15807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_editClose: M4VSS3GPP_intClipCleanUp(C2) returns 0x%x!",
15817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err);
15827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /**< We do not return the error here because we still have stuff to free */
15837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if( M4NO_ERROR
15847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                == returnedError ) /**< we return the first error that happened */
15857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
15867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                returnedError = err;
15877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
15887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
15897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->pC2 = M4OSA_NULL;
15907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
15917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
15927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
15937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Free the temporary YUV planes */
15947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL != pC->yuv1[0].pac_data )
15957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
1596694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu        free(pC->yuv1[0].pac_data);
15977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->yuv1[0].pac_data = M4OSA_NULL;
15987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
15997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
16007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL != pC->yuv1[1].pac_data )
16017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
1602694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu        free(pC->yuv1[1].pac_data);
16037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->yuv1[1].pac_data = M4OSA_NULL;
16047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
16057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
16067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL != pC->yuv1[2].pac_data )
16077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
1608694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu        free(pC->yuv1[2].pac_data);
16097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->yuv1[2].pac_data = M4OSA_NULL;
16107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
16117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
16127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL != pC->yuv2[0].pac_data )
16137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
1614694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu        free(pC->yuv2[0].pac_data);
16157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->yuv2[0].pac_data = M4OSA_NULL;
16167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
16177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
16187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL != pC->yuv2[1].pac_data )
16197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
1620694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu        free(pC->yuv2[1].pac_data);
16217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->yuv2[1].pac_data = M4OSA_NULL;
16227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
16237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
16247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL != pC->yuv2[2].pac_data )
16257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
1626694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu        free(pC->yuv2[2].pac_data);
16277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->yuv2[2].pac_data = M4OSA_NULL;
16287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
16297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
16307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /* RC */
16317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL != pC->yuv3[0].pac_data )
16327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
1633694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu        free(pC->yuv3[0].pac_data);
16347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->yuv3[0].pac_data = M4OSA_NULL;
16357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
16367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
16377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL != pC->yuv3[1].pac_data )
16387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
1639694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu        free(pC->yuv3[1].pac_data);
16407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->yuv3[1].pac_data = M4OSA_NULL;
16417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
16427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
16437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL != pC->yuv3[2].pac_data )
16447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
1645694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu        free(pC->yuv3[2].pac_data);
16467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->yuv3[2].pac_data = M4OSA_NULL;
16477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
16487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
16497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /* RC */
16507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL != pC->yuv4[0].pac_data )
16517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
1652694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu        free(pC->yuv4[0].pac_data);
16537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->yuv4[0].pac_data = M4OSA_NULL;
16547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
16557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
16567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL != pC->yuv4[1].pac_data )
16577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
1658694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu        free(pC->yuv4[1].pac_data);
16597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->yuv4[1].pac_data = M4OSA_NULL;
16607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
16617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
16627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL != pC->yuv4[2].pac_data )
16637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
1664694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu        free(pC->yuv4[2].pac_data);
16657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->yuv4[2].pac_data = M4OSA_NULL;
16667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
16677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
16687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
16697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * RC Free effects list */
16707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( pC->pEffectsList != M4OSA_NULL )
16717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
1672694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu        free(pC->pEffectsList);
16737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->pEffectsList = M4OSA_NULL;
16747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
16757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
16767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
16777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * RC Free active effects list */
16787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( pC->pActiveEffectsList != M4OSA_NULL )
16797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
1680694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu        free(pC->pActiveEffectsList);
16817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->pActiveEffectsList = M4OSA_NULL;
16827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
16837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
16847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     *  Free active effects list */
16857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if(pC->pActiveEffectsList1 != M4OSA_NULL)
16867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
1687694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu        free(pC->pActiveEffectsList1);
16887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->pActiveEffectsList1 = M4OSA_NULL;
16897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
16906e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    if(pC->m_air_context != M4OSA_NULL) {
16916e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        free(pC->m_air_context);
16926e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        pC->m_air_context = M4OSA_NULL;
16936e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    }
16947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
16957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Update state automaton */
16967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->State = M4VSS3GPP_kEditState_CLOSED;
16977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
16987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
16997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Return with no error */
17007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_1("M4VSS3GPP_editClose(): returning 0x%x", returnedError);
17017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return returnedError;
17027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
17037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
17047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
17057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
17067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4VSS3GPP_editCleanUp()
17077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    Free all resources used by the VSS edit operation.
17087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note    The context is no more valid after this call
17097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param    pContext            (IN) VSS edit context
17107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4NO_ERROR:            No error
17117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4ERR_PARAMETER:    pContext is M4OSA_NULL (debug only)
17127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
17137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
17147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4VSS3GPP_editCleanUp( M4VSS3GPP_EditContext pContext )
17157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
17167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_ERR err;
17177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VSS3GPP_InternalEditContext *pC =
17187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        (M4VSS3GPP_InternalEditContext *)pContext;
17197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
17207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_1("M4VSS3GPP_editCleanUp called with pContext=0x%x", pContext);
17217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
17227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
17237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    *    Check input parameter */
17247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL == pContext )
17257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
17267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_0(
17277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            "M4VSS3GPP_editCleanUp(): pContext is M4OSA_NULL, returning M4ERR_PARAMETER");
17287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return M4ERR_PARAMETER;
17297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
17307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
17317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
17327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Close, if needed.
17337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * In "theory", we should not close if we are in CREATED state.
17347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * But in practice, in case the opening failed, it may have been partially done.
17357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * In that case we have to free some opened ressources by calling Close. */
17367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4VSS3GPP_kEditState_CLOSED != pC->State )
17377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
17387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE3_0("M4VSS3GPP_editCleanUp(): calling M4VSS3GPP_editClose");
17397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = M4VSS3GPP_editClose(pC);
17407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
17417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4NO_ERROR != err )
17427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
17437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1(
17447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_editCleanUp(): M4VSS3GPP_editClose returns 0x%x",
17457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err);
17467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
17477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
17487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
17497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
17507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Free the video encoder dummy AU */
17517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL != pC->ewc.pDummyAuBuffer )
17527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
1753694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu        free(pC->ewc.pDummyAuBuffer);
17547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->ewc.pDummyAuBuffer = M4OSA_NULL;
17557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
17567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
17577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
17587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Free the Audio encoder context */
17597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL != pC->ewc.pAudioEncCtxt )
17607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
17617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = pC->ShellAPI.pAudioEncoderGlobalFcts->pFctClose(
17627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->ewc.pAudioEncCtxt);
17637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
17647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4NO_ERROR != err )
17657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
17667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1(
17677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_editCleanUp: pAudioEncoderGlobalFcts->pFctClose returns 0x%x",
17687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err);
17697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /**< don't return, we still have stuff to free */
17707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
17717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
17727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = pC->ShellAPI.pAudioEncoderGlobalFcts->pFctCleanUp(
17737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->ewc.pAudioEncCtxt);
17747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
17757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4NO_ERROR != err )
17767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
17777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1(
17787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_editCleanUp: pAudioEncoderGlobalFcts->pFctCleanUp returns 0x%x",
17797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err);
17807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /**< don't return, we still have stuff to free */
17817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
17827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
17837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->ewc.pAudioEncCtxt = M4OSA_NULL;
17847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
17857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
17867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
17877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Free the shells interfaces */
17887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VSS3GPP_unRegisterAllWriters(&pC->ShellAPI);
17897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VSS3GPP_unRegisterAllEncoders(&pC->ShellAPI);
17907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VSS3GPP_unRegisterAllReaders(&pC->ShellAPI);
17917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VSS3GPP_unRegisterAllDecoders(&pC->ShellAPI);
17927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
17937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
17947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Free the settings copied in the internal context */
17957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VSS3GPP_intFreeSettingsList(pC);
17967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
17977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
17987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Finally, Free context */
1799694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu    free(pC);
18007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC = M4OSA_NULL;
18017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
18027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
18037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Return with no error */
18047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_0("M4VSS3GPP_editCleanUp(): returning M4NO_ERROR");
18057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return M4NO_ERROR;
18067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
18077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
18087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef WIN32
18097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
18107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
18117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4VSS3GPP_GetErrorMessage()
18127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    Return a string describing the given error code
18137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note    The input string must be already allocated (and long enough!)
18147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param    err                (IN) Error code to get the description from
18157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param    sMessage        (IN/OUT) Allocated string in which the description will be copied
18167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4NO_ERROR:        Input error is from the VSS3GPP module
18177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4ERR_PARAMETER:Input error is not from the VSS3GPP module
18187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
18197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
18207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
18217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4VSS3GPP_GetErrorMessage( M4OSA_ERR err, M4OSA_Char *sMessage )
18227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
18237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    switch( err )
18247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
18257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_WAR_EDITING_DONE:
18267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_WAR_EDITING_DONE");
18277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
18287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
18297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_WAR_END_OF_AUDIO_MIXING:
18307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_WAR_END_OF_AUDIO_MIXING");
18317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
18327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
18337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_WAR_END_OF_EXTRACT_PICTURE:
18347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_WAR_END_OF_EXTRACT_PICTURE");
18357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
18367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
18377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_INVALID_FILE_TYPE:
18387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_INVALID_FILE_TYPE");
18397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
18407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
18417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_INVALID_EFFECT_KIND:
18427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_INVALID_EFFECT_KIND");
18437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
18447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
18457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_INVALID_VIDEO_EFFECT_TYPE:
18467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_INVALID_VIDEO_EFFECT_TYPE");
18477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
18487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
18497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_INVALID_AUDIO_EFFECT_TYPE:
18507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_INVALID_AUDIO_EFFECT_TYPE");
18517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
18527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
18537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_INVALID_VIDEO_TRANSITION_TYPE:
18547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_INVALID_VIDEO_TRANSITION_TYPE");
18557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
18567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
18577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_INVALID_AUDIO_TRANSITION_TYPE:
18587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_INVALID_AUDIO_TRANSITION_TYPE");
18597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
18607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
18617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_INVALID_VIDEO_ENCODING_FRAME_RATE:
18627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_INVALID_VIDEO_ENCODING_FRAME_RATE");
18637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
18647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
18657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_EXTERNAL_EFFECT_NULL:
18667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_EXTERNAL_EFFECT_NULL");
18677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
18687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
18697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_EXTERNAL_TRANSITION_NULL:
18707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_EXTERNAL_TRANSITION_NULL");
18717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
18727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
18737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_BEGIN_CUT_LARGER_THAN_DURATION:
18747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_BEGIN_CUT_LARGER_THAN_DURATION");
18757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
18767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
18777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_BEGIN_CUT_LARGER_THAN_END_CUT:
18787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_BEGIN_CUT_LARGER_THAN_END_CUT");
18797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
18807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
18817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_OVERLAPPING_TRANSITIONS:
18827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_OVERLAPPING_TRANSITIONS");
18837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
18847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
18857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_INVALID_3GPP_FILE:
18867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_INVALID_3GPP_FILE");
18877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
18887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
18897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_UNSUPPORTED_INPUT_VIDEO_FORMAT:
18907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_UNSUPPORTED_INPUT_VIDEO_FORMAT");
18917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
18927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
18937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_UNSUPPORTED_INPUT_AUDIO_FORMAT:
18947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_UNSUPPORTED_INPUT_AUDIO_FORMAT");
18957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
18967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
18977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_AMR_EDITING_UNSUPPORTED:
18987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_AMR_EDITING_UNSUPPORTED");
18997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
19007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
19017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_INPUT_VIDEO_AU_TOO_LARGE:
19027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_INPUT_VIDEO_AU_TOO_LARGE");
19037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
19047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
19057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_INPUT_AUDIO_AU_TOO_LARGE:
19067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_INPUT_AUDIO_AU_TOO_LARGE");
19077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
19087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
19097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_INPUT_AUDIO_CORRUPTED_AU:
19107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_INPUT_AUDIO_CORRUPTED_AU");
19117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
19127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
19137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_ENCODER_ACCES_UNIT_ERROR:
19147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_ENCODER_ACCES_UNIT_ERROR");
19157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
19167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
19177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_EDITING_UNSUPPORTED_VIDEO_FORMAT:
19187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_EDITING_UNSUPPORTED_VIDEO_FORMAT");
19197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
19207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
19217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_EDITING_UNSUPPORTED_H263_PROFILE:
19227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_EDITING_UNSUPPORTED_H263_PROFILE");
19237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
19247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
19257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_EDITING_UNSUPPORTED_MPEG4_PROFILE:
19267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_EDITING_UNSUPPORTED_MPEG4_PROFILE");
19277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
19287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
19297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_EDITING_UNSUPPORTED_MPEG4_RVLC:
19307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_EDITING_UNSUPPORTED_MPEG4_RVLC");
19317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
19327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
19337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_EDITING_UNSUPPORTED_AUDIO_FORMAT:
19347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_EDITING_UNSUPPORTED_AUDIO_FORMAT");
19357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
19367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
19377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_EDITING_NO_SUPPORTED_STREAM_IN_FILE:
19387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage,
19397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_ERR_EDITING_NO_SUPPORTED_STREAM_IN_FILE");
19407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
19417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
19427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_EDITING_NO_SUPPORTED_VIDEO_STREAM_IN_FILE:
19437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage,
19447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_ERR_EDITING_NO_SUPPORTED_VIDEO_STREAM_IN_FILE");
19457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
19467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
19477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_INVALID_CLIP_ANALYSIS_VERSION:
19487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_INVALID_CLIP_ANALYSIS_VERSION");
19497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
19507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
19517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_INCOMPATIBLE_VIDEO_FORMAT:
19527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_INCOMPATIBLE_VIDEO_FORMAT");
19537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
19547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
19557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_INCOMPATIBLE_VIDEO_FRAME_SIZE:
19567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_INCOMPATIBLE_VIDEO_FRAME_SIZE");
19577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
19587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
19597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_INCOMPATIBLE_VIDEO_TIME_SCALE:
19607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_INCOMPATIBLE_VIDEO_TIME_SCALE");
19617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
19627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
19637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_INCOMPATIBLE_VIDEO_DATA_PARTITIONING:
19647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage,
19657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_ERR_INCOMPATIBLE_VIDEO_DATA_PARTITIONING");
19667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
19677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
19687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_UNSUPPORTED_MP3_ASSEMBLY:
19697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_UNSUPPORTED_MP3_ASSEMBLY");
19707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
19717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
19727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_WAR_INCOMPATIBLE_AUDIO_STREAM_TYPE:
19737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_WAR_INCOMPATIBLE_AUDIO_STREAM_TYPE");
19747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
19757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
19767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_WAR_INCOMPATIBLE_AUDIO_NB_OF_CHANNELS:
19777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_WAR_INCOMPATIBLE_AUDIO_NB_OF_CHANNELS");
19787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
19797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
19807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_WAR_INCOMPATIBLE_AUDIO_SAMPLING_FREQUENCY:
19817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage,
19827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_WAR_INCOMPATIBLE_AUDIO_SAMPLING_FREQUENCY");
19837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
19847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
19857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_NO_SUPPORTED_STREAM_IN_FILE:
19867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_NO_SUPPORTED_STREAM_IN_FILE");
19877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
19887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
19897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_ADDVOLUME_EQUALS_ZERO:
19907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_ADDVOLUME_EQUALS_ZERO");
19917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
19927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
19937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_ADDCTS_HIGHER_THAN_VIDEO_DURATION:
19947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_ADDCTS_HIGHER_THAN_VIDEO_DURATION");
19957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
19967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
19977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_UNDEFINED_AUDIO_TRACK_FILE_FORMAT:
19987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_UNDEFINED_AUDIO_TRACK_FILE_FORMAT");
19997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
20007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
20017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_UNSUPPORTED_ADDED_AUDIO_STREAM:
20027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_UNSUPPORTED_ADDED_AUDIO_STREAM");
20037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
20047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
20057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_AUDIO_MIXING_UNSUPPORTED:
20067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_AUDIO_MIXING_UNSUPPORTED");
20077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
20087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
20097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_FEATURE_UNSUPPORTED_WITH_AUDIO_TRACK:
20107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage,
20117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_ERR_FEATURE_UNSUPPORTED_WITH_AUDIO_TRACK");
20127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
20137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
20147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_AUDIO_CANNOT_BE_MIXED:
20157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_AUDIO_CANNOT_BE_MIXED");
20167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
20177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
20187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_INPUT_CLIP_IS_NOT_A_3GPP:
20197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_INPUT_CLIP_IS_NOT_A_3GPP");
20207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
20217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
20227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_BEGINLOOP_HIGHER_ENDLOOP:
20237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_BEGINLOOP_HIGHER_ENDLOOP");
20247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
20257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
20267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_H263_PROFILE_NOT_SUPPORTED:
20277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_H263_PROFILE_NOT_SUPPORTED");
20287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
20297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
20307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4VSS3GPP_ERR_NO_SUPPORTED_VIDEO_STREAM_IN_FILE:
20317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "M4VSS3GPP_ERR_NO_SUPPORTED_VIDEO_STREAM_IN_FILE");
20327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
20337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
20347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        default: /**< Not a VSS3GPP error */
20357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            strcpy(sMessage, "");
20367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return M4ERR_PARAMETER;
20377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
20387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return M4NO_ERROR;
20397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
20407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
20417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif /* WIN32 */
20427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
20437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/********************************************************/
20447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/********************************************************/
20457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/********************************************************/
20467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/****************   STATIC FUNCTIONS   ******************/
20477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/********************************************************/
20487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/********************************************************/
20497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/********************************************************/
20507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
20517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
20527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
20537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4VSS3GPP_intClipSettingsSanityCheck()
20547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    Simplify the given clip settings
20557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note    This function may modify the given structure
20567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param   pClip    (IN/OUT) Clip settings
20577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4NO_ERROR:            No error
20587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4VSS3GPP_ERR_EXTERNAL_EFFECT_NULL:
20597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
20607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
20617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
20627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargistatic M4OSA_ERR M4VSS3GPP_intClipSettingsSanityCheck(
20637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VSS3GPP_ClipSettings *pClip )
20647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
20657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt8 uiFx;
20667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32
20677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        uiClipActualDuration; /**< the clip duration once the cuts are done */
20687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32 uiDuration;
20697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VSS3GPP_EffectSettings *pFx;
20707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
20717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
20727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * If begin cut is too far, return an error */
20737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    uiDuration = pClip->ClipProperties.uiClipDuration;
20747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
20757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( pClip->uiBeginCutTime > uiDuration )
20767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
20777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_2(
20787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            "M4VSS3GPP_intClipSettingsSanityCheck: %d > %d,\
20797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            returning M4VSS3GPP_ERR_BEGIN_CUT_LARGER_THAN_DURATION",
20807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pClip->uiBeginCutTime, uiDuration);
20817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return M4VSS3GPP_ERR_BEGIN_CUT_LARGER_THAN_DURATION;
20827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
20837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
20847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
20857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * If end cut is too far, set to zero (it means no end cut) */
20867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( pClip->uiEndCutTime > uiDuration )
20877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
20887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pClip->uiEndCutTime = 0;
20897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
20907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
20917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
20927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Compute actual clip duration (once cuts are done) */
20937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( 0 == pClip->uiEndCutTime )
20947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
20957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
20967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * No end cut */
20977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        uiClipActualDuration = uiDuration - pClip->uiBeginCutTime;
20987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
20997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    else
21007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
21017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( pClip->uiBeginCutTime >= pClip->uiEndCutTime )
21027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
21037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_2(
21047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_intClipSettingsSanityCheck: %d > %d,\
21057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                returning M4VSS3GPP_ERR_BEGIN_CUT_LARGER_THAN_END_CUT",
21067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pClip->uiBeginCutTime, pClip->uiEndCutTime);
21077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return M4VSS3GPP_ERR_BEGIN_CUT_LARGER_THAN_END_CUT;
21087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
21097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        uiClipActualDuration = pClip->uiEndCutTime - pClip->uiBeginCutTime;
21107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
21117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
21127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return M4NO_ERROR;
21137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
21147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
21157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
21167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
21177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4VSS3GPP_intTransitionSettingsSanityCheck()
21187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    Simplify the given transition settings
21197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note     This function may modify the given structure
21207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param    pTransition    (IN/OUT) Transition settings
21217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4NO_ERROR:            No error
21227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4VSS3GPP_ERR_EXTERNAL_TRANSITION_NULL:
21237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
21247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
21257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargistatic M4OSA_ERR M4VSS3GPP_intTransitionSettingsSanityCheck(
21267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VSS3GPP_TransitionSettings *pTransition )
21277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
21287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
21297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * No transition */
21307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( 0 == pTransition->uiTransitionDuration )
21317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
21327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pTransition->VideoTransitionType = M4VSS3GPP_kVideoTransitionType_None;
21337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pTransition->AudioTransitionType = M4VSS3GPP_kAudioTransitionType_None;
21347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
21357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    else if( ( M4VSS3GPP_kVideoTransitionType_None
21367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        == pTransition->VideoTransitionType)
21377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        && (M4VSS3GPP_kAudioTransitionType_None
21387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        == pTransition->AudioTransitionType) )
21397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
21407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pTransition->uiTransitionDuration = 0;
21417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
21427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
21437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
21447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Check external transition function is set */
21457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( ( pTransition->VideoTransitionType
21467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        >= M4VSS3GPP_kVideoTransitionType_External)
21477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        && (M4OSA_NULL == pTransition->ExtVideoTransitionFct) )
21487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
21497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return M4VSS3GPP_ERR_EXTERNAL_TRANSITION_NULL;
21507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
21517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
21527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
21537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Set minimal transition duration */
21547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( ( pTransition->uiTransitionDuration > 0)
21557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        && (pTransition->uiTransitionDuration
21567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        < M4VSS3GPP_MINIMAL_TRANSITION_DURATION) )
21577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
21587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pTransition->uiTransitionDuration =
21597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4VSS3GPP_MINIMAL_TRANSITION_DURATION;
21607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
21617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return M4NO_ERROR;
21627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
21637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
21647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
21657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
21667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4VSS3GPP_intFreeSettingsList()
21677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    Free the settings copied in the internal context
21687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param   pC    (IN/OUT) Internal edit context
21697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
21707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
21717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargistatic M4OSA_Void M4VSS3GPP_intFreeSettingsList(
21727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VSS3GPP_InternalEditContext *pC )
21737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
21747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32 i;
21757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
21767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
21777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Free the settings list */
21787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL != pC->pClipList )
21797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
21807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        for ( i = 0; i < pC->uiClipNumber; i++ )
21817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
21827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4VSS3GPP_editFreeClipSettings(&(pC->pClipList[i]));
21837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
21847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2185694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu        free(pC->pClipList);
21867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->pClipList = M4OSA_NULL;
21877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
21887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
21897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
21907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Free the transition list */
21917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL != pC->pTransitionList )
21927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
2193694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu        free(pC->pTransitionList);
21947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->pTransitionList = M4OSA_NULL;
21957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
21967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
21977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
21987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
21997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4VSS3GPP_intCreateMP3OutputFile()
22007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief        Creates and prepare the output MP file
22017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param   pC    (IN/OUT) Internal edit context
22027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
22037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
22047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargistatic M4OSA_ERR
22057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4VSS3GPP_intCreateMP3OutputFile( M4VSS3GPP_InternalEditContext *pC,
22067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                 M4OSA_Void *pOutputFile )
22077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
22087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_ERR err;
22097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
22107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    err =
22117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->pOsaFileWritPtr->openWrite(&pC->ewc.p3gpWriterContext, pOutputFile,
22127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_kFileWrite);
22137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
22147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4NO_ERROR != err )
22157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
22167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_1(
22177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            "M4VSS3GPP_intCreateMP3OutputFile: WriteOpen returns 0x%x!", err);
22187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return err;
22197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
22207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
22217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return M4NO_ERROR;
22227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
22237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
22247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
22257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4VSS3GPP_intCreate3GPPOutputFile()
22267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief   Creates and prepare the output MP3 file
22277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note    Creates the writer, Creates the output file, Adds the streams,
22287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi           Readies the writing process
22297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param   pC    (IN/OUT) Internal edit context
22307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
22317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
22327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR
22337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4VSS3GPP_intCreate3GPPOutputFile( M4VSS3GPP_EncodeWriteContext *pC_ewc,
22347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                  M4VSS3GPP_MediaAndCodecCtxt *pC_ShellAPI,
22357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                  M4OSA_FileWriterPointer *pOsaFileWritPtr,
22367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                  M4OSA_Void *pOutputFile,
22377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                  M4OSA_FileReadPointer *pOsaFileReadPtr,
22387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                  M4OSA_Void *pTempFile,
22397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                  M4OSA_UInt32 maxOutputFileSize )
22407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
22417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_ERR err;
22427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32 uiVersion;
22437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4SYS_StreamIDValue temp;
22447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
22457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_2(
22467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "M4VSS3GPP_intCreate3GPPOutputFile called with pC_ewc=0x%x, pOutputFile=0x%x",
22477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc, pOutputFile);
22487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
22497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
22507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    *    Check input parameter */
22517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF2((M4OSA_NULL == pC_ewc), M4ERR_PARAMETER,
22527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "M4VSS3GPP_intCreate3GPPOutputFile: pC_ewc is M4OSA_NULL");
22537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF2((M4OSA_NULL == pOutputFile), M4ERR_PARAMETER,
22547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "M4VSS3GPP_intCreate3GPPOutputFile: pOutputFile is M4OSA_NULL");
22557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
22567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /* Set writer */
22577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    err =
22587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4VSS3GPP_setCurrentWriter(pC_ShellAPI, M4VIDEOEDITING_kFileType_3GPP);
22597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4ERR_CHECK_RETURN(err);
22607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
22617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
22627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Create the output file */
22637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    err = pC_ShellAPI->pWriterGlobalFcts->pFctOpen(&pC_ewc->p3gpWriterContext,
22647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pOutputFile, pOsaFileWritPtr, pTempFile, pOsaFileReadPtr);
22657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
22667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4NO_ERROR != err )
22677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
22687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_1(
22697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            "M4VSS3GPP_intCreate3GPPOutputFile: pWriterGlobalFcts->pFctOpen returns 0x%x!",
22707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err);
22717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return err;
22727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
22737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
22747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
22757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Set the signature option of the writer */
22767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    err =
22777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ShellAPI->pWriterGlobalFcts->pFctSetOption(pC_ewc->p3gpWriterContext,
22787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4WRITER_kEmbeddedString, (M4OSA_DataOption)"NXP-SW : VSS    ");
22797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
22807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( ( M4NO_ERROR != err) && (((M4OSA_UInt32)M4ERR_BAD_OPTION_ID)
22817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        != err) ) /* this option may not be implemented by some writers */
22827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
22837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_1(
22847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            "M4VSS3GPP_intCreate3GPPOutputFile:\
22857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pWriterGlobalFcts->pFctSetOption(M4WRITER_kEmbeddedString) returns 0x%x!",
22867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err);
22877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return err;
22887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
22897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
22907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /*11/12/2008 CR3283 MMS use case for VideoArtist:
22917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    Set the max output file size option in the writer so that the output file will be
22927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    smaller than the given file size limitation*/
22937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( maxOutputFileSize > 0 )
22947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
22957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = pC_ShellAPI->pWriterGlobalFcts->pFctSetOption(
22967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC_ewc->p3gpWriterContext,
22977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4WRITER_kMaxFileSize, &maxOutputFileSize);
22987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
22997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4NO_ERROR != err )
23007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
23017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1(
23027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_intCreate3GPPOutputFile:\
23037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                writer set option M4WRITER_kMaxFileSize returns 0x%x",
23047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err);
23057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return err;
23067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
23077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
23087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
23097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
23107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Set the version option of the writer */
23117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    uiVersion =
23127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        (M4VIDEOEDITING_VERSION_MAJOR * 100 + M4VIDEOEDITING_VERSION_MINOR * 10
23137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        + M4VIDEOEDITING_VERSION_REVISION);
23147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    err =
23157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ShellAPI->pWriterGlobalFcts->pFctSetOption(pC_ewc->p3gpWriterContext,
23167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4WRITER_kEmbeddedVersion, (M4OSA_DataOption) &uiVersion);
23177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
23187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( ( M4NO_ERROR != err) && (((M4OSA_UInt32)M4ERR_BAD_OPTION_ID)
23197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        != err) ) /* this option may not be implemented by some writers */
23207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
23217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_1(
23227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            "M4VSS3GPP_intCreate3GPPOutputFile:\
23237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pWriterGlobalFcts->pFctSetOption(M4WRITER_kEmbeddedVersion) returns 0x%x!",
23247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err);
23257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return err;
23267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
23277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
23287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4SYS_kVideoUnknown != pC_ewc->VideoStreamType )
23297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
23307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
23317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Set the video stream properties */
23327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterVideoStreamInfo.height = pC_ewc->uiVideoHeight;
23337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterVideoStreamInfo.width = pC_ewc->uiVideoWidth;
23347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterVideoStreamInfo.fps =
23357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            0.0; /**< Not used by the shell/core writer */
23367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterVideoStreamInfo.Header.pBuf =
23377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC_ewc->pVideoOutputDsi; /**< Previously computed output DSI */
23387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterVideoStreamInfo.Header.Size = pC_ewc->
23397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            uiVideoOutputDsiSize; /**< Previously computed output DSI size */
23407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
23417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterVideoStream.streamType = pC_ewc->VideoStreamType;
23427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
23437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        switch( pC_ewc->VideoStreamType )
23447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
23457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            case M4SYS_kMPEG_4:
23467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            case M4SYS_kH263:
23477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            case M4SYS_kH264:
23487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                /**< We HAVE to put a value here... */
23497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC_ewc->WriterVideoStream.averageBitrate =
23507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    pC_ewc->uiVideoBitrate;
23517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC_ewc->WriterVideoStream.maxBitrate = pC_ewc->uiVideoBitrate;
23527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                break;
23537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
23547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            default:
23557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4OSA_TRACE1_1(
23567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    "M4VSS3GPP_intCreate3GPPOutputFile: unknown input video format (0x%x),\
23577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    returning M4VSS3GPP_ERR_UNSUPPORTED_INPUT_VIDEO_FORMAT!",
23587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    pC_ewc->VideoStreamType);
23597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                return M4VSS3GPP_ERR_UNSUPPORTED_INPUT_VIDEO_FORMAT;
23607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
23617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
23627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterVideoStream.streamID = M4VSS3GPP_WRITER_VIDEO_STREAM_ID;
23637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterVideoStream.timeScale =
23647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            0; /**< Not used by the shell/core writer */
23657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterVideoStream.profileLevel =
23667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            0; /**< Not used by the shell/core writer */
23677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterVideoStream.duration =
23687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            0; /**< Not used by the shell/core writer */
23697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
23707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterVideoStream.decoderSpecificInfoSize =
23717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            sizeof(M4WRITER_StreamVideoInfos);
23727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterVideoStream.decoderSpecificInfo =
23737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (M4OSA_MemAddr32) &(pC_ewc->WriterVideoStreamInfo);
23747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
23757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
23767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Add the video stream */
23777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = pC_ShellAPI->pWriterGlobalFcts->pFctAddStream(
23787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC_ewc->p3gpWriterContext, &pC_ewc->WriterVideoStream);
23797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
23807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4NO_ERROR != err )
23817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
23827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1(
23837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_intCreate3GPPOutputFile:\
23847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pWriterGlobalFcts->pFctAddStream(video) returns 0x%x!",
23857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err);
23867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return err;
23877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
23887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
23897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
23907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Update AU properties for video stream */
23917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterVideoAU.attribute = AU_RAP;
23927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterVideoAU.CTS = 0;
23937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterVideoAU.DTS = 0;    /** Reset time */
23947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterVideoAU.frag = M4OSA_NULL;
23957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterVideoAU.nbFrag = 0; /** No fragment */
23967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterVideoAU.size = 0;
23977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterVideoAU.dataAddress = M4OSA_NULL;
23987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterVideoAU.stream = &(pC_ewc->WriterVideoStream);
23997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
24007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
24017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Set the writer max video AU size */
24027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->uiVideoMaxAuSize = (M4OSA_UInt32)(1.5F
24037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            *(M4OSA_Float)(pC_ewc->WriterVideoStreamInfo.width
24047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            * pC_ewc->WriterVideoStreamInfo.height)
24057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            * M4VSS3GPP_VIDEO_MIN_COMPRESSION_RATIO);
24067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        temp.streamID = M4VSS3GPP_WRITER_VIDEO_STREAM_ID;
24077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        temp.value = pC_ewc->uiVideoMaxAuSize;
24087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = pC_ShellAPI->pWriterGlobalFcts->pFctSetOption(
24097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC_ewc->p3gpWriterContext, (M4OSA_UInt32)M4WRITER_kMaxAUSize,
24107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (M4OSA_DataOption) &temp);
24117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
24127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4NO_ERROR != err )
24137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
24147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1(
24157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_intCreate3GPPOutputFile:\
24167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pWriterGlobalFcts->pFctSetOption(M4WRITER_kMaxAUSize, video) returns 0x%x!",
24177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err);
24187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return err;
24197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
24207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
24217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
24227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Set the writer max video chunk size */
24237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        temp.streamID = M4VSS3GPP_WRITER_VIDEO_STREAM_ID;
24247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        temp.value = (M4OSA_UInt32)(pC_ewc->uiVideoMaxAuSize \
24257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            * M4VSS3GPP_VIDEO_AU_SIZE_TO_CHUNCK_SIZE_RATIO); /**< from max AU size to
24267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                                                  max Chunck size */
24277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = pC_ShellAPI->pWriterGlobalFcts->pFctSetOption(
24287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC_ewc->p3gpWriterContext,
24297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (M4OSA_UInt32)M4WRITER_kMaxChunckSize,
24307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (M4OSA_DataOption) &temp);
24317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
24327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4NO_ERROR != err )
24337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
24347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1(
24357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_intCreate3GPPOutputFile:\
24367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pWriterGlobalFcts->pFctSetOption(M4WRITER_kMaxAUSize, video) returns 0x%x!",
24377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err);
24387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return err;
24397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
24407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
24417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
24427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4SYS_kAudioUnknown != pC_ewc->AudioStreamType )
24437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
24447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4WRITER_StreamAudioInfos streamAudioInfo;
24457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
24467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        streamAudioInfo.nbSamplesPerSec = 0; /**< unused by our shell writer */
24477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        streamAudioInfo.nbBitsPerSample = 0; /**< unused by our shell writer */
24487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        streamAudioInfo.nbChannels = 1;      /**< unused by our shell writer */
24497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
24507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( pC_ewc->pAudioOutputDsi != M4OSA_NULL )
24517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
24527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /* If we copy the stream from the input, we copy its DSI */
24537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            streamAudioInfo.Header.Size = pC_ewc->uiAudioOutputDsiSize;
24547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            streamAudioInfo.Header.pBuf = pC_ewc->pAudioOutputDsi;
24557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
24567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        else
24577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
24587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /* Writer will put a default DSI */
24597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            streamAudioInfo.Header.Size = 0;
24607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            streamAudioInfo.Header.pBuf = M4OSA_NULL;
24617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
24627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
24637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterAudioStream.streamID = M4VSS3GPP_WRITER_AUDIO_STREAM_ID;
24647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterAudioStream.streamType = pC_ewc->AudioStreamType;
24657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterAudioStream.duration =
24667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            0; /**< Not used by the shell/core writer */
24677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterAudioStream.profileLevel =
24687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            0; /**< Not used by the shell/core writer */
24697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterAudioStreamInfo.nbSamplesPerSec =
24707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC_ewc->uiSamplingFrequency;
24717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterAudioStream.timeScale = pC_ewc->uiSamplingFrequency;
24727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterAudioStreamInfo.nbChannels =
24737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (M4OSA_UInt16)pC_ewc->uiNbChannels;
24747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterAudioStreamInfo.nbBitsPerSample =
24757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            0; /**< Not used by the shell/core writer */
24767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
24777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
24787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Add the audio stream */
24797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        switch( pC_ewc->AudioStreamType )
24807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
24817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            case M4SYS_kAMR:
24827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC_ewc->WriterAudioStream.averageBitrate =
24837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    0; /**< It is not used by the shell, the DSI is taken into account instead */
24847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC_ewc->WriterAudioStream.maxBitrate =
24857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    0; /**< Not used by the shell/core writer */
24867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                break;
24877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
24887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            case M4SYS_kAAC:
24897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC_ewc->WriterAudioStream.averageBitrate =
24907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    pC_ewc->uiAudioBitrate;
24917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC_ewc->WriterAudioStream.maxBitrate = pC_ewc->uiAudioBitrate;
24927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                break;
24937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
24947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            case M4SYS_kEVRC:
24957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC_ewc->WriterAudioStream.averageBitrate =
24967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    0; /**< It is not used by the shell, the DSI is taken into account instead */
24977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC_ewc->WriterAudioStream.maxBitrate =
24987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    0; /**< Not used by the shell/core writer */
24997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                break;
25007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
25017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            case M4SYS_kMP3: /**< there can't be MP3 track in 3GPP file -> error */
25027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            default:
25037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4OSA_TRACE1_1(
25047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    "M4VSS3GPP_intCreate3GPPOutputFile: unknown output audio format (0x%x),\
25057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    returning M4VSS3GPP_ERR_UNSUPPORTED_INPUT_AUDIO_FORMAT!",
25067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    pC_ewc->AudioStreamType);
25077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                return M4VSS3GPP_ERR_UNSUPPORTED_INPUT_AUDIO_FORMAT;
25087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
25097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
25107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
25117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Our writer shell interface is a little tricky: we put M4WRITER_StreamAudioInfos
25127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        in the DSI pointer... */
25137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterAudioStream.decoderSpecificInfo =
25147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (M4OSA_MemAddr32) &streamAudioInfo;
25157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
25167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
25177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Link the AU and the stream */
25187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterAudioAU.stream = &(pC_ewc->WriterAudioStream);
25197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterAudioAU.dataAddress = M4OSA_NULL;
25207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterAudioAU.size = 0;
25217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterAudioAU.CTS =
25227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            -pC_ewc->iSilenceFrameDuration; /** Reset time */
25237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterAudioAU.DTS = 0;
25247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterAudioAU.attribute = 0;
25257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterAudioAU.nbFrag = 0; /** No fragment */
25267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->WriterAudioAU.frag = M4OSA_NULL;
25277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
25287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = pC_ShellAPI->pWriterGlobalFcts->pFctAddStream(
25297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC_ewc->p3gpWriterContext, &pC_ewc->WriterAudioStream);
25307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
25317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4NO_ERROR != err )
25327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
25337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1(
25347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_intCreate3GPPOutputFile:\
25357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pWriterGlobalFcts->pFctAddStream(audio) returns 0x%x!",
25367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err);
25377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return err;
25387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
25397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
25407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
25417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Set the writer max audio AU size */
25427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->uiAudioMaxAuSize = M4VSS3GPP_AUDIO_MAX_AU_SIZE;
25437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        temp.streamID = M4VSS3GPP_WRITER_AUDIO_STREAM_ID;
25447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        temp.value = pC_ewc->uiAudioMaxAuSize;
25457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = pC_ShellAPI->pWriterGlobalFcts->pFctSetOption(
25467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC_ewc->p3gpWriterContext, (M4OSA_UInt32)M4WRITER_kMaxAUSize,
25477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (M4OSA_DataOption) &temp);
25487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
25497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4NO_ERROR != err )
25507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
25517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1(
25527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_intCreate3GPPOutputFile:\
25537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pWriterGlobalFcts->pFctSetOption(M4WRITER_kMaxAUSize, audio) returns 0x%x!",
25547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err);
25557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return err;
25567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
25577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
25587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
25597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Set the writer max audio chunck size */
25607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        temp.streamID = M4VSS3GPP_WRITER_AUDIO_STREAM_ID;
25617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        temp.value = M4VSS3GPP_AUDIO_MAX_CHUNCK_SIZE;
25627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = pC_ShellAPI->pWriterGlobalFcts->pFctSetOption(
25637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC_ewc->p3gpWriterContext,
25647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (M4OSA_UInt32)M4WRITER_kMaxChunckSize,
25657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (M4OSA_DataOption) &temp);
25667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
25677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4NO_ERROR != err )
25687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
25697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1(
25707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_intCreate3GPPOutputFile:\
25717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pWriterGlobalFcts->pFctSetOption(M4WRITER_kMaxAUSize, audio) returns 0x%x!",
25727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err);
25737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return err;
25747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
25757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
25767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
25777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
25787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * All streams added, we're now ready to write */
25797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    err = pC_ShellAPI->pWriterGlobalFcts->pFctStartWriting(
25807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC_ewc->p3gpWriterContext);
25817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
25827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4NO_ERROR != err )
25837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
25847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_1(
25857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            "M4VSS3GPP_intCreate3GPPOutputFile:\
25867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pWriterGlobalFcts->pFctStartWriting() returns 0x%x!",
25877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err);
25887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return err;
25897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
25907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
25917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
25927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Return with no error */
25937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_0("M4VSS3GPP_intCreate3GPPOutputFile(): returning M4NO_ERROR");
25947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return M4NO_ERROR;
25957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
25967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
25977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
25987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
25997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR  M4VSS3GPP_intComputeOutputVideoAndAudioDsi()
26007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    Generate a H263 or MPEG-4 decoder specific info compatible with all input video
26017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *            tracks. Copy audio dsi from master clip.
26027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param   pC    (IN/OUT) Internal edit context
26037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
26047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
26057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargistatic M4OSA_ERR
26067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4VSS3GPP_intComputeOutputVideoAndAudioDsi( M4VSS3GPP_InternalEditContext *pC,
26077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                           M4OSA_UInt8 uiMasterClip )
26087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
26097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_Int32 iResynchMarkerDsiIndex;
26107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4_StreamHandler *pStreamForDsi;
26117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VSS3GPP_ClipContext *pClip;
26127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_ERR err;
26137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32 i;
26146e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    M4DECODER_MPEG4_DecoderConfigInfo DecConfigInfo;
26156e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    M4DECODER_VideoSize dummySize;
26166e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    M4OSA_Bool bGetDSiFromEncoder = M4OSA_FALSE;
26177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
26187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4ENCODER_Header *encHeader;
26197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4SYS_StreamIDmemAddr streamHeader;
26207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
26217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pStreamForDsi = M4OSA_NULL;
26227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClip = M4OSA_NULL;
26237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
26247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
26257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * H263 case */
26267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4SYS_kH263 == pC->ewc.VideoStreamType )
26277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
26287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
26297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * H263 output DSI is always 7 bytes */
26307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->ewc.uiVideoOutputDsiSize = 7;
26317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->ewc.pVideoOutputDsi =
2632694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu            (M4OSA_MemAddr8)M4OSA_32bitAlignedMalloc(pC->ewc.uiVideoOutputDsiSize,
26337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4VSS3GPP, (M4OSA_Char *)"pC->ewc.pVideoOutputDsi (H263)");
26347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
26357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4OSA_NULL == pC->ewc.pVideoOutputDsi )
26367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
26377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_0(
26387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_intComputeOutputVideoAndAudioDsi():\
26397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                unable to allocate pVideoOutputDsi (H263), returning M4ERR_ALLOC");
26407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return M4ERR_ALLOC;
26417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
26427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
26437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
26447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * (We override the input vendor info.
26457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * At least we know that nothing special will be tried with PHLP-stamped
26467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi          edited streams...) */
26477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->ewc.pVideoOutputDsi[0] = 'P';
26487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->ewc.pVideoOutputDsi[1] = 'H';
26497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->ewc.pVideoOutputDsi[2] = 'L';
26507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->ewc.pVideoOutputDsi[3] = 'P';
26517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
26527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
26537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Decoder version is 0 */
26547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->ewc.pVideoOutputDsi[4] = 0;
26557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
26567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
26570a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury        * Level is the sixth byte in the DSI */
26580a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury        pC->ewc.pVideoOutputDsi[5] = pC->xVSS.outputVideoLevel;
26597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
26607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
26610a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury        * Profile is the seventh byte in the DSI*/
26620a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury        pC->ewc.pVideoOutputDsi[6] = pC->xVSS.outputVideoProfile;
26637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
26647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
26657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
26667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * MPEG-4 case */
26670a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury    else if( M4SYS_kMPEG_4 == pC->ewc.VideoStreamType ||
26680a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury        M4SYS_kH264 == pC->ewc.VideoStreamType) {
26697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
26700a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury        /* For MPEG4 and H.264 encoder case
26717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Fetch the DSI from the shell video encoder, and feed it to the writer before
26727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        closing it. */
26737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
26747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_0(
26757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            "M4VSS3GPP_intComputeOutputVideoAndAudioDsi: get DSI for H264 stream");
26767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
26777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4OSA_NULL == pC->ewc.pEncContext )
26787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
26797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_0(
26807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_intComputeOutputVideoAndAudioDsi: pC->ewc.pEncContext is NULL");
26817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err = M4VSS3GPP_intCreateVideoEncoder(pC);
26827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
26837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if( M4NO_ERROR != err )
26847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
26857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4OSA_TRACE1_1(
26867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    "M4VSS3GPP_intComputeOutputVideoAndAudioDsi:\
26877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    M4VSS3GPP_intCreateVideoEncoder returned error 0x%x",
26887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    err);
26897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
26907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
26917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
26927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4OSA_NULL != pC->ewc.pEncContext )
26937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
26947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err = pC->ShellAPI.pVideoEncoderGlobalFcts->pFctGetOption(
26957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->ewc.pEncContext, M4ENCODER_kOptionID_EncoderHeader,
26967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                (M4OSA_DataOption) &encHeader);
26977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
26987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if( ( M4NO_ERROR != err) || (M4OSA_NULL == encHeader->pBuf) )
26997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
27007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4OSA_TRACE1_1(
27017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    "M4VSS3GPP_intComputeOutputVideoAndAudioDsi:\
27027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    failed to get the encoder header (err 0x%x)",
27037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    err);
27047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4OSA_TRACE1_2(
27057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    "M4VSS3GPP_intComputeOutputVideoAndAudioDsi: encHeader->pBuf=0x%x, size=0x%x",
27067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    encHeader->pBuf, encHeader->Size);
27077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
27087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            else
27097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
27107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4OSA_TRACE1_0(
27117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    "M4VSS3GPP_intComputeOutputVideoAndAudioDsi:\
27120a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury                     send DSI for video stream to 3GP writer");
27137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
27147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                /**
27157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                * Allocate and copy the new DSI */
27167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->ewc.pVideoOutputDsi =
2717694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu                    (M4OSA_MemAddr8)M4OSA_32bitAlignedMalloc(encHeader->Size, M4VSS3GPP,
27187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    (M4OSA_Char *)"pC->ewc.pVideoOutputDsi (H264)");
27197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
27207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                if( M4OSA_NULL == pC->ewc.pVideoOutputDsi )
27217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                {
27227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    M4OSA_TRACE1_0(
27237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                        "M4VSS3GPP_intComputeOutputVideoAndAudioDsi():\
27240a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury                         unable to allocate pVideoOutputDsi, returning M4ERR_ALLOC");
27257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    return M4ERR_ALLOC;
27267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                }
27277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->ewc.uiVideoOutputDsiSize = (M4OSA_UInt16)encHeader->Size;
272832ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu                memcpy((void *)pC->ewc.pVideoOutputDsi, (void *)encHeader->pBuf,
27297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    encHeader->Size);
27307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
27317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
27327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err = M4VSS3GPP_intDestroyVideoEncoder(pC);
27337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
27347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if( M4NO_ERROR != err )
27357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
27367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4OSA_TRACE1_1(
27377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    "M4VSS3GPP_intComputeOutputVideoAndAudioDsi:\
27387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    M4VSS3GPP_intDestroyVideoEncoder returned error 0x%x",
27397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    err);
27407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
27417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
27427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        else
27437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
27447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_0(
27457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_intComputeOutputVideoAndAudioDsi:\
27467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pC->ewc.pEncContext is NULL, cannot get the DSI");
27477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
27487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
27497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
27507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pStreamForDsi = M4OSA_NULL;
27517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClip = M4OSA_NULL;
27527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
27537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /* Compute Audio DSI */
27547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4SYS_kAudioUnknown != pC->ewc.AudioStreamType )
27557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
27567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( uiMasterClip == 0 )
27577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
27587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /* Clip is already opened */
27597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pStreamForDsi = &(pC->pC1->pAudioStream->m_basicProperties);
27607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
27617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        else
27627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
27637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /**
27647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            * We can use the fast open mode to get the DSI */
27657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err = M4VSS3GPP_intClipInit(&pClip, pC->pOsaFileReadPtr);
27667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
27677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if( M4NO_ERROR != err )
27687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
27697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4OSA_TRACE1_1(
27707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    "M4VSS3GPP_intComputeOutputVideoAndAudioDsi:\
27717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    M4VSS3GPP_intClipInit() returns 0x%x!",
27727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    err);
27737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
27747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                if( pClip != M4OSA_NULL )
27757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                {
27767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    M4VSS3GPP_intClipCleanUp(pClip);
27777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                }
27787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                return err;
27797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
27807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
27817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err = M4VSS3GPP_intClipOpen(pClip, &pC->pClipList[uiMasterClip],
27827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4OSA_FALSE, M4OSA_TRUE, M4OSA_TRUE);
27837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
27847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if( M4NO_ERROR != err )
27857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
27867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4OSA_TRACE1_1(
27877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    "M4VSS3GPP_intComputeOutputVideoAndAudioDsi:\
27887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    M4VSS3GPP_intClipOpen() returns 0x%x!",
27897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    err);
27907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4VSS3GPP_intClipCleanUp(pClip);
27917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                return err;
27927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
27937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
27947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pStreamForDsi = &(pClip->pAudioStream->m_basicProperties);
27957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
27967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
27977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
27987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Allocate and copy the new DSI */
2799694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu        pC->ewc.pAudioOutputDsi = (M4OSA_MemAddr8)M4OSA_32bitAlignedMalloc(
28007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pStreamForDsi->m_decoderSpecificInfoSize,
28017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4VSS3GPP, (M4OSA_Char *)"pC->ewc.pAudioOutputDsi");
28027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
28037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4OSA_NULL == pC->ewc.pAudioOutputDsi )
28047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
28057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_0(
28067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_intComputeOutputVideoAndAudioDsi():\
28077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                unable to allocate pAudioOutputDsi, returning M4ERR_ALLOC");
28087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return M4ERR_ALLOC;
28097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
28107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->ewc.uiAudioOutputDsiSize =
28117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (M4OSA_UInt16)pStreamForDsi->m_decoderSpecificInfoSize;
281232ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu        memcpy((void *)pC->ewc.pAudioOutputDsi,
281332ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu            (void *)pStreamForDsi->m_pDecoderSpecificInfo,
28147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->ewc.uiAudioOutputDsiSize);
28157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
28167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
28177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * If a clip has been temporarily opened to get its DSI, close it */
28187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4OSA_NULL != pClip )
28197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
28207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err = M4VSS3GPP_intClipCleanUp(pClip);
28217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
28227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if( M4NO_ERROR != err )
28237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
28247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4OSA_TRACE1_1(
28257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    "M4VSS3GPP_intComputeOutputVideoAndAudioDsi:\
28267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    M4VSS3GPP_intClipCleanUp() returns 0x%x!",
28277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    err);
28287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                return err;
28297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
28307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
28317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
28327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
28337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
28347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Return with no error */
28357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_0(
28367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "M4VSS3GPP_intComputeOutputVideoAndAudioDsi(): returning M4NO_ERROR");
28377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return M4NO_ERROR;
28387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
28397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
28407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
28417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
28427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4VSS3GPP_intSwitchToNextClip()
28437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    Switch from the current clip to the next one
28447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param   pC            (IN/OUT) Internal edit context
28457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
28467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
28477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargistatic M4OSA_ERR M4VSS3GPP_intSwitchToNextClip(
28487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VSS3GPP_InternalEditContext *pC )
28497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
28507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_ERR err;
28517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
28527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL != pC->pC1 )
28537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
28546e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        if (M4OSA_NULL != pC->pC1->m_pPreResizeFrame) {
28556e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            if (M4OSA_NULL != pC->pC1->m_pPreResizeFrame[0].pac_data) {
28566e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                free(pC->pC1->m_pPreResizeFrame[0].pac_data);
28576e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                pC->pC1->m_pPreResizeFrame[0].pac_data = M4OSA_NULL;
28586e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            }
28596e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            if (M4OSA_NULL != pC->pC1->m_pPreResizeFrame[1].pac_data) {
28606e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                free(pC->pC1->m_pPreResizeFrame[1].pac_data);
28616e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                pC->pC1->m_pPreResizeFrame[1].pac_data = M4OSA_NULL;
28626e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            }
28636e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            if (M4OSA_NULL != pC->pC1->m_pPreResizeFrame[2].pac_data) {
28646e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                free(pC->pC1->m_pPreResizeFrame[2].pac_data);
28656e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                pC->pC1->m_pPreResizeFrame[2].pac_data = M4OSA_NULL;
28666e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            }
28676e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            free(pC->pC1->m_pPreResizeFrame);
28686e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            pC->pC1->m_pPreResizeFrame = M4OSA_NULL;
28696e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        }
28707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
28717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Close the current first clip */
28727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = M4VSS3GPP_intClipCleanUp(pC->pC1);
28737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
28747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4NO_ERROR != err )
28757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
28767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1(
28777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_intSwitchToNextClip: M4VSS3GPP_intClipCleanUp(C1) returns 0x%x!",
28787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err);
28797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return err;
28807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
28817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
28827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
28837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        *  increment clip counter */
28847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->uiCurrentClip++;
28857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
28867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
28877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
28887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Check if we reached the last clip */
28897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( pC->uiCurrentClip >= pC->uiClipNumber )
28907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
28917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->pC1 = M4OSA_NULL;
28927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->State = M4VSS3GPP_kEditState_FINISHED;
28937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
28947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_0(
28957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            "M4VSS3GPP_intSwitchToNextClip:\
28967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4VSS3GPP_intClipClose(C1) returns M4VSS3GPP_WAR_EDITING_DONE");
28977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return M4VSS3GPP_WAR_EDITING_DONE;
28987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
28997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
29007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
29017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * If the next clip has already be opened, set it as first clip */
29027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_NULL != pC->pC2 )
29037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
29047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->pC1 = pC->pC2;
29056e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        if(M4OSA_NULL != pC->pC2->m_pPreResizeFrame) {
29066e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            pC->pC1->m_pPreResizeFrame = pC->pC2->m_pPreResizeFrame;
29076e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        }
29087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->pC2 = M4OSA_NULL;
2909eac28ab858dc4ecdfd25b6d8851219e6787d1222Hong Teng        pC->bClip1ActiveFramingEffect = pC->bClip2ActiveFramingEffect;
2910eac28ab858dc4ecdfd25b6d8851219e6787d1222Hong Teng        pC->bClip2ActiveFramingEffect = M4OSA_FALSE;
29117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
29127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
29137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * else open it */
29147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    else
29157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
29167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = M4VSS3GPP_intOpenClip(pC, &pC->pC1,
29177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            &pC->pClipList[pC->uiCurrentClip]);
29187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
29197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4NO_ERROR != err )
29207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
29217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1(
29227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_intSwitchToNextClip: M4VSS3GPP_intOpenClip() returns 0x%x!",
29237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err);
29247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return err;
29257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
29267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
29277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
29287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * If the second clip has not been opened yet,
29297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi          that means that there has been no transition.
29307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * So both output video and audio times are OK.
29317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * So we can set both video2 and audio offsets */
29327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
29337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
29347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Add current video output CTS to the clip video offset */
29357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
29367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        // Decorrelate input and output encoding timestamp to handle encoder prefetch
29377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->pC1->iVoffset += (M4OSA_UInt32)pC->ewc.dInputVidCts;
29387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
29397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Add current audio output CTS to the clip audio offset */
29407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->pC1->iAoffset +=
29417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (M4OSA_UInt32)(pC->ewc.dATo * pC->ewc.scale_audio + 0.5);
29427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
29437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
29447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * 2005-03-24: BugFix for audio-video synchro:
29457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * There may be a portion of the duration of an audio AU of desynchro at each assembly.
29467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * It leads to an audible desynchro when there are a lot of clips assembled.
29477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * This bug fix allows to resynch the audio track when the delta is higher
29487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * than one audio AU duration.
29497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * We Step one AU in the second clip and we change the audio offset accordingly. */
29507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( ( pC->pC1->iAoffset
29517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            - (M4OSA_Int32)(pC->pC1->iVoffset *pC->pC1->scale_audio + 0.5))
29527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        > pC->ewc.iSilenceFrameDuration )
29537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
29547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /**
29557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            * Advance one AMR frame */
29567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err = M4VSS3GPP_intClipReadNextAudioFrame(pC->pC1);
29577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
29587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if( M4OSA_ERR_IS_ERROR(err) )
29597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
29607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4OSA_TRACE1_1(
29617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    "M4VSS3GPP_intSwitchToNextClip:\
29627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    M4VSS3GPP_intClipReadNextAudioFrame returns 0x%x!",
29637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    err);
29647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                return err;
29657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
29667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /**
29677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            * Update audio offset accordingly*/
29687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->pC1->iAoffset -= pC->ewc.iSilenceFrameDuration;
29697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
29707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
29717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
29727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
29737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Init starting state for this clip processing */
29747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4SYS_kMP3 == pC->ewc.AudioStreamType )
29757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
29767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
29777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * In the MP3 case we use a special audio state */
29787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->State = M4VSS3GPP_kEditState_MP3_JUMP;
29797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
29807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    else
29817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
29827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
29837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * We start with the video processing */
29847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->State = M4VSS3GPP_kEditState_VIDEO;
29857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
29867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( pC->Vstate != M4VSS3GPP_kEditVideoState_TRANSITION )
29877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
29887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /* if not a transition then reset previous video state */
29897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pC->Vstate = M4VSS3GPP_kEditVideoState_READ_WRITE;
29907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
29917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
2992ac9dde5945fd00a6fb882bd171ee8a42a091fb86Danny Fernandes    /* The flags are set to false at the beginning of every clip */
2993bb337b471658b7c2264c6ff1bb613739db851baaSantosh Madhava    pC->m_bClipExternalHasStarted = M4OSA_FALSE;
2994ac9dde5945fd00a6fb882bd171ee8a42a091fb86Danny Fernandes    pC->bEncodeTillEoF = M4OSA_FALSE;
29957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
29967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
29977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Return with no error */
29987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_0("M4VSS3GPP_intSwitchToNextClip(): returning M4NO_ERROR");
29997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /* RC: to know when a file has been processed */
30007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return M4VSS3GPP_WAR_SWITCH_CLIP;
30017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
30027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
30037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
30047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
30057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4VSS3GPP_intReachedEndOfVideo()
30067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    Do what to do when the end of a clip video track is reached
30077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note    If there is audio on the current clip, process it, else switch to the next clip
30087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param   pC            (IN/OUT) Internal edit context
30097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
30107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
30117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4VSS3GPP_intReachedEndOfVideo( M4VSS3GPP_InternalEditContext *pC )
30127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
30137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_ERR err;
30147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
30157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
30167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Video is done for this clip, now we do the audio */
30177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4SYS_kAudioUnknown != pC->ewc.AudioStreamType )
30187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
30197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->State = M4VSS3GPP_kEditState_AUDIO;
30207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
30217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    else
30227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
30237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
30247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Clip done, do the next one */
30257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = M4VSS3GPP_intSwitchToNextClip(pC);
30267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
30277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4NO_ERROR != err )
30287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
30297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1(
30307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_intReachedEndOfVideo: M4VSS3GPP_intSwitchToNextClip() returns 0x%x",
30317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err);
30327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return err;
30337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
30347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
30357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
30367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
30377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Return with no error */
30387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_0("M4VSS3GPP_intReachedEndOfVideo(): returning M4NO_ERROR");
30397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return M4NO_ERROR;
30407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
30417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
30427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
30437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
30447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4VSS3GPP_intReachedEndOfAudio()
30457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    Do what to do when the end of a clip audio track is reached
30467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param   pC            (IN/OUT) Internal edit context
30477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
30487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
30497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4VSS3GPP_intReachedEndOfAudio( M4VSS3GPP_InternalEditContext *pC )
30507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
30517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_ERR err;
30527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
30537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
30547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Clip done, do the next one */
30557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    err = M4VSS3GPP_intSwitchToNextClip(pC);
30567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
30577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4NO_ERROR != err )
30587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
30597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_1(
30607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            "M4VSS3GPP_intReachedEndOfAudio: M4VSS3GPP_intSwitchToNextClip() returns 0x%x",
30617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err);
30627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return err;
30637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
30647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
30657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
30667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Start with the video */
30677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4SYS_kVideoUnknown != pC->ewc.VideoStreamType )
30687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
30697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pC->State = M4VSS3GPP_kEditState_VIDEO;
30707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
30717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
30727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
30737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Return with no error */
30747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_0("M4VSS3GPP_intReachedEndOfAudio(): returning M4NO_ERROR");
30757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return M4NO_ERROR;
30767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
30777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
30787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
30797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
30807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4VSS3GPP_intOpenClip()
30817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    Open next clip
30827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param   pC            (IN/OUT) Internal edit context
30837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
30847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
30857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4VSS3GPP_intOpenClip( M4VSS3GPP_InternalEditContext *pC,
30867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                M4VSS3GPP_ClipContext ** hClip,
30877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                M4VSS3GPP_ClipSettings *pClipSettings )
30887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
30897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_ERR err;
30907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VSS3GPP_ClipContext *pClip; /**< shortcut */
30916e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    M4VIDEOEDITING_ClipProperties *pClipProperties = M4OSA_NULL;
30927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_Int32 iCts;
30937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32 i;
30947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
30957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE2_1("M4VSS3GPP_intOpenClip: \"%s\"",
30967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        (M4OSA_Char *)pClipSettings->pFile);
30977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
30987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    err = M4VSS3GPP_intClipInit(hClip, pC->pOsaFileReadPtr);
30997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
31007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4NO_ERROR != err )
31017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
31027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_TRACE1_1(
31037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            "M4VSS3GPP_intOpenClip: M4VSS3GPP_intClipInit() returns 0x%x!",
31047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err);
31057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
31067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( *hClip != M4OSA_NULL )
31077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
31087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4VSS3GPP_intClipCleanUp(*hClip);
31097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
31107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return err;
31117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
31127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
31137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
31147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Set shortcut */
31157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClip = *hClip;
31167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
31176e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    if (pClipSettings->FileType == M4VIDEOEDITING_kFileType_ARGB8888 ) {
31186e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        pClipProperties = &pClipSettings->ClipProperties;
31196e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        pClip->pSettings = pClipSettings;
31206e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        pClip->iEndTime = pClipSettings->uiEndCutTime;
31216e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    }
31227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
31236e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    err = M4VSS3GPP_intClipOpen(pClip, pClipSettings,
31246e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury              M4OSA_FALSE, M4OSA_FALSE, M4OSA_FALSE);
31256e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    if (M4NO_ERROR != err) {
31266e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        M4OSA_TRACE1_1("M4VSS3GPP_intOpenClip: \
31276e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            M4VSS3GPP_intClipOpen() returns 0x%x!", err);
31287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4VSS3GPP_intClipCleanUp(pClip);
31297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        *hClip = M4OSA_NULL;
31307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return err;
31317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
31327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
31336e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    if (pClipSettings->FileType != M4VIDEOEDITING_kFileType_ARGB8888 ) {
31346e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        pClipProperties = &pClip->pSettings->ClipProperties;
31356e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    }
31367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
31377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
31387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Copy common 'silence frame stuff' to ClipContext */
31397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClip->uiSilencePcmSize = pC->ewc.uiSilencePcmSize;
31407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClip->pSilenceFrameData = pC->ewc.pSilenceFrameData;
31417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClip->uiSilenceFrameSize = pC->ewc.uiSilenceFrameSize;
31427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClip->iSilenceFrameDuration = pC->ewc.iSilenceFrameDuration;
31437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClip->scale_audio = pC->ewc.scale_audio;
31447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
31457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pClip->iAudioFrameCts = -pClip->iSilenceFrameDuration; /* Reset time */
31467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
31477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
31487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * If the audio track is not compatible with the output audio format,
31497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * we remove it. So it will be replaced by silence */
31507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4OSA_FALSE == pClipProperties->bAudioIsCompatibleWithMasterClip )
31517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
31527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4VSS3GPP_intClipDeleteAudioTrack(pClip);
31537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
31547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
31557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
31567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Actual begin cut */
31577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( 0 == pClipSettings->uiBeginCutTime )
31587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
31597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pClip->iVoffset = 0;
31607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pClip->iAoffset = 0;
31617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pClip->iActualVideoBeginCut = 0;
31627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pClip->iActualAudioBeginCut = 0;
31637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
31646e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury    else if(pClipSettings->FileType != M4VIDEOEDITING_kFileType_ARGB8888) {
31657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4SYS_kVideoUnknown != pC->ewc.VideoStreamType )
31667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
31677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /**
31687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            * Jump the video to the target begin cut to get the actual begin cut value */
31697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pClip->iActualVideoBeginCut =
31707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                (M4OSA_Int32)pClipSettings->uiBeginCutTime;
31717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            iCts = pClip->iActualVideoBeginCut;
31727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
31737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err = pClip->ShellAPI.m_pReader->m_pFctJump(pClip->pReaderContext,
31747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                (M4_StreamHandler *)pClip->pVideoStream, &iCts);
31757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
31767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if( M4NO_ERROR != err )
31777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
31787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4OSA_TRACE1_1(
31797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    "M4VSS3GPP_intOpenClip: m_pFctJump(V) returns 0x%x!", err);
31807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                return err;
31817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
31827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
31837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /**
31847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            * Update clip offset with the video begin cut */
31857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pClip->iVoffset = -pClip->iActualVideoBeginCut;
31867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
31877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
31887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4SYS_kAudioUnknown != pC->ewc.AudioStreamType )
31897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
31907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /**
31917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            * Jump the audio to the video actual begin cut */
31927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if( M4VIDEOEDITING_kMP3 != pClipProperties->AudioStreamType )
31937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
31947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pClip->iActualAudioBeginCut = pClip->iActualVideoBeginCut;
31957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                iCts = (M4OSA_Int32)(pClip->iActualAudioBeginCut
31967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    * pClip->scale_audio + 0.5);
31977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
31987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err = M4VSS3GPP_intClipJumpAudioAt(pClip, &iCts);
31997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
32007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                if( M4NO_ERROR != err )
32017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                {
32027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    M4OSA_TRACE1_1(
32037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                        "M4VSS3GPP_intOpenClip: M4VSS3GPP_intClipJumpAudioAt(A) returns 0x%x!",
32047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                        err);
32057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    return err;
32067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                }
32077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                /**
32087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                * Update clip offset with the audio begin cut */
32097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pClip->iAoffset = -iCts;
32107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
32117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            else
32127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
32137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                /**
32147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                * For the MP3, the jump is not done because of the VBR,
32157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                  it could be not enough accurate */
32167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pClip->iActualAudioBeginCut =
32177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    (M4OSA_Int32)pClipSettings->uiBeginCutTime;
32187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
32197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
32207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
32217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
32227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4SYS_kVideoUnknown != pC->ewc.VideoStreamType )
32237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
32246e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        if ((pClipSettings->FileType != M4VIDEOEDITING_kFileType_ARGB8888 )) {
32257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
32267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            /**
32276e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            * Read the first Video AU of the clip */
32286e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            err = pClip->ShellAPI.m_pReaderDataIt->m_pFctGetNextAu(
32296e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                pClip->pReaderContext,
32306e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                (M4_StreamHandler *)pClip->pVideoStream, &pClip->VideoAU);
32316e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
32326e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            if( M4WAR_NO_MORE_AU == err )
32336e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            {
32346e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                /**
32356e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                * If we (already!) reach the end of the clip, we filter the error.
32366e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                * It will be correctly managed at the first step. */
32376e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                err = M4NO_ERROR;
32386e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            }
32396e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            else if( M4NO_ERROR != err )
32406e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            {
32416e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                M4OSA_TRACE1_1("M4VSS3GPP_intOpenClip: \
32426e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                    m_pReaderDataIt->m_pFctGetNextAu() returns 0x%x!", err);
32436e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                return err;
32446e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            }
32456e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        } else {
32466e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            pClipProperties->uiVideoWidth  = pClipProperties->uiStillPicWidth;
32476e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            pClipProperties->uiVideoHeight = pClipProperties->uiStillPicHeight;
32487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
32496e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        /* state check not to allocate buffer during save start */
32506e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
32516e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
32526e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        /******************************/
32536e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        /* Video resize management   */
32546e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        /******************************/
32556e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        /**
3256eac28ab858dc4ecdfd25b6d8851219e6787d1222Hong Teng        * If the input clip is a rotate video or the output resolution is different
3257eac28ab858dc4ecdfd25b6d8851219e6787d1222Hong Teng        * from the input resolution, then the video frame needs to be rotated
3258eac28ab858dc4ecdfd25b6d8851219e6787d1222Hong Teng        * or resized, force to resize mode */
32596e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury        if (((M4OSA_UInt32)pC->ewc.uiVideoWidth !=
32606e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                 pClipProperties->uiVideoWidth) ||
32616e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            ((M4OSA_UInt32)pC->ewc.uiVideoHeight !=
3262eac28ab858dc4ecdfd25b6d8851219e6787d1222Hong Teng                 pClipProperties->uiVideoHeight) ||
3263eac28ab858dc4ecdfd25b6d8851219e6787d1222Hong Teng            pClipProperties->videoRotationDegrees != 0) {
3264eac28ab858dc4ecdfd25b6d8851219e6787d1222Hong Teng
3265eac28ab858dc4ecdfd25b6d8851219e6787d1222Hong Teng            if (pClip->m_pPreResizeFrame == M4OSA_NULL) {
32666e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                /**
32676e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                * Allocate the intermediate video plane that will
32686e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                  receive the decoded image before resizing */
32696e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                pClip->m_pPreResizeFrame =
32706e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                 (M4VIFI_ImagePlane*)M4OSA_32bitAlignedMalloc(
32716e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                     3*sizeof(M4VIFI_ImagePlane), M4VSS3GPP,
32726e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                     (M4OSA_Char *)"pPreResizeFrame");
32736e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                if (M4OSA_NULL == pClip->m_pPreResizeFrame) {
32746e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                    M4OSA_TRACE1_0("M4MCS_intPrepareVideoEncoder(): \
32756e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                        unable to allocate m_pPreResizeFrame");
32766e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                    return M4ERR_ALLOC;
32776e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                }
32786e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
32796e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                pClip->m_pPreResizeFrame[0].pac_data = M4OSA_NULL;
32806e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                pClip->m_pPreResizeFrame[1].pac_data = M4OSA_NULL;
32816e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                pClip->m_pPreResizeFrame[2].pac_data = M4OSA_NULL;
32826e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
32836e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                /**
32846e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                * Allocate the Y plane */
32856e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                pClip->m_pPreResizeFrame[0].u_topleft = 0;
32866e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                pClip->m_pPreResizeFrame[0].u_width  =
32876e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                    pClipProperties->uiVideoWidth;
32886e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                pClip->m_pPreResizeFrame[0].u_height =
32896e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                    pClipProperties->uiVideoHeight;
32906e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                pClip->m_pPreResizeFrame[0].u_stride =
32916e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                    pClip->m_pPreResizeFrame[0].u_width;
32926e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
32936e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                pClip->m_pPreResizeFrame[0].pac_data =
32946e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                 (M4VIFI_UInt8*)M4OSA_32bitAlignedMalloc (
32956e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                   pClip->m_pPreResizeFrame[0].u_stride * pClip->m_pPreResizeFrame[0].u_height,
32966e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                   M4MCS, (M4OSA_Char *)"m_pPreResizeFrame[0].pac_data");
32976e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                if (M4OSA_NULL == pClip->m_pPreResizeFrame[0].pac_data) {
32986e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                    M4OSA_TRACE1_0("M4MCS_intPrepareVideoEncoder(): \
32996e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                        unable to allocate m_pPreResizeFrame[0].pac_data");
33006e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                    free(pClip->m_pPreResizeFrame);
33016e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                    return M4ERR_ALLOC;
33026e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                }
33036e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
33046e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                /**
33056e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                * Allocate the U plane */
33066e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                pClip->m_pPreResizeFrame[1].u_topleft = 0;
33076e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                pClip->m_pPreResizeFrame[1].u_width  =
33086e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                    pClip->m_pPreResizeFrame[0].u_width >> 1;
33096e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                pClip->m_pPreResizeFrame[1].u_height =
33106e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                    pClip->m_pPreResizeFrame[0].u_height >> 1;
33116e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                pClip->m_pPreResizeFrame[1].u_stride =
33126e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                    pClip->m_pPreResizeFrame[1].u_width;
33136e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
33146e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                pClip->m_pPreResizeFrame[1].pac_data =
33156e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                 (M4VIFI_UInt8*)M4OSA_32bitAlignedMalloc (
33166e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                   pClip->m_pPreResizeFrame[1].u_stride * pClip->m_pPreResizeFrame[1].u_height,
33176e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                   M4MCS, (M4OSA_Char *)"m_pPreResizeFrame[1].pac_data");
33186e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                if (M4OSA_NULL == pClip->m_pPreResizeFrame[1].pac_data) {
33196e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                    M4OSA_TRACE1_0("M4MCS_intPrepareVideoEncoder(): \
33206e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                        unable to allocate m_pPreResizeFrame[1].pac_data");
33216e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                    free(pClip->m_pPreResizeFrame[0].pac_data);
33226e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                    free(pClip->m_pPreResizeFrame);
33236e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                    return M4ERR_ALLOC;
33246e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                }
33256e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
33266e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                /**
33276e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                * Allocate the V plane */
33286e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                pClip->m_pPreResizeFrame[2].u_topleft = 0;
33296e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                pClip->m_pPreResizeFrame[2].u_width =
33306e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                    pClip->m_pPreResizeFrame[1].u_width;
33316e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                pClip->m_pPreResizeFrame[2].u_height =
33326e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                    pClip->m_pPreResizeFrame[1].u_height;
33336e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                pClip->m_pPreResizeFrame[2].u_stride =
33346e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                    pClip->m_pPreResizeFrame[2].u_width;
33356e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury
33366e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                pClip->m_pPreResizeFrame[2].pac_data =
33376e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                 (M4VIFI_UInt8*)M4OSA_32bitAlignedMalloc (
33386e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                   pClip->m_pPreResizeFrame[2].u_stride * pClip->m_pPreResizeFrame[2].u_height,
33396e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                   M4MCS, (M4OSA_Char *)"m_pPreResizeFrame[2].pac_data");
33406e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                if (M4OSA_NULL == pClip->m_pPreResizeFrame[2].pac_data) {
33416e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                    M4OSA_TRACE1_0("M4MCS_intPrepareVideoEncoder(): \
33426e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                        unable to allocate m_pPreResizeFrame[2].pac_data");
33436e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                    free(pClip->m_pPreResizeFrame[0].pac_data);
33446e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                    free(pClip->m_pPreResizeFrame[1].pac_data);
33456e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                    free(pClip->m_pPreResizeFrame);
33466e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                    return M4ERR_ALLOC;
33476e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury                }
33486e779fda8a4f6258f9b910290b2f296d18fb2585Rajneesh Chowdury            }
33497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
33507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
33517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
33527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * The video is currently in reading mode */
33537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pClip->Vstatus = M4VSS3GPP_kClipStatus_READ;
33547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
33557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
33567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( ( M4SYS_kAudioUnknown != pC->ewc.AudioStreamType)
33577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        && (M4VIDEOEDITING_kMP3 != pClipProperties->AudioStreamType) )
33587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
33597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
33607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * Read the first Audio AU of the clip */
33617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = M4VSS3GPP_intClipReadNextAudioFrame(pClip);
33627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
33637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( M4OSA_ERR_IS_ERROR(err) )
33647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
33657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_TRACE1_1(
33667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                "M4VSS3GPP_intOpenClip: M4VSS3GPP_intClipReadNextAudioFrame returns 0x%x!",
33677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err);
33687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            return err;
33697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
33707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
33717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /**
33727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        * The audio is currently in reading mode */
33737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pClip->Astatus = M4VSS3GPP_kClipStatus_READ;
33747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
33757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
33767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
33777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    * Return with no error */
33787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_TRACE3_0("M4VSS3GPP_intOpenClip(): returning M4NO_ERROR");
33797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return M4NO_ERROR;
33807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
33817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
33827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
33837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
33847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR  M4VSS3GPP_intComputeOutputAverageVideoBitrate()
33857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    Average bitrate of the output file, computed from input bitrates,
33867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *          durations, transitions and cuts.
33877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param   pC    (IN/OUT) Internal edit context
33887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
33897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
33907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargistatic M4OSA_Void M4VSS3GPP_intComputeOutputAverageVideoBitrate(
33917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VSS3GPP_InternalEditContext *pC )
33927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
33937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VSS3GPP_ClipSettings *pCS_0, *pCS_1, *pCS_2;
33947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4VSS3GPP_TransitionSettings *pT0, *pT2;
33957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_Int32 i;
33967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
33977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32 t0_duration, t2_duration;
33987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32 t0_bitrate, t2_bitrate;
33997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32 c1_duration;
34007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
34017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32 total_duration;
34027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32 total_bitsum;
34037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
34047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    total_duration = 0;
34057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    total_bitsum = 0;
34067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
34077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /* Loop on the number of clips */
34087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    for ( i = 0; i < pC->uiClipNumber; i++ )
34097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
34107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pCS_1 = &pC->pClipList[i];
34117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
34127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        t0_duration = 0;
34137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        t0_bitrate = pCS_1->ClipProperties.uiVideoBitrate;
34147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        t2_duration = 0;
34157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        t2_bitrate = pCS_1->ClipProperties.uiVideoBitrate;
34167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
34177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /* Transition with the previous clip */
34187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( i > 0 )
34197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
34207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pCS_0 = &pC->pClipList[i - 1];
34217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pT0 = &pC->pTransitionList[i - 1];
34227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
34237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if( pT0->VideoTransitionType
34247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                != M4VSS3GPP_kVideoTransitionType_None )
34257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
34267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                t0_duration = pT0->uiTransitionDuration;
34277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
34287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                if( pCS_0->ClipProperties.uiVideoBitrate > t0_bitrate )
34297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                {
34307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    t0_bitrate = pCS_0->ClipProperties.uiVideoBitrate;
34317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                }
34327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
34337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
34347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
34357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /* Transition with the next clip */
34367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( i < pC->uiClipNumber - 1 )
34377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
34387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pCS_2 = &pC->pClipList[i + 1];
34397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pT2 = &pC->pTransitionList[i];
34407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
34417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if( pT2->VideoTransitionType
34427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                != M4VSS3GPP_kVideoTransitionType_None )
34437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            {
34447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                t2_duration = pT2->uiTransitionDuration;
34457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
34467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                if( pCS_2->ClipProperties.uiVideoBitrate > t2_bitrate )
34477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                {
34487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    t2_bitrate = pCS_2->ClipProperties.uiVideoBitrate;
34497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                }
34507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
34517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
34527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
34537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /* Check for cut times */
34547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( pCS_1->uiEndCutTime > 0 )
34557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            c1_duration = pCS_1->uiEndCutTime;
34567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        else
34577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            c1_duration = pCS_1->ClipProperties.uiClipVideoDuration;
34587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
34597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if( pCS_1->uiBeginCutTime > 0 )
34607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            c1_duration -= pCS_1->uiBeginCutTime;
34617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
34627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        c1_duration -= t0_duration + t2_duration;
34637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
34647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /* Compute bitsum and duration */
34657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        total_duration += c1_duration + t0_duration / 2 + t2_duration / 2;
34667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
34677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        total_bitsum +=
34687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            c1_duration * (pCS_1->ClipProperties.uiVideoBitrate / 1000)
34697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            + (t0_bitrate / 1000) * t0_duration / 2
34707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            + (t2_bitrate / 1000) * t2_duration / 2;
34717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
34727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
34737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pC->ewc.uiVideoBitrate = ( total_bitsum / total_duration) * 1000;
34747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
34757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
3476