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