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