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