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