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