10c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/* 20c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Copyright (C) 2011 The Android Open Source Project 30c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * 40c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Licensed under the Apache License, Version 2.0 (the "License"); 50c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * you may not use this file except in compliance with the License. 60c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * You may obtain a copy of the License at 70c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * 80c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * http://www.apache.org/licenses/LICENSE-2.0 90c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * 100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Unless required by applicable law or agreed to in writing, software 110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * distributed under the License is distributed on an "AS IS" BASIS, 120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * See the License for the specific language governing permissions and 140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * limitations under the License. 150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */ 160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ************************************************************************* 190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @file M4MCS_API.c 200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief MCS implementation (Video Compressor Service) 210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @note This file implements the API and the processing of the MCS 220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ************************************************************************* 230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi **/ 240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ******************************************************************** 270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Includes 280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ******************************************************************** 290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */ 300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * OSAL headers */ 320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#include "M4OSA_Memory.h" /**< OSAL memory management */ 330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#include "M4OSA_Debug.h" /**< OSAL debug management */ 340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/* PCM samples */ 3684061cdad8cf5bea90e7a0e6afc67ae82379f0c5Dheeraj Sharma#include "VideoEditorResampler.h" 370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Decoder interface */ 390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#include "M4DECODER_Common.h" 400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/* Encoder interface*/ 420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#include "M4ENCODER_common.h" 430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/* Enable for DEBUG logging */ 450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi//#define MCS_DUMP_PCM_TO_FILE 460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#ifdef MCS_DUMP_PCM_TO_FILE 470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#include <stdio.h> 480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiFILE *file_au_reader = NULL; 490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiFILE *file_pcm_decoder = NULL; 500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiFILE *file_pcm_encoder = NULL; 510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#endif 520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/* Core headers */ 540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#include "M4MCS_API.h" 550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#include "M4MCS_ErrorCodes.h" 560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#include "M4MCS_InternalTypes.h" 570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#include "M4MCS_InternalConfig.h" 580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#include "M4MCS_InternalFunctions.h" 590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#ifdef M4MCS_SUPPORT_STILL_PICTURE 610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#include "M4MCS_StillPicture.h" 620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#endif /*M4MCS_SUPPORT_STILL_PICTURE*/ 630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/* Common headers (for aac) */ 650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#include "M4_Common.h" 660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#include "NXPSW_CompilerSwitches.h" 680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#ifdef M4VSS_ENABLE_EXTERNAL_DECODERS 700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#include "M4VD_EXTERNAL_Interface.h" 710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#endif /* M4VSS_ENABLE_EXTERNAL_DECODERS */ 720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#include "M4AIR_API.h" 74413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury#include "OMX_Video.h" 750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/* Version */ 770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#define M4MCS_VERSION_MAJOR 3 780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#define M4MCS_VERSION_MINOR 4 790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#define M4MCS_VERSION_REVISION 3 800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ******************************************************************** 830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Static local functions 840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ******************************************************************** 850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */ 860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4OSA_ERR M4MCS_intStepSet( M4MCS_InternalContext *pC ); 880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4OSA_ERR M4MCS_intPrepareVideoDecoder( 890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_InternalContext *pC ); 900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4OSA_ERR M4MCS_intPrepareVideoEncoder( 910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_InternalContext *pC ); 920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4OSA_ERR M4MCS_intPrepareAudioProcessing( 930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_InternalContext *pC ); 940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4OSA_ERR M4MCS_intPrepareWriter( M4MCS_InternalContext *pC ); 950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4OSA_ERR M4MCS_intPrepareAudioBeginCut( 960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_InternalContext *pC ); 970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4OSA_ERR M4MCS_intStepEncoding( 980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_InternalContext *pC, 990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt8 *pTranscodedTime ); 1000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4OSA_ERR M4MCS_intStepBeginVideoJump( 1010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_InternalContext *pC ); 1020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4OSA_ERR M4MCS_intStepBeginVideoDecode( 1030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_InternalContext *pC ); 1040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4OSA_ERR M4MCS_intAudioNullEncoding( M4MCS_InternalContext *pC ); 1050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4OSA_ERR M4MCS_intAudioTranscoding( M4MCS_InternalContext *pC ); 1060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4OSA_ERR M4MCS_intVideoNullEncoding( M4MCS_InternalContext *pC ); 1070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4OSA_ERR M4MCS_intVideoTranscoding( M4MCS_InternalContext *pC ); 1080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4OSA_ERR M4MCS_intGetInputClipProperties( 1090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_InternalContext *pContext ); 1100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4OSA_UInt32 M4MCS_intGetFrameSize_AMRNB( 1110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_MemAddr8 pAudioFrame ); 1120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4OSA_UInt32 M4MCS_intGetFrameSize_EVRC( 1130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_MemAddr8 pAudioFrame ); 1140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4OSA_ERR M4MCS_intCheckMaxFileSize( M4MCS_Context pContext ); 1150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4VIDEOEDITING_Bitrate M4MCS_intGetNearestBitrate( 1160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int32 freebitrate, 1170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int8 mode ); 1180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4OSA_ERR M4MCS_intCleanUp_ReadersDecoders( 1190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_InternalContext *pC ); 1200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4OSA_ERR M4MCS_intReallocTemporaryAU( 1210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_MemAddr8 *addr, 1220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 newSize ); 12324b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdurystatic M4OSA_ERR M4MCS_intCheckAndGetCodecProperties( 1242b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury M4MCS_InternalContext *pC); 1250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 126413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdurystatic M4OSA_ERR M4MCS_intLimitBitratePerCodecProfileLevel( 127413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury M4ENCODER_AdvancedParams* EncParams); 128413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdurystatic M4OSA_Int32 M4MCS_intLimitBitrateForH263Enc(M4OSA_Int32 profile, 129413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury M4OSA_Int32 level, M4OSA_Int32 bitrate); 130413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdurystatic M4OSA_Int32 M4MCS_intLimitBitrateForMpeg4Enc(M4OSA_Int32 profile, 131413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury M4OSA_Int32 level, M4OSA_Int32 bitrate); 132413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdurystatic M4OSA_Int32 M4MCS_intLimitBitrateForH264Enc(M4OSA_Int32 profile, 133413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury M4OSA_Int32 level, M4OSA_Int32 bitrate); 134413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 1350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 1360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ********************************************************************** 1370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * External function used only by VideoEditor and that does not appear 1380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * in the API 1390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ********************************************************************** 1400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */ 1410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 1420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR M4MCS_open_normalMode( M4MCS_Context pContext, 1430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Void *pFileIn, 1440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4VIDEOEDITING_FileType InputFileType, 1450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Void *pFileOut, 1460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Void *pTempFile ); 1470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 1480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/* All errors are fatal in the MCS */ 1490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#define M4ERR_CHECK_RETURN(err) if(M4NO_ERROR!=err) return err; 1500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 1510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/* A define used with SSRC 1.04 and above to avoid taking blocks smaller 1520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * that the minimal block size 1530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */ 1540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#define M4MCS_SSRC_MINBLOCKSIZE 100 1550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 1560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4OSA_UChar Tab_MCS[8] = 1570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 1580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 17, 5, 3, 3, 1, 1, 1, 1 1590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi}; 1600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 1610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR H264MCS_Getinstance( NSWAVC_MCS_t ** instance ) 1620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 1630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi NSWAVC_MCS_t *p_bs = M4OSA_NULL; 1640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 1652ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu p_bs = (NSWAVC_MCS_t *)M4OSA_32bitAlignedMalloc(sizeof(NSWAVC_MCS_t), M4MCS, 1660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_Char *)"NSWAVC_MCS_t"); 1670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 1680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4OSA_NULL == p_bs ) 1690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 1700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_0("H264MCS_Getinstance: allocation error"); 1710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_ALLOC; 1720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 1730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 1740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->prev_frame_num = 0; 1750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->cur_frame_num = 0; 1760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->log2_max_frame_num_minus4 = 0; 1770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->prev_new_frame_num = 0; 1780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->is_done = 0; 1790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->is_first = 1; 1800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 1810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->m_pDecoderSpecificInfo = M4OSA_NULL; 1820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->m_decoderSpecificInfoSize = 0; 1830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 1840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->m_pEncoderSPS = M4OSA_NULL; 1850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->m_encoderSPSSize = 0; 1860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 1870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->m_pEncoderPPS = M4OSA_NULL; 1880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->m_encoderPPSSize = 0; 1890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 1900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->m_pFinalDSI = M4OSA_NULL; 1910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->m_pFinalDSISize = 0; 1920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 1930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->p_clip_sps = M4OSA_NULL; 1940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->m_encoder_SPS_Cnt = 0; 1950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 1960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->p_clip_pps = M4OSA_NULL; 1970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->m_encoder_PPS_Cnt = 0; 1980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 1990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->p_encoder_sps = M4OSA_NULL; 2000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->p_encoder_pps = M4OSA_NULL; 2010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 2020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->encoder_pps.slice_group_id = M4OSA_NULL; 2030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 2040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *instance = (NSWAVC_MCS_t *)p_bs; 2050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 2060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 2070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 2080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_UInt32 H264MCS_getBits( ComBitStreamMCS_t *p_bs, M4OSA_UInt32 numBits ) 2090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 2100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 ui32RetBits; 2110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt8 *pbs; 2120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int32 bcnt; 2130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->i8BitCnt -= numBits; 2140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bcnt = p_bs->i8BitCnt; 2150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 2160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Measure the quantity of bits to be read in ui32TempBuff */ 2170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ui32RetBits = p_bs->ui32TempBuff >> (32 - numBits); 2180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 2190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Read numBits in ui32TempBuff */ 2200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->ui32TempBuff <<= numBits; 2210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->bitPos += numBits; 2220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 2230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( bcnt > 24 ) 2240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 2250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return (ui32RetBits); 2260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 2270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 2280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { /* at least one byte can be buffered in ui32TempBuff */ 2290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pbs = (M4OSA_UInt8 *)p_bs->pui8BfrPtr; 2300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 2310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( bcnt < (int)(p_bs->numBitsInBuffer - p_bs->bitPos) ) 2320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { /* not enough remaining bits in ui32TempBuff: need to be filled */ 2330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi do 2340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 2350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* On the fly detection of EPB byte */ 2360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( *(pbs) == 0x03) 2370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (!(( pbs[-1]) 2380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi | (pbs[-2])))) //(p_bs->ui32LastTwoBytes & 0x0000FFFF) == 0) 2390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 2400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* EPB byte found: skip it and update bitPos accordingly */ 2410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (pbs)++; 2420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->bitPos += 8; 2430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 2440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 2450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->ui32TempBuff |= *(pbs)++ << (24 - bcnt); 2460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bcnt += 8; 2470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } while ( bcnt <= 24 ); 2480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 2490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->pui8BfrPtr = (M4OSA_Int8 *)pbs; 2500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->i8BitCnt = bcnt; 2510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return (ui32RetBits); 2520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 2530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 2540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 2550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( p_bs->bitPos <= p_bs->numBitsInBuffer ) 2560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 2570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return (ui32RetBits); 2580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 2590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 2600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 2610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return (0); 2620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 2630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 2640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 2650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_Void H264MCS_flushBits( ComBitStreamMCS_t *p_bs, M4OSA_UInt32 numBits ) 2660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 2670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt8 *pbs; 2680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 bcnt; 2690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->i8BitCnt -= numBits; 2700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bcnt = p_bs->i8BitCnt; 2710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 2720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->ui32TempBuff <<= numBits; 2730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->bitPos += numBits; 2740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 2750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( bcnt > 24 ) 2760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 2770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return; 2780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 2790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 2800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { /* at least one byte can be buffered in ui32TempBuff */ 2810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pbs = (M4OSA_UInt8 *)p_bs->pui8BfrPtr; 2820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 2830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( bcnt < (p_bs->numBitsInBuffer - p_bs->bitPos) ) 2840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { /* Not enough remaining bits in ui32TempBuff: need to be filled */ 2850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi do 2860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 2870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* On the fly detection of EPB byte */ 2880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( *(pbs) == 0x03) && (!(( pbs[-1]) | (pbs[-2]))) ) 2890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { /* JC: EPB byte found: skip it and update bitPos accordingly */ 2900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (pbs)++; 2910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->bitPos += 8; 2920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 2930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->ui32TempBuff |= *(pbs)++ << (24 - bcnt); 2940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bcnt += 8; 2950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } while ( bcnt <= 24 ); 2960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 2970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->pui8BfrPtr = (M4OSA_Int8 *)pbs; 2980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->i8BitCnt = bcnt; 2990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 3000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 3010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 3020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return; 3030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 3040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 3050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_UInt32 H264MCS_DecVLCReadExpGolombCode( ComBitStreamMCS_t *p_bs ) 3060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 3070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 code, l0 = 0, l1; 3080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Reading 32 Bits from local cache buffer of Bitstream structure*/ 3090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi code = p_bs->ui32TempBuff; 3100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 3110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Checking in first 3 bits*/ 3120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( code >> 29 ) 3130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 3140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi l0 = Tab_MCS[(code >> 29)]; 3150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi code = code >> (32 - l0); 3160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi H264MCS_flushBits(p_bs, l0); 3170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 3180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 3190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 3200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( code ) 3210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 3220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi code <<= 3; 3230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 3240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi for ( l0 = 3; code < 0x80000000; code <<= 1, l0++ ); 3250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 3260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( l0 < 16 ) /*all useful bits are inside the 32 bits read */ 3270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 3280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi code = code >> (31 - l0); 3290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi H264MCS_flushBits(p_bs, 2 * l0 + 1); 3300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 3310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 3320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { /* Read the useful bits in 2 parts */ 3330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi l1 = ( l0 << 1) - 31; 3340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi code >>= l0; 3350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi H264MCS_flushBits(p_bs, 32); 3360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi code = ( code << l1) | H264MCS_getBits(p_bs, l1); 3370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 3380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 3390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 3400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 3410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi H264MCS_flushBits(p_bs, 32); 3420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 3430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( H264MCS_getBits(p_bs, 1) ) 3440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 3450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* if number of leading 0's is 32, the only code allowed is 1 followed 3460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi by 32 0's */ 3470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 3480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*reading 32 more bits from bitstream buffer*/ 3490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi code = H264MCS_getBits(p_bs, 32); 3500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 3510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( code == 0 ) 3520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 3530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return (code - 1); 3540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 3550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 3560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*if number of leading 0's is >32, then symbol is >32 bits, 3570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi which is an error */ 3580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi //p_bs->state = _BS_ERR; 3590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi //p_bs->flags |= _BF_SYM_ERR; 3600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return (0); 3610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 3620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 3630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 3640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( 1 ) //(p_bs->state == _BS_OK) 3650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 3660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return (code - 1); 3670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 3680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 3690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 3700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return (0); 3710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 3720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 3730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 3740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_Int32 H264MCS_DecVLCReadSignedExpGolombCode( ComBitStreamMCS_t *p_bs ) 3750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 3760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int32 codeNo, ret; 3770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 3780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* read the unsigned code number */ 3790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi codeNo = H264MCS_DecVLCReadExpGolombCode(p_bs); 3800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 3810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* map to the signed value, if value is odd then it's positive, 3820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if even then it's negative, formula is (-1)^(k+1)*CEIL(k/2) */ 3830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 3840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ret = (codeNo & 0x01) ? (( codeNo + 1) >> 1) : (( -codeNo) >> 1); 3850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 3860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return ret; 3870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 3880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 3890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_Void DecBitStreamReset_MCS( ComBitStreamMCS_t *p_bs, 3900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 bytes_read ) 3910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 3920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->bitPos = 0; 3930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 3940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->lastTotalBits = 0; 3950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->numBitsInBuffer = bytes_read << 3; 3960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->readableBytesInBuffer = bytes_read; 3970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi //p_bs->state = M4NO_ERROR;//_BS_OK; 3980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi //p_bs->flags = 0; 3990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 4000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->ui32TempBuff = 0; 4010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->i8BitCnt = 0; 4020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->pui8BfrPtr = (M4OSA_Int8 *)p_bs->Buffer; 4030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->ui32LastTwoBytes = 0xFFFFFFFF; 4040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi H264MCS_getBits(p_bs, 0); 4050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 4060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 4070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR NSWAVCMCS_initBitstream( NSWAVC_bitStream_t_MCS *bS ) 4080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 4090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->bitPos = 0; 4100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->byteCnt = 0; 4110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->currBuff = 0; 4120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->prevByte = 0xff; 4130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->prevPrevByte = 0xff; 4140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 4150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4NO_ERROR; 4160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 4170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 4180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR NSWAVCMCS_putBits( NSWAVC_bitStream_t_MCS *bS, M4OSA_UInt32 value, 4190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt8 length ) 4200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 4210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 maskedValue = 0, temp = 0; 4220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt8 byteOne; 4230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 4240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 len1 = (length == 32) ? 31 : length; 4250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 4260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( !(length) ) 4270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 4280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Length = 0, return OK*/ 4290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4NO_ERROR; 4300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 4310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 4320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi maskedValue = (M4OSA_UInt32)(value &(( 1 << len1) - 1)); 4330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 4340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( 32 > (length + bS->bitPos) ) 4350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 4360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->bitPos += length; 4370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->currBuff |= maskedValue << (32 - bS->bitPos); 4380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 4390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 4400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 4410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi temp = (( bS->bitPos + length) - 32); 4420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 4430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->currBuff |= (maskedValue >> (temp)); 4440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 4450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi byteOne = 4460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->streamBuffer[bS->byteCnt++] = (M4OSA_UInt8)(bS->currBuff >> 24); 4470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 4480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( (( bS->prevPrevByte 4490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi == 0) & (bS->prevByte == 0) & (!(byteOne & 0xFC))) ) 4500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 4510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->byteCnt -= 1; 4520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->prevPrevByte = bS->streamBuffer[bS->byteCnt++] = 0x03; 4530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->prevByte = bS->streamBuffer[bS->byteCnt++] = byteOne; 4540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 4550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 4560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 4570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->prevPrevByte = bS->prevByte; 4580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->prevByte = byteOne; 4590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 4600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi byteOne = bS->streamBuffer[bS->byteCnt++] = 4610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_UInt8)(( bS->currBuff >> 16) & 0xff); 4620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 4630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( (( bS->prevPrevByte 4640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi == 0) & (bS->prevByte == 0) & (!(byteOne & 0xFC))) ) 4650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 4660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->byteCnt -= 1; 4670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->prevPrevByte = bS->streamBuffer[bS->byteCnt++] = 0x03; 4680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->prevByte = bS->streamBuffer[bS->byteCnt++] = byteOne; 4690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 4700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 4710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 4720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->prevPrevByte = bS->prevByte; 4730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->prevByte = byteOne; 4740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 4750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi byteOne = bS->streamBuffer[bS->byteCnt++] = 4760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_UInt8)(( bS->currBuff >> 8) & 0xff); 4770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 4780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( (( bS->prevPrevByte 4790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi == 0) & (bS->prevByte == 0) & (!(byteOne & 0xFC))) ) 4800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 4810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->byteCnt -= 1; 4820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->prevPrevByte = bS->streamBuffer[bS->byteCnt++] = 0x03; 4830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->prevByte = bS->streamBuffer[bS->byteCnt++] = byteOne; 4840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 4850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 4860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 4870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->prevPrevByte = bS->prevByte; 4880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->prevByte = byteOne; 4890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 4900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi byteOne = bS->streamBuffer[bS->byteCnt++] = 4910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_UInt8)((bS->currBuff) &0xff); 4920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 4930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( (( bS->prevPrevByte 4940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi == 0) & (bS->prevByte == 0) & (!(byteOne & 0xFC))) ) 4950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 4960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->byteCnt -= 1; 4970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->prevPrevByte = bS->streamBuffer[bS->byteCnt++] = 0x03; 4980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->prevByte = bS->streamBuffer[bS->byteCnt++] = byteOne; 4990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 5000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 5010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 5020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->prevPrevByte = bS->prevByte; 5030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->prevByte = byteOne; 5040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 5050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 5060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->currBuff = 0; 5070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 5080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->currBuff |= ( maskedValue &(( 1 << temp) - 1)) << (32 - temp); 5090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 5100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->bitPos = temp; 5110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 5120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 5130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4NO_ERROR; 5140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 5150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 5160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR NSWAVCMCS_putBit( NSWAVC_bitStream_t_MCS *bS, M4OSA_UInt32 value ) 5170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 5180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 maskedValue = 0, temp = 0; 5190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt8 byteOne; 5200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 5210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi maskedValue = (value ? 1 : 0); 5220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 5230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( 32 > (1 + bS->bitPos) ) 5240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 5250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->bitPos += 1; 5260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->currBuff |= maskedValue << (32 - bS->bitPos); 5270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 5280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 5290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 5300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi temp = 0; 5310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 5320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->currBuff |= (maskedValue); 5330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 5340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* writing it to memory*/ 5350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi byteOne = 5360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->streamBuffer[bS->byteCnt++] = 5370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_UInt8)(bS->currBuff >> 24); 5380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 5390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( (( bS->prevPrevByte 5400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi == 0) & (bS->prevByte == 0) & (!(byteOne & 0xFC))) ) 5410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 5420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->byteCnt -= 1; 5430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->prevPrevByte = bS->streamBuffer[bS->byteCnt++] = 0x03; 5440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->prevByte = bS->streamBuffer[bS->byteCnt++] = byteOne; 5450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 5460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 5470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 5480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->prevPrevByte = bS->prevByte; 5490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->prevByte = byteOne; 5500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 5510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi byteOne = bS->streamBuffer[bS->byteCnt++] = 5520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_UInt8)(( bS->currBuff >> 16) & 0xff); 5530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 5540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( (( bS->prevPrevByte 5550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi == 0) & (bS->prevByte == 0) & (!(byteOne & 0xFC))) ) 5560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 5570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->byteCnt -= 1; 5580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->prevPrevByte = bS->streamBuffer[bS->byteCnt++] = 0x03; 5590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->prevByte = bS->streamBuffer[bS->byteCnt++] = byteOne; 5600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 5610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 5620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 5630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->prevPrevByte = bS->prevByte; 5640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->prevByte = byteOne; 5650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 5660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi byteOne = bS->streamBuffer[bS->byteCnt++] = 5670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_UInt8)(( bS->currBuff >> 8) & 0xff); 5680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 5690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( (( bS->prevPrevByte 5700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi == 0) & (bS->prevByte == 0) & (!(byteOne & 0xFC))) ) 5710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 5720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->byteCnt -= 1; 5730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->prevPrevByte = bS->streamBuffer[bS->byteCnt++] = 0x03; 5740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->prevByte = bS->streamBuffer[bS->byteCnt++] = byteOne; 5750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 5760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 5770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 5780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->prevPrevByte = bS->prevByte; 5790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->prevByte = byteOne; 5800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 5810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi byteOne = bS->streamBuffer[bS->byteCnt++] = 5820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_UInt8)((bS->currBuff) &0xff); 5830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 5840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( (( bS->prevPrevByte 5850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi == 0) & (bS->prevByte == 0) & (!(byteOne & 0xFC))) ) 5860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 5870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->byteCnt -= 1; 5880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->prevPrevByte = bS->streamBuffer[bS->byteCnt++] = 0x03; 5890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->prevByte = bS->streamBuffer[bS->byteCnt++] = byteOne; 5900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 5910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 5920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 5930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->prevPrevByte = bS->prevByte; 5940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->prevByte = byteOne; 5950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 5960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->currBuff = 0; 5970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->bitPos = 0; 5980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 5990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 6000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4NO_ERROR; 6010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 6020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 6030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_Int32 NSWAVCMCS_putRbspTbits( NSWAVC_bitStream_t_MCS *bS ) 6040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 6050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt8 trailBits = 0; 6060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt8 byteCnt = 0; 6070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 6080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi trailBits = (M4OSA_UInt8)(bS->bitPos % 8); 6090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 6100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Already in the byte aligned position, 6110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi RBSP trailing bits will be 1000 0000 */ 6120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( 0 == trailBits ) 6130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 6140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi trailBits = (1 << 7); 6150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi NSWAVCMCS_putBits(bS, trailBits, 8); 6160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 6170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 6180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 6190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi trailBits = (8 - trailBits); 6200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi NSWAVCMCS_putBit(bS, 1); 6210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi trailBits--; 6220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 6230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( trailBits ) 6240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { /* put trailBits times zeros */ 6250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi NSWAVCMCS_putBits(bS, 0, trailBits); 6260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 6270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 6280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 6290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* For writting the currBuff in streamBuff 4byte alignment is required*/ 6300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi byteCnt = (M4OSA_UInt8)(( bS->bitPos + 4) / 8); 6310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 6320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi switch( byteCnt ) 6330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 6340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case 1: 6350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->streamBuffer[bS->byteCnt++] = (M4OSA_UInt8)(bS->currBuff >> 24); 6360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 6370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 6380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case 2: 6390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->streamBuffer[bS->byteCnt++] = (M4OSA_UInt8)(bS->currBuff >> 24); 6400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->streamBuffer[bS->byteCnt++] = 6410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_UInt8)(( bS->currBuff >> 16) & 0xff); 6420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 6430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 6440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case 3: 6450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->streamBuffer[bS->byteCnt++] = (M4OSA_UInt8)(bS->currBuff >> 24); 6460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->streamBuffer[bS->byteCnt++] = 6470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_UInt8)(( bS->currBuff >> 16) & 0xff); 6480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bS->streamBuffer[bS->byteCnt++] = 6490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_UInt8)(( bS->currBuff >> 8) & 0xff); 6500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 6510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 6520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 6530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi default: 6540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* It will not come here */ 6550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 6560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 6570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 6580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi // bS->bitPos =0; 6590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi // bS->currBuff = 0; 6600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 6610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4NO_ERROR; 6620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 6630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 6640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR NSWAVCMCS_uExpVLC( NSWAVC_bitStream_t_MCS *bS, M4OSA_Int32 codeNum ) 6650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 6660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 6670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int32 loop, temp; 6680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int32 data = 0; 6690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt8 codeLen = 0; 6700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 6710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* The codeNum cannot be less than zero for this ue(v) */ 6720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( codeNum < 0 ) 6730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 6740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return 0; 6750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 6760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 6770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Implementation for Encoding of the Table 9-1 in the Standard */ 6780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi temp = codeNum + 1; 6790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 6800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi for ( loop = 0; temp != 0; loop++ ) 6810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 6820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi temp /= 2; 6830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 6840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 6850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi codeLen = (( loop * 2) - 1); 6860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 6870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi data = codeNum + 1; 6880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 6890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi NSWAVCMCS_putBits(bS, data, codeLen); 6900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 6910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4NO_ERROR; 6920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 6930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 6940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR NSWAVCMCS_sExpVLC( NSWAVC_bitStream_t_MCS *bS, M4OSA_Int32 codeNum ) 6950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 6960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 6970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int32 loop, temp1, temp2; 6980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int32 data = 0; 6990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt8 codeLen = 0, isPositive = 0; 7000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 abscodeNum; 7010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 7020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( codeNum > 0 ) 7030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 7040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi isPositive = 1; 7050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 7060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 7070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( codeNum > 0 ) 7080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 7090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi abscodeNum = codeNum; 7100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 7110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 7120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 7130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi abscodeNum = -codeNum; 7140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 7150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 7160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi temp1 = ( ( ( abscodeNum) << 1) - isPositive) + 1; 7170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi temp2 = temp1; 7180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 7190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi for ( loop = 0; loop < 16 && temp2 != 0; loop++ ) 7200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 7210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi temp2 /= 2; 7220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 7230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 7240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi codeLen = ( loop * 2) - 1; 7250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 7260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi data = temp1; 7270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 7280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi NSWAVCMCS_putBits(bS, data, codeLen); 7290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 7300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4NO_ERROR; 7310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 7320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 7330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR H264MCS_ProcessEncodedNALU( M4OSA_Void *ainstance, 7340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt8 *inbuff, 7350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int32 inbuf_size, 7360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt8 *outbuff, 7370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int32 *outbuf_size ) 7380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 7390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ComBitStreamMCS_t *p_bs, bs; 7400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi NSWAVC_MCS_t *instance; 7410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt8 nalu_info; 7420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int32 forbidden_bit, nal_ref_idc, nal_unit_type; 7430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int32 first_mb_in_slice, slice_type, pic_parameter_set_id, frame_num; 7440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int32 seq_parameter_set_id; 7450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt8 temp1, temp2, temp3, temp4; 7460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int32 temp_frame_num; 7470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int32 bitstoDiacard, bytes; 7480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 mask_bits = 0xFFFFFFFF; 7490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int32 new_bytes, init_bit_pos; 7500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 nal_size; 7510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 cnt; 7520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 outbuffpos = 0; 7530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 nal_size_low16, nal_size_high16; 7540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 frame_size = 0; 7550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 temp = 0; 7560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 7570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi // StageFright encoder does not provide the size in the first 4 bytes of the AU, add it 7580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int8 *pTmpBuff1 = M4OSA_NULL; 7590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int8 *pTmpBuff2 = M4OSA_NULL; 7600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 7610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs = &bs; 7620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi instance = (NSWAVC_MCS_t *)ainstance; 7630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 7640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_2( 7650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "In H264MCS_ProcessEncodedNALU with FrameSize = %d inBuf_Size=%d", 7660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi frame_size, inbuf_size); 7670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 7680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi // StageFright codecs may add a start code, make sure it is not present 7690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 7709d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu if( !memcmp((void *)inbuff, 7719d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu "\x00\x00\x00\x01", 4) ) 7720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 7730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_3( 7740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "H264MCS_ProcessNALU ERROR : NALU start code has not been removed %d " 7750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "0x%X 0x%X", inbuf_size, ((M4OSA_UInt32 *)inbuff)[0], 7760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ((M4OSA_UInt32 *)inbuff)[1]); 7770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 7780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_PARAMETER; 7790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 7800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 7810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi // StageFright encoder does not provide the size in the first 4 bytes of the AU, add it 7822ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu pTmpBuff1 = (M4OSA_Int8 *)M4OSA_32bitAlignedMalloc(inbuf_size + 4, M4MCS, 7830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_Char *)"tmpNALU"); 7849d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu memcpy((void *)(pTmpBuff1 + 4), (void *)inbuff, 7850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi inbuf_size); 7860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pTmpBuff1[3] = ( (M4OSA_UInt32)inbuf_size) & 0x000000FF; 7870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pTmpBuff1[2] = ( (M4OSA_UInt32)inbuf_size >> 8) & 0x000000FF; 7880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pTmpBuff1[1] = ( (M4OSA_UInt32)inbuf_size >> 16) & 0x000000FF; 7890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pTmpBuff1[0] = ( (M4OSA_UInt32)inbuf_size >> 24) & 0x000000FF; 7900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pTmpBuff2 = (M4OSA_Int8 *)inbuff; 7910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi inbuff = (M4OSA_UInt8 *)pTmpBuff1; 7920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi inbuf_size += 4; 7930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 7940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi // Make sure the available size was set 7950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( inbuf_size >= *outbuf_size ) 7960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 7970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 7980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "!!! H264MCS_ProcessNALU ERROR : specified available size is incorrect %d ", 7990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *outbuf_size); 8000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_PARAMETER; 8010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 8020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 8030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 8040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 8050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi while( (M4OSA_Int32)frame_size < inbuf_size ) 8060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 8070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi mask_bits = 0xFFFFFFFF; 8080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->Buffer = (M4OSA_UInt8 *)(inbuff + frame_size); 8090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 8100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi // Use unsigned value to fix errors due to bit sign extension, this fix should be generic 8110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 8120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi nal_size_high16 = ( ( (M4OSA_UInt8 *)p_bs->Buffer)[0] << 8) 8130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi + ((M4OSA_UInt8 *)p_bs->Buffer)[1]; 8140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi nal_size_low16 = ( ( (M4OSA_UInt8 *)p_bs->Buffer)[2] << 8) 8150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi + ((M4OSA_UInt8 *)p_bs->Buffer)[3]; 8160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 8170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi nalu_info = (unsigned char)p_bs->Buffer[4]; 8180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 8190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi outbuff[outbuffpos] = p_bs->Buffer[4]; 8200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 8210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->Buffer = p_bs->Buffer + 5; 8220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 8230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->bitPos = 0; 8240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->lastTotalBits = 0; 8250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->numBitsInBuffer = ( inbuf_size - frame_size - 5) << 3; 8260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->readableBytesInBuffer = inbuf_size - frame_size - 5; 8270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 8280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->ui32TempBuff = 0; 8290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->i8BitCnt = 0; 8300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->pui8BfrPtr = (M4OSA_Int8 *)p_bs->Buffer; 8310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->ui32LastTwoBytes = 0xFFFFFFFF; 8320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 8330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi H264MCS_getBits(p_bs, 0); 8340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 8350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi nal_size = ( nal_size_high16 << 16) + nal_size_low16; 8360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 8370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi frame_size += nal_size + 4; 8380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 8390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi forbidden_bit = ( nalu_info >> 7) & 1; 8400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi nal_ref_idc = ( nalu_info >> 5) & 3; 8410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi nal_unit_type = (nalu_info) &0x1f; 8420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 8430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi NSWAVCMCS_initBitstream(&instance->encbs); 8440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 8450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi instance->encbs.streamBuffer = outbuff + outbuffpos + 1; 8460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 8470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( nal_unit_type == 8 ) 8480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 8490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_0("Error : PPS"); 8500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return 0; 8510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 8520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 8530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( nal_unit_type == 7 ) 8540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 8550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*SPS Packet */ 8560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_0("Error : SPS"); 8570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return 0; 8580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 8590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 8600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( (nal_unit_type == 5) ) 8610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 8620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi instance->frame_count = 0; 8630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi instance->POC_lsb = 0; 8640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 8650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 8660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( nal_unit_type == 1) || (nal_unit_type == 5) ) 8670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 8680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi first_mb_in_slice = H264MCS_DecVLCReadExpGolombCode(p_bs); 8690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi slice_type = H264MCS_DecVLCReadExpGolombCode(p_bs); 8700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pic_parameter_set_id = H264MCS_DecVLCReadExpGolombCode(p_bs); 8710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 8720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* First MB in slice */ 8730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi NSWAVCMCS_uExpVLC(&instance->encbs, first_mb_in_slice); 8740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 8750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Slice Type */ 8760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi NSWAVCMCS_uExpVLC(&instance->encbs, slice_type); 8770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 8780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Picture Parameter set Id */ 8790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pic_parameter_set_id = instance->encoder_pps.pic_parameter_set_id; 8800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi NSWAVCMCS_uExpVLC(&instance->encbs, pic_parameter_set_id); 8810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 8820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi temp = H264MCS_getBits(p_bs, 8830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi instance->encoder_sps.log2_max_frame_num_minus4 + 4); 8840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi NSWAVCMCS_putBits(&instance->encbs, instance->frame_count, 8850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi instance->clip_sps.log2_max_frame_num_minus4 + 4); 8860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 8870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi // In Baseline Profile: frame_mbs_only_flag should be ON 8880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( nal_unit_type == 5 ) 8890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 8900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi temp = H264MCS_DecVLCReadExpGolombCode(p_bs); 8910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi NSWAVCMCS_uExpVLC(&instance->encbs, temp); 8920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 8930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 8940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( instance->encoder_sps.pic_order_cnt_type == 0 ) 8950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 8960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi temp = H264MCS_getBits(p_bs, 8970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi instance->encoder_sps.log2_max_pic_order_cnt_lsb_minus4 8980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi + 4); 8990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 9000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi // in baseline profile field_pic_flag should be off. 9010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( instance->encoder_pps.pic_order_present_flag ) 9020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 9030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi temp = H264MCS_DecVLCReadSignedExpGolombCode(p_bs); 9040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 9050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 9060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 9070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( instance->encoder_sps.pic_order_cnt_type == 1) 9080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (instance->encoder_sps.delta_pic_order_always_zero_flag) ) 9090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 9100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi temp = H264MCS_DecVLCReadSignedExpGolombCode(p_bs); 9110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 9120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi // in baseline profile field_pic_flag should be off. 9130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( instance->encoder_pps.pic_order_present_flag ) 9140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 9150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi temp = H264MCS_DecVLCReadSignedExpGolombCode(p_bs); 9160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 9170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 9180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 9190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( instance->clip_sps.pic_order_cnt_type == 0 ) 9200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 9210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi NSWAVCMCS_putBits(&instance->encbs, instance->POC_lsb, 9220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi instance->clip_sps.log2_max_pic_order_cnt_lsb_minus4 + 4); 9230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 9240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi // in baseline profile field_pic_flag should be off. 9250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( instance->encoder_pps.pic_order_present_flag ) 9260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 9270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi NSWAVCMCS_sExpVLC(&instance->encbs, 0); 9280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 9290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 9300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 9310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( instance->clip_sps.pic_order_cnt_type == 1) 9320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (instance->clip_sps.delta_pic_order_always_zero_flag) ) 9330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 9340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi NSWAVCMCS_sExpVLC(&instance->encbs, 0); 9350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 9360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi // in baseline profile field_pic_flag should be off. 9370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( instance->encoder_pps.pic_order_present_flag ) 9380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 9390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi NSWAVCMCS_sExpVLC(&instance->encbs, 0); 9400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 9410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 9420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 9430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi cnt = p_bs->bitPos & 0x7; 9440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 9450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( cnt ) 9460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 9470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi cnt = 8 - cnt; 9480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi temp = H264MCS_getBits(p_bs, cnt); 9490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi NSWAVCMCS_putBits(&instance->encbs, temp, cnt); 9500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 9510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 9520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi cnt = p_bs->bitPos >> 3; 9530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 9540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi while( cnt < (nal_size - 2) ) 9550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 9560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi temp = H264MCS_getBits(p_bs, 8); 9570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi NSWAVCMCS_putBits(&instance->encbs, temp, 8); 9580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi cnt = p_bs->bitPos >> 3; 9590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 9600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 9610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi temp = H264MCS_getBits(p_bs, 8); 9620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 9630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( temp != 0 ) 9640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 9650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi cnt = 0; 9660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 9670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi while( ( temp & 0x1) == 0 ) 9680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 9690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi cnt++; 9700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi temp = temp >> 1; 9710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 9720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi cnt++; 9730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi temp = temp >> 1; 9740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 9750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( 8 - cnt ) 9760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 9770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi NSWAVCMCS_putBits(&instance->encbs, temp, (8 - cnt)); 9780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 9790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 9800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi NSWAVCMCS_putRbspTbits(&instance->encbs); 9810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 9820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 9830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 9840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 9850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 9860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "H264MCS_ProcessEncodedNALU : 13 temp = 0 trailing bits = %d", 9870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi instance->encbs.bitPos % 8); 9880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 9890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( instance->encbs.bitPos % 8 ) 9900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 9910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi NSWAVCMCS_putBits(&instance->encbs, 0, 9920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (8 - instance->encbs.bitPos % 8)); 9930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 9940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 9950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 9960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi temp = instance->encbs.byteCnt; 9970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi temp = temp + 1; 9980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 9990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi outbuffpos = outbuffpos + temp; 10000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 10010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 10020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 10030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *outbuf_size = outbuffpos; 10040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 10050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi instance->POC_lsb = instance->POC_lsb + 1; 10060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 10070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( instance->POC_lsb == instance->POC_lsb_mod ) 10080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 10090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi instance->POC_lsb = 0; 10100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 10110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi instance->frame_count = instance->frame_count + 1; 10120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 10130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( instance->frame_count == instance->frame_mod_count ) 10140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 10150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi instance->frame_count = 0; 10160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 10170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 10180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi // StageFright encoder does not provide the size in the first 4 bytes of the AU, add it 10190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 10202ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu free(pTmpBuff1); 10210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pTmpBuff1 = M4OSA_NULL; 10220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi inbuff = (M4OSA_UInt8 *)pTmpBuff2; 10230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 10240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4NO_ERROR; 10250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 10260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 10270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_Int32 DecSPSMCS( ComBitStreamMCS_t *p_bs, 10280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ComSequenceParameterSet_t_MCS *sps ) 10290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 10300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 i; 10310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int32 temp_max_dpb_size; 10320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int32 nb_ignore_bits; 10330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int32 error; 10340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt8 profile_idc, level_idc, reserved_zero_4bits, 10350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi seq_parameter_set_id; 10360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt8 constraint_set0_flag, constraint_set1_flag, 10370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi constraint_set2_flag, constraint_set3_flag; 10380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 10390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sps->profile_idc = (M4OSA_UInt8)H264MCS_getBits(p_bs, 8); 10400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sps->constraint_set0_flag = (M4OSA_Bool)H264MCS_getBits(p_bs, 1); 10410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sps->constraint_set1_flag = (M4OSA_Bool)H264MCS_getBits(p_bs, 1); 10420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sps->constraint_set2_flag = (M4OSA_Bool)H264MCS_getBits(p_bs, 1); 10430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sps->constraint_set3_flag = (M4OSA_Bool)H264MCS_getBits(p_bs, 1); 10440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi reserved_zero_4bits = (M4OSA_UInt8)H264MCS_getBits(p_bs, 4); 10450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sps->level_idc = (M4OSA_UInt8)H264MCS_getBits(p_bs, 8); 10460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sps->seq_parameter_set_id = 10470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_UInt8)H264MCS_DecVLCReadExpGolombCode(p_bs); 10480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sps->log2_max_frame_num_minus4 = 10490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_UInt8)H264MCS_DecVLCReadExpGolombCode(p_bs); 10500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sps->MaxFrameNum = 1 << (sps->log2_max_frame_num_minus4 + 4); 10510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sps->pic_order_cnt_type = 10520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_UInt8)H264MCS_DecVLCReadExpGolombCode(p_bs); 10530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 10540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (sps->pic_order_cnt_type == 0) 10550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 10560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sps->log2_max_pic_order_cnt_lsb_minus4 = 10570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_UInt8)H264MCS_DecVLCReadExpGolombCode(p_bs); 10580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sps->MaxPicOrderCntLsb = 10590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 1 << (sps->log2_max_pic_order_cnt_lsb_minus4 + 4); 10600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 10610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else if( sps->pic_order_cnt_type == 1 ) 10620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 10630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sps->delta_pic_order_always_zero_flag = 10640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_Bool)H264MCS_getBits(p_bs, 1); 10650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 10660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi // This fix should be generic to remove codec dependency 10670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 10680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sps->offset_for_non_ref_pic = 10690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi H264MCS_DecVLCReadSignedExpGolombCode(p_bs); 10700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sps->offset_for_top_to_bottom_field = 10710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi H264MCS_DecVLCReadSignedExpGolombCode(p_bs); 10720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 10730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 10740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*num_ref_frames_in_pic_order_cnt_cycle must be in the range 0, 255*/ 10750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 10760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sps->num_ref_frames_in_pic_order_cnt_cycle = 10770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_UInt8)H264MCS_DecVLCReadExpGolombCode(p_bs); 10780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 10790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* compute deltaPOC */ 10800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sps->expectedDeltaPerPicOrderCntCycle = 0; 10810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 10820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi for ( i = 0; i < sps->num_ref_frames_in_pic_order_cnt_cycle; i++ ) 10830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 10840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi // This fix should be generic to remove codec dependency 10850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sps->offset_for_ref_frame[i] = 10860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi H264MCS_DecVLCReadSignedExpGolombCode(p_bs); 10870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 10880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sps->expectedDeltaPerPicOrderCntCycle += 10890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sps->offset_for_ref_frame[i]; 10900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 10910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 10920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 10930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* num_ref_frames must be in the range 0,16 */ 10940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sps->num_ref_frames = (M4OSA_UInt8)H264MCS_DecVLCReadExpGolombCode(p_bs); 10950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sps->gaps_in_frame_num_value_allowed_flag = 10960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_Bool)H264MCS_getBits(p_bs, 1); 10970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 10980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sps->pic_width_in_mbs_minus1 = 10990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_UInt16)H264MCS_DecVLCReadExpGolombCode(p_bs); 11000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sps->pic_height_in_map_units_minus1 = 11010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_UInt16)H264MCS_DecVLCReadExpGolombCode(p_bs); 11020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 11030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sps->frame_mbs_only_flag = (M4OSA_Bool)H264MCS_getBits(p_bs, 1); 11040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 11050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (!sps->frame_mbs_only_flag) 11060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 11070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sps->mb_adaptive_frame_field_flag = 11080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_Bool)H264MCS_getBits(p_bs, 1); 11090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 11100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 11110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 11120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sps->mb_adaptive_frame_field_flag = 0; 11130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 11140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 11150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sps->PicWidthInMbs = sps->pic_width_in_mbs_minus1 + 1; 11160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sps->FrameHeightInMbs = ( 2 - sps->frame_mbs_only_flag) * \ 11170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (sps->pic_height_in_map_units_minus1 + 1); 11180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#ifdef _CAP_FMO_ 11190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 11200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sps->NumSliceGroupMapUnits = 11210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sps->PicWidthInMbs * (sps->pic_height_in_map_units_minus1 + 1); 11220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sps->MaxPicSizeInMbs = sps->PicWidthInMbs * sps->FrameHeightInMbs; 11230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 11240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#endif /*_CAP_FMO_*/ 11250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 11260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sps->direct_8x8_inference_flag = (M4OSA_Bool)H264MCS_getBits(p_bs, 1); 11270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 11280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( sps->frame_mbs_only_flag == 0 ) 11290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sps->direct_8x8_inference_flag = 1; 11300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 11310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sps->frame_cropping_flag = (M4OSA_Bool)H264MCS_getBits(p_bs, 1); 11320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 11330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( sps->frame_cropping_flag ) 11340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 11350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sps->frame_crop_left_offset = H264MCS_DecVLCReadExpGolombCode(p_bs); 11360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sps->frame_crop_right_offset = H264MCS_DecVLCReadExpGolombCode(p_bs); 11370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sps->frame_crop_top_offset = H264MCS_DecVLCReadExpGolombCode(p_bs); 11380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sps->frame_crop_bottom_offset = H264MCS_DecVLCReadExpGolombCode(p_bs); 11390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 11400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 11410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 11420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sps->frame_crop_left_offset = 0; 11430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sps->frame_crop_right_offset = 0; 11440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sps->frame_crop_top_offset = 0; 11450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sps->frame_crop_bottom_offset = 0; 11460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 11470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 11480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sps->vui_parameters_present_flag = (M4OSA_Bool)H264MCS_getBits(p_bs, 1); 11490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 11500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (sps->vui_parameters_present_flag) { 11510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* no error message as stream can be decoded without VUI messages */ 11520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 11530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 11540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4NO_ERROR; 11550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 11560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 11570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_Int32 DecPPSMCS( ComBitStreamMCS_t *p_bs, 11580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ComPictureParameterSet_t_MCS *pps ) 11590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 11600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int32 error; 11610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 pic_parameter_set_id; 11620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 11630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#ifdef _CAP_FMO_ 11640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 i, length, v; 11650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#endif 11660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 11670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int32 nb_ignore_bits; 11680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 11690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pic_parameter_set_id = H264MCS_DecVLCReadExpGolombCode(p_bs); 11700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pps->pic_parameter_set_id = (M4OSA_UInt8)pic_parameter_set_id; 11710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 11720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pps->seq_parameter_set_id = 11730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_UInt8)H264MCS_DecVLCReadExpGolombCode(p_bs); 11740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 11750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* entropy_coding_mode_flag must be 0 or 1 */ 11760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pps->entropy_coding_mode_flag = (M4OSA_Bool)H264MCS_getBits(p_bs, 1); 11770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pps->pic_order_present_flag = (M4OSA_Bool)H264MCS_getBits(p_bs, 1); 11780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 11790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pps->num_slice_groups_minus1 = 11800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_UInt8)H264MCS_DecVLCReadExpGolombCode(p_bs); 11810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 11820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#ifdef _CAP_FMO_ 11830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* FMO stuff begins here */ 11840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 11850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pps->map_initialized = FALSE; 11860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 11870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pps->num_slice_groups_minus1 > 0 ) 11880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 11890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pps->slice_group_map_type = 11900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_UInt8)H264MCS_DecVLCReadExpGolombCode(p_bs); 11910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 11920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi switch( pps->slice_group_map_type ) 11930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 11940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case 0: 11950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi for ( i = 0; i <= pps->num_slice_groups_minus1; i++ ) 11960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 11970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pps->run_length_minus1[i] = 11980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_UInt16)H264MCS_DecVLCReadExpGolombCode(p_bs); 11990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 12000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 12010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 12020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case 2: 12030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi for ( i = 0; i < pps->num_slice_groups_minus1; i++ ) 12040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 12050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pps->top_left[i] = 12060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_UInt16)H264MCS_DecVLCReadExpGolombCode(p_bs); 12070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pps->bottom_right[i] = 12080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_UInt16)H264MCS_DecVLCReadExpGolombCode(p_bs); 12090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 12100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 12110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 12120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case 3: 12130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case 4: 12140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case 5: 12150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pps->slice_group_change_direction_flag = 12160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_Bool)H264MCS_getBits(p_bs, 1); 12170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pps->slice_group_change_rate_minus1 = 12180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_UInt16)H264MCS_DecVLCReadExpGolombCode(p_bs); 12190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 12200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 12210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case 6: 12220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pps->pic_size_in_map_units_minus1 = 12230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_UInt16)H264MCS_DecVLCReadExpGolombCode(p_bs); 12240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 12250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pps->slice_group_id = (H264UInt8 12260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *)M4H264Dec_malloc((pps->pic_size_in_map_units_minus1 12270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi + 1), M4H264_COREID, (M4OSA_Char *)"PPS"); 12280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 12290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4OSA_NULL == pps->slice_group_id) 12300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 12310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_0("DecPPSMCS: allocation error"); 12320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_ALLOC; 12330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 12340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 12350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi for ( length = 0, v = pps->num_slice_groups_minus1 + 1; v != 0; 12360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi v >>= 1, length++ ); 12370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 12380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi for ( i = 0; i <= pps->pic_size_in_map_units_minus1; i++ ) 12390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 12400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pps->slice_group_id[i] = 12410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_UInt8)getBits(p_vlc_engine->p_bs, length); 12420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 12430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 12440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 12450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 12460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 12470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 12480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pps->slice_group_map_type = 0; 12490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 12500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* End of FMO stuff */ 12510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 12520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#else 12530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 12540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#endif /* _CAP_FMO_ */ 12550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 12560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* num_ref_idx_l0_active_minus1 must be in the range 0, 31 */ 12570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 12580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pps->num_ref_idx_l0_active_minus1 = 12590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_UInt8)H264MCS_DecVLCReadExpGolombCode(p_bs); 12600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* num_ref_idx_l1_active_minus1 must be in the range 0, 31 */ 12610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pps->num_ref_idx_l1_active_minus1 = 12620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_UInt8)H264MCS_DecVLCReadExpGolombCode(p_bs); 12630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pps->weighted_pred_flag = (M4OSA_Bool)H264MCS_getBits(p_bs, 1); 12640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 12650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* weighted_bipred_idc must be in the range 0,2 */ 12660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pps->weighted_bipred_idc = (M4OSA_Bool)H264MCS_getBits(p_bs, 2); 12670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 12680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* pic_init_qp_minus26 must be in the range -26,25 */ 12690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pps->pic_init_qp_minus26 = 12700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_Int16)H264MCS_DecVLCReadSignedExpGolombCode(p_bs); 12710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 12720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* pic_init_qs_minus26 must be in the range -26,25 */ 12730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pps->pic_init_qs_minus26 = 12740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_Int16)H264MCS_DecVLCReadSignedExpGolombCode(p_bs); 12750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 12760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* chroma_qp_index_offset must be in the range -12,+12 */ 12770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pps->chroma_qp_index_offset = 12780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_Int16)H264MCS_DecVLCReadSignedExpGolombCode(p_bs); 12790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pps->deblocking_filter_control_present_flag = 12800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_Bool)H264MCS_getBits(p_bs, 1); 12810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pps->constrained_intra_pred_flag = (M4OSA_Bool)H264MCS_getBits(p_bs, 1); 12820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pps->redundant_pic_cnt_present_flag = (M4OSA_Bool)H264MCS_getBits(p_bs, 1); 12830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 12840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4NO_ERROR; 12850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 12860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 12870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR H264MCS_ProcessSPS_PPS( NSWAVC_MCS_t *instance, M4OSA_UInt8 *inbuff, 12880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int32 inbuf_size ) 12890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 12900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ComBitStreamMCS_t *p_bs, bs; 12910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ComBitStreamMCS_t *p_bs1, bs1; 12920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 12930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt8 nalu_info = 0; 12940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int32 forbidden_bit, nal_ref_idc, nal_unit_type; 12950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int32 first_mb_in_slice, slice_type, pic_parameter_set_id = 0, 12960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi frame_num; 12970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int32 seq_parameter_set_id; 12980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt8 temp1, temp2, temp3, temp4; 12990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int32 temp_frame_num; 13000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int32 bitstoDiacard, bytes; 13010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 mask_bits = 0xFFFFFFFF; 13020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int32 new_bytes, init_bit_pos; 13030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 nal_size = 0; 13040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 cnt, cnt1; 13050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 outbuffpos = 0; 13060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 nal_size_low16, nal_size_high16; 13070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 frame_size = 0; 13080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 temp = 0; 13090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt8 *lClipDSI; 13100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt8 *lClipDSI_PPS_start; 13110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 lClipDSI_PPS_offset = 0; 13120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 13130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt8 *lPPS_Buffer = M4OSA_NULL; 13140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 lPPS_Buffer_Size = 0; 13150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 13160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 lSize, lSize1; 13170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 lActiveSPSID_Clip; 13180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 lClipPPSRemBits = 0; 13190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 13200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 lEncoder_SPSID = 0; 13210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 lEncoder_PPSID = 0; 13220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 lEncoderPPSRemBits = 0; 13230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 lFound = 0; 13240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 size; 13250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 13260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt8 Clip_SPSID[32] = { 0 }; 13270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt8 Clip_UsedSPSID[32] = { 0 }; 13280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt8 Clip_PPSID[256] = { 0 }; 13290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt8 Clip_SPSID_in_PPS[256] = { 0 }; 13300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt8 Clip_UsedPPSID[256] = { 0 }; 13310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 13320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 13330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs = &bs; 13340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs1 = &bs1; 13350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 13360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Find the active SPS ID */ 13370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL == instance), M4ERR_PARAMETER, 13380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "H264MCS_ProcessSPS_PPS: instance is M4OSA_NULL"); 13390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 13400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi switch( instance->m_pDecoderSpecificInfo[4] & 0x3 ) 13410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 13420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case 0: 13430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi instance->m_Num_Bytes_NALUnitLength = 1; 13440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 13450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 13460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case 1: 13470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi instance->m_Num_Bytes_NALUnitLength = 2; 13480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 13490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 13500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case 3: 13510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi //Note: Current code supports only this... 13520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi instance->m_Num_Bytes_NALUnitLength = 4; 13530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 13540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 13550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 13560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi instance->m_encoder_SPS_Cnt = instance->m_pDecoderSpecificInfo[5] & 0x1F; 13570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 13580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi lClipDSI = instance->m_pDecoderSpecificInfo + 6; 13590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 13600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi lClipDSI_PPS_offset = 6; 13610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 13620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi for ( cnt = 0; cnt < instance->m_encoder_SPS_Cnt; cnt++ ) 13630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 13640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi lSize = ( lClipDSI[0] << 8) + lClipDSI[1]; 13650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi lClipDSI = lClipDSI + 2; 13660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 13670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->Buffer = (M4OSA_UInt8 *)(lClipDSI + 4); 13680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi DecBitStreamReset_MCS(p_bs, lSize - 4); 13690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 13700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi Clip_SPSID[cnt] = H264MCS_DecVLCReadExpGolombCode(p_bs); 13710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi Clip_UsedSPSID[Clip_SPSID[cnt]] = 1; 13720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 13730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi lClipDSI = lClipDSI + lSize; 13740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi lClipDSI_PPS_offset = lClipDSI_PPS_offset + 2 + lSize; 13750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 13760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 13770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi instance->m_encoder_PPS_Cnt = lClipDSI[0]; 13780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi lClipDSI = lClipDSI + 1; 13790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 13800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi lClipDSI_PPS_start = lClipDSI; 13810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 13820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi for ( cnt = 0; cnt < instance->m_encoder_PPS_Cnt; cnt++ ) 13830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 13840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi lSize = ( lClipDSI[0] << 8) + lClipDSI[1]; 13850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi lClipDSI = lClipDSI + 2; 13860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 13870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->Buffer = (M4OSA_UInt8 *)(lClipDSI + 1); 13880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi DecBitStreamReset_MCS(p_bs, lSize - 1); 13890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 13900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi Clip_PPSID[cnt] = H264MCS_DecVLCReadExpGolombCode(p_bs); 13910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi Clip_UsedPPSID[Clip_PPSID[cnt]] = 1; 13920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi Clip_SPSID_in_PPS[Clip_PPSID[cnt]] = 13930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi H264MCS_DecVLCReadExpGolombCode(p_bs); 13940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 13950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi lClipDSI = lClipDSI + lSize; 13960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 13970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 13980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Find the clip SPS ID used at the cut start frame */ 13990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi while( ( (M4OSA_Int32)frame_size) < inbuf_size ) 14000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 14010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi mask_bits = 0xFFFFFFFF; 14020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->Buffer = (M4OSA_UInt8 *)(inbuff + frame_size); 14030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 14040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi switch( instance->m_Num_Bytes_NALUnitLength ) 14050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 14060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case 1: 14070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi nal_size = (unsigned char)p_bs->Buffer[0]; 14080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi nalu_info = (unsigned char)p_bs->Buffer[1]; 14090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->Buffer = p_bs->Buffer + 2; 14100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 14110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 14120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 14130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case 2: 14140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi nal_size_high16 = ( p_bs->Buffer[0] << 8) + p_bs->Buffer[1]; 14150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi nal_size = nal_size_high16; 14160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi nalu_info = (unsigned char)p_bs->Buffer[2]; 14170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->Buffer = p_bs->Buffer + 3; 14180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 14190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 14200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 14210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case 4: 14220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi nal_size_high16 = ( p_bs->Buffer[0] << 8) + p_bs->Buffer[1]; 14230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi nal_size_low16 = ( p_bs->Buffer[2] << 8) + p_bs->Buffer[3]; 14240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi nal_size = ( nal_size_high16 << 16) + nal_size_low16; 14250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi nalu_info = (unsigned char)p_bs->Buffer[4]; 14260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->Buffer = p_bs->Buffer + 5; 14270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 14280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 14290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 14300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 14310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->bitPos = 0; 14320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->lastTotalBits = 0; 14330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->numBitsInBuffer = 14340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ( inbuf_size - frame_size - instance->m_Num_Bytes_NALUnitLength - 1) 14350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi << 3; 14360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->readableBytesInBuffer = 14370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi inbuf_size - frame_size - instance->m_Num_Bytes_NALUnitLength - 1; 14380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 14390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->ui32TempBuff = 0; 14400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->i8BitCnt = 0; 14410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->pui8BfrPtr = (M4OSA_Int8 *)p_bs->Buffer; 14420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->ui32LastTwoBytes = 0xFFFFFFFF; 14430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 14440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi H264MCS_getBits(p_bs, 0); 14450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 14460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi frame_size += nal_size + instance->m_Num_Bytes_NALUnitLength; 14470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 14480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi forbidden_bit = ( nalu_info >> 7) & 1; 14490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi nal_ref_idc = ( nalu_info >> 5) & 3; 14500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi nal_unit_type = (nalu_info) &0x1f; 14510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 14520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( nal_unit_type == 8 ) 14530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 14540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_0("H264MCS_ProcessSPS_PPS() Error: PPS"); 14550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 14560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 14570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 14580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( nal_unit_type == 7 ) 14590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 14600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*SPS Packet */ 14610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_0("H264MCS_ProcessSPS_PPS() Error: SPS"); 14620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 14630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 14640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 14650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( nal_unit_type == 1) || (nal_unit_type == 5) ) 14660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 14670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi first_mb_in_slice = H264MCS_DecVLCReadExpGolombCode(p_bs); 14680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi slice_type = H264MCS_DecVLCReadExpGolombCode(p_bs); 14690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pic_parameter_set_id = H264MCS_DecVLCReadExpGolombCode(p_bs); 14700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 14710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 14720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 14730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 14740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi lActiveSPSID_Clip = Clip_SPSID_in_PPS[pic_parameter_set_id]; 14750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 14760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi instance->final_SPS_ID = lActiveSPSID_Clip; 14770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Do we need to add encoder PPS to clip PPS */ 14780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 14790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi lClipDSI = lClipDSI_PPS_start; 14800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 14810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi for ( cnt = 0; cnt < instance->m_encoder_PPS_Cnt; cnt++ ) 14820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 14830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi lSize = ( lClipDSI[0] << 8) + lClipDSI[1]; 14840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi lClipDSI = lClipDSI + 2; 14850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 14860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( lActiveSPSID_Clip == Clip_SPSID_in_PPS[Clip_PPSID[cnt]] ) 14870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 14880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi lPPS_Buffer = lClipDSI + 1; 14890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi lPPS_Buffer_Size = lSize - 1; 14900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 14910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->Buffer = (M4OSA_UInt8 *)(lClipDSI + 1); 14920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi DecBitStreamReset_MCS(p_bs, lSize - 1); 14930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 14940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi Clip_PPSID[cnt] = H264MCS_DecVLCReadExpGolombCode(p_bs); 14950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi Clip_UsedPPSID[Clip_SPSID[cnt]] = 1; 14960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi Clip_SPSID_in_PPS[cnt] = H264MCS_DecVLCReadExpGolombCode(p_bs); 14970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi lClipPPSRemBits = ( lSize - 1) << 3; 14980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi lClipPPSRemBits -= p_bs->bitPos; 14990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 15000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi temp = lClipDSI[lSize - 1]; 15010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 15020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi cnt1 = 0; 15030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 15040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi while( ( temp & 0x1) == 0 ) 15050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 15060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi cnt1++; 15070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi temp = temp >> 1; 15080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 15090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi cnt1++; 15100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi lClipPPSRemBits -= cnt1; 15110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 15120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi lSize1 = instance->m_encoderPPSSize - 1; 15130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs1->Buffer = (M4OSA_UInt8 *)(instance->m_pEncoderPPS + 1); 15140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi DecBitStreamReset_MCS(p_bs1, lSize1); 15150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 15160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi lEncoder_PPSID = H264MCS_DecVLCReadExpGolombCode(p_bs1); 15170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi lEncoder_SPSID = H264MCS_DecVLCReadExpGolombCode(p_bs1); 15180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 15190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi lEncoderPPSRemBits = ( lSize1) << 3; 15200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi lEncoderPPSRemBits -= p_bs1->bitPos; 15210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 15220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi temp = instance->m_pEncoderPPS[lSize1]; 15230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 15240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi cnt1 = 0; 15250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 15260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi while( ( temp & 0x1) == 0 ) 15270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 15280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi cnt1++; 15290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi temp = temp >> 1; 15300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 15310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi cnt1++; 15320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi lEncoderPPSRemBits -= cnt1; 15330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 15340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( lEncoderPPSRemBits == lClipPPSRemBits ) 15350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 15360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi while( lEncoderPPSRemBits > 8 ) 15370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 15380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi temp1 = H264MCS_getBits(p_bs, 8); 15390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi temp2 = H264MCS_getBits(p_bs1, 8); 15400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi lEncoderPPSRemBits = lEncoderPPSRemBits - 8; 15410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 15420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( temp1 != temp2 ) 15430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 15440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 15450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 15460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 15470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 15480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( lEncoderPPSRemBits < 8 ) 15490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 15500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( lEncoderPPSRemBits ) 15510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 15520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi temp1 = H264MCS_getBits(p_bs, lEncoderPPSRemBits); 15530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi temp2 = H264MCS_getBits(p_bs1, lEncoderPPSRemBits); 15540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 15550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( temp1 == temp2 ) 15560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 15570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi lFound = 1; 15580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 15590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 15600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 15610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 15620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi lFound = 1; 15630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 15640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 15650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 15660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 15670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 15680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 15690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi lClipDSI = lClipDSI + lSize; 15700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 15710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 15720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Form the final SPS and PPS data */ 15730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 15740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( lFound == 1 ) 15750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 15760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* No need to add PPS */ 15770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi instance->final_PPS_ID = Clip_PPSID[cnt]; 15780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 15790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi instance->m_pFinalDSI = 15802ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu (M4OSA_UInt8 *)M4OSA_32bitAlignedMalloc(instance->m_decoderSpecificInfoSize, 15810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS, (M4OSA_Char *)"instance->m_pFinalDSI"); 15820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 15830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( instance->m_pFinalDSI == M4OSA_NULL ) 15840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 15850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_0("instance->m_pFinalDSI: allocation error"); 15860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_ALLOC; 15870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 15880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 15890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi instance->m_pFinalDSISize = instance->m_decoderSpecificInfoSize; 15909d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu memcpy((void *)instance->m_pFinalDSI, 15919d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu (void *)instance->m_pDecoderSpecificInfo, 15920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi instance->m_decoderSpecificInfoSize); 15930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 15940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 15950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 15960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* ADD PPS */ 15970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* find the free PPS ID */ 15980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 15990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi cnt = 0; 16000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 16010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi while( Clip_UsedPPSID[cnt] ) 16020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 16030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi cnt++; 16040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 16050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi instance->final_PPS_ID = cnt; 16060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 16070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi size = instance->m_decoderSpecificInfoSize + instance->m_encoderPPSSize 16080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi + 10; 16090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 16102ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu instance->m_pFinalDSI = (M4OSA_UInt8 *)M4OSA_32bitAlignedMalloc(size, M4MCS, 16110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_Char *)"instance->m_pFinalDSI"); 16120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 16130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( instance->m_pFinalDSI == M4OSA_NULL ) 16140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 16150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_0("instance->m_pFinalDSI: allocation error"); 16160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_ALLOC; 16170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 16180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 16199d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu memcpy((void *)instance->m_pFinalDSI, 16209d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu (void *)instance->m_pDecoderSpecificInfo, 16210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi instance->m_decoderSpecificInfoSize); 16220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 16230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi temp = instance->m_pFinalDSI[lClipDSI_PPS_offset]; 16240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi temp = temp + 1; 16250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi instance->m_pFinalDSI[lClipDSI_PPS_offset] = temp; 16260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 16270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi //temp = instance->m_pEncoderPPS[0]; 16280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi lSize1 = instance->m_encoderPPSSize - 1; 16290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs1->Buffer = (M4OSA_UInt8 *)(instance->m_pEncoderPPS + 1); 16300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi DecBitStreamReset_MCS(p_bs1, lSize1); 16310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 16320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi lEncoder_PPSID = H264MCS_DecVLCReadExpGolombCode(p_bs1); 16330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi lEncoder_SPSID = H264MCS_DecVLCReadExpGolombCode(p_bs1); 16340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 16350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi lEncoderPPSRemBits = ( lSize1) << 3; 16360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi lEncoderPPSRemBits -= p_bs1->bitPos; 16370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 16380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi temp = instance->m_pEncoderPPS[lSize1]; 16390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 16400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi cnt1 = 0; 16410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 16420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi while( ( temp & 0x1) == 0 ) 16430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 16440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi cnt1++; 16450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi temp = temp >> 1; 16460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 16470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi cnt1++; 16480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi lEncoderPPSRemBits -= cnt1; 16490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 16500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi instance->m_pFinalDSI[instance->m_decoderSpecificInfoSize + 2] = 16510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi instance->m_pEncoderPPS[0]; 16520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 16530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi NSWAVCMCS_initBitstream(&instance->encbs); 16540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi instance->encbs.streamBuffer = 16550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi &(instance->m_pFinalDSI[instance->m_decoderSpecificInfoSize + 3]); 16560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi lPPS_Buffer = instance->encbs.streamBuffer; 16570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 16580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi NSWAVCMCS_uExpVLC(&instance->encbs, instance->final_PPS_ID); 16590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi NSWAVCMCS_uExpVLC(&instance->encbs, instance->final_SPS_ID); 16600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 16610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi while( lEncoderPPSRemBits > 8 ) 16620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 16630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi temp = H264MCS_getBits(p_bs1, 8); 16640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi NSWAVCMCS_putBits(&instance->encbs, temp, 8); 16650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi lEncoderPPSRemBits = lEncoderPPSRemBits - 8; 16660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 16670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 16680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( lEncoderPPSRemBits ) 16690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 16700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi temp = H264MCS_getBits(p_bs1, lEncoderPPSRemBits); 16710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi NSWAVCMCS_putBits(&instance->encbs, temp, lEncoderPPSRemBits); 16720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 16730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi NSWAVCMCS_putRbspTbits(&instance->encbs); 16740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 16750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi temp = instance->encbs.byteCnt; 16760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi lPPS_Buffer_Size = temp; 16770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi temp = temp + 1; 16780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 16790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi instance->m_pFinalDSI[instance->m_decoderSpecificInfoSize] = 16800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ( temp >> 8) & 0xFF; 16810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi instance->m_pFinalDSI[instance->m_decoderSpecificInfoSize + 1] = 16820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (temp) &0xFF; 16830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi instance->m_pFinalDSISize = 16840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi instance->m_decoderSpecificInfoSize + 2 + temp; 16850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 16860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 16870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Decode the clip SPS */ 16880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 16890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi lClipDSI = instance->m_pDecoderSpecificInfo + 6; 16900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 16910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi lClipDSI_PPS_offset = 6; 16920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 16930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi for ( cnt = 0; cnt < instance->m_encoder_SPS_Cnt; cnt++ ) 16940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 16950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi lSize = ( lClipDSI[0] << 8) + lClipDSI[1]; 16960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi lClipDSI = lClipDSI + 2; 16970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 16980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( Clip_SPSID[cnt] == instance->final_SPS_ID ) 16990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 17000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->Buffer = (M4OSA_UInt8 *)(lClipDSI + 1); 17010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi DecBitStreamReset_MCS(p_bs, lSize - 1); 17020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 170339beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury err = DecSPSMCS(p_bs, &instance->clip_sps); 170439beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury if(err != M4NO_ERROR) { 170539beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury return M4ERR_PARAMETER; 170639beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury } 17070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 17080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi //Clip_SPSID[cnt] = H264MCS_DecVLCReadExpGolombCode(p_bs); 17090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi //Clip_UsedSPSID[Clip_SPSID[cnt]] = 1; 17100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 17110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 17120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 17130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi lClipDSI = lClipDSI + lSize; 17140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 17150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 17160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Decode encoder SPS */ 17170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->Buffer = (M4OSA_UInt8 *)(instance->m_pEncoderSPS + 1); 17180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi DecBitStreamReset_MCS(p_bs, instance->m_encoderSPSSize - 1); 171939beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury err = DecSPSMCS(p_bs, &instance->encoder_sps); 172039beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury if(err != M4NO_ERROR) { 172139beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury return M4ERR_PARAMETER; 172239beac348e635661c9b246aad693ab94e4c7cafdRajneesh Chowdury } 17230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 17240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( instance->encoder_sps.num_ref_frames 17250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi > instance->clip_sps.num_ref_frames ) 17260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 17270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return 100; //not supported 17280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 17290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 17300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->Buffer = (M4OSA_UInt8 *)lPPS_Buffer; 17310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi DecBitStreamReset_MCS(p_bs, lPPS_Buffer_Size); 17320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi DecPPSMCS(p_bs, &instance->encoder_pps); 17330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 17340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi instance->frame_count = 0; 17350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi instance->frame_mod_count = 17360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 1 << (instance->clip_sps.log2_max_frame_num_minus4 + 4); 17370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 17380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi instance->POC_lsb = 0; 17390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi instance->POC_lsb_mod = 17400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 1 << (instance->clip_sps.log2_max_pic_order_cnt_lsb_minus4 + 4); 17410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 17420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4NO_ERROR; 17430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 17440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 17450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR H264MCS_ProcessNALU( NSWAVC_MCS_t *ainstance, M4OSA_UInt8 *inbuff, 17460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int32 inbuf_size, M4OSA_UInt8 *outbuff, 17470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int32 *outbuf_size ) 17480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 17490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ComBitStreamMCS_t *p_bs, bs; 17500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi NSWAVC_MCS_t *instance; 17510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt8 nalu_info; 17520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int32 forbidden_bit, nal_ref_idc, nal_unit_type; 17530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int32 first_mb_in_slice, slice_type, pic_parameter_set_id, frame_num; 17540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int32 seq_parameter_set_id; 17550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt8 temp1, temp2, temp3, temp4; 17560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int32 temp_frame_num; 17570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int32 bitstoDiacard, bytes; 17580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 mask_bits = 0xFFFFFFFF; 17590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int32 new_bytes, init_bit_pos; 17600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 nal_size; 17610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 cnt; 17620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 outbuffpos = 0; 17630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi //#ifndef DGR_FIX // + new 17640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 nal_size_low16, nal_size_high16; 17650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi //#endif // + end new 17660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 frame_size = 0; 17670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 temp = 0; 17680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 17690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt8 *buff; 17700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 17710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs = &bs; 17720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi instance = (NSWAVC_MCS_t *)ainstance; 17730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL == instance), M4ERR_PARAMETER, 17740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "H264MCS_ProcessNALU: instance is M4OSA_NULL"); 17750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 17760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( instance->is_done ) 17770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 17780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 17790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi inbuff[0] = 0x00; 17800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi inbuff[1] = 0x00; 17810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi inbuff[2] = 0x00; 17820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi inbuff[3] = 0x01; 17830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 17840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 17850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi while( (M4OSA_Int32)frame_size < inbuf_size ) 17860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 17870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi mask_bits = 0xFFFFFFFF; 17880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->Buffer = (M4OSA_UInt8 *)(inbuff + frame_size); 17890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 17900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 17910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi nalu_info = (unsigned char)p_bs->Buffer[4]; 17920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 17930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi outbuff[outbuffpos] = p_bs->Buffer[0]; 17940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi outbuff[outbuffpos + 1] = p_bs->Buffer[1]; 17950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi outbuff[outbuffpos + 2] = p_bs->Buffer[2]; 17960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi outbuff[outbuffpos + 3] = p_bs->Buffer[3]; 17970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi outbuff[outbuffpos + 4] = p_bs->Buffer[4]; 17980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 17990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->Buffer = p_bs->Buffer + 5; 18000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 18010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->bitPos = 0; 18020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->lastTotalBits = 0; 18030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->numBitsInBuffer = ( inbuf_size - frame_size - 5) << 3; 18040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->readableBytesInBuffer = inbuf_size - frame_size - 5; 18050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 18060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->ui32TempBuff = 0; 18070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->i8BitCnt = 0; 18080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->pui8BfrPtr = (M4OSA_Int8 *)p_bs->Buffer; 18090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->ui32LastTwoBytes = 0xFFFFFFFF; 18100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 18110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi H264MCS_getBits(p_bs, 0); 18120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 18130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 18140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 18150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi nal_size = inbuf_size - frame_size - 4; 18160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi buff = inbuff + frame_size + 4; 18170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 18180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi while( nal_size > 4 ) 18190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 18200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( buff[0] == 0x00) && (buff[1] == 0x00) && (buff[2] == 0x00) 18210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (buff[3] == 0x01) ) 18220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 18230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 18240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 18250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi buff = buff + 1; 18260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi nal_size = nal_size - 1; 18270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 18280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 18290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( nal_size <= 4 ) 18300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 18310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi nal_size = 0; 18320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 18330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi nal_size = ( inbuf_size - frame_size - 4) - nal_size; 18340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 18350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi // M4OSA_TRACE1_3("H264MCS_ProcessNALU frame input buff size = %d current position 18360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi //= %d nal size = %d", 18370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi // inbuf_size, frame_size, nal_size + 4); 18380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi frame_size += nal_size + 4; 18390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 18400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 18410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 18420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi forbidden_bit = ( nalu_info >> 7) & 1; 18430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi nal_ref_idc = ( nalu_info >> 5) & 3; 18440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi nal_unit_type = (nalu_info) &0x1f; 18450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 18460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( nal_unit_type == 5 ) 18470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 18480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*IDR/PPS Packet - Do nothing*/ 18490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi instance->is_done = 1; 18500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 18510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 18520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 18530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi NSWAVCMCS_initBitstream(&instance->encbs); 18540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi instance->encbs.streamBuffer = outbuff + outbuffpos + 5; 18550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 18560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( nal_unit_type == 8 ) 18570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 18580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_0("H264MCS_ProcessNALU() Error: PPS"); 18590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 18600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 18610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 18620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( nal_unit_type == 7 ) 18630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 18640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*SPS Packet */ 18650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_0("H264MCS_ProcessNALU() Error: SPS"); 18660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return 0; 18670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 18680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 18690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( (nal_unit_type == 5) ) 18700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 18710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi instance->frame_count = 0; 18720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi instance->POC_lsb = 0; 18730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 18740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 18750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( (nal_unit_type == 1) ) 18760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 18770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi first_mb_in_slice = H264MCS_DecVLCReadExpGolombCode(p_bs); 18780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi NSWAVCMCS_uExpVLC(&instance->encbs, first_mb_in_slice); 18790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 18800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi slice_type = H264MCS_DecVLCReadExpGolombCode(p_bs); 18810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi NSWAVCMCS_uExpVLC(&instance->encbs, slice_type); 18820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 18830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pic_parameter_set_id = H264MCS_DecVLCReadExpGolombCode(p_bs); 18840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi NSWAVCMCS_uExpVLC(&instance->encbs, pic_parameter_set_id); 18850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 18860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi temp = H264MCS_getBits(p_bs, 18870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi instance->clip_sps.log2_max_frame_num_minus4 + 4); 18880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi NSWAVCMCS_putBits(&instance->encbs, instance->frame_count, 18890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi instance->clip_sps.log2_max_frame_num_minus4 + 4); 18900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 18910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi // In Baseline Profile: frame_mbs_only_flag should be ON 18920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 18930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( nal_unit_type == 5 ) 18940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 18950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi temp = H264MCS_DecVLCReadExpGolombCode(p_bs); 18960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi NSWAVCMCS_uExpVLC(&instance->encbs, temp); 18970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 18980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 18990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( instance->clip_sps.pic_order_cnt_type == 0 ) 19000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 19010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi temp = H264MCS_getBits(p_bs, 19020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi instance->clip_sps.log2_max_pic_order_cnt_lsb_minus4 19030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi + 4); 19040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi NSWAVCMCS_putBits(&instance->encbs, instance->POC_lsb, 19050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi instance->clip_sps.log2_max_pic_order_cnt_lsb_minus4 + 4); 19060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 19070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 19080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( instance->clip_sps.pic_order_cnt_type == 1) 19090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (instance->clip_sps.delta_pic_order_always_zero_flag) ) 19100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 19110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi temp = H264MCS_DecVLCReadSignedExpGolombCode(p_bs); 19120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi NSWAVCMCS_sExpVLC(&instance->encbs, temp); 19130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 19140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 19150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi cnt = p_bs->bitPos & 0x7; 19160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 19170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( cnt ) 19180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 19190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi cnt = 8 - cnt; 19200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi temp = H264MCS_getBits(p_bs, cnt); 19210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi NSWAVCMCS_putBits(&instance->encbs, temp, cnt); 19220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 19230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 19240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi cnt = p_bs->bitPos >> 3; 19250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 19260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi while( cnt < (nal_size - 2) ) 19270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 19280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi temp = H264MCS_getBits(p_bs, 8); 19290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi NSWAVCMCS_putBits(&instance->encbs, temp, 8); 19300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi cnt = p_bs->bitPos >> 3; 19310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 19320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 19330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi temp = H264MCS_getBits(p_bs, 8); 19340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 19350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( temp != 0 ) 19360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 19370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi cnt = 0; 19380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 19390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi while( ( temp & 0x1) == 0 ) 19400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 19410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi cnt++; 19420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi temp = temp >> 1; 19430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 19440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi cnt++; 19450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi temp = temp >> 1; 19460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 19470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( 8 - cnt ) 19480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 19490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi NSWAVCMCS_putBits(&instance->encbs, temp, (8 - cnt)); 19500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 19510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 19520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi NSWAVCMCS_putRbspTbits(&instance->encbs); 19530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 19540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 19550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 19560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( instance->encbs.bitPos % 8 ) 19570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 19580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi NSWAVCMCS_putBits(&instance->encbs, 0, 19590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (8 - instance->encbs.bitPos % 8)); 19600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 19610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 19620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 19630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi temp = instance->encbs.byteCnt; 19640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi temp = temp + 1; 19650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 19660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi outbuff[outbuffpos] = (M4OSA_UInt8)(( temp >> 24) & 0xFF); 19670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi outbuff[outbuffpos + 1] = (M4OSA_UInt8)(( temp >> 16) & 0xFF); 19680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi outbuff[outbuffpos + 2] = (M4OSA_UInt8)(( temp >> 8) & 0xFF); 19690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi outbuff[outbuffpos + 3] = (M4OSA_UInt8)((temp) &0xFF); 19700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi outbuffpos = outbuffpos + temp + 4; 19710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 19720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 19730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 19740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi p_bs->Buffer = p_bs->Buffer - 5; 19759d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu memcpy((void *) &outbuff[outbuffpos], 19769d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu (void *)p_bs->Buffer, nal_size + 4); 19770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 19780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi outbuff[outbuffpos] = (M4OSA_UInt8)((nal_size >> 24)& 0xFF); 19790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi outbuff[outbuffpos + 1] = (M4OSA_UInt8)((nal_size >> 16)& 0xFF);; 19800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi outbuff[outbuffpos + 2] = (M4OSA_UInt8)((nal_size >> 8)& 0xFF);; 19810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi outbuff[outbuffpos + 3] = (M4OSA_UInt8)((nal_size)& 0xFF);; 19820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 19830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi outbuffpos = outbuffpos + nal_size + 4; 19840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 19850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 19860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 19870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *outbuf_size = outbuffpos; 19880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 19890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi instance->POC_lsb = instance->POC_lsb + 1; 19900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 19910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( instance->POC_lsb == instance->POC_lsb_mod ) 19920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 19930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi instance->POC_lsb = 0; 19940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 19950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi instance->frame_count = instance->frame_count + 1; 19960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 19970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( instance->frame_count == instance->frame_mod_count ) 19980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 19990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi instance->frame_count = 0; 20000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 20010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4NO_ERROR; 20020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 20030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 20040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR M4MCS_convetFromByteStreamtoNALStream( M4OSA_UInt8 *inbuff, 20050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 inbuf_size ) 20060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 20070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 20080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 framesize = 0; 20090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 nal_size =0; 20100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt8 *buff; 20110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 20120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 20130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi while(framesize < inbuf_size) 20140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 20150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi nal_size = inbuf_size - framesize - 4; 20160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi buff = inbuff + framesize + 4; 20170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 20180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi while(nal_size > 4){ 20190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if((buff[0] == 0x00) && 20200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (buff[1] == 0x00) && 20210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (buff[2] == 0x00) && 20220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (buff[3] == 0x01)){ 20230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 20240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 20250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi buff = buff + 1; 20260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi nal_size = nal_size -1; 20270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 20280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 20290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if(nal_size <= 4){ 20300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi nal_size = 0; 20310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 20320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi nal_size = (inbuf_size - framesize - 4) - nal_size; 20330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 20340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi inbuff[framesize + 0] = (M4OSA_UInt8)((nal_size >> 24)& 0xFF); 20350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi inbuff[framesize + 1] = (M4OSA_UInt8)((nal_size >> 16)& 0xFF); 20360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi inbuff[framesize + 2] = (M4OSA_UInt8)((nal_size >> 8)& 0xFF); 20370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi inbuff[framesize + 3] = (M4OSA_UInt8)((nal_size )& 0xFF); 20380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi framesize += nal_size + 4; 20390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 20400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_2("M4MCS_convetFromByteStreamtoNALStream framesize = %x nalsize = %x", 20410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi framesize, nal_size) 20420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 20430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 20440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 20450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 20460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 20470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 20480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR H264MCS_Freeinstance( NSWAVC_MCS_t *instance ) 20490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 20500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 20510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL == instance), M4ERR_PARAMETER, 20520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "H264MCS_Freeinstance: instance is M4OSA_NULL"); 20530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 20540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4OSA_NULL != instance->encoder_pps.slice_group_id ) 20550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 20562ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu free(instance->encoder_pps.slice_group_id); 20570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 20580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 20590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4OSA_NULL != instance->p_encoder_sps ) 20600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 20612ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu free(instance->p_encoder_sps); 20620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi instance->p_encoder_sps = M4OSA_NULL; 20630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 20640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 20650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4OSA_NULL != instance->p_encoder_pps ) 20660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 20672ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu free(instance->p_encoder_pps); 20680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi instance->p_encoder_pps = M4OSA_NULL; 20690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 20700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 20710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4OSA_NULL != instance->m_pFinalDSI ) 20720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 20732ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu free(instance->m_pFinalDSI); 20740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi instance->m_pFinalDSI = M4OSA_NULL; 20750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 20760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 20770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4OSA_NULL != instance ) 20780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 20792ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu free(instance); 20800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi instance = M4OSA_NULL; 20810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 20820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 20830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 20840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 20850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 20860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 20870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_ERR M4MCS_getVersion(M4_VersionInfo* pVersionInfo); 20880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief Get the MCS version. 20890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @note Can be called anytime. Do not need any context. 20900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param pVersionInfo (OUT) Pointer to a version info structure 20910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4NO_ERROR: No error 20920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4ERR_PARAMETER: pVersionInfo is M4OSA_NULL (If Debug Level >= 2) 20930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 20940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */ 20950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR M4MCS_getVersion( M4_VersionInfo *pVersionInfo ) 20960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 20970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_1("M4MCS_getVersion called with pVersionInfo=0x%x", 20980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pVersionInfo); 20990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 21000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 21010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Check input parameters */ 21020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL == pVersionInfo), M4ERR_PARAMETER, 21030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_getVersion: pVersionInfo is M4OSA_NULL"); 21040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 21050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pVersionInfo->m_major = M4MCS_VERSION_MAJOR; 21060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pVersionInfo->m_minor = M4MCS_VERSION_MINOR; 21070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pVersionInfo->m_revision = M4MCS_VERSION_REVISION; 21080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 21090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 21100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Return with no error */ 21110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_0("M4MCS_getVersion(): returning M4NO_ERROR"); 21120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4NO_ERROR; 21130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 21140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 21150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 21160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 21170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief Initializes the MCS (allocates an execution context). 21180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @note 21190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param pContext (OUT) Pointer on the MCS context to allocate 21200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param pFileReadPtrFct (IN) Pointer to OSAL file reader functions 21210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param pFileWritePtrFct (IN) Pointer to OSAL file writer functions 21220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4NO_ERROR: No error 21230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4ERR_PARAMETER: At least one parameter is M4OSA_NULL (If Debug Level >= 2) 21240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4ERR_ALLOC: There is no more available memory 21250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 21260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */ 21270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 21280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR M4MCS_init( M4MCS_Context *pContext, 21290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_FileReadPointer *pFileReadPtrFct, 21300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_FileWriterPointer *pFileWritePtrFct ) 21310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 21320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_InternalContext *pC = M4OSA_NULL; 21330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_ERR err; 21340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 21350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_3( 21360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_init called with pContext=0x%x, pFileReadPtrFct=0x%x, pFileWritePtrFct=0x%x", 21370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pContext, pFileReadPtrFct, pFileWritePtrFct); 21380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 21390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 21400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Check input parameters */ 21410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL == pContext), M4ERR_PARAMETER, 21420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_init: pContext is M4OSA_NULL"); 21430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL == pFileReadPtrFct), M4ERR_PARAMETER, 21440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_init: pFileReadPtrFct is M4OSA_NULL"); 21450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL == pFileWritePtrFct), M4ERR_PARAMETER, 21460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_init: pFileWritePtrFct is M4OSA_NULL"); 21470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 21480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 21490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Allocate the MCS context and return it to the user */ 21502ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu pC = (M4MCS_InternalContext *)M4OSA_32bitAlignedMalloc(sizeof(M4MCS_InternalContext), 21510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS, (M4OSA_Char *)"M4MCS_InternalContext"); 21520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *pContext = pC; 21530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 21540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4OSA_NULL == pC ) 21550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 21560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_0( 21570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_init(): unable to allocate M4MCS_InternalContext, returning M4ERR_ALLOC"); 21580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_ALLOC; 21590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 21600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 21610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 21620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Init the context. All pointers must be initialized to M4OSA_NULL 21630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * because CleanUp() can be called just after Init(). */ 21640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->State = M4MCS_kState_CREATED; 21650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pOsaFileReadPtr = pFileReadPtrFct; 21660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pOsaFileWritPtr = pFileWritePtrFct; 21670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->VideoState = M4MCS_kStreamState_NOSTREAM; 21680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioState = M4MCS_kStreamState_NOSTREAM; 21690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->noaudio = M4OSA_FALSE; 21700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->novideo = M4OSA_FALSE; 21710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->uiProgress = 0; 21720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 21730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 21740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Reader stuff */ 21750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pInputFile = M4OSA_NULL; 21760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileType = M4VIDEOEDITING_kFileType_Unsupported; 21770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->bFileOpenedInFastMode = M4OSA_FALSE; 21780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pReaderContext = M4OSA_NULL; 21790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pReaderVideoStream = M4OSA_NULL; 21800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pReaderAudioStream = M4OSA_NULL; 21810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->bUnsupportedVideoFound = M4OSA_FALSE; 21820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->bUnsupportedAudioFound = M4OSA_FALSE; 21830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->iAudioCtsOffset = 0; 21840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* First temporary video AU to have more precise end video cut*/ 21850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->ReaderVideoAU1.m_structSize = 0; 21860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Second temporary video AU to have more precise end video cut*/ 21870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->ReaderVideoAU2.m_structSize = 0; 21880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->ReaderAudioAU1.m_structSize = 0; 21890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->ReaderAudioAU2.m_structSize = 0; 21900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->m_audioAUDuration = 0; 21910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->m_pDataAddress1 = M4OSA_NULL; 21920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->m_pDataAddress2 = M4OSA_NULL; 21930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* First temporary video AU data to have more precise end video cut*/ 21940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->m_pDataVideoAddress1 = M4OSA_NULL; 21950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Second temporary video AU data to have more precise end video cut*/ 21960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->m_pDataVideoAddress2 = M4OSA_NULL; 21970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 21980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 21990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Video decoder stuff */ 22000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pViDecCtxt = M4OSA_NULL; 22010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->dViDecStartingCts = 0.0; 22020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->iVideoBeginDecIncr = 0; 22030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->dViDecCurrentCts = 0.0; 22040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->dCtsIncrement = 0.0; 22050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->isRenderDup = M4OSA_FALSE; 22060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 22070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 22080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Video encoder stuff */ 22090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pViEncCtxt = M4OSA_NULL; 22100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pPreResizeFrame = M4OSA_NULL; 22110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->uiEncVideoBitrate = 0; 22120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->encoderState = M4MCS_kNoEncoder; 22130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 22140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 22150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Audio decoder stuff */ 22160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pAudioDecCtxt = M4OSA_NULL; 22170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioDecBufferIn.m_dataAddress = M4OSA_NULL; 22180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioDecBufferIn.m_bufferSize = 0; 22190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioDecBufferOut.m_dataAddress = M4OSA_NULL; 22200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioDecBufferOut.m_bufferSize = 0; 22210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pPosInDecBufferOut = M4OSA_NULL; 22220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 22230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Ssrc stuff */ 22240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pSsrcBufferIn = M4OSA_NULL; 22250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pSsrcBufferOut = M4OSA_NULL; 22260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pPosInSsrcBufferIn = M4OSA_NULL; 22270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pPosInSsrcBufferOut = M4OSA_NULL; 22280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->iSsrcNbSamplIn = 0; 22290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->iSsrcNbSamplOut = 0; 22300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->SsrcScratch = M4OSA_NULL; 2231f269fd3fe76d1cfc9e736ea7c49e785c6c6b6ae7Dharmaray Kundargi pC->pLVAudioResampler = M4OSA_NULL; 22320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 22330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Audio encoder */ 22340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pAudioEncCtxt = M4OSA_NULL; 22350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pAudioEncDSI.infoSize = 0; 22360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pAudioEncDSI.pInfo = M4OSA_NULL; 22370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pAudioEncoderBuffer = M4OSA_NULL; 22380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pPosInAudioEncoderBuffer = M4OSA_NULL; 22390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->audioEncoderGranularity = 0; 22400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 22410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 22420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Writer stuff */ 22430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pOutputFile = M4OSA_NULL; 22440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pTemporaryFile = M4OSA_NULL; 22450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pWriterContext = M4OSA_NULL; 22460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->uiVideoAUCount = 0; 22470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->uiVideoMaxAuSize = 0; 22480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->uiVideoMaxChunckSize = 0; 22490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->uiAudioAUCount = 0; 22500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->uiAudioMaxAuSize = 0; 22510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 22520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->uiAudioCts = 0; 22530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->b_isRawWriter = M4OSA_FALSE; 22540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pOutputPCMfile = M4OSA_NULL; 22550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 22560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Encoding config */ 22570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->EncodingVideoFormat = M4ENCODER_kNULL; /**< No format set yet */ 22580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->EncodingWidth = 0; /**< No size set yet */ 22590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->EncodingHeight = 0; /**< No size set yet */ 22600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->EncodingVideoFramerate = 0; /**< No framerate set yet */ 22610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 22620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->uiBeginCutTime = 0; /**< No begin cut */ 22630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->uiEndCutTime = 0; /**< No end cut */ 22640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->uiMaxFileSize = 0; /**< No limit */ 22650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->uiAudioBitrate = 22660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4VIDEOEDITING_kUndefinedBitrate; /**< No bitrate set yet */ 22670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->uiVideoBitrate = 22680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4VIDEOEDITING_kUndefinedBitrate; /**< No bitrate set yet */ 22690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 22700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterVideoStream.streamType = M4SYS_kVideoUnknown; 22710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterVideoStreamInfo.Header.pBuf = M4OSA_NULL; 22720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterAudioStream.streamType = M4SYS_kAudioUnknown; 22730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 22740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->outputVideoTimescale = 0; 22750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 22760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*FB 2008/10/20: add media rendering parameter and AIR context to keep media aspect ratio*/ 22770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->MediaRendering = M4MCS_kResizing; 22780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->m_air_context = M4OSA_NULL; 22790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /**/ 22800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 22810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 22820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * FlB 2009.03.04: add audio Effects*/ 22830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pEffects = M4OSA_NULL; 22840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->nbEffects = 0; 22850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pActiveEffectNumber = -1; 22860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /**/ 22870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 22880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* 22890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Reset pointers for media and codecs interfaces */ 22900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MCS_clearInterfaceTables(pC); 22910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4ERR_CHECK_RETURN(err); 22920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 22930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* 22940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Call the media and codecs subscription module */ 22950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MCS_subscribeMediaAndCodec(pC); 22960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4ERR_CHECK_RETURN(err); 22970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 22980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#ifdef M4MCS_SUPPORT_STILL_PICTURE 22990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 23000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Initialize the Still picture part of MCS*/ 23010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 23020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MCS_stillPicInit(pC, pFileReadPtrFct, pFileWritePtrFct); 23030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4ERR_CHECK_RETURN(err); 23040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 23050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->m_bIsStillPicture = M4OSA_FALSE; 23060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 23070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#endif /*M4MCS_SUPPORT_STILL_PICTURE*/ 23080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 23090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->m_pInstance = M4OSA_NULL; 23100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->H264MCSTempBuffer = M4OSA_NULL; 23110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->H264MCSTempBufferSize = 0; 23120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->H264MCSTempBufferDataSize = 0; 23130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->bH264Trim = M4OSA_FALSE; 23140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 23150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Flag to get the last decoded frame cts */ 23160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->bLastDecodedFrameCTS = M4OSA_FALSE; 23170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 23180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->m_pInstance == M4OSA_NULL ) 23190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 23200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = H264MCS_Getinstance(&pC->m_pInstance); 23210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 23220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->bExtOMXAudDecoder = M4OSA_FALSE; 23230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 23240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 23250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Return with no error */ 23260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_0("M4MCS_init(): returning M4NO_ERROR"); 23270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4NO_ERROR; 23280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 23290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 23300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 23310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 23320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_ERR M4MCS_open(M4MCS_Context pContext, M4OSA_Void* pFileIn, 23330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_Void* pFileOut, M4OSA_Void* pTempFile); 23340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief Set the MCS input and output files. 23350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @note It opens the input file, but the output file is not created yet. 23360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param pContext (IN) MCS context 23370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param pFileIn (IN) Input file to transcode (The type of this parameter 23380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * (URL, pipe...) depends on the OSAL implementation). 23390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param mediaType (IN) Container type (.3gp,.amr,mp3 ...) of input file. 23400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param pFileOut (IN) Output file to create (The type of this parameter 23410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * (URL, pipe...) depends on the OSAL implementation). 23420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param pTempFile (IN) Temporary file for the constant memory writer to 23430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * store metadata ("moov.bin"). 23440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4NO_ERROR: No error 23450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4ERR_PARAMETER: At least one parameter is M4OSA_NULL (debug only) 23460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4ERR_STATE: MCS is not in an appropriate state for this function to be called 23470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4ERR_ALLOC: There is no more available memory 23480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4ERR_FILE_NOT_FOUND: The input file has not been found 23490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4MCS_ERR_INVALID_INPUT_FILE: The input file is not a valid file, or is corrupted 23500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4MCS_ERR_INPUT_FILE_CONTAINS_NO_SUPPORTED_STREAM: The input file contains no 23510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * supported audio or video stream 23520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 23530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */ 23540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR M4MCS_open( M4MCS_Context pContext, M4OSA_Void *pFileIn, 23550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4VIDEOEDITING_FileType InputFileType, M4OSA_Void *pFileOut, 23560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Void *pTempFile ) 23570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 23580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_InternalContext *pC = (M4MCS_InternalContext *)(pContext); 23590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_ERR err; 23600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 23610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4READER_MediaFamily mediaFamily; 23620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4_StreamHandler *pStreamHandler; 23630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 23640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE2_3( 23650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_open called with pContext=0x%x, pFileIn=0x%x, pFileOut=0x%x", 23660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pContext, pFileIn, pFileOut); 23670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 23680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 23690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Check input parameters */ 23700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL == pContext), M4ERR_PARAMETER, 23710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_open: pContext is M4OSA_NULL"); 23720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL == pFileIn), M4ERR_PARAMETER, 23730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_open: pFileIn is M4OSA_NULL"); 23740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 23750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( InputFileType == M4VIDEOEDITING_kFileType_JPG) 23760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi || (InputFileType == M4VIDEOEDITING_kFileType_PNG) 23770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi || (InputFileType == M4VIDEOEDITING_kFileType_GIF) 23780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi || (InputFileType == M4VIDEOEDITING_kFileType_BMP) ) 23790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 23800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#ifdef M4MCS_SUPPORT_STILL_PICTURE 23810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 23820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Indicate that we must use the still picture functions*/ 23830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 23840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->m_bIsStillPicture = M4OSA_TRUE; 23850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 23860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 23870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Call the still picture MCS functions*/ 23880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_stillPicOpen(pC, pFileIn, InputFileType, pFileOut); 23890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 23900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#else 23910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 23920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_0( 23930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_open: Still picture is not supported with this version of MCS"); 23940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_ERR_INPUT_FILE_CONTAINS_NO_SUPPORTED_STREAM; 23950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 23960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#endif /*M4MCS_SUPPORT_STILL_PICTURE*/ 23970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 23980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 23990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 24000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 24010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Check state automaton */ 24020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4MCS_kState_CREATED != pC->State ) 24030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 24040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1("M4MCS_open(): Wrong State (%d), returning M4ERR_STATE", 24050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->State); 24060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_STATE; 24070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 24080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 24090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Copy function input parameters into our context */ 24100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pInputFile = pFileIn; 24110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileType = InputFileType; 24120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pOutputFile = pFileOut; 24130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pTemporaryFile = pTempFile; 24140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->uiProgress = 0; 24150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 24160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /***********************************/ 24170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Open input file with the reader */ 24180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /***********************************/ 24190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 24200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MCS_setCurrentReader(pContext, pC->InputFileType); 24210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4ERR_CHECK_RETURN(err); 24220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 24230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 24240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Reset reader related variables */ 24250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->VideoState = M4MCS_kStreamState_NOSTREAM; 24260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioState = M4MCS_kStreamState_NOSTREAM; 24270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pReaderVideoStream = M4OSA_NULL; 24280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pReaderAudioStream = M4OSA_NULL; 24290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 24300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*******************************************************/ 24310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Initializes the reader shell and open the data file */ 24320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*******************************************************/ 24330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->m_pReader->m_pFctCreate(&pC->pReaderContext); 24340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 24350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR != err ) 24360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 24370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1("M4MCS_open(): m_pReader->m_pFctCreate returns 0x%x", 24380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 24390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 24400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 24410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 24420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 24430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Link the reader interface to the reader context */ 24440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->m_pReaderDataIt->m_readerContext = pC->pReaderContext; 24450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 24460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 24470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Set the reader shell file access functions */ 24480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->m_pReader->m_pFctSetOption(pC->pReaderContext, 24490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4READER_kOptionID_SetOsaFileReaderFctsPtr, 24500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_DataOption)pC->pOsaFileReadPtr); 24510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 24520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR != err ) 24530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 24540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1("M4MCS_open(): m_pReader->m_pFctSetOption returns 0x%x", 24550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 24560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 24570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 24580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 24590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#ifdef M4MCS_WITH_FAST_OPEN 24600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 24610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4OSA_FALSE == pC->bFileOpenedInFastMode ) 24620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 24630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Bool trueValue = M4OSA_TRUE; 24640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 24650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* For first call use fast open mode */ 24660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->m_pReader->m_pFctSetOption(pC->pReaderContext, 24670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4READER_3GP_kOptionID_FastOpenMode, &trueValue); 24680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 24690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR == err ) 24700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 24710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->bFileOpenedInFastMode = M4OSA_TRUE; 24720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 24730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 24740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 24750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 24760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_open(): M4READER_3GP_kOptionID_FastOpenMode returns 0x%x", 24770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 24780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 24790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( ( (M4OSA_UInt32)M4ERR_BAD_OPTION_ID) == err) 24800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi || (( (M4OSA_UInt32)M4ERR_PARAMETER) == err) ) 24810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 24820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Not fatal, some readers may not support fast open mode */ 24830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->bFileOpenedInFastMode = M4OSA_FALSE; 24840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 24850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 24860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 24870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 24880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 24890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 24900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 24910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Bool falseValue = M4OSA_FALSE; 24920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 24930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* For second call use normal open mode */ 24940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->m_pReader->m_pFctSetOption(pC->pReaderContext, 24950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4READER_3GP_kOptionID_FastOpenMode, &falseValue); 24960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 24970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 24980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#endif /* M4MCS_WITH_FAST_OPEN */ 24990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 25000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 25010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Open the input file */ 25020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 25030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->m_pReader->m_pFctOpen(pC->pReaderContext, pC->pInputFile); 25040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 25050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR != err ) 25060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 25070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 uiDummy, uiCoreId; 25080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1("M4MCS_open(): m_pReader->m_pFctOpen returns 0x%x", err); 25090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 25100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 25110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * If the error is from the core reader, we change it to a public VXS error */ 25120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_ERR_SPLIT(err, uiDummy, uiCoreId, uiDummy); 25130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 25140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4MP4_READER == uiCoreId ) 25150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 25160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_0( 25170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_open(): returning M4MCS_ERR_INVALID_INPUT_FILE"); 25180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_ERR_INVALID_INPUT_FILE; 25190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 25200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 25210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 25220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 25230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 25240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Get the streams from the input file */ 25250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi while( M4NO_ERROR == err ) 25260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 25270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = 25280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->m_pReader->m_pFctGetNextStream( pC->pReaderContext, 25290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi &mediaFamily, 25300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi &pStreamHandler); 25310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 25320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 25330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * In case we found a BIFS stream or something else...*/ 25340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( err == ((M4OSA_UInt32)M4ERR_READER_UNKNOWN_STREAM_TYPE)) 25350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi || (err == ((M4OSA_UInt32)M4WAR_TOO_MUCH_STREAMS)) ) 25360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 25370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4NO_ERROR; 25380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi continue; 25390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 25400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 25410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR == err ) /**< One stream found */ 25420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 25430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 25440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Found the first video stream */ 25450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( M4READER_kMediaFamilyVideo == mediaFamily) 25460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (M4OSA_NULL == pC->pReaderVideoStream) ) 25470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 25480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( M4DA_StreamTypeVideoH263 == pStreamHandler->m_streamType) 25490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi || (M4DA_StreamTypeVideoMpeg4 25500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi == pStreamHandler->m_streamType) 25510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi || (M4DA_StreamTypeVideoMpeg4Avc 25520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi == pStreamHandler->m_streamType) ) 25530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 25540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_0( 25550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_open(): Found a H263 or MPEG-4 video stream in input 3gpp clip"); 25560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 25570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 25580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Keep pointer to the video stream */ 25590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pReaderVideoStream = 25600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4_VideoStreamHandler *)pStreamHandler; 25610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->bUnsupportedVideoFound = M4OSA_FALSE; 25620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pStreamHandler->m_bStreamIsOK = M4OSA_TRUE; 25630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 25640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 25650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Init our video stream state variable */ 25660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->VideoState = M4MCS_kStreamState_STARTED; 25670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 25680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 25690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Reset the stream reader */ 25700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->m_pReader->m_pFctReset(pC->pReaderContext, 25710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4_StreamHandler *)pC->pReaderVideoStream); 25720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 25730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR != err ) 25740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 25750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 25760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_open():\ 25770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi m_pReader->m_pFctReset(video) returns 0x%x", 25780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 25790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 25800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 25810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 25820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 25830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Initializes an access Unit */ 25840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->m_pReader->m_pFctFillAuStruct(pC->pReaderContext, 25850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pStreamHandler, &pC->ReaderVideoAU); 25860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 25870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR != err ) 25880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 25890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 25900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_open():\ 25910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi m_pReader->m_pFctFillAuStruct(video) returns 0x%x", 25920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 25930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 25940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 25950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 25960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else /**< Not H263 or MPEG-4 (H264, etc.) */ 25970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 25980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1("M4MCS_open(): Found an unsupported video stream (0x%x) in\ 25990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi input 3gpp clip", 26000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pStreamHandler->m_streamType); 26010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 26020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->bUnsupportedVideoFound = M4OSA_TRUE; 26030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pStreamHandler->m_bStreamIsOK = M4OSA_FALSE; 26040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 26050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* +CRLV6775 -H.264 Trimming */ 26060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4DA_StreamTypeVideoMpeg4Avc 26070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi == pStreamHandler->m_streamType ) 26080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 26090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 26100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi // SPS and PPS are storead as per the 3gp file format 26110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->m_pInstance->m_pDecoderSpecificInfo = 26120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pStreamHandler->m_pH264DecoderSpecificInfo; 26130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->m_pInstance->m_decoderSpecificInfoSize = 26140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pStreamHandler->m_H264decoderSpecificInfoSize; 26150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 26160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* -CRLV6775 -H.264 Trimming */ 26170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 26180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 26190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Found the first audio stream */ 26200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else if( ( M4READER_kMediaFamilyAudio == mediaFamily) 26210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (M4OSA_NULL == pC->pReaderAudioStream) ) 26220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 26230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( M4DA_StreamTypeAudioAmrNarrowBand 26240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi == pStreamHandler->m_streamType) 26250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi || (M4DA_StreamTypeAudioAac == pStreamHandler->m_streamType) 26260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi || (M4DA_StreamTypeAudioMp3 26270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi == pStreamHandler->m_streamType) 26280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi || (M4DA_StreamTypeAudioEvrc 26290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi == pStreamHandler->m_streamType) ) 26300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 26310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_0( 26320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_open(): Found an AMR-NB, AAC or MP3 audio stream in input clip"); 26330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 26340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 26350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Keep pointer to the audio stream */ 26360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pReaderAudioStream = 26370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4_AudioStreamHandler *)pStreamHandler; 26380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pStreamHandler->m_bStreamIsOK = M4OSA_TRUE; 26390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->bUnsupportedAudioFound = M4OSA_FALSE; 26400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 26410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 26420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Init our audio stream state variable */ 26430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioState = M4MCS_kStreamState_STARTED; 26440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 26450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 26460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Reset the stream reader */ 26470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->m_pReader->m_pFctReset(pC->pReaderContext, 26480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4_StreamHandler *)pC->pReaderAudioStream); 26490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 26500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR != err ) 26510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 26520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 26530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_open():\ 26540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi m_pReader->m_pFctReset(audio) returns 0x%x", 26550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 26560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 26570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 26580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 26590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 26600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Initializes an access Unit */ 26610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->m_pReader->m_pFctFillAuStruct(pC->pReaderContext, 26620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pStreamHandler, &pC->ReaderAudioAU); 26630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 26640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR != err ) 26650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 26660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 26670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_open():\ 26680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi m_pReader->m_pFctFillAuStruct(audio) returns 0x%x", 26690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 26700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 26710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 26720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 26730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 26740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Output max AU size is equal to input max AU size (this value 26750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * will be changed if there is audio transcoding) */ 26760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->uiAudioMaxAuSize = pStreamHandler->m_maxAUSize; 26770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 26780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 26790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 26800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /**< Not AMR-NB, AAC, MP3 nor EVRC (AMR-WB, WAV...) */ 26810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1("M4MCS_open(): Found an unsupported audio stream (0x%x) in \ 26820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi input 3gpp clip", pStreamHandler->m_streamType); 26830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 26840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->bUnsupportedAudioFound = M4OSA_TRUE; 26850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pStreamHandler->m_bStreamIsOK = M4OSA_FALSE; 26860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 26870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 26880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 26890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } /**< end of while (M4NO_ERROR == err) */ 26900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 26910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 26920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Check we found at least one supported stream */ 26930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( M4OSA_NULL == pC->pReaderVideoStream) 26940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (M4OSA_NULL == pC->pReaderAudioStream) ) 26950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 26960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_0( 26970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_open(): returning M4MCS_ERR_INPUT_FILE_CONTAINS_NO_SUPPORTED_STREAM"); 26980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_ERR_INPUT_FILE_CONTAINS_NO_SUPPORTED_STREAM; 26990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 27000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 27010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->VideoState == M4MCS_kStreamState_STARTED ) 27020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 27030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MCS_setCurrentVideoDecoder(pContext, 27040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pReaderVideoStream->m_basicProperties.m_streamType); 27050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*FB 2009-02-09: the error is check and returned only if video codecs are compiled, 27060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else only audio is used, that is why the editing process can continue*/ 27070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#ifndef M4MCS_AUDIOONLY 27080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 27090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4ERR_CHECK_RETURN(err); 27100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 27110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#else 27120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 27130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( M4NO_ERROR != err) && (M4MCS_WAR_MEDIATYPE_NOT_SUPPORTED != err) ) 27140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 27150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4ERR_CHECK_RETURN(err); 27160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 27170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 27180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#endif /*M4MCS_AUDIOONLY*/ 27190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 27200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 27210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 27220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->AudioState == M4MCS_kStreamState_STARTED ) 27230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 27240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi //EVRC 27250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4DA_StreamTypeAudioEvrc 27260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi != pStreamHandler-> 27270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi m_streamType ) /* decoder not supported yet, but allow to do null encoding */ 27280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 27290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MCS_setCurrentAudioDecoder(pContext, 27300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pReaderAudioStream->m_basicProperties.m_streamType); 27310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4ERR_CHECK_RETURN(err); 27320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 27330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 27340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 27350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 27360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Get the audio and video stream properties */ 27370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MCS_intGetInputClipProperties(pC); 27380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 27390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR != err ) 27400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 27410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 27420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_open(): M4MCS_intGetInputClipProperties returns 0x%x", err); 27430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 27440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 27450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 27460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 27470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Set the begin cut decoding increment according to the input frame rate */ 27480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( 0. != pC->InputFileProperties.fAverageFrameRate ) /**< sanity check */ 27490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 27500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->iVideoBeginDecIncr = (M4OSA_Int32)(3000. 27510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi / pC->InputFileProperties. 27520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi fAverageFrameRate); /**< about 3 frames */ 27530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 27540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 27550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 27560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->iVideoBeginDecIncr = 27570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 200; /**< default value: 200 milliseconds (3 frames @ 15fps)*/ 27580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 27590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 27600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 27610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Update state automaton */ 27620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->State = M4MCS_kState_OPENED; 27630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 27640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 27650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Return with no error */ 27660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_0("M4MCS_open(): returning M4NO_ERROR"); 27670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4NO_ERROR; 27680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 27690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 27700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 27710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 27720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_ERR M4MCS_step(M4MCS_Context pContext, M4OSA_UInt8 *pProgress); 27730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief Perform one step of trancoding. 27740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @note 27750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param pContext (IN) MCS context 27760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param pProgress (OUT) Progress percentage (0 to 100) of the transcoding 27770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @note pProgress must be a valid address. 27780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4NO_ERROR: No error 27790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4ERR_PARAMETER: One of the parameters is M4OSA_NULL (debug only) 27800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4ERR_STATE: MCS is not in an appropriate state for this function to be called 27810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4MCS_WAR_TRANSCODING_DONE: Transcoding is over, user should now call M4MCS_close() 27820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4MCS_ERR_AUDIO_CONVERSION_FAILED: The audio conversion (AAC to AMR-NB or MP3) failed 27830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4MCS_ERR_INVALID_AAC_SAMPLING_FREQUENCY: The input file contains an AAC audio track 27840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * with an invalid sampling frequency (should never happen) 27850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 27860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */ 27870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR M4MCS_step( M4MCS_Context pContext, M4OSA_UInt8 *pProgress ) 27880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 27890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_InternalContext *pC = (M4MCS_InternalContext *)(pContext); 27900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 27910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_1("M4MCS_step called with pContext=0x%x", pContext); 27920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 27930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 27940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Check input parameters */ 27950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL == pContext), M4ERR_PARAMETER, 27960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_step: pContext is M4OSA_NULL"); 27970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL == pProgress), M4ERR_PARAMETER, 27980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_step: pProgress is M4OSA_NULL"); 27990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 28000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#ifdef M4MCS_SUPPORT_STILL_PICTURE 28010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 28020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->m_bIsStillPicture ) 28030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 28040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 28050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Call the still picture MCS functions*/ 28060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_stillPicStep(pC, pProgress); 28070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 28080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 28090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#endif /*M4MCS_SUPPORT_STILL_PICTURE*/ 28100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 28110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 28120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Check state automaton */ 28130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 28140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi switch( pC->State ) 28150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 28160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4MCS_kState_READY: 28170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *pProgress = 0; 28180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_intStepSet(pC); 28190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 28200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 28210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4MCS_kState_BEGINVIDEOJUMP: 28220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *pProgress = pC->uiProgress; 28230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_intStepBeginVideoJump(pC); 28240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 28250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 28260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4MCS_kState_BEGINVIDEODECODE: 28270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *pProgress = pC->uiProgress; 28280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_intStepBeginVideoDecode(pC); 28290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 28300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 28310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4MCS_kState_PROCESSING: 28320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 28330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 28340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MCS_intStepEncoding(pC, pProgress); 28350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Save progress info in case of pause */ 28360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->uiProgress = *pProgress; 28370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 28380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 28390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 28400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 28410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi default: /**< State error */ 28420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 28430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_step(): Wrong State (%d), returning M4ERR_STATE", 28440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->State); 28450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_STATE; 28460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 28470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 28480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 28490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 28500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 28510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_ERR M4MCS_pause(M4MCS_Context pContext); 28520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief Pause the transcoding i.e. release the (external hardware) video decoder. 28530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @note This function is not needed if no hardware accelerators are used. 28540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * In that case, pausing the MCS is simply achieved by temporarily suspending 28550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * the M4MCS_step function calls. 28560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param pContext (IN) MCS context 28570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4NO_ERROR: No error 28580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4ERR_PARAMETER: pContext is M4OSA_NULL (debug only) 28590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4ERR_STATE: MCS is not in an appropriate state for this function to be called 28600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 28610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */ 28620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR M4MCS_pause( M4MCS_Context pContext ) 28630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 28640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_InternalContext *pC = (M4MCS_InternalContext *)(pContext); 28650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_ERR err; 28660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 28670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE2_1("M4MCS_pause called with pContext=0x%x", pContext); 28680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 28690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 28700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Check input parameters */ 28710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL == pContext), M4ERR_PARAMETER, 28720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_pause: pContext is M4OSA_NULL"); 28730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 28740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#ifdef M4MCS_SUPPORT_STILL_PICTURE 28750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 28760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->m_bIsStillPicture ) 28770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 28780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 28790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Call the corresponding still picture MCS function*/ 28800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_stillPicPause(pC); 28810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 28820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 28830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#endif /*M4MCS_SUPPORT_STILL_PICTURE*/ 28840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 28850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 28860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Check state automaton */ 28870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 28880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi switch( pC->State ) 28890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 28900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4MCS_kState_BEGINVIDEOJUMP: /**< the video decoder has been created, 28910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi we must destroy it */ 28920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4MCS_kState_BEGINVIDEODECODE: /**< the video is being used, we must destroy it */ 28930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4MCS_kState_PROCESSING: /**< the video is being used, we must destroy it */ 28940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /**< OK, nothing to do here */ 28950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 28960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 28970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi default: /**< State error */ 28980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 28990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_pause(): Wrong State (%d), returning M4ERR_STATE", 29000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->State); 29010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_STATE; 29020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 29030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 29040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 29050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Set the CTS at which we will resume the decoding */ 29060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->dViDecCurrentCts > pC->dViDecStartingCts ) 29070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 29080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 29090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * We passed the starting CTS, so the resume target is the current CTS */ 29100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->dViDecStartingCts = pC->dViDecCurrentCts; 29110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 29120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else { 29130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 29140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * We haven't passed the starting CTS yet, so the resume target is still the starting CTS 29150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * --> nothing to do in the else block */ 29160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 29170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 29180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 29190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Free video decoder stuff */ 29200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4OSA_NULL != pC->pViDecCtxt ) 29210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 29220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->m_pVideoDecoder->m_pFctDestroy(pC->pViDecCtxt); 29230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pViDecCtxt = M4OSA_NULL; 29240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 29250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR != err ) 29260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 29270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 29280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_pause: m_pVideoDecoder->pFctDestroy returns 0x%x", err); 29290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 29300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 29310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 29320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 29330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 29340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * State transition */ 29350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->State = M4MCS_kState_PAUSED; 29360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 29370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_0("M4MCS_pause(): returning M4NO_ERROR"); 29380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4NO_ERROR; 29390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 29400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 29410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 29420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 29430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_ERR M4MCS_resume(M4MCS_Context pContext); 29440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief Resume the transcoding after a pause (see M4MCS_pause). 29450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @note This function is not needed if no hardware accelerators are used. 29460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * In that case, resuming the MCS is simply achieved by calling 29470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * the M4MCS_step function. 29480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param pContext (IN) MCS context 29490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4NO_ERROR: No error 29500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4ERR_PARAMETER: pContext is M4OSA_NULL (debug only) 29510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4ERR_STATE: MCS is not in an appropriate state for this function to be called 29520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 29530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */ 29540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR M4MCS_resume( M4MCS_Context pContext ) 29550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 29560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_InternalContext *pC = (M4MCS_InternalContext *)(pContext); 29570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_ERR err; 29580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 29590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE2_1("M4MCS_resume called with pContext=0x%x", pContext); 29600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 29610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 29620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Check input parameters */ 29630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL == pContext), M4ERR_PARAMETER, 29640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_resume: pContext is M4OSA_NULL"); 29650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 29660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#ifdef M4MCS_SUPPORT_STILL_PICTURE 29670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 29680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->m_bIsStillPicture ) 29690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 29700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 29710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Call the corresponding still picture MCS function*/ 29720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_stillPicResume(pC); 29730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 29740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 29750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#endif /*M4MCS_SUPPORT_STILL_PICTURE*/ 29760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 29770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 29780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Check state automaton */ 29790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 29800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi switch( pC->State ) 29810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 29820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4MCS_kState_PAUSED: /**< OK, nothing to do here */ 29830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 29840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 29850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi default: /**< State error */ 29860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 29870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_resume(): Wrong State (%d), returning M4ERR_STATE", 29880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->State); 29890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_STATE; 29900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 29910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 29920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 29930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 29940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Prepare the video decoder */ 29950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MCS_intPrepareVideoDecoder(pC); 29960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 29970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR != err ) 29980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 29990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 30000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_resume(): M4MCS_intPrepareVideoDecoder() returns 0x%x", err); 30010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 30020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 30030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 30040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 30050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * State transition */ 30060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( 0.0 == pC->dViDecStartingCts ) 30070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 30080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 30090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * We are still at the beginning of the decoded stream, no need to jump, we can proceed */ 30100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->State = M4MCS_kState_PROCESSING; 30110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 30120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 30130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 30140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 30150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Jumping */ 30160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->State = M4MCS_kState_BEGINVIDEOJUMP; 30170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 30180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 30190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_0("M4MCS_resume(): returning M4NO_ERROR"); 30200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4NO_ERROR; 30210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 30220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 30230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 30240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 30250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_ERR M4MCS_close(M4MCS_Context pContext); 30260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief Finish the MCS transcoding. 30270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @note The output 3GPP file is ready to be played after this call 30280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param pContext (IN) MCS context 30290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4NO_ERROR: No error 30300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4ERR_PARAMETER: pContext is M4OSA_NULL (If Debug Level >= 2) 30310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4ERR_STATE: MCS is not in an appropriate state for this function to be called 30320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 30330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */ 30340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR M4MCS_close( M4MCS_Context pContext ) 30350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 30360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_InternalContext *pC = (M4MCS_InternalContext *)(pContext); 30370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4ENCODER_Header *encHeader; 30380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4SYS_StreamIDmemAddr streamHeader; 30390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 30400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR, err2; 30410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 30420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE2_1("M4MCS_close called with pContext=0x%x", pContext); 30430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 30440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 30450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Check input parameters */ 30460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL == pContext), M4ERR_PARAMETER, 30470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_close: pContext is M4OSA_NULL"); 30480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 30490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#ifdef M4MCS_SUPPORT_STILL_PICTURE 30500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 30510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->m_bIsStillPicture ) 30520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 30530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 30540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Indicate that current file is no longer a still picture*/ 30550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->m_bIsStillPicture = M4OSA_FALSE; 30560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 30570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 30580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Call the corresponding still picture MCS function*/ 30590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_stillPicClose(pC); 30600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 30610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 30620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#endif /*M4MCS_SUPPORT_STILL_PICTURE*/ 30630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 30640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 30650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Check state automaton */ 30660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 30670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4MCS_kState_FINISHED != pC->State ) 30680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 30690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1("M4MCS_close(): Wrong State (%d), returning M4ERR_STATE", 30700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->State); 30710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_STATE; 30720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 30730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 30740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Close the encoder before the writer to be certain all the AUs have been written and we can 30750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi get the DSI. */ 30760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 30770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Has the encoder actually been started? Don't stop it if that's not the case. */ 30780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4MCS_kEncoderRunning == pC->encoderState ) 30790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 30800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->pVideoEncoderGlobalFcts->pFctStop != M4OSA_NULL ) 30810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 30820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->pVideoEncoderGlobalFcts->pFctStop(pC->pViEncCtxt); 30830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 30840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR != err ) 30850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 30860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 30870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_close: pVideoEncoderGlobalFcts->pFctStop returns 0x%x", 30880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 30890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Well... how the heck do you handle a failed cleanup? */ 30900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 30910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 30920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 30930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->encoderState = M4MCS_kEncoderStopped; 30940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 30950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 30960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Has the encoder actually been opened? Don't close it if that's not the case. */ 30970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4MCS_kEncoderStopped == pC->encoderState ) 30980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 30990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->pVideoEncoderGlobalFcts->pFctClose(pC->pViEncCtxt); 31000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 31010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR != err ) 31020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 31030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 31040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_close: pVideoEncoderGlobalFcts->pFctClose returns 0x%x", 31050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 31060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Well... how the heck do you handle a failed cleanup? */ 31070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 31080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 31090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->encoderState = M4MCS_kEncoderClosed; 31100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 31110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 31120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /**********************************/ 31130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /******** Close the writer ********/ 31140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /**********************************/ 31150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4OSA_NULL != pC->pWriterContext ) /* happens in state _SET */ 31160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 31170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* HW encoder: fetch the DSI from the shell video encoder, and feed it to the writer before 31180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi closing it. */ 31190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 31200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->novideo != M4OSA_TRUE ) 31210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 31220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( M4ENCODER_kMPEG4 == pC->EncodingVideoFormat) 31230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi || (M4ENCODER_kH264 == pC->EncodingVideoFormat) ) 31240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 31250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->pVideoEncoderGlobalFcts->pFctGetOption(pC->pViEncCtxt, 31260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4ENCODER_kOptionID_EncoderHeader, 31270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_DataOption) &encHeader); 31280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 31290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( M4NO_ERROR != err) || (M4OSA_NULL == encHeader->pBuf) ) 31300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 31310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 31320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_close: failed to get the encoder header (err 0x%x)", 31330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 31340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /**< no return here, we still have stuff to deallocate after close, even 31350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if it fails. */ 31360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 31370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 31380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 31390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* set this header in the writer */ 31400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi streamHeader.streamID = M4MCS_WRITER_VIDEO_STREAM_ID; 31410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi streamHeader.size = encHeader->Size; 31420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi streamHeader.addr = (M4OSA_MemAddr32)encHeader->pBuf; 31430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 31440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 31450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_0("calling set option"); 31460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->pWriterGlobalFcts->pFctSetOption(pC->pWriterContext, 31470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4WRITER_kDSI, &streamHeader); 31480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_0("set option done"); 31490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 31500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR != err ) 31510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 31520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 31530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_close: failed to set the DSI in the writer (err 0x%x)", 31540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 31550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 31560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 31570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 31580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( M4OSA_TRUE == pC->bH264Trim) 31590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (M4ENCODER_kNULL == pC->EncodingVideoFormat) ) 31600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 31610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if(pC->uiBeginCutTime == 0) 31620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 31630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1("Decoder specific info size = %d", 31640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->m_pInstance->m_decoderSpecificInfoSize); 31650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->m_pInstance->m_pFinalDSISize = 31660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->m_pInstance->m_decoderSpecificInfoSize; 31670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1("Decoder specific info pointer = %d", 31680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_MemAddr8)pC->m_pInstance->m_pDecoderSpecificInfo); 31690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 31700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->m_pInstance->m_pFinalDSI = 31712ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu (M4OSA_UInt8 *)M4OSA_32bitAlignedMalloc(pC->m_pInstance-> \ 31720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi m_decoderSpecificInfoSize, M4MCS, 31730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_Char *)"instance->m_pFinalDSI"); 31740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 31750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->m_pInstance->m_pFinalDSI == M4OSA_NULL ) 31760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 31770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_0("instance->m_pFinalDSI: allocation error"); 31780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_ALLOC; 31790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 31809d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu memcpy((void *)pC->m_pInstance->m_pFinalDSI, 31819d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu (void *)pC-> \ 31820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi m_pInstance->m_pDecoderSpecificInfo, 31830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->m_pInstance->m_decoderSpecificInfoSize); 31840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 31850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi streamHeader.streamID = M4MCS_WRITER_VIDEO_STREAM_ID; 31860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi streamHeader.size = pC->m_pInstance->m_pFinalDSISize; 31870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi streamHeader.addr = 31880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_MemAddr32)pC->m_pInstance->m_pFinalDSI; 31890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_0("calling set option"); 31900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->pWriterGlobalFcts->pFctSetOption(pC->pWriterContext, 31910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4WRITER_kDSI, &streamHeader); 31920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_0("set option done"); 31930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 31940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR != err ) 31950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 31960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 31970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_close: failed to set the DSI in the writer (err 0x%x)", 31980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 31990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 32000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 32010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 32020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Write and close the 3GP output file */ 32030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err2 = pC->pWriterGlobalFcts->pFctCloseWrite(pC->pWriterContext); 32040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pWriterContext = M4OSA_NULL; 32050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 32060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR != err2 ) 32070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 32080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 32090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_close: pWriterGlobalFcts->pFctCloseWrite returns 0x%x", 32100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err2); 32110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 32120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR == err ) 32130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = err2; 32140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /**< no return here, we still have stuff to deallocate after close, even if it fails.*/ 32150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 32160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 32170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 32180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Close output PCM file if needed */ 32190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->pOutputPCMfile != M4OSA_NULL ) 32200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 32210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pOsaFileWritPtr->closeWrite(pC->pOutputPCMfile); 32220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pOutputPCMfile = M4OSA_NULL; 32230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 32240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 32250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*FlB 2009.03.04: add audio effects, 32260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi free effects list*/ 32270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4OSA_NULL != pC->pEffects ) 32280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 32292ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu free(pC->pEffects); 32300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pEffects = M4OSA_NULL; 32310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 32320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->nbEffects = 0; 32330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pActiveEffectNumber = -1; 32340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 32350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 32360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * State transition */ 32370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->State = M4MCS_kState_CLOSED; 32380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 32390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4OSA_NULL != pC->H264MCSTempBuffer ) 32400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 32412ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu free(pC->H264MCSTempBuffer); 32420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 32430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 32440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_0("M4MCS_close(): returning M4NO_ERROR"); 32450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 32460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 32470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 32480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 32490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 32500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_ERR M4MCS_cleanUp(M4MCS_Context pContext); 32510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief Free all resources used by the MCS. 32520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @note The context is no more valid after this call 32530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param pContext (IN) MCS context 32540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4NO_ERROR: No error 32550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4ERR_PARAMETER: pContext is M4OSA_NULL (If Debug Level >= 2) 32560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4ERR_STATE: MCS is not in an appropriate state for this function to be called 32570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 32580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */ 32590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR M4MCS_cleanUp( M4MCS_Context pContext ) 32600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 32610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 32620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_InternalContext *pC = (M4MCS_InternalContext *)(pContext); 32630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 32640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_1("M4MCS_cleanUp called with pContext=0x%x", pContext); 32650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 32660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#ifdef MCS_DUMP_PCM_TO_FILE 32670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 32680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( file_au_reader ) 32690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 32700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi fclose(file_au_reader); 32710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi file_au_reader = NULL; 32720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 32730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 32740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( file_pcm_decoder ) 32750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 32760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi fclose(file_pcm_decoder); 32770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi file_pcm_decoder = NULL; 32780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 32790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 32800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( file_pcm_encoder ) 32810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 32820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi fclose(file_pcm_encoder); 32830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi file_pcm_encoder = NULL; 32840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 32850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 32860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#endif 32870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 32880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 32890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Check input parameter */ 32900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 32910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4OSA_NULL == pContext ) 32920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 32930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_0( 32940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_cleanUp: pContext is M4OSA_NULL, returning M4ERR_PARAMETER"); 32950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_PARAMETER; 32960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 32970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 32980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 32990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Check state automaton */ 33000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4MCS_kState_CLOSED != pC->State ) 33010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 33020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 33030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_cleanUp(): Wrong State (%d), returning M4ERR_STATE", 33040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->State); 33050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_STATE; 33060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 33070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 3308960a5fea67c6971056c686599748e458a17f89e9Basavapatna Dattaguru if( M4OSA_NULL != pC->m_pInstance ) 3309960a5fea67c6971056c686599748e458a17f89e9Basavapatna Dattaguru { 3310960a5fea67c6971056c686599748e458a17f89e9Basavapatna Dattaguru err = H264MCS_Freeinstance(pC->m_pInstance); 3311960a5fea67c6971056c686599748e458a17f89e9Basavapatna Dattaguru pC->m_pInstance = M4OSA_NULL; 3312960a5fea67c6971056c686599748e458a17f89e9Basavapatna Dattaguru } 3313960a5fea67c6971056c686599748e458a17f89e9Basavapatna Dattaguru 33140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* ----- Free video encoder stuff, if needed ----- */ 33150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 33160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( M4OSA_NULL != pC->pViEncCtxt) 33170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (M4OSA_NULL != pC->pVideoEncoderGlobalFcts) ) 33180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 33190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->pVideoEncoderGlobalFcts->pFctCleanup(pC->pViEncCtxt); 33200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pViEncCtxt = M4OSA_NULL; 33210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 33220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR != err ) 33230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 33240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 33250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_cleanUp: pVideoEncoderGlobalFcts->pFctCleanup returns 0x%x", 33260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 33270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /**< don't return, we still have stuff to free */ 33280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 33290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 33300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->encoderState = M4MCS_kNoEncoder; 33310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 33320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 33330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 33340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * In the H263 case, we allocated our own DSI buffer */ 33350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( M4ENCODER_kH263 == pC->EncodingVideoFormat) 33360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (M4OSA_NULL != pC->WriterVideoStreamInfo.Header.pBuf) ) 33370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 33382ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu free(pC->WriterVideoStreamInfo.Header.pBuf); 33390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterVideoStreamInfo.Header.pBuf = M4OSA_NULL; 33400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 33410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 33420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4OSA_NULL != pC->pPreResizeFrame ) 33430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 33440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4OSA_NULL != pC->pPreResizeFrame[0].pac_data ) 33450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 33462ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu free(pC->pPreResizeFrame[0].pac_data); 33470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pPreResizeFrame[0].pac_data = M4OSA_NULL; 33480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 33490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 33500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4OSA_NULL != pC->pPreResizeFrame[1].pac_data ) 33510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 33522ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu free(pC->pPreResizeFrame[1].pac_data); 33530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pPreResizeFrame[1].pac_data = M4OSA_NULL; 33540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 33550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 33560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4OSA_NULL != pC->pPreResizeFrame[2].pac_data ) 33570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 33582ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu free(pC->pPreResizeFrame[2].pac_data); 33590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pPreResizeFrame[2].pac_data = M4OSA_NULL; 33600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 33612ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu free(pC->pPreResizeFrame); 33620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pPreResizeFrame = M4OSA_NULL; 33630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 33640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 33650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* ----- Free the ssrc stuff ----- */ 33660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 33670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4OSA_NULL != pC->SsrcScratch ) 33680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 33692ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu free(pC->SsrcScratch); 33700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->SsrcScratch = M4OSA_NULL; 33710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 33720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 33730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4OSA_NULL != pC->pSsrcBufferIn ) 33740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 33752ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu free(pC->pSsrcBufferIn); 33760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pSsrcBufferIn = M4OSA_NULL; 33770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 33780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 33790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4OSA_NULL != pC->pSsrcBufferOut ) 33800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 33812ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu free(pC->pSsrcBufferOut); 33820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pSsrcBufferOut = M4OSA_NULL; 33830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 33840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 3385f269fd3fe76d1cfc9e736ea7c49e785c6c6b6ae7Dharmaray Kundargi if (pC->pLVAudioResampler != M4OSA_NULL) 3386f269fd3fe76d1cfc9e736ea7c49e785c6c6b6ae7Dharmaray Kundargi { 33871156ea5eaffa0ed46f377c836363fd6499f3b3f9Basavapatna Dattaguru LVDestroy(pC->pLVAudioResampler); 3388f269fd3fe76d1cfc9e736ea7c49e785c6c6b6ae7Dharmaray Kundargi pC->pLVAudioResampler = M4OSA_NULL; 3389f269fd3fe76d1cfc9e736ea7c49e785c6c6b6ae7Dharmaray Kundargi } 3390f269fd3fe76d1cfc9e736ea7c49e785c6c6b6ae7Dharmaray Kundargi 33910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* ----- Free the audio encoder stuff ----- */ 33920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 33930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4OSA_NULL != pC->pAudioEncCtxt ) 33940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 33950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->pAudioEncoderGlobalFcts->pFctClose(pC->pAudioEncCtxt); 33960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 33970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR != err ) 33980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 33990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 34000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_cleanUp: pAudioEncoderGlobalFcts->pFctClose returns 0x%x", 34010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 34020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /**< don't return, we still have stuff to free */ 34030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 34040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 34050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->pAudioEncoderGlobalFcts->pFctCleanUp(pC->pAudioEncCtxt); 34060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 34070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR != err ) 34080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 34090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 34100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_cleanUp: pAudioEncoderGlobalFcts->pFctCleanUp returns 0x%x", 34110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 34120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /**< don't return, we still have stuff to free */ 34130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 34140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 34150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pAudioEncCtxt = M4OSA_NULL; 34160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 34170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 34180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4OSA_NULL != pC->pAudioEncoderBuffer ) 34190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 34202ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu free(pC->pAudioEncoderBuffer); 34210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pAudioEncoderBuffer = M4OSA_NULL; 34220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 34230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 34240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* ----- Free all other stuff ----- */ 34250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 34260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 34270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Free the readers and the decoders */ 34280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_intCleanUp_ReadersDecoders(pC); 34290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 34300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#ifdef M4MCS_SUPPORT_STILL_PICTURE 34310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 34320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Free the still picture resources */ 34330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 34340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_stillPicCleanUp(pC); 34350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 34360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#endif /*M4MCS_SUPPORT_STILL_PICTURE*/ 34370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 34380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 34390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Free the shells interfaces */ 34400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 34410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_unRegisterAllWriters(pContext); 34420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_unRegisterAllEncoders(pContext); 34430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_unRegisterAllReaders(pContext); 34440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_unRegisterAllDecoders(pContext); 34450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 34460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 34470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Free the context itself */ 34482ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu free(pC); 34490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC = M4OSA_NULL; 34500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 34510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_0("M4MCS_cleanUp(): returning M4NO_ERROR"); 34520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4NO_ERROR; 34530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 34540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 34550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 34560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 34570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_ERR M4MCS_abort(M4MCS_Context pContext); 34580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief Finish the MCS transcoding and free all resources used by the MCS 34590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * whatever the state is. 34600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @note The context is no more valid after this call 34610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param pContext (IN) MCS context 34620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4NO_ERROR: No error 34630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4ERR_PARAMETER: pContext is M4OSA_NULL (debug only) 34640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 34650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */ 34660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR M4MCS_abort( M4MCS_Context pContext ) 34670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 34680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 34690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_ERR err1 = M4NO_ERROR; 34700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_InternalContext *pC = (M4MCS_InternalContext *)(pContext); 34710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 34720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4OSA_NULL == pContext ) 34730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 34740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4NO_ERROR; 34750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 34760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 34770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( pC->State == M4MCS_kState_CREATED) 34780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi || (pC->State == M4MCS_kState_CLOSED) ) 34790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 34800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->State = M4MCS_kState_CLOSED; 34810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 34820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MCS_cleanUp(pContext); 34830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 34840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( err != M4NO_ERROR ) 34850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 34860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1("M4MCS_abort : M4MCS_cleanUp fails err = 0x%x", err); 34870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 34880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 34890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 34900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 34910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#ifdef M4MCS_SUPPORT_STILL_PICTURE 34920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 34930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->m_bIsStillPicture ) 34940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 34950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 34960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Cancel the ongoing processes if any*/ 34970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MCS_stillPicCancel(pC); 34980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 34990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( err != M4NO_ERROR ) 35000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 35010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 35020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_abort : M4MCS_stillPicCancel fails err = 0x%x", err); 35030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 35040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*Still picture process is now stopped; Carry on with close and cleanup*/ 35050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 35060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 35070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#endif /*M4MCS_SUPPORT_STILL_PICTURE*/ 35080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 35090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->State = M4MCS_kState_FINISHED; 35100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 35110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MCS_close(pContext); 35120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 35130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( err != M4NO_ERROR ) 35140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 35150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1("M4MCS_abort : M4MCS_close fails err = 0x%x", err); 35160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err1 = err; 35170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 35180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 35190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MCS_cleanUp(pContext); 35200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 35210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( err != M4NO_ERROR ) 35220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 35230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1("M4MCS_abort : M4MCS_cleanUp fails err = 0x%x", err); 35240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 35250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 35260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = (err1 == M4NO_ERROR) ? err : err1; 35270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 35280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 35290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 35300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 35310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 35320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_ERR M4MCS_getInputFileProperties(M4MCS_Context pContext, 35330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4VIDEOEDITING_ClipProperties* pFileProperties); 35340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief Retrieves the properties of the audio and video streams from the input file. 35350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param pContext (IN) MCS context 35360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param pProperties (OUT) Pointer on an allocated M4VIDEOEDITING_ClipProperties 35370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistructure which is filled with the input stream properties. 35380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @note The structure pProperties must be allocated and further de-allocated 35390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargiby the application. The function must be called in the opened state. 35400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4NO_ERROR: No error 35410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4ERR_PARAMETER: At least one parameter is M4OSA_NULL 35420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4ERR_STATE: MCS is not in an appropriate state for this function to be called 35430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 35440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */ 35450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR M4MCS_getInputFileProperties( M4MCS_Context pContext, 35460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4VIDEOEDITING_ClipProperties *pFileProperties ) 35470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 35480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_InternalContext *pC = (M4MCS_InternalContext *)(pContext); 35490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 35500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE2_2("M4MCS_getInputFileProperties called with pContext=0x%x, \ 35510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pFileProperties=0x%x", pContext, pFileProperties); 35520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 35530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 35540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Check input parameters */ 35550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL == pContext), M4ERR_PARAMETER, 35560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_getInputFileProperties: pContext is M4OSA_NULL"); 35570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL == pFileProperties), M4ERR_PARAMETER, 35580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_getInputFileProperties: pProperties is M4OSA_NULL"); 35590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 35600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#ifdef M4MCS_SUPPORT_STILL_PICTURE 35610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 35620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->m_bIsStillPicture ) 35630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 35640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 35650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Call the corresponding still picture MCS function*/ 35660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_stillPicGetInputFileProperties(pC, pFileProperties); 35670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 35680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 35690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#endif /*M4MCS_SUPPORT_STILL_PICTURE*/ 35700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 35710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 35720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Check state automaton */ 35730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 35740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4MCS_kState_OPENED != pC->State ) 35750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 35760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 35770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_getInputFileProperties(): Wrong State (%d), returning M4ERR_STATE", 35780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->State); 35790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_STATE; 35800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 35810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 35820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 35830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Copy previously computed properties into given structure */ 35849d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu memcpy((void *)pFileProperties, 35859d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu (void *) &pC->InputFileProperties, 35860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sizeof(M4VIDEOEDITING_ClipProperties)); 35870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 35880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4NO_ERROR; 35890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 35900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 35910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 35920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 35930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_ERR M4MCS_setOutputParams(M4MCS_Context pContext, M4MCS_OutputParams* pParams); 35940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief Set the MCS video output parameters. 35950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @note Must be called after M4MCS_open. Must be called before M4MCS_step. 35960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param pContext (IN) MCS context 35970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param pParams (IN/OUT) Transcoding parameters 35980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4NO_ERROR: No error 35990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4ERR_PARAMETER: At least one parameter is M4OSA_NULL (debug only) 36000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4ERR_STATE: MCS is not in an appropriate state for this function to be called 36010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4MCS_ERR_INVALID_VIDEO_FRAME_SIZE_FOR_H263 : Output video frame size parameter is 36020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * incompatible with H263 encoding 36030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4MCS_ERR_INVALID_VIDEO_FRAME_RATE_FOR_H263 : Output video frame size parameter is 36040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * incompatible with H263 encoding 36050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4MCS_ERR_UNDEFINED_OUTPUT_VIDEO_FORMAT : Undefined output video format parameter 36060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4MCS_ERR_UNDEFINED_OUTPUT_VIDEO_FRAME_SIZE : Undefined output video frame size 36070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4MCS_ERR_UNDEFINED_OUTPUT_VIDEO_FRAME_RATE : Undefined output video frame rate 36080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4MCS_ERR_UNDEFINED_OUTPUT_AUDIO_FORMAT : Undefined output audio format parameter 36090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4MCS_ERR_DURATION_IS_NULL : Specified output parameters define a null duration stream 36100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * (no audio and video) 36110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 36120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */ 36130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR M4MCS_setOutputParams( M4MCS_Context pContext, 36140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_OutputParams *pParams ) 36150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 36160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_InternalContext *pC = (M4MCS_InternalContext *)(pContext); 36170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 uiFrameWidth; 36180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 uiFrameHeight; 36190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_ERR err; 36200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 36210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE2_2( 36220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_setOutputParams called with pContext=0x%x, pParams=0x%x", 36230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pContext, pParams); 36240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 36250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 36260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Check input parameters */ 36270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL == pContext), M4ERR_PARAMETER, 36280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_setOutputParams: pContext is M4OSA_NULL"); 36290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL == pParams), M4ERR_PARAMETER, 36300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_setOutputParams: pParam is M4OSA_NULL"); 36310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 36320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#ifdef M4MCS_SUPPORT_STILL_PICTURE 36330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 36340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->m_bIsStillPicture ) 36350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 36360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 36370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Call the corresponding still picture MCS function*/ 36380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_stillPicSetOutputParams(pC, pParams); 36390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 36400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 36410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#endif /*M4MCS_SUPPORT_STILL_PICTURE*/ 36420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 36430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 36440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Check state automaton */ 36450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 36460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4MCS_kState_OPENED != pC->State ) 36470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 36480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 36490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_setOutputParams(): Wrong State (%d), returning M4ERR_STATE", 36500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->State); 36510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_STATE; 36520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 36530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 36540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Ignore audio or video stream if the output do not need it, */ 36550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* or if the input file does not have any audio or video stream */ 36560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*FlB 26.02.2009: add mp3 as mcs output format*/ 36570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( pParams->OutputVideoFormat == M4VIDEOEDITING_kNoneVideo) 36580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi || (pC->VideoState == M4MCS_kStreamState_NOSTREAM) 36590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi || (pParams->OutputFileType == M4VIDEOEDITING_kFileType_AMR) 36600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi || (pParams->OutputFileType == M4VIDEOEDITING_kFileType_MP3) ) 36610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 36620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->novideo = M4OSA_TRUE; 36630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 36640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 36650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( pParams->OutputAudioFormat == M4VIDEOEDITING_kNoneAudio) 36660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi || (pC->AudioState == M4MCS_kStreamState_NOSTREAM) ) 36670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 36680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->noaudio = M4OSA_TRUE; 36690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 36700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 36710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->noaudio && pC->novideo ) 36720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 36730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_0( 36740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "!!! M4MCS_setOutputParams : clip is NULL, there is no audio, no video"); 36750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_ERR_DURATION_IS_NULL; 36760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 36770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 36780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Set writer */ 36790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MCS_setCurrentWriter(pContext, pParams->OutputFileType); 36800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4ERR_CHECK_RETURN(err); 36810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 36820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Set video parameters */ 36830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->novideo == M4OSA_FALSE ) 36840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 36850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 36860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Check Video Format correctness */ 36870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 36880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi switch( pParams->OutputVideoFormat ) 36890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 36900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_kH263: 36910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pParams->OutputFileType == M4VIDEOEDITING_kFileType_MP4 ) 36920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_ERR_H263_FORBIDDEN_IN_MP4_FILE; 36930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 36940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->EncodingVideoFormat = M4ENCODER_kH263; 36950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MCS_setCurrentVideoEncoder(pContext, 36960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pParams->OutputVideoFormat); 36970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4ERR_CHECK_RETURN(err); 36980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 36990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 37000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_kMPEG4: 37010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 37020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->EncodingVideoFormat = M4ENCODER_kMPEG4; 37030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MCS_setCurrentVideoEncoder(pContext, 37040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pParams->OutputVideoFormat); 37050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4ERR_CHECK_RETURN(err); 37060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 37070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 37080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_kH264: 37090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 37100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->EncodingVideoFormat = M4ENCODER_kH264; 37110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MCS_setCurrentVideoEncoder(pContext, 37120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pParams->OutputVideoFormat); 37130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4ERR_CHECK_RETURN(err); 37140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 37150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 37160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_kNullVideo: 37170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( pParams->OutputFileType == M4VIDEOEDITING_kFileType_MP4) 37180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (pC->InputFileProperties.VideoStreamType 37190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi == M4VIDEOEDITING_kH263) ) 37200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_ERR_H263_FORBIDDEN_IN_MP4_FILE; 37210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 37220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 37230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Encoder needed for begin cut to generate an I-frame */ 37240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->EncodingVideoFormat = M4ENCODER_kNULL; 37250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MCS_setCurrentVideoEncoder(pContext, 37260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.VideoStreamType); 37270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4ERR_CHECK_RETURN(err); 37280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 37290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 37300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi default: 37310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1("M4MCS_setOutputParams: Undefined output video format (%d),\ 37320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi returning M4MCS_ERR_UNDEFINED_OUTPUT_VIDEO_FORMAT", 37330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pParams->OutputVideoFormat); 37340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_ERR_UNDEFINED_OUTPUT_VIDEO_FORMAT; 37350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 37360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 37370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 37380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Check Video frame size correctness */ 37390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4VIDEOEDITING_kNullVideo == pParams->OutputVideoFormat ) 37400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 37410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uiFrameWidth = 37420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->EncodingWidth = pC->InputFileProperties.uiVideoWidth; 37430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uiFrameHeight = 37440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->EncodingHeight = pC->InputFileProperties.uiVideoHeight; 3745eb0607374f906082ab643675cec21eb7b1136912Rajneesh Chowdury 3746803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury /** 3747803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury * Set output video profile and level */ 3748803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury pC->encodingVideoProfile = pC->InputFileProperties.uiVideoProfile; 3749811c53c58a870397f2864003dc21d5799a422b26Hong Teng /** Set the target video level, because input 3gp file may 3750811c53c58a870397f2864003dc21d5799a422b26Hong Teng * have wrong video level value (some encoders do not respect 3751811c53c58a870397f2864003dc21d5799a422b26Hong Teng * level restrictions like video resolution when content is created). 3752811c53c58a870397f2864003dc21d5799a422b26Hong Teng **/ 3753811c53c58a870397f2864003dc21d5799a422b26Hong Teng pC->encodingVideoLevel = pParams->outputVideoLevel; 3754eb0607374f906082ab643675cec21eb7b1136912Rajneesh Chowdury 3755eb0607374f906082ab643675cec21eb7b1136912Rajneesh Chowdury // Clip's original width and height may not be 3756eb0607374f906082ab643675cec21eb7b1136912Rajneesh Chowdury // multiple of 16. 3757eb0607374f906082ab643675cec21eb7b1136912Rajneesh Chowdury // Ensure encoding width and height are multiple of 16 3758eb0607374f906082ab643675cec21eb7b1136912Rajneesh Chowdury 3759eb0607374f906082ab643675cec21eb7b1136912Rajneesh Chowdury uint32_t remainder = pC->EncodingWidth % 16; 3760eb0607374f906082ab643675cec21eb7b1136912Rajneesh Chowdury if (remainder != 0) { 3761eb0607374f906082ab643675cec21eb7b1136912Rajneesh Chowdury if (remainder >= 8) { 3762eb0607374f906082ab643675cec21eb7b1136912Rajneesh Chowdury // Roll forward 3763eb0607374f906082ab643675cec21eb7b1136912Rajneesh Chowdury pC->EncodingWidth = 3764eb0607374f906082ab643675cec21eb7b1136912Rajneesh Chowdury pC->EncodingWidth + (16-remainder); 3765eb0607374f906082ab643675cec21eb7b1136912Rajneesh Chowdury } else { 3766eb0607374f906082ab643675cec21eb7b1136912Rajneesh Chowdury // Roll backward 3767eb0607374f906082ab643675cec21eb7b1136912Rajneesh Chowdury pC->EncodingWidth = 3768eb0607374f906082ab643675cec21eb7b1136912Rajneesh Chowdury pC->EncodingWidth - remainder; 3769eb0607374f906082ab643675cec21eb7b1136912Rajneesh Chowdury } 3770eb0607374f906082ab643675cec21eb7b1136912Rajneesh Chowdury uiFrameWidth = pC->EncodingWidth; 3771eb0607374f906082ab643675cec21eb7b1136912Rajneesh Chowdury } 3772eb0607374f906082ab643675cec21eb7b1136912Rajneesh Chowdury 3773eb0607374f906082ab643675cec21eb7b1136912Rajneesh Chowdury remainder = pC->EncodingHeight % 16; 3774eb0607374f906082ab643675cec21eb7b1136912Rajneesh Chowdury if (remainder != 0) { 3775eb0607374f906082ab643675cec21eb7b1136912Rajneesh Chowdury if (remainder >= 8) { 3776eb0607374f906082ab643675cec21eb7b1136912Rajneesh Chowdury // Roll forward 3777eb0607374f906082ab643675cec21eb7b1136912Rajneesh Chowdury pC->EncodingHeight = 3778eb0607374f906082ab643675cec21eb7b1136912Rajneesh Chowdury pC->EncodingHeight + (16-remainder); 3779eb0607374f906082ab643675cec21eb7b1136912Rajneesh Chowdury } else { 3780eb0607374f906082ab643675cec21eb7b1136912Rajneesh Chowdury // Roll backward 3781eb0607374f906082ab643675cec21eb7b1136912Rajneesh Chowdury pC->EncodingHeight = 3782eb0607374f906082ab643675cec21eb7b1136912Rajneesh Chowdury pC->EncodingHeight - remainder; 3783eb0607374f906082ab643675cec21eb7b1136912Rajneesh Chowdury } 3784eb0607374f906082ab643675cec21eb7b1136912Rajneesh Chowdury uiFrameHeight = pC->EncodingHeight; 3785eb0607374f906082ab643675cec21eb7b1136912Rajneesh Chowdury } 3786eb0607374f906082ab643675cec21eb7b1136912Rajneesh Chowdury 37870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 37880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 37890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 3790803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury /** 3791803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury * Set output video profile and level */ 3792803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury pC->encodingVideoProfile = pParams->outputVideoProfile; 3793803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury pC->encodingVideoLevel = pParams->outputVideoLevel; 3794803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury 37950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi switch( pParams->OutputVideoFrameSize ) 37960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 37970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_kSQCIF: 37980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uiFrameWidth = pC->EncodingWidth = M4ENCODER_SQCIF_Width; 37990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uiFrameHeight = pC->EncodingHeight = M4ENCODER_SQCIF_Height; 38000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 38010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 38020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_kQQVGA: 38030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uiFrameWidth = pC->EncodingWidth = M4ENCODER_QQVGA_Width; 38040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uiFrameHeight = pC->EncodingHeight = M4ENCODER_QQVGA_Height; 38050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 38060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 38070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_kQCIF: 38080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uiFrameWidth = pC->EncodingWidth = M4ENCODER_QCIF_Width; 38090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uiFrameHeight = pC->EncodingHeight = M4ENCODER_QCIF_Height; 38100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 38110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 38120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_kQVGA: 38130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uiFrameWidth = pC->EncodingWidth = M4ENCODER_QVGA_Width; 38140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uiFrameHeight = pC->EncodingHeight = M4ENCODER_QVGA_Height; 38150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 38160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 38170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_kCIF: 38180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uiFrameWidth = pC->EncodingWidth = M4ENCODER_CIF_Width; 38190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uiFrameHeight = pC->EncodingHeight = M4ENCODER_CIF_Height; 38200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 38210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 38220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_kVGA: 38230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uiFrameWidth = pC->EncodingWidth = M4ENCODER_VGA_Width; 38240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uiFrameHeight = pC->EncodingHeight = M4ENCODER_VGA_Height; 38250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 38260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* +PR LV5807 */ 38270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_kWVGA: 38280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uiFrameWidth = pC->EncodingWidth = M4ENCODER_WVGA_Width; 38290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uiFrameHeight = pC->EncodingHeight = M4ENCODER_WVGA_Height; 38300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 38310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 38320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_kNTSC: 38330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uiFrameWidth = pC->EncodingWidth = M4ENCODER_NTSC_Width; 38340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uiFrameHeight = pC->EncodingHeight = M4ENCODER_NTSC_Height; 38350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 38360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* -PR LV5807*/ 38370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* +CR Google */ 38380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_k640_360: 38390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uiFrameWidth = pC->EncodingWidth = M4ENCODER_640_360_Width; 38400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uiFrameHeight = 38410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->EncodingHeight = M4ENCODER_640_360_Height; 38420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 38430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 38440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_k854_480: 3845cf98ede08f87a50481269da5025946109956f8d3Hong Teng uiFrameWidth = 3846cf98ede08f87a50481269da5025946109956f8d3Hong Teng pC->EncodingWidth = M4ENCODER_854_480_Width; 38470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uiFrameHeight = 38480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->EncodingHeight = M4ENCODER_854_480_Height; 38490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 38500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 3851cf98ede08f87a50481269da5025946109956f8d3Hong Teng case M4VIDEOEDITING_k1280_720: 3852cf98ede08f87a50481269da5025946109956f8d3Hong Teng uiFrameWidth = 3853cf98ede08f87a50481269da5025946109956f8d3Hong Teng pC->EncodingWidth = M4ENCODER_1280_720_Width; 38540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uiFrameHeight = 3855cf98ede08f87a50481269da5025946109956f8d3Hong Teng pC->EncodingHeight = M4ENCODER_1280_720_Height; 38560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 38570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 3858cf98ede08f87a50481269da5025946109956f8d3Hong Teng case M4VIDEOEDITING_k1080_720: 3859cf98ede08f87a50481269da5025946109956f8d3Hong Teng uiFrameWidth = 3860cf98ede08f87a50481269da5025946109956f8d3Hong Teng pC->EncodingWidth = M4ENCODER_1080_720_Width; 38610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uiFrameHeight = 3862cf98ede08f87a50481269da5025946109956f8d3Hong Teng pC->EncodingHeight = M4ENCODER_1080_720_Height; 38630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 38640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 3865cf98ede08f87a50481269da5025946109956f8d3Hong Teng case M4VIDEOEDITING_k960_720: 3866cf98ede08f87a50481269da5025946109956f8d3Hong Teng uiFrameWidth = 3867cf98ede08f87a50481269da5025946109956f8d3Hong Teng pC->EncodingWidth = M4ENCODER_960_720_Width; 3868cf98ede08f87a50481269da5025946109956f8d3Hong Teng uiFrameHeight = 3869cf98ede08f87a50481269da5025946109956f8d3Hong Teng pC->EncodingHeight = M4ENCODER_960_720_Height; 3870cf98ede08f87a50481269da5025946109956f8d3Hong Teng break; 3871cf98ede08f87a50481269da5025946109956f8d3Hong Teng 3872cf98ede08f87a50481269da5025946109956f8d3Hong Teng case M4VIDEOEDITING_k1920_1080: 3873cf98ede08f87a50481269da5025946109956f8d3Hong Teng uiFrameWidth = 3874cf98ede08f87a50481269da5025946109956f8d3Hong Teng pC->EncodingWidth = M4ENCODER_1920_1080_Width; 3875cf98ede08f87a50481269da5025946109956f8d3Hong Teng uiFrameHeight = 3876cf98ede08f87a50481269da5025946109956f8d3Hong Teng pC->EncodingHeight = M4ENCODER_1920_1080_Height; 38770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 38780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* -CR Google */ 38790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi default: 38800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 38810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_setOutputParams: Undefined output video frame size \ 38820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (%d), returning M4MCS_ERR_UNDEFINED_OUTPUT_VIDEO_FRAME_SIZE", 38830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pParams->OutputVideoFrameSize); 38840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_ERR_UNDEFINED_OUTPUT_VIDEO_FRAME_SIZE; 38850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 38860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 38870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 38880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 38890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Compute video max au size and max chunck size. 38900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * We do it here because it depends on the frame size only, and 38910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * because we need it for the file size/video bitrate estimations */ 38920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->uiVideoMaxAuSize = 38930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_UInt32)(1.5F *(M4OSA_Float)(uiFrameWidth * uiFrameHeight) \ 38940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *M4MCS_VIDEO_MIN_COMPRESSION_RATIO); 38950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->uiVideoMaxChunckSize = (M4OSA_UInt32)(pC->uiVideoMaxAuSize \ 38960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * 38970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_VIDEO_CHUNK_AU_SIZE_RATIO); /**< from max AU size to max Chunck size */ 38980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 38990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( 0 == pC->uiVideoMaxAuSize ) 39000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 39010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Size may be zero in case of null encoding with unrecognized stream */ 39020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_0("M4MCS_setOutputParams: video frame size is 0 returning\ 39030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_ERR_UNDEFINED_OUTPUT_VIDEO_FRAME_SIZE"); 39040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_ERR_UNDEFINED_OUTPUT_VIDEO_FRAME_SIZE; 39050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 39060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 39070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 39080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 39090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Size check for H263 (only valid sizes are CIF, QCIF and SQCIF) */ 39100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 39110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4VIDEOEDITING_kH263 == pParams->OutputVideoFormat ) 39120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 39130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi switch( pParams->OutputVideoFrameSize ) 39140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 39150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_kSQCIF: 39160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_kQCIF: 39170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_kCIF: 39180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* OK */ 39190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 39200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 39210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi default: 39220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_0( 39230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_setOutputParams():\ 39240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi returning M4MCS_ERR_INVALID_VIDEO_FRAME_SIZE_FOR_H263"); 39250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_ERR_INVALID_VIDEO_FRAME_SIZE_FOR_H263; 39260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 39270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 39280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 39290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 39300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Check Video Frame rate correctness */ 39310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4VIDEOEDITING_kNullVideo != pParams->OutputVideoFormat ) 39320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 39330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi switch( pParams->OutputVideoFrameRate ) 39340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 39350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_k5_FPS: 39360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->EncodingVideoFramerate = M4ENCODER_k5_FPS; 39370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 39380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 39390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_k7_5_FPS: 39400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->EncodingVideoFramerate = M4ENCODER_k7_5_FPS; 39410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 39420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 39430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_k10_FPS: 39440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->EncodingVideoFramerate = M4ENCODER_k10_FPS; 39450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 39460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 39470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_k12_5_FPS: 39480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->EncodingVideoFramerate = M4ENCODER_k12_5_FPS; 39490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 39500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 39510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_k15_FPS: 39520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->EncodingVideoFramerate = M4ENCODER_k15_FPS; 39530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 39540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 39550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_k20_FPS: 39560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->EncodingVideoFramerate = M4ENCODER_k20_FPS; 39570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 39580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 39590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_k25_FPS: 39600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->EncodingVideoFramerate = M4ENCODER_k25_FPS; 39610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 39620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 39630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_k30_FPS: 39640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->EncodingVideoFramerate = M4ENCODER_k30_FPS; 39650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 39660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 39670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi default: 39680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 39690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_setOutputParams: Undefined output video frame rate\ 39700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (%d), returning M4MCS_ERR_UNDEFINED_OUTPUT_VIDEO_FRAME_RATE", 39710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pParams->OutputVideoFrameRate); 39720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_ERR_UNDEFINED_OUTPUT_VIDEO_FRAME_RATE; 39730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 39740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 39750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 39760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 39770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Frame rate check for H263 (only dividers of 30 fps (29.97 actually)) */ 39780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4VIDEOEDITING_kH263 == pParams->OutputVideoFormat ) 39790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 39800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi switch( pC->EncodingVideoFramerate ) 39810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 39820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4ENCODER_k5_FPS: 39830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4ENCODER_k7_5_FPS: 39840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4ENCODER_k10_FPS: 39850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4ENCODER_k15_FPS: 39860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4ENCODER_k30_FPS: 39870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* OK */ 39880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 39890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 39900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi default: 39910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_0( 39920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_setOutputParams():\ 39930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi returning M4MCS_ERR_INVALID_VIDEO_FRAME_RATE_FOR_H263"); 39940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_ERR_INVALID_VIDEO_FRAME_RATE_FOR_H263; 39950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 39960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 39970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 39980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 39990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Set audio parameters */ 40000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->noaudio == M4OSA_FALSE ) 40010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 40020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 40030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Check Audio Format correctness */ 40040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi switch( pParams->OutputAudioFormat ) 40050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 40060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_kAMR_NB: 40070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 40080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MCS_setCurrentAudioEncoder(pContext, 40090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pParams->OutputAudioFormat); 40100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4ERR_CHECK_RETURN(err); 40110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 40120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.Format = M4ENCODER_kAMRNB; 40130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.Frequency = M4ENCODER_k8000Hz; 40140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.ChannelNum = M4ENCODER_kMono; 40150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.SpecifParam.AmrSID = M4ENCODER_kAmrNoSID; 40160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 40170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 40180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_kAAC: 40190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 40200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MCS_setCurrentAudioEncoder(pContext, 40210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pParams->OutputAudioFormat); 40220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4ERR_CHECK_RETURN(err); 40230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 40240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.Format = M4ENCODER_kAAC; 40250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.Frequency = M4ENCODER_k16000Hz; 40260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 40270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi switch( pParams->OutputAudioSamplingFrequency ) 40280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 40290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_k8000_ASF: 40300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.Frequency = M4ENCODER_k8000Hz; 40310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 40320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 40330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_k16000_ASF: 40340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.Frequency = M4ENCODER_k16000Hz; 40350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 40360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 40370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_k22050_ASF: 40380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.Frequency = M4ENCODER_k22050Hz; 40390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 40400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 40410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_k24000_ASF: 40420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.Frequency = M4ENCODER_k24000Hz; 40430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 40440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 40450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_k32000_ASF: 40460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.Frequency = M4ENCODER_k32000Hz; 40470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 40480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 40490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_k44100_ASF: 40500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.Frequency = M4ENCODER_k44100Hz; 40510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 40520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 40530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_k48000_ASF: 40540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.Frequency = M4ENCODER_k48000Hz; 40550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 40560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 40570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_k11025_ASF: 40580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_k12000_ASF: 40590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_kDefault_ASF: 40600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 40610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 40620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.ChannelNum = 40630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (pParams->bAudioMono == M4OSA_TRUE) ? \ 40640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4ENCODER_kMono : M4ENCODER_kStereo; 40650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.SpecifParam.AacParam.Regulation = 40660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4ENCODER_kAacRegulNone; //M4ENCODER_kAacBitReservoir 40670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* unused */ 40680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.SpecifParam.AacParam.bIS = M4OSA_FALSE; 40690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.SpecifParam.AacParam.bMS = M4OSA_FALSE; 40700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.SpecifParam.AacParam.bPNS = M4OSA_FALSE; 40710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.SpecifParam.AacParam.bTNS = M4OSA_FALSE; 40720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* TODO change into highspeed asap */ 40730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.SpecifParam.AacParam.bHighSpeed = 40740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_FALSE; 40750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 40760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 40770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*FlB 26.02.2009: add mp3 as mcs output format, add mp3 encoder*/ 40780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_kMP3: 40790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MCS_setCurrentAudioEncoder(pContext, 40800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pParams->OutputAudioFormat); 40810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4ERR_CHECK_RETURN(err); 40820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 40830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.Format = M4ENCODER_kMP3; 40840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.ChannelNum = 40850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (pParams->bAudioMono == M4OSA_TRUE) ? \ 40860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4ENCODER_kMono : M4ENCODER_kStereo; 40870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 40880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.Frequency = M4ENCODER_k16000Hz; 40890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 40900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi switch( pParams->OutputAudioSamplingFrequency ) 40910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 40920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_k8000_ASF: 40930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.Frequency = M4ENCODER_k8000Hz; 40940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 40950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 40960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_k11025_ASF: 40970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.Frequency = M4ENCODER_k11025Hz; 40980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 40990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 41000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_k12000_ASF: 41010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.Frequency = M4ENCODER_k12000Hz; 41020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 41030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 41040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_k16000_ASF: 41050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.Frequency = M4ENCODER_k16000Hz; 41060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 41070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 41080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_k22050_ASF: 41090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.Frequency = M4ENCODER_k22050Hz; 41100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 41110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 41120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_k24000_ASF: 41130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.Frequency = M4ENCODER_k24000Hz; 41140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 41150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 41160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_k32000_ASF: 41170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.Frequency = M4ENCODER_k32000Hz; 41180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 41190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 41200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_k44100_ASF: 41210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.Frequency = M4ENCODER_k44100Hz; 41220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 41230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 41240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_k48000_ASF: 41250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.Frequency = M4ENCODER_k48000Hz; 41260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 41270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 41280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_kDefault_ASF: 41290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 41300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 41310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 41320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 41330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 41340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_kNullAudio: 41350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pParams->pEffects == M4OSA_NULL || pParams->nbEffects == 0 ) 41360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 41370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* no encoder needed */ 41380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.Format = M4ENCODER_kAudioNULL; 41390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.Frequency = 41400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pReaderAudioStream->m_samplingFrequency; 41410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.ChannelNum = 41420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (pC->pReaderAudioStream->m_nbChannels == 1) ? \ 41430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4ENCODER_kMono : M4ENCODER_kStereo; 41440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 41450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 41460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 41470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.Frequency = 41480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pReaderAudioStream->m_samplingFrequency; 41490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.ChannelNum = 41500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (pC->pReaderAudioStream->m_nbChannels == 1) ? \ 41510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4ENCODER_kMono : M4ENCODER_kStereo; 41520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 41530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi switch( pC->InputFileProperties.AudioStreamType ) 41540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 41550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_kAMR_NB: 41560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_0( 41570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_setOutputParams calling \ 41580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_setCurrentAudioEncoder M4VIDEOEDITING_kNull, AMR"); 41590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MCS_setCurrentAudioEncoder(pContext, 41600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.AudioStreamType); 41610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4ERR_CHECK_RETURN(err); 41620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 41630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.Format = M4ENCODER_kAMRNB; 41640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.Frequency = M4ENCODER_k8000Hz; 41650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.ChannelNum = M4ENCODER_kMono; 41660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 41670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->pReaderAudioStream->m_samplingFrequency 41680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi != 8000 ) 41690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 41700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.Format = M4ENCODER_kAMRNB; 41710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 41720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.SpecifParam.AmrSID = 41730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4ENCODER_kAmrNoSID; 41740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 41750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 41760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_kAAC: 41770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_0( 41780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_setOutputParams calling \ 41790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_setCurrentAudioEncoder M4VIDEOEDITING_kNull, AAC"); 41800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MCS_setCurrentAudioEncoder(pContext, 41810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.AudioStreamType); 41820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4ERR_CHECK_RETURN(err); 41830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 41840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.Format = M4ENCODER_kAAC; 41850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.SpecifParam.AacParam.Regulation = 41860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4ENCODER_kAacRegulNone; //M4ENCODER_kAacBitReservoir 41870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.Frequency = M4ENCODER_k16000Hz; 41880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.Frequency = M4ENCODER_k16000Hz; 41890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 41900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi switch( pC->pReaderAudioStream-> 41910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi m_samplingFrequency ) 41920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 41930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case 16000: 41940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.Frequency = 41950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4ENCODER_k16000Hz; 41960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 41970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 41980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case 22050: 41990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.Frequency = 42000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4ENCODER_k22050Hz; 42010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 42020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 42030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case 24000: 42040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.Frequency = 42050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4ENCODER_k24000Hz; 42060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 42070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 42080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case 32000: 42090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.Frequency = 42100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4ENCODER_k32000Hz; 42110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 42120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 42130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case 44100: 42140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.Frequency = 42150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4ENCODER_k44100Hz; 42160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 42170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 42180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case 48000: 42190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.Frequency = 42200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4ENCODER_k48000Hz; 42210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 42220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 42230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi default: 42240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.Format = M4ENCODER_kAAC; 42250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 42260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 42270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* unused */ 42280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.SpecifParam.AacParam.bIS = 42290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_FALSE; 42300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.SpecifParam.AacParam.bMS = 42310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_FALSE; 42320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.SpecifParam.AacParam.bPNS = 42330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_FALSE; 42340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.SpecifParam.AacParam.bTNS = 42350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_FALSE; 42360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* TODO change into highspeed asap */ 42370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.SpecifParam.AacParam.bHighSpeed = 42380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_FALSE; 42390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 42400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 42410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_kMP3: 42420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_0( 42430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_setOutputParams calling\ 42440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_setCurrentAudioEncoder M4VIDEOEDITING_kNull, MP3"); 42450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MCS_setCurrentAudioEncoder(pContext, 42460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.AudioStreamType); 42470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4ERR_CHECK_RETURN(err); 42480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 42490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.Format = M4ENCODER_kMP3; 42500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.Frequency = M4ENCODER_k16000Hz; 42510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 42520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi switch( pC->pReaderAudioStream-> 42530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi m_samplingFrequency ) 42540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 42550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case 8000: 42560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.Frequency = 42570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4ENCODER_k8000Hz; 42580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 42590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 42600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case 16000: 42610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.Frequency = 42620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4ENCODER_k16000Hz; 42630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 42640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 42650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case 22050: 42660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.Frequency = 42670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4ENCODER_k22050Hz; 42680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 42690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 42700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case 24000: 42710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.Frequency = 42720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4ENCODER_k24000Hz; 42730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 42740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 42750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case 32000: 42760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.Frequency = 42770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4ENCODER_k32000Hz; 42780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 42790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 42800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case 44100: 42810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.Frequency = 42820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4ENCODER_k44100Hz; 42830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 42840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 42850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case 48000: 42860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.Frequency = 42870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4ENCODER_k48000Hz; 42880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 42890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 42900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi default: 42910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.Format = M4ENCODER_kMP3; 42920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 42930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 42940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 42950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 42960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_kEVRC: 42970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_kUnsupportedAudio: 42980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi default: 42990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 43000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_setOutputParams: Output audio format (%d) is\ 43010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi incompatible with audio effects, returning \ 43020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_ERR_UNDEFINED_OUTPUT_AUDIO_FORMAT", 43030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.AudioStreamType); 43040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_ERR_UNDEFINED_OUTPUT_AUDIO_FORMAT; 43050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 43060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 43070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 43080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* EVRC 43090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi // case M4VIDEOEDITING_kEVRC: 43100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi // 43110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi // err = M4MCS_setCurrentAudioEncoder(pContext, pParams->\ 43120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi // OutputAudioFormat); 43130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi // M4ERR_CHECK_RETURN(err); 43140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi // 43150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi // pC->AudioEncParams.Format = M4ENCODER_kEVRC; 43160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi // pC->AudioEncParams.Frequency = M4ENCODER_k8000Hz; 43170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi // pC->AudioEncParams.ChannelNum = M4ENCODER_kMono; 43180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi // break; */ 43190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 43200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi default: 43210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1("M4MCS_setOutputParams: Undefined output audio format (%d),\ 43220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi returning M4MCS_ERR_UNDEFINED_OUTPUT_AUDIO_FORMAT", 43230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pParams->OutputAudioFormat); 43240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_ERR_UNDEFINED_OUTPUT_AUDIO_FORMAT; 43250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 43260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 43270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 43280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pParams->pOutputPCMfile != M4OSA_NULL ) 43290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 43300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pOutputPCMfile = pParams->pOutputPCMfile; 43310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 43320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Open output PCM file */ 43330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pOsaFileWritPtr->openWrite(&(pC->pOutputPCMfile), 43340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pParams->pOutputPCMfile, M4OSA_kFileWrite); 43350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 43360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 43370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 43380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pOutputPCMfile = M4OSA_NULL; 43390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 43400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 43410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*Store media rendering parameter into the internal context*/ 43420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->MediaRendering = pParams->MediaRendering; 43430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 43440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Add audio effects*/ 43450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*Copy MCS effects structure into internal context*/ 43460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pParams->nbEffects > 0 ) 43470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 43480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 j = 0; 43490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->nbEffects = pParams->nbEffects; 43502ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu pC->pEffects = (M4MCS_EffectSettings *)M4OSA_32bitAlignedMalloc(pC->nbEffects \ 43510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *sizeof(M4MCS_EffectSettings), M4MCS, 43520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_Char *)"Allocation of effects list"); 43530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 43540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->pEffects == M4OSA_NULL ) 43550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 43560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_0("M4MCS_setOutputParams(): allocation error"); 43570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_ALLOC; 43580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 43590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 43600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi for ( j = 0; j < pC->nbEffects; j++ ) 43610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 43620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Copy effect to "local" structure */ 43639d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu memcpy((void *) &(pC->pEffects[j]), 43649d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu (void *) &(pParams->pEffects[j]), 43650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sizeof(M4MCS_EffectSettings)); 43660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 43670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi switch( pC->pEffects[j].AudioEffectType ) 43680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 43690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4MCS_kAudioEffectType_None: 43700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_1( 43710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_setOutputParams(): effect type %i is None", j); 43720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pEffects[j].pExtAudioEffectFctCtxt = M4OSA_NULL; 43730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pEffects[j].ExtAudioEffectFct = M4OSA_NULL; 43740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 43750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 43760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4MCS_kAudioEffectType_FadeIn: 43770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_1( 43780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_setOutputParams(): effect type %i is FadeIn", j); 43790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pEffects[j].pExtAudioEffectFctCtxt = M4OSA_NULL; 43800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pEffects[j].ExtAudioEffectFct = 43810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_editAudioEffectFct_FadeIn; 43820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 43830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 43840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4MCS_kAudioEffectType_FadeOut: 43850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_1( 43860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_setOutputParams(): effect type %i is FadeOut", 43870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi j); 43880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pEffects[j].pExtAudioEffectFctCtxt = M4OSA_NULL; 43890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pEffects[j].ExtAudioEffectFct = 43900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_editAudioEffectFct_FadeOut; 43910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 43920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 43930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4MCS_kAudioEffectType_External: 43940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_1( 43950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_setOutputParams(): effect type %i is External", 43960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi j); 43970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 43980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pParams->pEffects != M4OSA_NULL ) 43990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 44000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pParams->pEffects[j].ExtAudioEffectFct 44010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi == M4OSA_NULL ) 44020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 44030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1("M4MCS_setOutputParams(): no external effect function\ 44040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi associated to external effect number %i", j); 44050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_PARAMETER; 44060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 44070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pEffects[j].pExtAudioEffectFctCtxt = 44080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pParams->pEffects[j].pExtAudioEffectFctCtxt; 44090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 44100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pEffects[j].ExtAudioEffectFct = 44110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pParams->pEffects[j].ExtAudioEffectFct; 44120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 44130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 44140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 44150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 44160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi default: 44170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_0( 44180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_setOutputParams(): effect type not recognized"); 44190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_PARAMETER; 44200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 44210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 44220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 44230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 44240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 44250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->nbEffects = 0; 44260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pEffects = M4OSA_NULL; 44270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 44280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 44290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 44300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Update state automaton */ 44310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->State = M4MCS_kState_SET; 44320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 44330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 44340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Return with no error */ 44350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_0("M4MCS_setOutputParams(): returning M4NO_ERROR"); 44360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4NO_ERROR; 44370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 44380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 44390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 44400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 44410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_ERR M4MCS_setEncodingParams(M4MCS_Context pContext, M4MCS_EncodingParams* pRates) 44420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief Set the values of the encoding parameters 44430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @note Must be called before M4MCS_checkParamsAndStart(). 44440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param pContext (IN) MCS context 44450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param pRates (IN) Transcoding parameters 44460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4NO_ERROR: No error 44470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4ERR_PARAMETER: At least one parameter is M4OSA_NULL (debug only) 44480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4ERR_STATE: MCS is not in an appropriate state for this function to be called 44490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4MCS_ERR_AUDIOBITRATE_TOO_HIGH: Audio bitrate too high (we limit to 96 kbps) 44500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4MCS_ERR_AUDIOBITRATE_TOO_LOW: Audio bitrate is too low (16 kbps min for aac, 12.2 44510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * for amr, 8 for mp3) 44520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4MCS_ERR_BEGIN_CUT_EQUALS_END_CUT: Begin cut and End cut are equals 44530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4MCS_ERR_BEGIN_CUT_LARGER_THAN_DURATION: Begin cut time is larger than the input clip 44540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * duration 44550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4MCS_ERR_END_CUT_SMALLER_THAN_BEGIN_CUT: End cut time is smaller than begin cut time 44560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4MCS_ERR_MAXFILESIZE_TOO_SMALL: Not enough space to store whole output file at given 44570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * bitrates 44580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4MCS_ERR_VIDEOBITRATE_TOO_HIGH: Video bitrate too high (we limit to 800 kbps) 44590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4MCS_ERR_VIDEOBITRATE_TOO_LOW: Video bitrate too low 44600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 44610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */ 44620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR M4MCS_setEncodingParams( M4MCS_Context pContext, 44630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_EncodingParams *pRates ) 44640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 44650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_InternalContext *pC = (M4MCS_InternalContext *)(pContext); 44660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 j = 0; 44670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 44680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE2_2( 44690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_setEncodingParams called with pContext=0x%x, pRates=0x%x", 44700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pContext, pRates); 44710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 44720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 44730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Check input parameters */ 44740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL == pContext), M4ERR_PARAMETER, 44750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_setEncodingParams: pContext is M4OSA_NULL"); 44760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL == pRates), M4ERR_PARAMETER, 44770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_setEncodingParams: pRates is M4OSA_NULL"); 44780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 44790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#ifdef M4MCS_SUPPORT_STILL_PICTURE 44800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 44810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->m_bIsStillPicture ) 44820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 44830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 44840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Call the corresponding still picture MCS function*/ 44850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_stillPicSetEncodingParams(pC, pRates); 44860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 44870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 44880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#endif /*M4MCS_SUPPORT_STILL_PICTURE*/ 44890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 44900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 44910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Check state automaton */ 44920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 44930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4MCS_kState_SET != pC->State ) 44940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 44950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 44960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_setEncodingParams(): Wrong State (%d), returning M4ERR_STATE", 44970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->State); 44980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_STATE; 44990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 45000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 45010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Set given values */ 45020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->uiVideoBitrate = pRates->OutputVideoBitrate; 45030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->uiAudioBitrate = pRates->OutputAudioBitrate; 45040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->uiBeginCutTime = pRates->BeginCutTime; 45050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->uiEndCutTime = pRates->EndCutTime; 45060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->uiMaxFileSize = pRates->OutputFileSize; 45070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 45080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 45090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Check begin cut time validity */ 45100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->uiBeginCutTime >= pC->InputFileProperties.uiClipDuration ) 45110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 45120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_2("M4MCS_setEncodingParams(): Begin cut larger than duration (%d>%d),\ 45130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi returning M4MCS_ERR_BEGIN_CUT_LARGER_THAN_DURATION", 45140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->uiBeginCutTime, pC->InputFileProperties.uiClipDuration); 45150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_ERR_BEGIN_CUT_LARGER_THAN_DURATION; 45160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 45170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 45180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 45190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * If end cut time is too large, we set it to the clip duration */ 45200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->uiEndCutTime > pC->InputFileProperties.uiClipDuration ) 45210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 45220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->uiEndCutTime = pC->InputFileProperties.uiClipDuration; 45230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 45240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 45250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 45260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Check end cut time validity */ 45270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->uiEndCutTime > 0 ) 45280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 45290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->uiEndCutTime < pC->uiBeginCutTime ) 45300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 45310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_2("M4MCS_setEncodingParams(): Begin cut greater than end cut (%d,%d), \ 45320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi returning M4MCS_ERR_END_CUT_SMALLER_THAN_BEGIN_CUT", 45330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->uiBeginCutTime, pC->uiEndCutTime); 45340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_ERR_END_CUT_SMALLER_THAN_BEGIN_CUT; 45350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 45360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 45370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->uiEndCutTime == pC->uiBeginCutTime ) 45380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 45390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_2("M4MCS_setEncodingParams(): Begin and End cuts are equal (%d,%d),\ 45400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi returning M4MCS_ERR_BEGIN_CUT_EQUALS_END_CUT", 45410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->uiBeginCutTime, pC->uiEndCutTime); 45420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_ERR_BEGIN_CUT_EQUALS_END_CUT; 45430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 45440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 45450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 45460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 45470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * FlB 2009.03.04: check audio effects start time and duration validity*/ 45480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi for ( j = 0; j < pC->nbEffects; j++ ) 45490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 45500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 outputEndCut = pC->uiEndCutTime; 45510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 45520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->uiEndCutTime == 0 ) 45530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 45540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi outputEndCut = pC->InputFileProperties.uiClipDuration; 45550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 45560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 45570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->pEffects[j].uiStartTime > (outputEndCut - pC->uiBeginCutTime) ) 45580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 45590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_2("M4MCS_setEncodingParams(): Effects start time is larger than\ 45600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi duration (%d,%d), returning M4ERR_PARAMETER", 45610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pEffects[j].uiStartTime, 45620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (pC->uiEndCutTime - pC->uiBeginCutTime)); 45630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_PARAMETER; 45640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 45650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 45660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->pEffects[j].uiStartTime + pC->pEffects[j].uiDuration > \ 45670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (outputEndCut - pC->uiBeginCutTime) ) 45680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 45690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Re-adjust the effect duration until the end of the output clip*/ 45700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pEffects[j].uiDuration = (outputEndCut - pC->uiBeginCutTime) - \ 45710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pEffects[j].uiStartTime; 45720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 45730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 45740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 45750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Check audio bitrate consistency */ 45760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( pC->noaudio == M4OSA_FALSE) 45770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (pC->AudioEncParams.Format != M4ENCODER_kAudioNULL) ) 45780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 45790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->uiAudioBitrate != M4VIDEOEDITING_kUndefinedBitrate ) 45800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 45810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->AudioEncParams.Format == M4ENCODER_kAMRNB ) 45820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 45830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->uiAudioBitrate > M4VIDEOEDITING_k12_2_KBPS ) 45840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_ERR_AUDIOBITRATE_TOO_HIGH; 45850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 45860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->uiAudioBitrate < M4VIDEOEDITING_k12_2_KBPS ) 45870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_ERR_AUDIOBITRATE_TOO_LOW; 45880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 45890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi //EVRC 45900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi // else if(pC->AudioEncParams.Format == M4ENCODER_kEVRC) 45910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi // { 45920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi // if(pC->uiAudioBitrate > M4VIDEOEDITING_k9_2_KBPS) 45930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi // return M4MCS_ERR_AUDIOBITRATE_TOO_HIGH; 45940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi // if(pC->uiAudioBitrate < M4VIDEOEDITING_k9_2_KBPS) 45950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi // return M4MCS_ERR_AUDIOBITRATE_TOO_LOW; 45960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi // } 45970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*FlB 26.02.2009: add mp3 as mcs output format, add mp3 encoder*/ 45980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else if( pC->AudioEncParams.Format == M4ENCODER_kMP3 ) 45990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 46000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->AudioEncParams.Frequency >= M4ENCODER_k32000Hz ) 46010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 46020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*Mpeg layer 1*/ 46030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->uiAudioBitrate > 320000 ) 46040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_ERR_AUDIOBITRATE_TOO_HIGH; 46050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 46060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->uiAudioBitrate < 32000 ) 46070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_ERR_AUDIOBITRATE_TOO_LOW; 46080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 46090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else if( pC->AudioEncParams.Frequency >= M4ENCODER_k16000Hz ) 46100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 46110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*Mpeg layer 2*/ 46120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->uiAudioBitrate > 160000 ) 46130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_ERR_AUDIOBITRATE_TOO_HIGH; 46140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 46150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( pC->uiAudioBitrate < 8000 46160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && pC->AudioEncParams.ChannelNum == M4ENCODER_kMono) 46170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi || (pC->uiAudioBitrate < 16000 46180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && pC->AudioEncParams.ChannelNum 46190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi == M4ENCODER_kStereo) ) 46200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_ERR_AUDIOBITRATE_TOO_LOW; 46210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 46220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else if( pC->AudioEncParams.Frequency == M4ENCODER_k8000Hz 46230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi || pC->AudioEncParams.Frequency == M4ENCODER_k11025Hz 46240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi || pC->AudioEncParams.Frequency == M4ENCODER_k12000Hz ) 46250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 46260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*Mpeg layer 2.5*/ 46270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->uiAudioBitrate > 64000 ) 46280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_ERR_AUDIOBITRATE_TOO_HIGH; 46290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 46300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( pC->uiAudioBitrate < 8000 46310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && pC->AudioEncParams.ChannelNum == M4ENCODER_kMono) 46320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi || (pC->uiAudioBitrate < 16000 46330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && pC->AudioEncParams.ChannelNum 46340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi == M4ENCODER_kStereo) ) 46350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_ERR_AUDIOBITRATE_TOO_LOW; 46360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 46370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 46380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 46390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1("M4MCS_setEncodingParams: MP3 audio sampling frequency error\ 46400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (%d)", pC->AudioEncParams.Frequency); 46410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_PARAMETER; 46420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 46430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 46440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 46450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 46460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->uiAudioBitrate > M4VIDEOEDITING_k192_KBPS ) 46470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_ERR_AUDIOBITRATE_TOO_HIGH; 46480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 46490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->AudioEncParams.ChannelNum == M4ENCODER_kMono ) 46500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 46510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->uiAudioBitrate < M4VIDEOEDITING_k16_KBPS ) 46520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_ERR_AUDIOBITRATE_TOO_LOW; 46530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 46540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 46550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 46560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->uiAudioBitrate < M4VIDEOEDITING_k32_KBPS ) 46570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_ERR_AUDIOBITRATE_TOO_LOW; 46580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 46590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 46600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 46610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 46620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 46630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 46640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* NULL audio : copy input file bitrate */ 46650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->uiAudioBitrate = pC->InputFileProperties.uiAudioBitrate; 46660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 46670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 46680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Check video bitrate consistency */ 46690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( pC->novideo == M4OSA_FALSE) 46700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (pC->EncodingVideoFormat != M4ENCODER_kNULL) ) 46710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 46720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->uiVideoBitrate != M4VIDEOEDITING_kUndefinedBitrate ) 46730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 46740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->uiVideoBitrate > M4VIDEOEDITING_k8_MBPS ) 46750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_ERR_VIDEOBITRATE_TOO_HIGH; 46760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 46770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->uiVideoBitrate < M4VIDEOEDITING_k16_KBPS ) 46780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_ERR_VIDEOBITRATE_TOO_LOW; 46790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 46800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 46810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 46820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 46830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* NULL video : copy input file bitrate */ 46840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->uiVideoBitrate = pC->InputFileProperties.uiVideoBitrate; 46850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 46860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 46870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pRates->OutputVideoTimescale <= 30000 46880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && pRates->OutputVideoTimescale > 0 ) 46890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 46900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->outputVideoTimescale = pRates->OutputVideoTimescale; 46910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 46920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 46930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Check file size */ 46940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_intCheckMaxFileSize(pC); 46950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 46960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 46970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 46980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 46990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_ERR M4MCS_getExtendedEncodingParams(M4MCS_Context pContext, M4MCS_EncodingParams* pRates) 47000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief Get the extended values of the encoding parameters 47010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @note Could be called after M4MCS_setEncodingParams. 47020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param pContext (IN) MCS context 47030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param pRates (OUT) Transcoding parameters 47040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4NO_ERROR: No error 47050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4ERR_PARAMETER: At least one parameter is M4OSA_NULL (debug only) 47060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4ERR_STATE: MCS is not in an appropriate state for this function to be called 47070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4MCS_ERR_BEGIN_CUT_EQUALS_END_CUT: Encoding settings would produce a null duration 47080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * clip = encoding is impossible 47090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 47100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */ 47110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR M4MCS_getExtendedEncodingParams( M4MCS_Context pContext, 47120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_EncodingParams *pRates ) 47130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 47140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_InternalContext *pC = (M4MCS_InternalContext *)(pContext); 47150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 47160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int32 minaudiobitrate; 47170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int32 minvideobitrate; 47180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int32 maxcombinedbitrate; 47190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 47200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int32 calcbitrate; 47210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 47220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 maxduration; 47230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 calcduration; 47240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 47250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Bool fixed_audio = M4OSA_FALSE; 47260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Bool fixed_video = M4OSA_FALSE; 47270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 47280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#ifdef M4MCS_SUPPORT_STILL_PICTURE 47290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 47300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->m_bIsStillPicture ) 47310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 47320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 47330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Call the corresponding still picture MCS function*/ 47340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_stillPicGetExtendedEncodingParams(pC, pRates); 47350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 47360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 47370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#endif /*M4MCS_SUPPORT_STILL_PICTURE*/ 47380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 47390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pRates->OutputVideoBitrate = 47400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_intGetNearestBitrate(pC->uiVideoBitrate, 0); 47410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pRates->OutputAudioBitrate = 47420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_intGetNearestBitrate(pC->uiAudioBitrate, 0); 47430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pRates->BeginCutTime = pC->uiBeginCutTime; 47440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pRates->EndCutTime = pC->uiEndCutTime; 47450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pRates->OutputFileSize = pC->uiMaxFileSize; 47460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 47470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 47480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Check state automaton */ 47490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4MCS_kState_SET != pC->State ) 47500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 47510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1("M4MCS_getExtendedEncodingParams(): Wrong State (%d),\ 47520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi returning M4ERR_STATE", pC->State); 47530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_STATE; 47540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 47550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 47560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Compute min audio bitrate */ 47570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->noaudio ) 47580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 47590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi fixed_audio = M4OSA_TRUE; 47600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pRates->OutputAudioBitrate = 0; 47610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi minaudiobitrate = 0; 47620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 47630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else if( pC->AudioEncParams.Format == M4ENCODER_kAudioNULL ) 47640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 47650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi fixed_audio = M4OSA_TRUE; 47660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pRates->OutputAudioBitrate = pC->InputFileProperties.uiAudioBitrate; 47670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi minaudiobitrate = pC->InputFileProperties.uiAudioBitrate; 47680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 47690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 47700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 47710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->AudioEncParams.Format == M4ENCODER_kAMRNB ) 47720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 47730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi fixed_audio = M4OSA_TRUE; 47740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pRates->OutputAudioBitrate = M4VIDEOEDITING_k12_2_KBPS; 47750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi minaudiobitrate = M4VIDEOEDITING_k12_2_KBPS; 47760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 47770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi //EVRC 47780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi // if(pC->AudioEncParams.Format == M4ENCODER_kEVRC) 47790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi // { 47800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi // fixed_audio = M4OSA_TRUE; 47810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi // pRates->OutputAudioBitrate = M4VIDEOEDITING_k9_2_KBPS; 47820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi // minaudiobitrate = M4VIDEOEDITING_k9_2_KBPS; 47830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi // } 47840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*FlB 26.02.2009: add mp3 as mcs output format*/ 47850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else if( pC->AudioEncParams.Format == M4ENCODER_kMP3 ) 47860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 47870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi minaudiobitrate = 47880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4VIDEOEDITING_k32_KBPS; /*Default min audio bitrate for MPEG layer 1, 47890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi for both mono and stereo channels*/ 47900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 47910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 47920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 47930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi minaudiobitrate = (pC->AudioEncParams.ChannelNum == M4ENCODER_kMono) 47940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ? M4VIDEOEDITING_k16_KBPS : M4VIDEOEDITING_k32_KBPS; 47950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 47960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 47970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 47980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Check audio bitrate is in the correct range */ 47990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( fixed_audio == M4OSA_FALSE ) 48000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 48010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( pC->uiAudioBitrate > 0) 48020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (pRates->OutputAudioBitrate < minaudiobitrate) ) 48030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 48040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pRates->OutputAudioBitrate = minaudiobitrate; 48050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 48060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 48070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pRates->OutputAudioBitrate > M4VIDEOEDITING_k96_KBPS ) 48080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 48090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pRates->OutputAudioBitrate = M4VIDEOEDITING_k96_KBPS; 48100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 48110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 48120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 48130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Compute min video bitrate */ 48140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->novideo ) 48150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 48160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi fixed_video = M4OSA_TRUE; 48170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pRates->OutputVideoBitrate = 0; 48180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi minvideobitrate = 0; 48190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 48200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else if( pC->EncodingVideoFormat == M4ENCODER_kNULL ) 48210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 48220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi fixed_video = M4OSA_TRUE; 48230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pRates->OutputVideoBitrate = pC->InputFileProperties.uiVideoBitrate; 48240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi minvideobitrate = pC->InputFileProperties.uiVideoBitrate; 48250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 48260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 48270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 48280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi minvideobitrate = M4VIDEOEDITING_k16_KBPS; 48290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 48300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 48310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Check video bitrate is in the correct range */ 48320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( fixed_video == M4OSA_FALSE ) 48330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 48340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( pC->uiVideoBitrate > 0) 48350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (pRates->OutputVideoBitrate < minvideobitrate) ) 48360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 48370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pRates->OutputVideoBitrate = minvideobitrate; 48380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 48390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*+ New Encoder bitrates */ 48400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pRates->OutputVideoBitrate > M4VIDEOEDITING_k8_MBPS ) 48410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 48420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pRates->OutputVideoBitrate = M4VIDEOEDITING_k8_MBPS; 48430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 48440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*- New Encoder bitrates */ 48450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 48460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 48470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Check cut times are in correct range */ 48480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( pRates->BeginCutTime >= pC->InputFileProperties.uiClipDuration) 48490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi || (( pRates->BeginCutTime >= pRates->EndCutTime) 48500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (pRates->EndCutTime > 0)) ) 48510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 48520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pRates->BeginCutTime = 0; 48530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pRates->EndCutTime = 0; 48540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 48550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 48560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pRates->EndCutTime == 0 ) 48570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi calcduration = 48580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.uiClipDuration - pRates->BeginCutTime; 48590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 48600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi calcduration = pRates->EndCutTime - pRates->BeginCutTime; 48610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 48620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* priority 1 : max file size */ 48630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pRates->OutputFileSize == 0 ) 48640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 48650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* we can put maximum values for all undefined parameters */ 48660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pRates->EndCutTime == 0 ) 48670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 48680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pRates->EndCutTime = pC->InputFileProperties.uiClipDuration; 48690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 48700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 48710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( pRates->OutputAudioBitrate == M4VIDEOEDITING_kUndefinedBitrate) 48720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (fixed_audio == M4OSA_FALSE) ) 48730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 48740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pRates->OutputAudioBitrate = M4VIDEOEDITING_k96_KBPS; 48750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 48760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 48770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( pRates->OutputVideoBitrate == M4VIDEOEDITING_kUndefinedBitrate) 48780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (fixed_video == M4OSA_FALSE) ) 48790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 48800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*+ New Encoder bitrates */ 48810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pRates->OutputVideoBitrate = M4VIDEOEDITING_k8_MBPS; 48820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*- New Encoder bitrates */ 48830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 48840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 48850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 48860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 48870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* compute max duration */ 48880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi maxduration = (M4OSA_UInt32)(pRates->OutputFileSize 48890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi / M4MCS_MOOV_OVER_FILESIZE_RATIO 48900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi / (minvideobitrate + minaudiobitrate) * 8000.0); 48910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 48920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( maxduration 48930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi + pRates->BeginCutTime > pC->InputFileProperties.uiClipDuration ) 48940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 48950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi maxduration = 48960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.uiClipDuration - pRates->BeginCutTime; 48970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 48980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 48990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* priority 2 : cut times */ 49000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( pRates->BeginCutTime > 0) || (pRates->EndCutTime > 0) ) 49010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 49020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( calcduration > maxduration ) 49030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 49040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi calcduration = maxduration; 49050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 49060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 49070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( calcduration == 0 ) 49080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 49090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_ERR_BEGIN_CUT_EQUALS_END_CUT; 49100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 49110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 49120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi maxcombinedbitrate = (M4OSA_UInt32)(pRates->OutputFileSize 49130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi / M4MCS_MOOV_OVER_FILESIZE_RATIO / (calcduration / 8000.0)); 49140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 49150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* audio and video bitrates */ 49160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( pRates->OutputAudioBitrate 49170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi == M4VIDEOEDITING_kUndefinedBitrate) 49180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (pRates->OutputVideoBitrate 49190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi == M4VIDEOEDITING_kUndefinedBitrate) ) 49200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 49210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* set audio = 1/3 and video = 2/3 */ 49220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( fixed_audio == M4OSA_FALSE ) 49230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 49240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->novideo ) 49250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pRates->OutputAudioBitrate = 49260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_intGetNearestBitrate(maxcombinedbitrate, 0); 49270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 49280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pRates->OutputAudioBitrate = 49290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_intGetNearestBitrate(maxcombinedbitrate / 3, 49300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 0); 49310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 49320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pRates->OutputAudioBitrate < minaudiobitrate ) 49330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pRates->OutputAudioBitrate = minaudiobitrate; 49340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 49350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pRates->OutputAudioBitrate > M4VIDEOEDITING_k96_KBPS ) 49360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pRates->OutputAudioBitrate = M4VIDEOEDITING_k96_KBPS; 49370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 49380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 49390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( fixed_video == M4OSA_FALSE ) 49400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 49410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pRates->OutputVideoBitrate = 49420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_intGetNearestBitrate(maxcombinedbitrate 49430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi - pRates->OutputAudioBitrate, 0); 49440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 49450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pRates->OutputVideoBitrate < minvideobitrate ) 49460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pRates->OutputVideoBitrate = minvideobitrate; 49470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 49480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pRates->OutputVideoBitrate > M4VIDEOEDITING_k8_MBPS ) 49490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pRates->OutputVideoBitrate = 49500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4VIDEOEDITING_k8_MBPS; /*+ New Encoder 49510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bitrates */ 49520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 49530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 49540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 49550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 49560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* priority 3 : audio bitrate */ 49570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pRates->OutputAudioBitrate 49580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi != M4VIDEOEDITING_kUndefinedBitrate ) 49590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 49600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi while( ( fixed_audio == M4OSA_FALSE) 49610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (pRates->OutputAudioBitrate >= minaudiobitrate) 49620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (pRates->OutputAudioBitrate 49630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi + minvideobitrate > maxcombinedbitrate) ) 49640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 49650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pRates->OutputAudioBitrate = 49660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_intGetNearestBitrate( 49670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pRates->OutputAudioBitrate, -1); 49680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 49690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 49700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( fixed_audio == M4OSA_FALSE) 49710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (pRates->OutputAudioBitrate < minaudiobitrate) ) 49720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 49730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pRates->OutputAudioBitrate = minaudiobitrate; 49740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 49750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 49760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi calcbitrate = M4MCS_intGetNearestBitrate( 49770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi maxcombinedbitrate 49780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi - pRates->OutputAudioBitrate, 0); 49790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 49800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( calcbitrate < minvideobitrate ) 49810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi calcbitrate = minvideobitrate; 49820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 49830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( calcbitrate > M4VIDEOEDITING_k8_MBPS ) 49840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi calcbitrate = M4VIDEOEDITING_k8_MBPS; 49850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 49860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( fixed_video == M4OSA_FALSE) 49870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (( pRates->OutputVideoBitrate 49880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi == M4VIDEOEDITING_kUndefinedBitrate) 49890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi || (pRates->OutputVideoBitrate > calcbitrate)) ) 49900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 49910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pRates->OutputVideoBitrate = calcbitrate; 49920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 49930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 49940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 49950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 49960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* priority 4 : video bitrate */ 49970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pRates->OutputVideoBitrate 49980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi != M4VIDEOEDITING_kUndefinedBitrate ) 49990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 50000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi while( ( fixed_video == M4OSA_FALSE) 50010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (pRates->OutputVideoBitrate >= minvideobitrate) 50020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (pRates->OutputVideoBitrate 50030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi + minaudiobitrate > maxcombinedbitrate) ) 50040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 50050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pRates->OutputVideoBitrate = 50060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_intGetNearestBitrate( 50070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pRates->OutputVideoBitrate, -1); 50080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 50090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 50100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( fixed_video == M4OSA_FALSE) 50110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (pRates->OutputVideoBitrate < minvideobitrate) ) 50120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 50130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pRates->OutputVideoBitrate = minvideobitrate; 50140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 50150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 50160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi calcbitrate = 50170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_intGetNearestBitrate(maxcombinedbitrate 50180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi - pRates->OutputVideoBitrate, 0); 50190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 50200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( calcbitrate < minaudiobitrate ) 50210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi calcbitrate = minaudiobitrate; 50220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 50230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( calcbitrate > M4VIDEOEDITING_k96_KBPS ) 50240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi calcbitrate = M4VIDEOEDITING_k96_KBPS; 50250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 50260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( fixed_audio == M4OSA_FALSE) 50270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (( pRates->OutputAudioBitrate 50280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi == M4VIDEOEDITING_kUndefinedBitrate) 50290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi || (pRates->OutputAudioBitrate > calcbitrate)) ) 50300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 50310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pRates->OutputAudioBitrate = calcbitrate; 50320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 50330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 50340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 50350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 50360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 50370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 50380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 50390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* priority 3 : audio bitrate */ 50400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pRates->OutputAudioBitrate != M4VIDEOEDITING_kUndefinedBitrate ) 50410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 50420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* priority 4 : video bitrate */ 50430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pRates->OutputVideoBitrate 50440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi != M4VIDEOEDITING_kUndefinedBitrate ) 50450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 50460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* compute max duration */ 50470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi maxduration = (M4OSA_UInt32)(pRates->OutputFileSize 50480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi / M4MCS_MOOV_OVER_FILESIZE_RATIO 50490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi / (pRates->OutputVideoBitrate 50500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi + pRates->OutputAudioBitrate) * 8000.0); 50510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 50520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( maxduration + pRates->BeginCutTime 50530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi > pC->InputFileProperties.uiClipDuration ) 50540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 50550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi maxduration = pC->InputFileProperties.uiClipDuration 50560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi - pRates->BeginCutTime; 50570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 50580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 50590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( calcduration > maxduration ) 50600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 50610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi calcduration = maxduration; 50620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 50630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 50640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( calcduration == 0 ) 50650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 50660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_ERR_BEGIN_CUT_EQUALS_END_CUT; 50670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 50680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 50690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 50700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 50710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* start with min video bitrate */ 50720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pRates->OutputVideoBitrate = minvideobitrate; 50730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 50740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* compute max duration */ 50750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi maxduration = (M4OSA_UInt32)(pRates->OutputFileSize 50760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi / M4MCS_MOOV_OVER_FILESIZE_RATIO 50770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi / (pRates->OutputVideoBitrate 50780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi + pRates->OutputAudioBitrate) * 8000.0); 50790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 50800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( maxduration + pRates->BeginCutTime 50810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi > pC->InputFileProperties.uiClipDuration ) 50820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 50830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi maxduration = pC->InputFileProperties.uiClipDuration 50840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi - pRates->BeginCutTime; 50850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 50860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 50870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( calcduration > maxduration ) 50880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 50890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi calcduration = maxduration; 50900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 50910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 50920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( calcduration == 0 ) 50930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 50940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_ERR_BEGIN_CUT_EQUALS_END_CUT; 50950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 50960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 50970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* search max possible video bitrate */ 50980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi maxcombinedbitrate = (M4OSA_UInt32)(pRates->OutputFileSize 50990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi / M4MCS_MOOV_OVER_FILESIZE_RATIO 51000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi / (calcduration / 8000.0)); 51010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 51020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi while( ( fixed_video == M4OSA_FALSE) 51030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (pRates->OutputVideoBitrate 51040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi < M4VIDEOEDITING_k8_MBPS) ) /*+ New Encoder bitrates */ 51050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 51060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi calcbitrate = M4MCS_intGetNearestBitrate( 51070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pRates->OutputVideoBitrate, +1); 51080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 51090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( calcbitrate 51100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi + pRates->OutputAudioBitrate <= maxcombinedbitrate ) 51110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pRates->OutputVideoBitrate = calcbitrate; 51120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 51130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 51140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 51150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 51160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 51170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 51180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 51190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* priority 4 : video bitrate */ 51200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pRates->OutputVideoBitrate 51210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi != M4VIDEOEDITING_kUndefinedBitrate ) 51220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 51230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* start with min audio bitrate */ 51240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pRates->OutputAudioBitrate = minaudiobitrate; 51250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 51260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* compute max duration */ 51270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi maxduration = (M4OSA_UInt32)(pRates->OutputFileSize 51280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi / M4MCS_MOOV_OVER_FILESIZE_RATIO 51290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi / (pRates->OutputVideoBitrate 51300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi + pRates->OutputAudioBitrate) * 8000.0); 51310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 51320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( maxduration + pRates->BeginCutTime 51330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi > pC->InputFileProperties.uiClipDuration ) 51340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 51350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi maxduration = pC->InputFileProperties.uiClipDuration 51360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi - pRates->BeginCutTime; 51370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 51380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 51390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( calcduration > maxduration ) 51400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 51410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi calcduration = maxduration; 51420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 51430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 51440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( calcduration == 0 ) 51450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 51460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_ERR_BEGIN_CUT_EQUALS_END_CUT; 51470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 51480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 51490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* search max possible audio bitrate */ 51500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi maxcombinedbitrate = (M4OSA_UInt32)(pRates->OutputFileSize 51510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi / M4MCS_MOOV_OVER_FILESIZE_RATIO 51520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi / (calcduration / 8000.0)); 51530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 51540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi while( ( fixed_audio == M4OSA_FALSE) 51550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (pRates->OutputAudioBitrate 51560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi < M4VIDEOEDITING_k96_KBPS) ) 51570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 51580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi calcbitrate = M4MCS_intGetNearestBitrate( 51590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pRates->OutputAudioBitrate, +1); 51600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 51610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( calcbitrate 51620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi + pRates->OutputVideoBitrate <= maxcombinedbitrate ) 51630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pRates->OutputAudioBitrate = calcbitrate; 51640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 51650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 51660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 51670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 51680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 51690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 51700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* compute max duration */ 51710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi maxduration = (M4OSA_UInt32)(pRates->OutputFileSize 51720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi / M4MCS_MOOV_OVER_FILESIZE_RATIO 51730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi / (minvideobitrate + minaudiobitrate) * 8000.0); 51740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 51750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( maxduration + pRates->BeginCutTime 51760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi > pC->InputFileProperties.uiClipDuration ) 51770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 51780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi maxduration = pC->InputFileProperties.uiClipDuration 51790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi - pRates->BeginCutTime; 51800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 51810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 51820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( calcduration > maxduration ) 51830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 51840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi calcduration = maxduration; 51850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 51860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 51870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( calcduration == 0 ) 51880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 51890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_ERR_BEGIN_CUT_EQUALS_END_CUT; 51900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 51910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 51920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* set audio = 1/3 and video = 2/3 */ 51930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi maxcombinedbitrate = (M4OSA_UInt32)(pRates->OutputFileSize 51940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi / M4MCS_MOOV_OVER_FILESIZE_RATIO 51950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi / (calcduration / 8000.0)); 51960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 51970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( fixed_audio == M4OSA_FALSE ) 51980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 51990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->novideo ) 52000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pRates->OutputAudioBitrate = 52010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_intGetNearestBitrate(maxcombinedbitrate, 52020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 0); 52030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 52040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pRates->OutputAudioBitrate = 52050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_intGetNearestBitrate(maxcombinedbitrate 52060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi / 3, 0); 52070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 52080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pRates->OutputAudioBitrate < minaudiobitrate ) 52090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pRates->OutputAudioBitrate = minaudiobitrate; 52100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 52110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pRates->OutputAudioBitrate 52120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi > M4VIDEOEDITING_k96_KBPS ) 52130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pRates->OutputAudioBitrate = 52140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4VIDEOEDITING_k96_KBPS; 52150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 52160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 52170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( fixed_video == M4OSA_FALSE ) 52180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 52190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pRates->OutputVideoBitrate = 52200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_intGetNearestBitrate(maxcombinedbitrate 52210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi - pRates->OutputAudioBitrate, 0); 52220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 52230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pRates->OutputVideoBitrate < minvideobitrate ) 52240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pRates->OutputVideoBitrate = minvideobitrate; 52250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 52260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pRates->OutputVideoBitrate 52270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi > M4VIDEOEDITING_k8_MBPS ) 52280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pRates->OutputVideoBitrate = 52290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4VIDEOEDITING_k8_MBPS; /*+ New Encoder 52300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bitrates */ 52310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 52320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 52330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 52340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 52350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 52360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 52370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* recompute max duration with final bitrates */ 52380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pRates->OutputFileSize > 0 ) 52390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 52400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi maxduration = (M4OSA_UInt32)(pRates->OutputFileSize 52410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi / M4MCS_MOOV_OVER_FILESIZE_RATIO 52420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi / (pRates->OutputVideoBitrate + pRates->OutputAudioBitrate) 52430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * 8000.0); 52440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 52450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 52460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 52470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi maxduration = pC->InputFileProperties.uiClipDuration; 52480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 52490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 52500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( maxduration 52510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi + pRates->BeginCutTime > pC->InputFileProperties.uiClipDuration ) 52520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 52530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi maxduration = 52540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.uiClipDuration - pRates->BeginCutTime; 52550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 52560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 52570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pRates->EndCutTime == 0 ) 52580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 52590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pRates->EndCutTime = pRates->BeginCutTime + maxduration; 52600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 52610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 52620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 52630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi calcduration = pRates->EndCutTime - pRates->BeginCutTime; 52640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 52650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( calcduration > maxduration ) 52660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 52670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pRates->EndCutTime = pRates->BeginCutTime + maxduration; 52680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 52690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 52700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 52710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Should never happen : constraints are too strong */ 52720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pRates->EndCutTime == pRates->BeginCutTime ) 52730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 52740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_ERR_BEGIN_CUT_EQUALS_END_CUT; 52750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 52760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 52770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* estimated resulting file size */ 52780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pRates->OutputFileSize = (M4OSA_UInt32)(M4MCS_MOOV_OVER_FILESIZE_RATIO 52790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * (pRates->OutputVideoBitrate + pRates->OutputAudioBitrate) 52800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * (( pRates->EndCutTime - pRates->BeginCutTime) / 8000.0)); 52810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 52820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4NO_ERROR; 52830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 52840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 52850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 52860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 52870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_ERR M4MCS_checkParamsAndStart(M4MCS_Context pContext) 52880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief Check parameters to start 52890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @note 52900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param pContext (IN) MCS context 52910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4NO_ERROR: No error 52920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4ERR_PARAMETER: At least one parameter is M4OSA_NULL (debug only) 52930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4ERR_STATE: MCS is not in an appropriate state for 52940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * this function to be called 52950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4MCS_ERR_AUDIOBITRATE_TOO_HIGH: 52960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Audio bitrate too high (we limit to 96 kbps) 52970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4MCS_ERR_AUDIOBITRATE_TOO_LOW: 52980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Audio bitrate is too low (16 kbps min for aac, 52990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * 12.2 for amr, 8 for mp3) 53000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4MCS_ERR_BEGIN_CUT_EQUALS_END_CUT: 53010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Begin cut and End cut are equals 53020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4MCS_ERR_BEGIN_CUT_LARGER_THAN_DURATION: 53030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Begin cut time is larger than the input 53040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * clip duration 53050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4MCS_ERR_END_CUT_SMALLER_THAN_BEGIN_CUT: 53060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * End cut time is smaller than begin cut time 53070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4MCS_ERR_MAXFILESIZE_TOO_SMALL: 53080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Not enough space to store whole output 53090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * file at given bitrates 53100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4MCS_ERR_VIDEOBITRATE_TOO_HIGH: 53110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Video bitrate too high (we limit to 800 kbps) 53120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4MCS_ERR_VIDEOBITRATE_TOO_LOW: 53130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Video bitrate too low 53140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 53150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */ 53160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR M4MCS_checkParamsAndStart( M4MCS_Context pContext ) 53170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 53180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_InternalContext *pC = (M4MCS_InternalContext *)(pContext); 53190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_EncodingParams VerifyRates; 53200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_ERR err; 53210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 53220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 53230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Check input parameters */ 53240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL == pContext), M4ERR_PARAMETER, 53250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_checkParamsAndStart: pContext is M4OSA_NULL"); 53260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 53270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#ifdef M4MCS_SUPPORT_STILL_PICTURE 53280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 53290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->m_bIsStillPicture ) 53300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 53310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 53320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Call the corresponding still picture MCS function*/ 53330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_stillPicCheckParamsAndStart(pC); 53340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 53350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 53360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#endif /*M4MCS_SUPPORT_STILL_PICTURE*/ 53370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 53380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 53390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Check state automaton */ 53400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 53410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4MCS_kState_SET != pC->State ) 53420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 53430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 53440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_checkParamsAndStart(): Wrong State (%d), returning M4ERR_STATE", 53450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->State); 53460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_STATE; 53470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 53480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 53490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Audio bitrate should not stay undefined at this point */ 53500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( pC->noaudio == M4OSA_FALSE) 53510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (pC->AudioEncParams.Format != M4ENCODER_kAudioNULL) 53520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (pC->uiAudioBitrate == M4VIDEOEDITING_kUndefinedBitrate) ) 53530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 53540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_0("M4MCS_checkParamsAndStart : undefined audio bitrate"); 53550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_ERR_AUDIOBITRATE_TOO_LOW; 53560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 53570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 53580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Video bitrate should not stay undefined at this point */ 53590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( pC->novideo == M4OSA_FALSE) 53600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (pC->EncodingVideoFormat != M4ENCODER_kNULL) 53610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (pC->uiVideoBitrate == M4VIDEOEDITING_kUndefinedBitrate) ) 53620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 53630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_0("M4MCS_checkParamsAndStart : undefined video bitrate"); 53640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_ERR_VIDEOBITRATE_TOO_LOW; 53650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 53660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 53670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Set end cut time if necessary (not an error) */ 53680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->uiEndCutTime == 0 ) 53690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 53700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->uiEndCutTime = pC->InputFileProperties.uiClipDuration; 53710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 53720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 53730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Force a re-set to check validity of parameters */ 53740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VerifyRates.OutputVideoBitrate = pC->uiVideoBitrate; 53750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VerifyRates.OutputAudioBitrate = pC->uiAudioBitrate; 53760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VerifyRates.BeginCutTime = pC->uiBeginCutTime; 53770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VerifyRates.EndCutTime = pC->uiEndCutTime; 53780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VerifyRates.OutputFileSize = pC->uiMaxFileSize; 53790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VerifyRates.OutputVideoTimescale = pC->outputVideoTimescale; 53800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 53810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MCS_setEncodingParams(pContext, &VerifyRates); 53820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 53830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 53840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Check parameters consistency */ 53850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( err != M4NO_ERROR ) 53860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 53870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_0("M4MCS_checkParamsAndStart : invalid parameter found"); 53880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 53890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 53900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 53910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 53920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * All is OK : update state automaton */ 53930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->uiEncVideoBitrate = pC->uiVideoBitrate; 53940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.Bitrate = pC->uiAudioBitrate; 53950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 53960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#ifdef M4MCS_WITH_FAST_OPEN 53970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 53980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Remake the open if it was done in fast mode */ 53990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 54000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4OSA_TRUE == pC->bFileOpenedInFastMode ) 54010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 54020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Close the file opened in fast mode */ 54030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_intCleanUp_ReadersDecoders(pC); 54040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 54050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->State = M4MCS_kState_CREATED; 54060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 54070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Reopen it in normal mode */ 54080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MCS_open(pContext, pC->pInputFile, pC->InputFileType, 54090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pOutputFile, pC->pTemporaryFile); 54100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 54110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( err != M4NO_ERROR ) 54120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 54130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 54140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_checkParamsAndStart : M4MCS_Open returns 0x%x", err); 54150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 54160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 54170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 54180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 54190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#endif /* M4MCS_WITH_FAST_OPEN */ 54200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 54210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->State = M4MCS_kState_READY; 54220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 54230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4NO_ERROR; 54240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 54250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 54260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 54270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 54280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_ERR M4MCS_intStepSet(M4MCS_InternalContext* pC) 54290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 54300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */ 54310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4OSA_ERR M4MCS_intStepSet( M4MCS_InternalContext *pC ) 54320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 54330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_ERR err; 54340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4ENCODER_Header *encHeader; 54350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 54360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 54370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Prepare the video decoder */ 54380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MCS_intPrepareVideoDecoder(pC); 54390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 54400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR != err ) 54410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 54420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 54430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intStepSet(): M4MCS_intPrepareVideoDecoder() returns 0x%x", 54440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 54450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 54460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 54470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 54480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( pC->InputFileProperties.VideoStreamType == M4VIDEOEDITING_kH264) 54490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (pC->EncodingVideoFormat == M4ENCODER_kNULL) ) 54500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 54510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->bH264Trim = M4OSA_TRUE; 54520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 54530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 54540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 54550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Prepare the video encoder */ 54560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MCS_intPrepareVideoEncoder(pC); 54570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 54580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR != err ) 54590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 54600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 54610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intStepSet(): M4MCS_intPrepareVideoEncoder() returns 0x%x", 54620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 54630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 54640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 54650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 54660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( pC->uiBeginCutTime != 0) 54670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (pC->InputFileProperties.VideoStreamType == M4VIDEOEDITING_kH264) 54680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (pC->EncodingVideoFormat == M4ENCODER_kNULL) ) 54690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 54700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 54710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->pVideoEncoderGlobalFcts->pFctSetOption(pC->pViEncCtxt, 54720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4ENCODER_kOptionID_H264ProcessNALUContext, 54730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_DataOption)pC->m_pInstance); 54740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 54750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( err != M4NO_ERROR ) 54760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 54770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1("M4MCS_intStetSet :pFctSetOption failed (err 0x%x)", 54780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 54790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 54800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 54810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 54820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->pVideoEncoderGlobalFcts->pFctSetOption(pC->pViEncCtxt, 54830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4ENCODER_kOptionID_SetH264ProcessNALUfctsPtr, 54840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_DataOption) &H264MCS_ProcessEncodedNALU); 54850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 54860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( err != M4NO_ERROR ) 54870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 54880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1("M4MCS_intStetSet :pFctSetOption failed (err 0x%x)", 54890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 54900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 54910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 54920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 54930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->pVideoEncoderGlobalFcts->pFctGetOption(pC->pViEncCtxt, 54940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4ENCODER_kOptionID_EncoderHeader, 54950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_DataOption) &encHeader); 54960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 54970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( M4NO_ERROR != err) || (M4OSA_NULL == encHeader->pBuf) ) 54980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 54990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 55000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_close: failed to get the encoder header (err 0x%x)", 55010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 55020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /**< no return here, we still have stuff to deallocate after close, even if it fails.*/ 55030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 55040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 55050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 55060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi // Handle DSI first bits 55070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#define SPS_START_POS 6 55080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 55090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->m_pInstance->m_encoderSPSSize = 55100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ( encHeader->pBuf[SPS_START_POS] << 8) 55110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi + encHeader->pBuf[SPS_START_POS + 1]; 55120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->m_pInstance->m_pEncoderSPS = 55130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_UInt8 *)(encHeader->pBuf) + SPS_START_POS + 2; 55140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 55150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->m_pInstance->m_encoderPPSSize = 55160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ( encHeader->pBuf[SPS_START_POS + 3 55170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi + pC->m_pInstance->m_encoderSPSSize] << 8) 55180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi + encHeader->pBuf[SPS_START_POS + 4 55190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi + pC->m_pInstance->m_encoderSPSSize]; 55200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->m_pInstance->m_pEncoderPPS = (M4OSA_UInt8 *)encHeader->pBuf + SPS_START_POS + 5 55210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi + pC->m_pInstance->m_encoderSPSSize; 55220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 55230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Check the DSI integrity */ 55240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( encHeader->Size != (pC->m_pInstance->m_encoderSPSSize 55250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi + pC->m_pInstance->m_encoderPPSSize + 5 + SPS_START_POS) ) 55260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 55270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_3( 55280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "!!! M4MCS_intStepSet ERROR : invalid SPS / PPS %d %d %d", 55290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi encHeader->Size, pC->m_pInstance->m_encoderSPSSize, 55300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->m_pInstance->m_encoderPPSSize); 55310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_PARAMETER; 55320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 55330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 55340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 55350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 55360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 55370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Prepare audio processing */ 55380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MCS_intPrepareAudioProcessing(pC); 55390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 55400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR != err ) 55410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 55420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 55430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intStepSet(): M4MCS_intPrepareAudioProcessing() returns 0x%x", 55440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 55450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 55460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 55470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 55480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 55490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Prepare the writer */ 55500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MCS_intPrepareWriter(pC); 55510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 55520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR != err ) 55530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 55540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 55550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intStepSet(): M4MCS_intPrepareWriter() returns 0x%x", err); 55560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 55570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 55580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 55590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 55600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Jump the audio stream to the begin cut time (all AUs are RAP) 55610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Must be done after the 3gpp writer init, because it may write the first 55620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * audio AU in some cases */ 55630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MCS_intPrepareAudioBeginCut(pC); 55640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 55650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR != err ) 55660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 55670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 55680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intStepSet(): M4MCS_intPrepareAudioBeginCut() returns 0x%x", 55690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 55700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 55710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 55720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 55730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 55740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Update state automaton */ 55750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( 0 == pC->uiBeginCutTime ) 55760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 55770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->dViDecStartingCts = 0.0; 55780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 55790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * No begin cut, do the encoding */ 55800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->State = M4MCS_kState_PROCESSING; 55810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 55820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 55830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 55840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 55850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Remember that we must start the decode/encode process at the begin cut time */ 55860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->dViDecStartingCts = (M4OSA_Double)pC->uiBeginCutTime; 55870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 55880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 55890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Jumping */ 55900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->State = M4MCS_kState_BEGINVIDEOJUMP; 55910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 55920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 55930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 55940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Return with no error */ 55950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_0("M4MCS_intStepSet(): returning M4NO_ERROR"); 55960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4NO_ERROR; 55970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 55980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 55990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 56000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 56010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_ERR M4MCS_intPrepareVideoDecoder(M4MCS_InternalContext* pC); 56020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief Prepare the video decoder. 56030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param pC (IN) MCS private context 56040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4NO_ERROR No error 56050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4MCS_ERR_H263_PROFILE_NOT_SUPPORTED 56060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return Any error returned by an underlaying module 56070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 56080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */ 56090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4OSA_ERR M4MCS_intPrepareVideoDecoder( M4MCS_InternalContext *pC ) 56100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 56110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_ERR err; 56120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Void *decoderUserData; 56130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4DECODER_OutputFilter FilterOption; 56140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 56150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->novideo ) 56160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4NO_ERROR; 56170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 56180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 56190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Create the decoder, if it has not been created yet (to get video properties for example) */ 56200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4OSA_NULL == pC->pViDecCtxt ) 56210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 56220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#ifdef M4VSS_ENABLE_EXTERNAL_DECODERS 56230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 56240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi decoderUserData = pC->m_pCurrentVideoDecoderUserData; 56250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 56260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#else 56270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 56280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi decoderUserData = M4OSA_NULL; 56290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 56300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#endif /* M4VSS_ENABLE_EXTERNAL_DECODERS ? */ 56310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 56320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->m_pVideoDecoder->m_pFctCreate(&pC->pViDecCtxt, 5633b37a9417647c43d6d2713807ed441737c32629f3Chih-Chung Chang &pC->pReaderVideoStream->m_basicProperties, pC->m_pReader, 5634b37a9417647c43d6d2713807ed441737c32629f3Chih-Chung Chang pC->m_pReaderDataIt, &pC->ReaderVideoAU, decoderUserData); 56350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 56360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( (M4OSA_UInt32)(M4ERR_DECODER_H263_PROFILE_NOT_SUPPORTED) == err ) 56370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 56380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 56390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Our decoder is not compatible with H263 profile other than 0. 56400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * So it returns this internal error code. 56410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * We translate it to our own error code */ 56420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_0("M4MCS_intPrepareVideoDecoder:\ 56430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi returning M4MCS_ERR_H263_PROFILE_NOT_SUPPORTED"); 56440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_ERR_H263_PROFILE_NOT_SUPPORTED; 56450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 56460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else if( M4NO_ERROR != err ) 56470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 56480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1("M4MCS_intPrepareVideoDecoder:\ 56490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi m_pVideoDecoder->m_pFctCreate returns 0x%x", err); 56500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 56510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 56520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 56530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4VIDEOEDITING_kH264 == pC->InputFileProperties.VideoStreamType ) 56540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 56550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi FilterOption.m_pFilterFunction = 56560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_Void *) &M4VIFI_ResizeBilinearYUV420toYUV420; 56570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi FilterOption.m_pFilterUserData = M4OSA_NULL; 56580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->m_pVideoDecoder->m_pFctSetOption(pC->pViDecCtxt, 56590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4DECODER_kOptionID_OutputFilter, 56600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_DataOption) &FilterOption); 56610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 56620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR != err ) 56630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 56640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1("M4MCS_intPrepareVideoDecoder:\ 56650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi m_pVideoDecoder->m_pFctSetOption returns 0x%x", err); 56660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 56670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 56680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 56690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 56700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 56710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 56720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Return with no error */ 56730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_0("M4MCS_intPrepareVideoDecoder(): returning M4NO_ERROR"); 56740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4NO_ERROR; 56750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 56760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 56770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 56780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 56790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_ERR M4MCS_intPrepareVideoEncoder(M4MCS_InternalContext* pC); 56800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief Prepare the video encoder. 56810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param pC (IN) MCS private context 56820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4NO_ERROR No error 56830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return Any error returned by an underlaying module 56840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 56850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */ 56860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4OSA_ERR M4MCS_intPrepareVideoEncoder( M4MCS_InternalContext *pC ) 56870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 56880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_ERR err; 56890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4ENCODER_AdvancedParams EncParams; /**< Encoder advanced parameters */ 56900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4ENCODER_Params EncParams1; 56910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Double dFrameRate; /**< tmp variable */ 56920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 56930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->novideo ) 56940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4NO_ERROR; 56950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 56960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->EncodingVideoFormat == M4ENCODER_kNULL ) 56970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 56980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Approximative cts increment */ 56990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->dCtsIncrement = 1000.0 / pC->pReaderVideoStream->m_averageFrameRate; 57000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 57010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->uiBeginCutTime == 0 ) 57020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 57030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_0( 57040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intPrepareVideoEncoder(): Null encoding, do nothing."); 57050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4NO_ERROR; 57060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 57070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 57080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 57090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_0( 57100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intPrepareVideoEncoder(): Null encoding, I-frame defaults."); 57110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 57120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Set useful parameters to encode the first I-frame */ 57130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi EncParams.InputFormat = M4ENCODER_kIYUV420; 5714803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury EncParams.videoProfile = pC->encodingVideoProfile; 5715803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury EncParams.videoLevel= pC->encodingVideoLevel; 57160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 57170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi switch( pC->InputFileProperties.VideoStreamType ) 57180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 57190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_kH263: 57200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi EncParams.Format = M4ENCODER_kH263; 57210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 57220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 57230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_kMPEG4: 57240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi EncParams.Format = M4ENCODER_kMPEG4; 57250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 57260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 57270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_kH264: 57280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi EncParams.Format = M4ENCODER_kH264; 57290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 57300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 57310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi default: 57320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1("M4MCS_intPrepareVideoEncoder: unknown encoding video format\ 57330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (%d), returning M4MCS_WAR_MEDIATYPE_NOT_SUPPORTED", 57340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.VideoStreamType); 57350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_WAR_MEDIATYPE_NOT_SUPPORTED; 57360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 57370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 57380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi EncParams.FrameWidth = pC->EncodingWidth; 57390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi EncParams.FrameHeight = pC->EncodingHeight; 57400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi EncParams.Bitrate = pC->uiEncVideoBitrate; 57410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi EncParams.bInternalRegulation = 57420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_FALSE; /* do not constrain the I-frame */ 57430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi EncParams.FrameRate = pC->EncodingVideoFramerate; 57440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 57450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Other encoding settings (quite all dummy...) */ 57460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi EncParams.uiHorizontalSearchRange = 0; /* use default */ 57470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi EncParams.uiVerticalSearchRange = 0; /* use default */ 57480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi EncParams.bErrorResilience = M4OSA_FALSE; /* no error resilience */ 57490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi EncParams.uiIVopPeriod = 0; /* use default */ 57500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi EncParams.uiMotionEstimationTools = 57510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 0; /* M4V_MOTION_EST_TOOLS_ALL */ 57520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi EncParams.bAcPrediction = M4OSA_TRUE; /* use AC prediction */ 57530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi EncParams.uiStartingQuantizerValue = 5; /* initial QP = 5 */ 57540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi EncParams.bDataPartitioning = 57550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_FALSE; /* no data partitioning */ 57560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 57570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Rate factor */ 57580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi EncParams.uiTimeScale = pC->InputFileProperties.uiVideoTimeScale; 57590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi EncParams.uiRateFactor = 1; 57600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 57610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 57620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 57630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 57640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_0( 57650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intPrepareVideoEncoder(): Normal encoding, set full config."); 57660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 57670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 57680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Set encoder shell parameters according to MCS settings */ 57690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi EncParams.Format = pC->EncodingVideoFormat; 57700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi EncParams.InputFormat = M4ENCODER_kIYUV420; 5771803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury EncParams.videoProfile = pC->encodingVideoProfile; 5772803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury EncParams.videoLevel= pC->encodingVideoLevel; 57730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 57740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 57750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Video frame size */ 57760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi EncParams.FrameWidth = pC->EncodingWidth; 57770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi EncParams.FrameHeight = pC->EncodingHeight; 57780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 57790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 57800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Video bitrate has been previously computed */ 57810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi EncParams.Bitrate = pC->uiEncVideoBitrate; 57820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 57830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 57840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * MCS use the "true" core internal bitrate regulation */ 57850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi EncParams.bInternalRegulation = M4OSA_TRUE; 57860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 57870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 57880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Other encoder settings */ 5789803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury 5790803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury EncParams.uiHorizontalSearchRange = 0; /* use default */ 5791803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury EncParams.uiVerticalSearchRange = 0; /* use default */ 5792803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury EncParams.bErrorResilience = M4OSA_FALSE; /* no error resilience */ 5793803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury EncParams.uiIVopPeriod = 0; /* use default */ 5794803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury EncParams.uiMotionEstimationTools = 5795803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury 0; /* M4V_MOTION_EST_TOOLS_ALL */ 5796803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury EncParams.bAcPrediction = M4OSA_TRUE; /* use AC prediction */ 5797803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury EncParams.uiStartingQuantizerValue = 10; /* initial QP = 10 */ 5798803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury EncParams.bDataPartitioning = 5799803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury M4OSA_FALSE; /* no data partitioning */ 5800803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury 58010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 58020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 58030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Video encoder frame rate and rate factor */ 58040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi EncParams.FrameRate = pC->EncodingVideoFramerate; 58050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi EncParams.uiTimeScale = pC->outputVideoTimescale; 58060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 58070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi switch( pC->EncodingVideoFramerate ) 58080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 58090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4ENCODER_k5_FPS: 58100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi dFrameRate = 5.0; 58110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 58120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 58130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4ENCODER_k7_5_FPS: 58140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi dFrameRate = 7.5; 58150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 58160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 58170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4ENCODER_k10_FPS: 58180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi dFrameRate = 10.0; 58190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 58200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 58210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4ENCODER_k12_5_FPS: 58220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi dFrameRate = 12.5; 58230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 58240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 58250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4ENCODER_k15_FPS: 58260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi dFrameRate = 15.0; 58270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 58280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 58290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4ENCODER_k20_FPS: /**< MPEG-4 only */ 58300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi dFrameRate = 20.0; 58310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 58320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 58330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4ENCODER_k25_FPS: /**< MPEG-4 only */ 58340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi dFrameRate = 25.0; 58350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 58360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 58370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4ENCODER_k30_FPS: 58380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi dFrameRate = 30.0; 58390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 58400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 58410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi default: 58420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 58430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intPrepareVideoEncoder: unknown encoding video frame rate\ 58440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (0x%x), returning M4MCS_ERR_UNDEFINED_OUTPUT_VIDEO_FRAME_RATE", 58450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->EncodingVideoFramerate); 58460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_ERR_UNDEFINED_OUTPUT_VIDEO_FRAME_RATE; 58470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 58480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 58490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 58500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Compute the number of milliseconds between two frames */ 58510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4ENCODER_kH263 == EncParams.Format ) 58520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 58530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->dCtsIncrement = 1001.0 / dFrameRate; 58540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 58550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else /**< MPEG4 or H.264 */ 58560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 58570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->dCtsIncrement = 1000.0 / dFrameRate; 58580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 58590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 58600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 58610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 5862413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury * Limit the video bitrate according to encoder profile 5863413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury * and level */ 5864413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury err = M4MCS_intLimitBitratePerCodecProfileLevel(&EncParams); 5865413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury if (M4NO_ERROR != err) { 5866413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury M4OSA_TRACE1_1( 5867413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury "M4MCS_intPrepareVideoEncoder: limit bitrate returned err \ 5868413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 0x%x", err); 5869413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury return err; 5870413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury } 5871413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 5872413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury /** 58730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Create video encoder */ 58740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->pVideoEncoderGlobalFcts->pFctInit(&pC->pViEncCtxt, 58750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pWriterDataFcts, \ 58760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_intApplyVPP, pC, pC->pCurrentVideoEncoderExternalAPI, \ 58770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pCurrentVideoEncoderUserData); 58780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 58790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /**< We put the MCS context in place of the VPP context */ 58800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR != err ) 58810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 58820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 58830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intPrepareVideoEncoder: EncoderInt->pFctInit returns 0x%x", 58840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 58850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 58860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 58870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 58880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->encoderState = M4MCS_kEncoderClosed; 58890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 58900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4OSA_TRUE == pC->bH264Trim ) 58910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi //if((M4ENCODER_kNULL == pC->EncodingVideoFormat) 58920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi // && (M4VIDEOEDITING_kH264 == pC->InputFileProperties.VideoStreamType)) 58930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 58940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi EncParams1.InputFormat = EncParams.InputFormat; 58950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi //EncParams1.InputFrameWidth = EncParams.InputFrameWidth; 58960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi //EncParams1.InputFrameHeight = EncParams.InputFrameHeight; 58970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi EncParams1.FrameWidth = EncParams.FrameWidth; 58980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi EncParams1.FrameHeight = EncParams.FrameHeight; 5899803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury EncParams1.videoProfile= EncParams.videoProfile; 5900803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury EncParams1.videoLevel= EncParams.videoLevel; 59010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi EncParams1.Bitrate = EncParams.Bitrate; 59020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi EncParams1.FrameRate = EncParams.FrameRate; 59030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi EncParams1.Format = M4ENCODER_kH264; //EncParams.Format; 5904803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury M4OSA_TRACE1_2("mcs encoder open profile :%d, level %d", 5905803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury EncParams1.videoProfile, EncParams1.videoLevel); 59060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->pVideoEncoderGlobalFcts->pFctOpen(pC->pViEncCtxt, 59070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi &pC->WriterVideoAU, &EncParams1); 59080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 59090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 59100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 5911803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury M4OSA_TRACE1_2("mcs encoder open Adv profile :%d, level %d", 5912803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury EncParams.videoProfile, EncParams.videoLevel); 59130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->pVideoEncoderGlobalFcts->pFctOpen(pC->pViEncCtxt, 59140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi &pC->WriterVideoAU, &EncParams); 59150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 59160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 59170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR != err ) 59180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 59190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 59200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intPrepareVideoEncoder: EncoderInt->pFctOpen returns 0x%x", 59210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 59220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 59230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 59240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 59250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->encoderState = M4MCS_kEncoderStopped; 59260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 59270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4OSA_NULL != pC->pVideoEncoderGlobalFcts->pFctStart ) 59280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 59290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->pVideoEncoderGlobalFcts->pFctStart(pC->pViEncCtxt); 59300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 59310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR != err ) 59320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 59330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 59340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intPrepareVideoEncoder: EncoderInt->pFctStart returns 0x%x", 59350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 59360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 59370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 59380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 59390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 59400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->encoderState = M4MCS_kEncoderRunning; 59410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 59420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /******************************/ 59430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Video resize management */ 59440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /******************************/ 59450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 59460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Compare video input size and video output size to check if resize is needed */ 59470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( (M4OSA_UInt32)EncParams.FrameWidth 59480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi != pC->pReaderVideoStream->m_videoWidth) 59490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi || ((M4OSA_UInt32)EncParams.FrameHeight 59500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi != pC->pReaderVideoStream->m_videoHeight) ) 59510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 59520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 59530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Allocate the intermediate video plane that will receive the decoded image before 59540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi resizing */ 59550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pPreResizeFrame = 59562ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu (M4VIFI_ImagePlane *)M4OSA_32bitAlignedMalloc(3 * sizeof(M4VIFI_ImagePlane), 59570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS, (M4OSA_Char *)"m_pPreResizeFrame"); 59580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 59590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4OSA_NULL == pC->pPreResizeFrame ) 59600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 59610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_0("M4MCS_intPrepareVideoEncoder():\ 59620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi unable to allocate m_pPreResizeFrame, returning M4ERR_ALLOC"); 59630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_ALLOC; 59640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 59650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 59660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pPreResizeFrame[0].pac_data = M4OSA_NULL; 59670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pPreResizeFrame[1].pac_data = M4OSA_NULL; 59680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pPreResizeFrame[2].pac_data = M4OSA_NULL; 59690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 59700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 59710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Allocate the Y plane */ 59720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pPreResizeFrame[0].u_topleft = 0; 59730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pPreResizeFrame[0].u_width = pC->pReaderVideoStream-> 59740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi m_videoWidth; /**< input width */ 59750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pPreResizeFrame[0].u_height = pC->pReaderVideoStream-> 59760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi m_videoHeight; /**< input height */ 59770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pPreResizeFrame[0].u_stride = pC-> 59780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pPreResizeFrame[0].u_width; /**< simple case: stride equals width */ 59790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 59800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pPreResizeFrame[0].pac_data = 59812ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu (M4VIFI_UInt8 *)M4OSA_32bitAlignedMalloc(pC->pPreResizeFrame[0].u_stride \ 59820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *pC->pPreResizeFrame[0].u_height, M4MCS, 59830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_Char *)"m_pPreResizeFrame[0].pac_data"); 59840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 59850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4OSA_NULL == pC->pPreResizeFrame[0].pac_data ) 59860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 59870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_0( 59880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intPrepareVideoEncoder():\ 59890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi unable to allocate m_pPreResizeFrame[0].pac_data, returning M4ERR_ALLOC"); 59900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_ALLOC; 59910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 59920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 59930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 59940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Allocate the U plane */ 59950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pPreResizeFrame[1].u_topleft = 0; 59960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pPreResizeFrame[1].u_width = pC->pPreResizeFrame[0].u_width 59970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi >> 1; /**< U width is half the Y width */ 59980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pPreResizeFrame[1].u_height = pC->pPreResizeFrame[0].u_height 59990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi >> 1; /**< U height is half the Y height */ 60000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pPreResizeFrame[1].u_stride = pC-> 60010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pPreResizeFrame[1].u_width; /**< simple case: stride equals width */ 60020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 60030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pPreResizeFrame[1].pac_data = 60042ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu (M4VIFI_UInt8 *)M4OSA_32bitAlignedMalloc(pC->pPreResizeFrame[1].u_stride \ 60050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *pC->pPreResizeFrame[1].u_height, M4MCS, 60060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_Char *)"m_pPreResizeFrame[1].pac_data"); 60070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 60080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4OSA_NULL == pC->pPreResizeFrame[1].pac_data ) 60090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 60100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_0( 60110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intPrepareVideoEncoder():\ 60120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi unable to allocate m_pPreResizeFrame[1].pac_data, returning M4ERR_ALLOC"); 60130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_ALLOC; 60140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 60150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 60160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 60170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Allocate the V plane */ 60180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pPreResizeFrame[2].u_topleft = 0; 60190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pPreResizeFrame[2].u_width = pC-> 60200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pPreResizeFrame[1].u_width; /**< V width equals U width */ 60210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pPreResizeFrame[2].u_height = pC-> 60220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pPreResizeFrame[1].u_height; /**< V height equals U height */ 60230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pPreResizeFrame[2].u_stride = pC-> 60240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pPreResizeFrame[2].u_width; /**< simple case: stride equals width */ 60250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 60260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pPreResizeFrame[2].pac_data = 60272ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu (M4VIFI_UInt8 *)M4OSA_32bitAlignedMalloc(pC->pPreResizeFrame[2].u_stride \ 60280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *pC->pPreResizeFrame[2].u_height, M4MCS, 60290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_Char *)"m_pPreResizeFrame[1].pac_data"); 60300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 60310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4OSA_NULL == pC->pPreResizeFrame[2].pac_data ) 60320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 60330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_0( 60340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intPrepareVideoEncoder():\ 60350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi unable to allocate m_pPreResizeFrame[2].pac_data, returning M4ERR_ALLOC"); 60360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_ALLOC; 60370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 60380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 60390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 60400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 60410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Return with no error */ 60420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_0("M4MCS_intPrepareVideoEncoder(): returning M4NO_ERROR"); 60430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4NO_ERROR; 60440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 60450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 60460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 60470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 60480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_ERR M4MCS_intPrepareAudioProcessing(M4MCS_InternalContext* pC); 60490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief Prepare the AAC decoder, the SRC and the AMR-NB encoder and the MP3 encoder. 60500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param pC (IN) MCS private context 60510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4NO_ERROR No error 60520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return Any error returned by an underlaying module 60530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 60540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */ 60550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4OSA_ERR M4MCS_intPrepareAudioProcessing( M4MCS_InternalContext *pC ) 60560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 60570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_ERR err; 60580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 60590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi SSRC_ReturnStatus_en 60600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ReturnStatus; /* Function return status */ 60610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LVM_INT16 NrSamplesMin = 60620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 0; /* Minimal number of samples on the input or on the output */ 60630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LVM_INT32 ScratchSize; /* The size of the scratch memory */ 60640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LVM_INT16 60650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *pInputInScratch; /* Pointer to input in the scratch buffer */ 60660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LVM_INT16 60670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *pOutputInScratch; /* Pointer to the output in the scratch buffer */ 60680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi SSRC_Params_t ssrcParams; /* Memory for init parameters */ 60690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 60700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#ifdef MCS_DUMP_PCM_TO_FILE 60710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 60720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi file_au_reader = fopen("mcs_ReaderOutput.raw", "wb"); 60730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi file_pcm_decoder = fopen("mcs_DecoderOutput.pcm", "wb"); 60740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi file_pcm_encoder = fopen("mcs_EncoderInput.pcm", "wb"); 60750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 60760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#endif 60770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 60780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->noaudio ) 60790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4NO_ERROR; 60800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 60810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->AudioEncParams.Format == M4ENCODER_kAudioNULL ) 60820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 60830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_0( 60840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intPrepareAudioProcessing(): Null encoding, do nothing."); 60850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4NO_ERROR; 60860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 60870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 60880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* ________________________________ */ 60890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*| |*/ 60900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*| Create and "start" the decoder |*/ 60910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*|________________________________|*/ 60920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 60930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4OSA_NULL == pC->m_pAudioDecoder ) 60940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 60950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_0( 60960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intPrepareAudioProcessing(): Fails to initiate the audio decoder."); 60970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_ERR_AUDIO_CONVERSION_FAILED; 60980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 60990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 61000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4OSA_NULL == pC->pAudioDecCtxt ) 61010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 61020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->m_pAudioDecoder->m_pFctCreateAudioDec(&pC->pAudioDecCtxt, 61030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pReaderAudioStream, pC->m_pCurrentAudioDecoderUserData); 61040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 61050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR != err ) 61060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 61070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 61080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intPrepareVideoDecoder: m_pAudioDecoder->m_pFctCreateAudioDec returns 0x%x", 61090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 61100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 61110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 61120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 61130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 61140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4VIDEOEDITING_kAMR_NB == pC->InputFileProperties.AudioStreamType ) { 61150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* AMR DECODER CONFIGURATION */ 61160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 61170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* nothing specific to do */ 61180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 61190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else if( M4VIDEOEDITING_kEVRC == pC->InputFileProperties.AudioStreamType ) { 61200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* EVRC DECODER CONFIGURATION */ 61210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 61220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* nothing specific to do */ 61230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 61240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else if( M4VIDEOEDITING_kMP3 == pC->InputFileProperties.AudioStreamType ) { 61250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* MP3 DECODER CONFIGURATION */ 61260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 61270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* nothing specific to do */ 61280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 61290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 61300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 61310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* AAC DECODER CONFIGURATION */ 61320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4_AacDecoderConfig AacDecParam; 61330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 61340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi AacDecParam.m_AACDecoderProfile = AAC_kAAC; 61350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi AacDecParam.m_DownSamplingMode = AAC_kDS_OFF; 61360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 61370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->AudioEncParams.Format == M4ENCODER_kAMRNB ) 61380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 61390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi AacDecParam.m_OutputMode = AAC_kMono; 61400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 61410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 61420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 61430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* For this version, we encode only in AAC */ 61440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4ENCODER_kMono == pC->AudioEncParams.ChannelNum ) 61450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 61460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi AacDecParam.m_OutputMode = AAC_kMono; 61470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 61480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 61490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 61500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi AacDecParam.m_OutputMode = AAC_kStereo; 61510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 61520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 61530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 61540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->m_pAudioDecoder->m_pFctSetOptionAudioDec(pC->pAudioDecCtxt, 61550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4AD_kOptionID_UserParam, (M4OSA_DataOption) &AacDecParam); 61560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 61570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 61582b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury pC->m_pAudioDecoder->m_pFctSetOptionAudioDec(pC->pAudioDecCtxt, 61592b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury M4AD_kOptionID_3gpReaderInterface, (M4OSA_DataOption) pC->m_pReaderDataIt); 61602b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury 61612b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury pC->m_pAudioDecoder->m_pFctSetOptionAudioDec(pC->pAudioDecCtxt, 61622b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury M4AD_kOptionID_AudioAU, (M4OSA_DataOption) &pC->ReaderAudioAU); 61632b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury 61640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->m_pAudioDecoder->m_pFctStartAudioDec != M4OSA_NULL ) 61650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 61660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Not implemented in all decoders */ 61670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->m_pAudioDecoder->m_pFctStartAudioDec(pC->pAudioDecCtxt); 61680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 61690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR != err ) 61700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 61710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 61720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intPrepareVideoDecoder: m_pAudioDecoder->m_pFctStartAudioDec returns 0x%x", 61730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 61740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 61750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 61760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 61770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 61780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 61790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Allocate output buffer for the audio decoder */ 61800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.uiDecodedPcmSize = 61810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pReaderAudioStream->m_byteFrameLength 61820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * pC->pReaderAudioStream->m_byteSampleSize 61830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * pC->pReaderAudioStream->m_nbChannels; 61840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 61850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->InputFileProperties.uiDecodedPcmSize > 0 ) 61860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 61870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioDecBufferOut.m_bufferSize = 61880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.uiDecodedPcmSize; 61890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioDecBufferOut.m_dataAddress = 61902ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu (M4OSA_MemAddr8)M4OSA_32bitAlignedMalloc(pC->AudioDecBufferOut.m_bufferSize \ 61910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *sizeof(short), M4MCS, (M4OSA_Char *)"AudioDecBufferOut.m_bufferSize"); 61920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 61930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 61940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4OSA_NULL == pC->AudioDecBufferOut.m_dataAddress ) 61950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 61960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_0( 61970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intPrepareVideoDecoder():\ 61980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi unable to allocate AudioDecBufferOut.m_dataAddress, returning M4ERR_ALLOC"); 61990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_ALLOC; 62000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 62010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 62020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* _________________________ */ 62030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*| |*/ 62040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*| Set the SSRC parameters |*/ 62050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*|_________________________|*/ 62060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 62070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi switch( pC->pReaderAudioStream->m_samplingFrequency ) 62080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 62090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case 8000: 62100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ssrcParams.SSRC_Fs_In = LVM_FS_8000; 62110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 62120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 62130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case 11025: 62140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ssrcParams.SSRC_Fs_In = LVM_FS_11025; 62150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 62160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 62170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case 12000: 62180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ssrcParams.SSRC_Fs_In = LVM_FS_12000; 62190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 62200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 62210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case 16000: 62220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ssrcParams.SSRC_Fs_In = LVM_FS_16000; 62230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 62240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 62250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case 22050: 62260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ssrcParams.SSRC_Fs_In = LVM_FS_22050; 62270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 62280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 62290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case 24000: 62300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ssrcParams.SSRC_Fs_In = LVM_FS_24000; 62310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 62320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 62330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case 32000: 62340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ssrcParams.SSRC_Fs_In = LVM_FS_32000; 62350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 62360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 62370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case 44100: 62380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ssrcParams.SSRC_Fs_In = LVM_FS_44100; 62390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 62400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 62410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case 48000: 62420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ssrcParams.SSRC_Fs_In = LVM_FS_48000; 62430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 62440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 62450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi default: 62460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 62470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intPrepareVideoDecoder: invalid input AAC sampling frequency (%d Hz),\ 62480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi returning M4MCS_ERR_INVALID_AAC_SAMPLING_FREQUENCY", 62490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pReaderAudioStream->m_samplingFrequency); 62500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_ERR_INVALID_AAC_SAMPLING_FREQUENCY; 62510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 62520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 62530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( 1 == pC->pReaderAudioStream->m_nbChannels ) 62540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 62550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ssrcParams.SSRC_NrOfChannels = LVM_MONO; 62560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 62570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 62580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 62590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ssrcParams.SSRC_NrOfChannels = LVM_STEREO; 62600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 62610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 62620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*FlB 26.02.2009: add mp3 as output format*/ 62630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->AudioEncParams.Format == M4ENCODER_kAAC 62640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi || pC->AudioEncParams.Format == M4ENCODER_kMP3 ) 62650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 62660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi switch( pC->AudioEncParams.Frequency ) 62670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 62680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4ENCODER_k8000Hz: 62690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ssrcParams.SSRC_Fs_Out = LVM_FS_8000; 62700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 62710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 62720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4ENCODER_k11025Hz: 62730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ssrcParams.SSRC_Fs_Out = LVM_FS_11025; 62740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 62750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 62760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4ENCODER_k12000Hz: 62770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ssrcParams.SSRC_Fs_Out = LVM_FS_12000; 62780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 62790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 62800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4ENCODER_k16000Hz: 62810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ssrcParams.SSRC_Fs_Out = LVM_FS_16000; 62820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 62830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 62840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4ENCODER_k22050Hz: 62850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ssrcParams.SSRC_Fs_Out = LVM_FS_22050; 62860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 62870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 62880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4ENCODER_k24000Hz: 62890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ssrcParams.SSRC_Fs_Out = LVM_FS_24000; 62900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 62910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 62920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4ENCODER_k32000Hz: 62930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ssrcParams.SSRC_Fs_Out = LVM_FS_32000; 62940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 62950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 62960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4ENCODER_k44100Hz: 62970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ssrcParams.SSRC_Fs_Out = LVM_FS_44100; 62980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 62990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 63000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4ENCODER_k48000Hz: 63010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ssrcParams.SSRC_Fs_Out = LVM_FS_48000; 63020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 63030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 63040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi default: 63050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 63060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intPrepareAudioProcessing: invalid output AAC sampling frequency \ 63070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (%d Hz), returning M4MCS_ERR_INVALID_AAC_SAMPLING_FREQUENCY", 63080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.Frequency); 63090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_ERR_INVALID_AAC_SAMPLING_FREQUENCY; 63100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 63110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 63120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 63130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 63140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 63150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ssrcParams.SSRC_Fs_Out = LVM_FS_8000; 63160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 63170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 63180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 63190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 63200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ReturnStatus = 0; 63210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 63220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi switch( ssrcParams.SSRC_Fs_In ) 63230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 63240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case LVM_FS_8000: 63250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ssrcParams.NrSamplesIn = 320; 63260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 63270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 63280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case LVM_FS_11025: 63290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ssrcParams.NrSamplesIn = 441; 63300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 63310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 63320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case LVM_FS_12000: 63330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ssrcParams.NrSamplesIn = 480; 63340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 63350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 63360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case LVM_FS_16000: 63370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ssrcParams.NrSamplesIn = 640; 63380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 63390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 63400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case LVM_FS_22050: 63410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ssrcParams.NrSamplesIn = 882; 63420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 63430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 63440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case LVM_FS_24000: 63450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ssrcParams.NrSamplesIn = 960; 63460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 63470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 63480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case LVM_FS_32000: 63490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ssrcParams.NrSamplesIn = 1280; 63500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 63510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 63520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case LVM_FS_44100: 63530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ssrcParams.NrSamplesIn = 1764; 63540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 63550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 63560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case LVM_FS_48000: 63570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ssrcParams.NrSamplesIn = 1920; 63580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 63590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 63600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi default: 63610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ReturnStatus = -1; 63620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 63630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 63640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 63650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi switch( ssrcParams.SSRC_Fs_Out ) 63660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 63670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case LVM_FS_8000: 63680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ssrcParams.NrSamplesOut = 320; 63690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 63700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 63710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case LVM_FS_11025: 63720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ssrcParams.NrSamplesOut = 441; 63730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 63740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 63750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case LVM_FS_12000: 63760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ssrcParams.NrSamplesOut = 480; 63770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 63780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 63790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case LVM_FS_16000: 63800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ssrcParams.NrSamplesOut = 640; 63810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 63820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 63830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case LVM_FS_22050: 63840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ssrcParams.NrSamplesOut = 882; 63850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 63860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 63870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case LVM_FS_24000: 63880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ssrcParams.NrSamplesOut = 960; 63890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 63900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 63910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case LVM_FS_32000: 63920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ssrcParams.NrSamplesOut = 1280; 63930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 63940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 63950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case LVM_FS_44100: 63960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ssrcParams.NrSamplesOut = 1764; 63970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 63980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 63990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case LVM_FS_48000: 64000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ssrcParams.NrSamplesOut = 1920; 64010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 64020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 64030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi default: 64040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ReturnStatus = -1; 64050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 64060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 64070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 64080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 64090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 64100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ReturnStatus != SSRC_OK ) 64110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 64120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 64130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intPrepareAudioProcessing:\ 64140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi Error code %d returned by the SSRC_GetNrSamples function", 64150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ReturnStatus); 64160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_ERR_AUDIO_CONVERSION_FAILED; 64170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 64180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 64190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi NrSamplesMin = 64200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (LVM_INT16)((ssrcParams.NrSamplesIn > ssrcParams.NrSamplesOut) 64210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ? ssrcParams.NrSamplesOut : ssrcParams.NrSamplesIn); 64220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 64230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi while( NrSamplesMin < M4MCS_SSRC_MINBLOCKSIZE ) 64240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { /* Don't take blocks smaller that the minimal block size */ 64250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ssrcParams.NrSamplesIn = (LVM_INT16)(ssrcParams.NrSamplesIn << 1); 64260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ssrcParams.NrSamplesOut = (LVM_INT16)(ssrcParams.NrSamplesOut << 1); 64270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi NrSamplesMin = (LVM_INT16)(NrSamplesMin << 1); 64280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 64290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 64300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 64310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->iSsrcNbSamplIn = (LVM_INT16)( 64320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ssrcParams. 64330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi NrSamplesIn); /* multiplication by NrOfChannels is done below */ 64340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->iSsrcNbSamplOut = (LVM_INT16)(ssrcParams.NrSamplesOut); 64350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 64360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 64370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Allocate buffer for the input of the SSRC */ 64380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pSsrcBufferIn = 64392ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu (M4OSA_MemAddr8)M4OSA_32bitAlignedMalloc(pC->iSsrcNbSamplIn * sizeof(short) \ 64400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *pC->pReaderAudioStream->m_nbChannels, M4MCS, 64410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_Char *)"pSsrcBufferIn"); 64420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 64430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4OSA_NULL == pC->pSsrcBufferIn ) 64440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 64450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_0( 64460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intPrepareVideoDecoder():\ 64470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi unable to allocate pSsrcBufferIn, returning M4ERR_ALLOC"); 64480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_ALLOC; 64490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 64500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pPosInSsrcBufferIn = (M4OSA_MemAddr8)pC->pSsrcBufferIn; 64510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 64520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 64530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Allocate buffer for the output of the SSRC */ 64540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pSsrcBufferOut = 64552ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu (M4OSA_MemAddr8)M4OSA_32bitAlignedMalloc(pC->iSsrcNbSamplOut * sizeof(short) \ 64560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *pC->pReaderAudioStream->m_nbChannels, M4MCS, 64570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_Char *)"pSsrcBufferOut"); 64580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 64590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4OSA_NULL == pC->pSsrcBufferOut ) 64600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 64610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_0( 64620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intPrepareVideoDecoder():\ 64630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi unable to allocate pSsrcBufferOut, returning M4ERR_ALLOC"); 64640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_ALLOC; 64650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 64660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 64670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 64681156ea5eaffa0ed46f377c836363fd6499f3b3f9Basavapatna Dattaguru pC->pLVAudioResampler = LVAudioResamplerCreate( 64690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 16, /*gInputParams.lvBTChannelCount*/ 64700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_Int16)pC->InputFileProperties.uiNbChannels/*ssrcParams.SSRC_NrOfChannels*/, 64711156ea5eaffa0ed46f377c836363fd6499f3b3f9Basavapatna Dattaguru (M4OSA_Int32)(pC->AudioEncParams.Frequency)/*ssrcParams.SSRC_Fs_Out*/, 1); 64721156ea5eaffa0ed46f377c836363fd6499f3b3f9Basavapatna Dattaguru 64731156ea5eaffa0ed46f377c836363fd6499f3b3f9Basavapatna Dattaguru if( M4OSA_NULL == pC->pLVAudioResampler) 64741156ea5eaffa0ed46f377c836363fd6499f3b3f9Basavapatna Dattaguru { 64751156ea5eaffa0ed46f377c836363fd6499f3b3f9Basavapatna Dattaguru return M4ERR_ALLOC; 64761156ea5eaffa0ed46f377c836363fd6499f3b3f9Basavapatna Dattaguru } 64771156ea5eaffa0ed46f377c836363fd6499f3b3f9Basavapatna Dattaguru 64781156ea5eaffa0ed46f377c836363fd6499f3b3f9Basavapatna Dattaguru LVAudiosetSampleRate(pC->pLVAudioResampler, 64790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*gInputParams.lvInSampleRate*/ 64800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*pC->pAddedClipCtxt->pSettings->ClipProperties.uiSamplingFrequency*/ 64810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.uiSamplingFrequency/*ssrcParams.SSRC_Fs_In*/); 64820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 64831156ea5eaffa0ed46f377c836363fd6499f3b3f9Basavapatna Dattaguru LVAudiosetVolume(pC->pLVAudioResampler, (M4OSA_Int16)(0x1000 /* 0x7fff */), 64840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_Int16)(0x1000/*0x7fff*/)); 64850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 64860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 64870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* ________________________ */ 64880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*| |*/ 64890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*| Init the audio encoder |*/ 64900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*|________________________|*/ 64910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 64920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Initialise the audio encoder */ 64930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 64940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->pAudioEncoderGlobalFcts->pFctInit(&pC->pAudioEncCtxt, 64950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pCurrentAudioEncoderUserData); 64960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 64970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR != err ) 64980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 64990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 65000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intPrepareAudioProcessing: pAudioEncoderGlobalFcts->pFctInit returns 0x%x", 65010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 65020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 65030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 65040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 65050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Open the audio encoder */ 65060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->pAudioEncoderGlobalFcts->pFctOpen(pC->pAudioEncCtxt, 65070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi &pC->AudioEncParams, &pC->pAudioEncDSI, 65080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_NULL /* no grabbing */); 65090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 65100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR != err ) 65110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 65120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 65130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intPrepareAudioProcessing: pAudioEncoderGlobalFcts->pFctOpen returns 0x%x", 65140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 65150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 65160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 65170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 65180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Allocate the input buffer for the audio encoder */ 65190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi switch( pC->AudioEncParams.Format ) 65200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 65210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4ENCODER_kAMRNB: 65220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->audioEncoderGranularity = M4MCS_PCM_AMR_GRANULARITY_SAMPLES; 65230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 65240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 65250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4ENCODER_kAAC: 65260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->audioEncoderGranularity = M4MCS_PCM_AAC_GRANULARITY_SAMPLES; 65270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 65280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 65290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*FlB 26.02.2009: add mp3 as output format*/ 65300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4ENCODER_kMP3: 65310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->audioEncoderGranularity = M4MCS_PCM_MP3_GRANULARITY_SAMPLES; 65320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 65330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 65340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi default: 65350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 65360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 65370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 65380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4ENCODER_kMono == pC->AudioEncParams.ChannelNum ) 65390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->audioEncoderGranularity *= sizeof(short); 65400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 65410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->audioEncoderGranularity *= sizeof(short) * 2; 65420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 65430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pPosInAudioEncoderBuffer = M4OSA_NULL; 65440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pAudioEncoderBuffer = 65452ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu (M4OSA_MemAddr8)M4OSA_32bitAlignedMalloc(pC->audioEncoderGranularity, M4MCS, 65460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_Char *)"pC->pAudioEncoderBuffer"); 65470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 65480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 65490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Return with no error */ 65500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_0("M4MCS_intPrepareAudioProcessing(): returning M4NO_ERROR"); 65510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4NO_ERROR; 65520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 65530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 65540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 65550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 65560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_ERR M4MCS_intPrepareWriter(M4MCS_InternalContext* pC); 65570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief Prepare the writer. 65580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param pC (IN) MCS private context 65590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4NO_ERROR No error 65600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return Any error returned by an underlaying module 65610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 65620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */ 65630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4OSA_ERR M4MCS_intPrepareWriter( M4MCS_InternalContext *pC ) 65640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 65650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_ERR err; 65660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 uiVersion; /**< To write component version in 3gp writer */ 65670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_MemAddr8 pDSI = M4OSA_NULL; /**< To create the Decoder Specific Info */ 65680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4SYS_StreamIDValue optionValue; /**< For the setoption calls */ 65690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 TargetedFileSize; 65700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Bool bMULPPSSPS = M4OSA_FALSE; 65710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 65720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 65730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Init the writer */ 65740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->pWriterGlobalFcts->pFctOpen(&pC->pWriterContext, pC->pOutputFile, 65750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pOsaFileWritPtr, pC->pTemporaryFile, pC->pOsaFileReadPtr); 65760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 65770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR != err ) 65780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 65790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 65800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intPrepareWriter: pWriterGlobalFcts->pFctOpen returns 0x%x", 65810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 65820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 65830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 65840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 65850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 65860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Link to the writer context in the writer interface */ 65870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pWriterDataFcts->pWriterContext = pC->pWriterContext; 65880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 65890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 65900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Set the product description string in the written file */ 65910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->pWriterGlobalFcts->pFctSetOption(pC->pWriterContext, 65920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4WRITER_kEmbeddedString, (M4OSA_DataOption)"NXP-SW : MCS "); 65930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 65940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( M4NO_ERROR != err) && (( (M4OSA_UInt32)M4ERR_BAD_OPTION_ID) 65950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi != err) ) /* this option may not be implemented by some writers */ 65960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 65970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 65980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intPrepareWriter:\ 65990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pWriterGlobalFcts->pFctSetOption(M4WRITER_kEmbeddedString) returns 0x%x", 66000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 66010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 66020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 66030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 66040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 66050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Set the product version in the written file */ 66060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uiVersion = 66070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4VIDEOEDITING_VERSION_MAJOR * 100 + M4VIDEOEDITING_VERSION_MINOR * 10 66080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi + M4VIDEOEDITING_VERSION_REVISION; 66090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->pWriterGlobalFcts->pFctSetOption(pC->pWriterContext, 66100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4WRITER_kEmbeddedVersion, (M4OSA_DataOption) &uiVersion); 66110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 66120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( M4NO_ERROR != err) && (( (M4OSA_UInt32)M4ERR_BAD_OPTION_ID) 66130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi != err) ) /* this option may not be implemented by some writers */ 66140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 66150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 66160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intPrepareWriter: \ 66170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pWriterGlobalFcts->pFctSetOption(M4WRITER_kEmbeddedVersion) returns 0x%x", 66180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 66190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 66200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 66210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 66220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 66230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * If there is a video input, allocate and fill the video stream structures for the writer */ 66240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->novideo == M4OSA_FALSE ) 66250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 66260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 66270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Fill Video properties structure for the AddStream method */ 66280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterVideoStreamInfo.height = pC->EncodingHeight; 66290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterVideoStreamInfo.width = pC->EncodingWidth; 66300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterVideoStreamInfo.fps = 66310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 0; /**< Not used by the shell/core writer */ 66320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterVideoStreamInfo.Header.pBuf = 66330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_NULL; /**< Will be updated later */ 66340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterVideoStreamInfo.Header.Size = 0; /**< Will be updated later */ 66350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 66360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 66370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Fill Video stream description structure for the AddStream method */ 66380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi switch( pC->EncodingVideoFormat ) 66390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 66400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4ENCODER_kMPEG4: 66410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterVideoStream.streamType = M4SYS_kMPEG_4; 66420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 66430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 66440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4ENCODER_kH263: 66450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterVideoStream.streamType = M4SYS_kH263; 66460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 66470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 66480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4ENCODER_kH264: 66490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterVideoStream.streamType = M4SYS_kH264; 66500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 66510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 66520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4ENCODER_kNULL: 66530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi switch( pC->InputFileProperties.VideoStreamType ) 66540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 66550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_kMPEG4: 66560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterVideoStream.streamType = M4SYS_kMPEG_4; 66570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 66580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 66590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_kH263: 66600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterVideoStream.streamType = M4SYS_kH263; 66610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 66620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 66630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_kH264: 66640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterVideoStream.streamType = M4SYS_kH264; 66650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 66660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 66670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi default: 66680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 66690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intPrepareWriter: case input=M4ENCODER_kNULL, \ 66700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi unknown format (0x%x),\ 66710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi returning M4MCS_ERR_UNDEFINED_OUTPUT_VIDEO_FORMAT", 66720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->EncodingVideoFormat); 66730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_ERR_UNDEFINED_OUTPUT_VIDEO_FORMAT; 66740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 66750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 66760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 66770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi default: /**< It should never happen, already tested */ 66780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 66790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intPrepareWriter: unknown format (0x%x),\ 66800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi returning M4MCS_ERR_UNDEFINED_OUTPUT_VIDEO_FORMAT", 66810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->EncodingVideoFormat); 66820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_ERR_UNDEFINED_OUTPUT_VIDEO_FORMAT; 66830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 66840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 66850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 66860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Video bitrate value will be the real value */ 66870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterVideoStream.averageBitrate = 66880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_Int32)pC->uiEncVideoBitrate; 66890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterVideoStream.maxBitrate = (M4OSA_Int32)pC->uiEncVideoBitrate; 66900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 66910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 66920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * most other parameters are "dummy" */ 66930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterVideoStream.streamID = M4MCS_WRITER_VIDEO_STREAM_ID; 66940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterVideoStream.timeScale = 66950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 0; /**< Not used by the shell/core writer */ 66960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterVideoStream.profileLevel = 66970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 0; /**< Not used by the shell/core writer */ 66980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterVideoStream.duration = 66990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 0; /**< Not used by the shell/core writer */ 67000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterVideoStream.decoderSpecificInfoSize = 67010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi sizeof(M4WRITER_StreamVideoInfos); 67020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterVideoStream.decoderSpecificInfo = 67030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_MemAddr32) &(pC->WriterVideoStreamInfo); 67040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 67050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 67060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Update Encoder Header properties for Video stream if needed */ 67070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4ENCODER_kH263 == pC->EncodingVideoFormat ) 67080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 67090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 67100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Creates the H263 DSI */ 67110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterVideoStreamInfo.Header.Size = 67120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 7; /**< H263 output DSI is always 7 bytes */ 67132ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu pDSI = (M4OSA_MemAddr8)M4OSA_32bitAlignedMalloc(7, M4MCS, (M4OSA_Char 67140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *)"pC->WriterVideoStreamInfo.Header.pBuf (DSI H263)"); 67150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 67160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4OSA_NULL == pDSI ) 67170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 67180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_0("M4MCS_intPrepareWriter(): unable to allocate pDSI (H263),\ 67190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi returning M4ERR_ALLOC"); 67200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_ALLOC; 67210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 67220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 67230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 67240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Vendor is NXP Software: N, X, P, S. */ 67250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pDSI[0] = 'N'; 67260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pDSI[1] = 'X'; 67270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pDSI[2] = 'P'; 67280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pDSI[3] = 'S'; 67290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 67300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 67310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Decoder version is 0 */ 67320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pDSI[4] = 0; 67330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 67340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 67350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Level is the sixth byte of the DSI. */ 67360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi switch( pC->EncodingWidth ) 67370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 67380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4ENCODER_SQCIF_Width: 67390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4ENCODER_QCIF_Width: 67400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( pC->uiEncVideoBitrate <= M4ENCODER_k64_KBPS) 67410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (pC->EncodingVideoFramerate <= M4ENCODER_k15_FPS) ) 67420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 67430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pDSI[5] = 10; 67440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 67450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else if( ( pC->uiEncVideoBitrate <= M4ENCODER_k128_KBPS) 67460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (pC->EncodingVideoFramerate <= M4ENCODER_k15_FPS) ) 67470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 67480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pDSI[5] = 45; 67490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 67500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else if( ( pC->uiEncVideoBitrate <= M4ENCODER_k128_KBPS) 67510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (pC->EncodingVideoFramerate <= M4ENCODER_k30_FPS) ) 67520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 67530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pDSI[5] = 20; 67540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 67550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else if( ( pC->uiEncVideoBitrate <= M4ENCODER_k384_KBPS) 67560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (pC->EncodingVideoFramerate <= M4ENCODER_k30_FPS) ) 67570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 67580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pDSI[5] = 30; 67590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 67600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else if( ( pC->uiEncVideoBitrate 67610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi <= M4ENCODER_k800_KBPS/*2048*/) 67620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (pC->EncodingVideoFramerate <= M4ENCODER_k30_FPS) ) 67630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 67640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pDSI[5] = 40; 67650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 67660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 67670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 67680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4ENCODER_CIF_Width: 67690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( pC->uiEncVideoBitrate <= M4ENCODER_k128_KBPS) 67700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (pC->EncodingVideoFramerate <= M4ENCODER_k15_FPS) ) 67710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 67720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pDSI[5] = 20; 67730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 67740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else if( ( pC->uiEncVideoBitrate <= M4ENCODER_k384_KBPS) 67750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (pC->EncodingVideoFramerate <= M4ENCODER_k30_FPS) ) 67760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 67770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pDSI[5] = 30; 67780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 67790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else if( ( pC->uiEncVideoBitrate 67800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi <= M4ENCODER_k800_KBPS/*2048*/) 67810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (pC->EncodingVideoFramerate <= M4ENCODER_k30_FPS) ) 67820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 67830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pDSI[5] = 40; 67840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 67850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 67860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 67870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi default: 67880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 67890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 67900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 67910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 67920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Profile is the seventh byte of the DSI. */ 67930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pDSI[6] = 0; 67940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 67950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterVideoStreamInfo.Header.pBuf = pDSI; 67960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 67970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else if( M4ENCODER_kNULL == pC->EncodingVideoFormat ) 67980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 67990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* If we copy the stream from the input, we copy its DSI */ 68000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 68010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterVideoStreamInfo.Header.Size = pC->pReaderVideoStream-> 68020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi m_basicProperties.m_decoderSpecificInfoSize; 68030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterVideoStreamInfo.Header.pBuf = 68040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_MemAddr8)pC->pReaderVideoStream-> 68050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi m_basicProperties.m_pDecoderSpecificInfo; 68060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 68070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 68080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* otherwise (MPEG4), the DSI will be recovered from the encoder later on. */ 68090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 68100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*+CRLV6775 - H.264 Trimming */ 68110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->bH264Trim == M4OSA_TRUE ) 68120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 68130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi bMULPPSSPS = M4OSA_TRUE; 68140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->pWriterGlobalFcts->pFctSetOption(pC->pWriterContext, 68150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_UInt32)M4WRITER_kMUL_PPS_SPS, 68160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_DataOption) &bMULPPSSPS); 68170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 68180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( M4NO_ERROR != err) 68190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (( (M4OSA_UInt32)M4ERR_BAD_OPTION_ID) 68200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi != err) ) /* this option may not be implemented by some writers */ 68210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 68220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 68230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intPrepareWriter:\ 68240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pWriterGlobalFcts->pFctSetOption(M4WRITER_kMUL_PPS_SPS) returns 0x%x", 68250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 68260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 68270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 68280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 68290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*-CRLV6775 - H.264 Trimming */ 68300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 68310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Add the video stream */ 68320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->pWriterGlobalFcts->pFctAddStream(pC->pWriterContext, 68330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi &pC->WriterVideoStream); 68340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 68350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR != err ) 68360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 68370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 68380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intPrepareWriter: pWriterGlobalFcts->pFctAddStream(video) returns 0x%x!", 68390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 68400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 68410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 68420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 68430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 68440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Update AU properties for video stream */ 68450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterVideoAU.stream = &(pC->WriterVideoStream); 68460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterVideoAU.dataAddress = M4OSA_NULL; 68470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterVideoAU.size = 0; 68480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterVideoAU.CTS = 0; /** Reset time */ 68490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterVideoAU.DTS = 0; 68500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterVideoAU.attribute = AU_RAP; 68510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterVideoAU.nbFrag = 0; /** No fragment */ 68520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterVideoAU.frag = M4OSA_NULL; 68530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 68540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 68550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Set the writer max video AU size */ 68560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi optionValue.streamID = M4MCS_WRITER_VIDEO_STREAM_ID; 68570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi optionValue.value = pC->uiVideoMaxAuSize; 68580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->pWriterGlobalFcts->pFctSetOption(pC->pWriterContext, 68590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_UInt32)M4WRITER_kMaxAUSize, 68600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_DataOption) &optionValue); 68610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 68620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR != err ) 68630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 68640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 68650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intPrepareWriter: \ 68660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pWriterGlobalFcts->pFctSetOption(M4WRITER_kMaxAUSize, video) returns 0x%x!", 68670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 68680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 68690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 68700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 68710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 68720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Set the writer max video chunk size */ 68730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi optionValue.value = pC->uiVideoMaxChunckSize; 68740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->pWriterGlobalFcts->pFctSetOption(pC->pWriterContext, 68750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_UInt32)M4WRITER_kMaxChunckSize, 68760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_DataOption) &optionValue); 68770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 68780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( M4NO_ERROR != err) && (( (M4OSA_UInt32)M4ERR_BAD_OPTION_ID) 68790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi != err) ) /* this option may not be implemented by some writers */ 68800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 68810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 68820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intPrepareWriter:\ 68830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pWriterGlobalFcts->pFctSetOption(M4WRITER_kMaxAUSize, video) returns 0x%x!", 68840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 68850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 68860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 68870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 68880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 68890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 68900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * If there is an audio input, allocate and fill the audio stream structures for the writer */ 68910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->noaudio == M4OSA_FALSE ) 68920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 68930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4WRITER_StreamAudioInfos streamAudioInfo; 68940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 68950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi streamAudioInfo.nbSamplesPerSec = 0; /**< unused by our shell writer */ 68960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi streamAudioInfo.nbBitsPerSample = 0; /**< unused by our shell writer */ 68970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi streamAudioInfo.nbChannels = 1; /**< unused by our shell writer */ 68980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 68990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterAudioStream.averageBitrate = 69000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 0; /**< It is not used by the shell, the DSI is taken into account instead */ 69010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterAudioStream.maxBitrate = 69020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 0; /**< Not used by the shell/core writer */ 69030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 69040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 69050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Fill Audio stream description structure for the AddStream method */ 69060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi switch( pC->AudioEncParams.Format ) 69070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 69080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4ENCODER_kAMRNB: 69090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterAudioStream.streamType = M4SYS_kAMR; 69100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 69110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 69120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4ENCODER_kAAC: 69130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterAudioStream.streamType = M4SYS_kAAC; 69140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterAudioStream.averageBitrate = 69150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.Bitrate; 69160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterAudioStream.maxBitrate = pC->AudioEncParams.Bitrate; 69170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 69180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 69190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*FlB 26.02.2009: add mp3 as output format*/ 69200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4ENCODER_kMP3: 69210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterAudioStream.streamType = M4SYS_kMP3; 69220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 69230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 69240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4ENCODER_kAudioNULL: 69250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi switch( pC->InputFileProperties.AudioStreamType ) 69260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 69270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_kAMR_NB: 69280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterAudioStream.streamType = M4SYS_kAMR; 69290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 69300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*FlB 26.02.2009: add mp3 as output format*/ 69310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_kMP3: 69320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterAudioStream.streamType = M4SYS_kMP3; 69330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 69340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 69350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_kAAC: 69360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_kAACplus: 69370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_keAACplus: 69380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterAudioStream.streamType = M4SYS_kAAC; 69390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterAudioStream.averageBitrate = 69400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.Bitrate; 69410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterAudioStream.maxBitrate = 69420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.Bitrate; 69430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 69440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 69450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_kEVRC: 69460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterAudioStream.streamType = M4SYS_kEVRC; 69470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 69480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 69490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_kNoneAudio: 69500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_kPCM: 69510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_kNullAudio: 69520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4VIDEOEDITING_kUnsupportedAudio: 69530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 69540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 69550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 69560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 69570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi default: /**< It should never happen, already tested */ 69580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 69590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intPrepareWriter: \ 69600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi unknown format (0x%x), returning M4MCS_ERR_UNDEFINED_OUTPUT_AUDIO_FORMAT", 69610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioEncParams.Format); 69620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_ERR_UNDEFINED_OUTPUT_AUDIO_FORMAT; 69630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 69640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 69650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 69660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * MCS produces only AMR-NB output */ 69670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterAudioStream.streamID = M4MCS_WRITER_AUDIO_STREAM_ID; 69680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterAudioStream.duration = 69690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 0; /**< Not used by the shell/core writer */ 69700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterAudioStream.profileLevel = 69710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 0; /**< Not used by the shell/core writer */ 69720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterAudioStream.timeScale = pC->AudioEncParams.Frequency; 69730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 69740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->AudioEncParams.Format == M4ENCODER_kAudioNULL ) 69750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 69760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* If we copy the stream from the input, we copy its DSI */ 69770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi streamAudioInfo.Header.Size = pC->pReaderAudioStream-> 69780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi m_basicProperties.m_decoderSpecificInfoSize; 69790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi streamAudioInfo.Header.pBuf = 69800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_MemAddr8)pC->pReaderAudioStream-> 69810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi m_basicProperties.m_pDecoderSpecificInfo; 69820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 69830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 69840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 69850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->pAudioEncDSI.pInfo != M4OSA_NULL ) 69860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 69870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Use the DSI given by the encoder open() */ 69880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi streamAudioInfo.Header.Size = pC->pAudioEncDSI.infoSize; 69890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi streamAudioInfo.Header.pBuf = pC->pAudioEncDSI.pInfo; 69900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 69910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 69920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 69930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Writer will put a default Philips DSI */ 69940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi streamAudioInfo.Header.Size = 0; 69950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi streamAudioInfo.Header.pBuf = M4OSA_NULL; 69960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 69970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 69980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 69990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 70000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Our writer shell interface is a little tricky: we put M4WRITER_StreamAudioInfos 70010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi in the DSI pointer... */ 70020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterAudioStream.decoderSpecificInfo = 70030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_MemAddr32) &streamAudioInfo; 70040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 70050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 70060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Add the audio stream to the writer */ 70070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->pWriterGlobalFcts->pFctAddStream(pC->pWriterContext, 70080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi &pC->WriterAudioStream); 70090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 70100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR != err ) 70110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 70120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 70130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intPrepareWriter: pWriterGlobalFcts->pFctAddStream(audio) returns 0x%x", 70140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 70150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 70160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 70170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 70180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 70190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Link the AU and the stream */ 70200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterAudioAU.stream = &(pC->WriterAudioStream); 70210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterAudioAU.dataAddress = M4OSA_NULL; 70220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterAudioAU.size = 0; 70230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterAudioAU.CTS = 0; /** Reset time */ 70240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterAudioAU.DTS = 0; 70250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterAudioAU.attribute = 0; 70260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterAudioAU.nbFrag = 0; /** No fragment */ 70270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterAudioAU.frag = M4OSA_NULL; 70280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 70290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 70300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Set the writer audio max AU size */ 70310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* As max bitrate is now 320kbps instead of 128kbps, max AU 70320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * size has to be increased adapt the max AU size according to the stream type and the 70330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * channels numbers*/ 70340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* After tests, a margin of 3 is taken (2 was not enough and raises to memory overwrite) 70350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */ 70360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi //pC->uiAudioMaxAuSize = M4MCS_AUDIO_MAX_AU_SIZE; 70370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi switch( pC->WriterAudioStream.streamType ) 70380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 70390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4SYS_kAMR: 70400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->uiAudioMaxAuSize = M4MCS_PCM_AMR_GRANULARITY_SAMPLES 70410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * (( pC->InputFileProperties.uiNbChannels 70420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * sizeof(short)) + 3); 70430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 70440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 70450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4SYS_kMP3: 70460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->uiAudioMaxAuSize = M4MCS_PCM_MP3_GRANULARITY_SAMPLES 70470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * (( pC->InputFileProperties.uiNbChannels 70480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * sizeof(short)) + 3); 70490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 70500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 70510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4SYS_kAAC: 70520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->uiAudioMaxAuSize = M4MCS_PCM_AAC_GRANULARITY_SAMPLES 70530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * (( pC->InputFileProperties.uiNbChannels 70540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * sizeof(short)) + 3); 70550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 70560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*case M4SYS_kEVRC: 70570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->uiAudioMaxAuSize = M4MCS_PCM_EVRC_GRANULARITY_SAMPLES* 70580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ((pC->InputFileProperties.uiNbChannels * sizeof(short))+3); 70590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break;*/ 70600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi default: /**< It should never happen, already tested */ 70610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 70620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intPrepareWriter: unknown format (0x%x),\ 70630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi returning M4MCS_ERR_UNDEFINED_OUTPUT_AUDIO_FORMAT", 70640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterAudioStream.streamType); 70650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_ERR_UNDEFINED_OUTPUT_AUDIO_FORMAT; 70660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 70670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 70680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi optionValue.streamID = M4MCS_WRITER_AUDIO_STREAM_ID; 70690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi optionValue.value = pC->uiAudioMaxAuSize; 70700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->pWriterGlobalFcts->pFctSetOption(pC->pWriterContext, 70710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_UInt32)M4WRITER_kMaxAUSize, 70720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_DataOption) &optionValue); 70730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 70740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR != err ) 70750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 70760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 70770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intPrepareWriter: pWriterGlobalFcts->pFctSetOption(audio,\ 70780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4WRITER_kMaxAUSize) returns 0x%x", 70790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 70800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 70810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 70820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 70830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi optionValue.value = M4MCS_AUDIO_MAX_CHUNK_SIZE; 70840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->pWriterGlobalFcts->pFctSetOption(pC->pWriterContext, 70850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_UInt32)M4WRITER_kMaxChunckSize, 70860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_DataOption) &optionValue); 70870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 70880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( M4NO_ERROR != err) && (( (M4OSA_UInt32)M4ERR_BAD_OPTION_ID) 70890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi != err) ) /* this option may not be implemented by some writers */ 70900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 70910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 70920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intPrepareWriter: pWriterGlobalFcts->pFctSetOption(audio,\ 70930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4WRITER_kMaxChunckSize) returns 0x%x", 70940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 70950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 70960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 70970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 70980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 70990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* 71000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Set the limitation size of the writer */ 71010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi TargetedFileSize = pC->uiMaxFileSize; 71020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* add 1 kB margin */ 71030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( TargetedFileSize > 8192 ) 71040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi TargetedFileSize -= 1024; 71050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 71060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->pWriterGlobalFcts->pFctSetOption(pC->pWriterContext, 71070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_UInt32)M4WRITER_kMaxFileSize, 71080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_DataOption) &TargetedFileSize); 71090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 71100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( M4NO_ERROR != err) && (( (M4OSA_UInt32)M4ERR_BAD_OPTION_ID) 71110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi != err) ) /* this option may not be implemented by some writers */ 71120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 71130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 71140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intPrepareWriter: pWriterGlobalFcts->pFctSetOption\ 71150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4WRITER_kMaxFileSize) returns 0x%x!", 71160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 71170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 71180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 71190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 71200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 71210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Close the stream registering in order to be ready to write data */ 71220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->pWriterGlobalFcts->pFctStartWriting(pC->pWriterContext); 71230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 71240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR != err ) 71250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 71260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 71270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intPrepareWriter: pWriterGlobalFcts->pFctStartWriting returns 0x%x", 71280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 71290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 71300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 71310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 71320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 71330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Return with no error */ 71340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_0("M4MCS_intPrepareWriter(): returning M4NO_ERROR"); 71350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4NO_ERROR; 71360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 71370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 71380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 71390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 71400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_ERR M4MCS_intPrepareAudioBeginCut(M4MCS_InternalContext* pC); 71410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief DO the audio begin cut. 71420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param pC (IN) MCS private context 71430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4NO_ERROR No error 71440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return Any error returned by an underlaying module 71450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 71460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */ 71470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4OSA_ERR M4MCS_intPrepareAudioBeginCut( M4MCS_InternalContext *pC ) 71480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 71490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_ERR err; 71500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int32 iCts; 71510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 uiFrameSize; 71520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 71530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->noaudio ) 71540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4NO_ERROR; 71550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 71560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 71570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Check if an audio begin cut is needed */ 71580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( M4OSA_NULL == pC->pReaderAudioStream) || (0 == pC->uiBeginCutTime) ) 71590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 71600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 71610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Return with no error */ 71620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_0( 71630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intPrepareAudioBeginCut(): returning M4NO_ERROR (a)"); 71640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4NO_ERROR; 71650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 71660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 71670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 71680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Jump at the begin cut time */ 71690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi iCts = pC->uiBeginCutTime; 71700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->m_pReader->m_pFctJump(pC->pReaderContext, 71710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4_StreamHandler *)pC->pReaderAudioStream, &iCts); 71720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 71730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR != err ) 71740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 71750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 71760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intPrepareAudioBeginCut: m_pFctJump(Audio) returns 0x%x!", 71770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 71780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 71790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 71800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 71810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 71820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Remember audio begin cut offset */ 71830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->iAudioCtsOffset = iCts; 71840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 71850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 71860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * AMR-NB & EVRC: there may be many frames per AU. 71870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * In that case we need to slice the first AU to keep the 20 ms cut precision */ 71880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( M4DA_StreamTypeAudioAmrNarrowBand 71890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi == pC->pReaderAudioStream->m_basicProperties.m_streamType) 71900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi || (M4DA_StreamTypeAudioEvrc 71910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi == pC->pReaderAudioStream->m_basicProperties.m_streamType) ) 71920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 71930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 71940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * If the next frame CTS is lower than the begin cut time, 71950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * we must read the AU and parse its frames to reach the 71960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * nearest to the begin cut */ 71970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( iCts + 20) < (M4OSA_Int32)pC->uiBeginCutTime ) 71980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 71990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 72000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Read the first audio AU after the jump */ 72010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->m_pReaderDataIt->m_pFctGetNextAu(pC->pReaderContext, 72020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4_StreamHandler *)pC->pReaderAudioStream, 72030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi &pC->ReaderAudioAU); 72040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 72050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4WAR_NO_MORE_AU == err ) 72060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 72070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_0( 72080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intPrepareAudioBeginCut(): m_pReaderDataIt->m_pFctGetNextAu(audio)\ 72090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi returns M4WAR_NO_MORE_AU! Returning M4NO_ERROR"); 72100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return 72110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4NO_ERROR; /**< no fatal error here, we should be able to pursue */ 72120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 72130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else if( M4NO_ERROR != err ) 72140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 72150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 72160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intPrepareAudioBeginCut(): m_pReaderDataIt->m_pFctGetNextAu(Audio)\ 72170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi returns 0x%x", 72180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 72190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 72200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 72210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 72220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 72230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * While the next AU has a lower CTS than the begin cut time, we advance to 72240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi the next frame */ 72250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi while( ( iCts + 20) <= (M4OSA_Int32)pC->uiBeginCutTime ) 72260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 72270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 72280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Get the size of the frame */ 72290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi switch( pC->pReaderAudioStream->m_basicProperties.m_streamType ) 72300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 72310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4DA_StreamTypeAudioAmrNarrowBand: 72320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uiFrameSize = M4MCS_intGetFrameSize_AMRNB( 72330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->ReaderAudioAU.m_dataAddress); 72340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 72350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 72360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4DA_StreamTypeAudioEvrc: 72370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uiFrameSize = M4MCS_intGetFrameSize_EVRC( 72380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->ReaderAudioAU.m_dataAddress); 72390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 72400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 72410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi default: 72420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uiFrameSize = 0; 72430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 72440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 72450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 72460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( 0 == uiFrameSize ) 72470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 72480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 72490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Corrupted frame! We get out of this mess! 72500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * We don't want to crash here... */ 72510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_0( 72520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intPrepareAudioBeginCut(): \ 72530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_intGetFrameSize_xxx returns 0! Returning M4NO_ERROR"); 72540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return 72550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4NO_ERROR; /**< no fatal error here, we should be able to pursue */ 72560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 72570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 72580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 72590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Go to the next frame */ 72600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->ReaderAudioAU.m_dataAddress += uiFrameSize; 72610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->ReaderAudioAU.m_size -= uiFrameSize; 72620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 72630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 72640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Get the CTS of the next frame */ 72650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi iCts += 20; /**< AMR, EVRC frame duration is always 20 ms */ 72660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->ReaderAudioAU.m_CTS = iCts; 72670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->ReaderAudioAU.m_DTS = iCts; 72680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 72690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 72700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 72710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Update the audio begin cut offset */ 72720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->iAudioCtsOffset = iCts; 72730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 72740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 72750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 72760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 72770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Return with no error */ 72780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_0("M4MCS_intPrepareAudioBeginCut(): returning M4NO_ERROR"); 72790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4NO_ERROR; 72800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 72810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 72820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 72830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 72840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_ERR M4MCS_intStepEncoding(M4MCS_InternalContext* pC, M4OSA_UInt8* pProgress) 72850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 72860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */ 72870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4OSA_ERR M4MCS_intStepEncoding( M4MCS_InternalContext *pC, 72880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt8 *pProgress ) 72890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 72900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_ERR err; 72910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 uiAudioStepCount = 0; 72920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 72930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* ---------- VIDEO TRANSCODING ---------- */ 72940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 72950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( pC->novideo == M4OSA_FALSE) && (M4MCS_kStreamState_STARTED 72960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi == pC->VideoState) ) /**< If the video encoding is going on */ 72970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 72980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->EncodingVideoFormat == M4ENCODER_kNULL ) 72990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 73000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MCS_intVideoNullEncoding(pC); 73010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 73020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 73030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 73040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MCS_intVideoTranscoding(pC); 73050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 73060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 73070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 73080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * No more space, quit properly */ 73090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4WAR_WRITER_STOP_REQ == err ) 73100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 73110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *pProgress = (M4OSA_UInt8)(( ( (M4OSA_UInt32)pC->dViDecCurrentCts 73120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi - pC->uiBeginCutTime) * 100) 73130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi / (pC->uiEndCutTime - pC->uiBeginCutTime)); 73140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 73150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->State = M4MCS_kState_FINISHED; 73160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 73170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* bad file produced on very short 3gp file */ 73180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->dViDecCurrentCts - pC->uiBeginCutTime == 0 ) 73190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 73200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Nothing has been encoded -> bad produced file -> error returned */ 73210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE2_0( 73220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intStepEncoding(): video transcoding returns\ 73230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_ERR_OUTPUT_FILE_SIZE_TOO_SMALL"); 73240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_ERR_OUTPUT_FILE_SIZE_TOO_SMALL; 73250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 73260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 73270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 73280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#ifndef M4MCS_AUDIOONLY 73290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* clean AIR context needed to keep media aspect ratio*/ 73300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 73310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4OSA_NULL != pC->m_air_context ) 73320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 73330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4AIR_cleanUp(pC->m_air_context); 73340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 73350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( err != M4NO_ERROR ) 73360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 73370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 73380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4xVSS_PictureCallbackFct: Error when cleaning AIR: 0x%x", 73390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 73400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 73410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 73420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->m_air_context = M4OSA_NULL; 73430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 73440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 73450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#endif /*M4MCS_AUDIOONLY*/ 73460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 73470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE2_0( 73480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intStepEncoding(): video transcoding returns M4MCS_ERR_NOMORE_SPACE"); 73490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_ERR_NOMORE_SPACE; 73500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 73510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 73520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 73530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /**< The input plane is null because the input image will be obtained by the 73540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi VPP filter from the context */ 73550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( M4NO_ERROR != err) && (M4WAR_NO_MORE_AU != err) ) 73560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 73570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 73580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intStepEncoding(): video transcoding returns 0x%x!", 73590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 73600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 73610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 73620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 73630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 73640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* ---------- AUDIO TRANSCODING ---------- */ 73650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 73660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( pC->noaudio == M4OSA_FALSE) && (M4MCS_kStreamState_STARTED 73670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi == pC->AudioState) ) /**< If there is an audio stream */ 73680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 73690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi while( 73700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /**< If the video encoding is running, encode audio until we reach video time */ 73710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ( ( pC->novideo == M4OSA_FALSE) 73720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (M4MCS_kStreamState_STARTED == pC->VideoState) 73730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (pC->ReaderAudioAU.m_CTS 73740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi + pC->m_audioAUDuration < pC->ReaderVideoAU.m_CTS)) || 73750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /**< If the video encoding is not running, perform 1 step of audio encoding */ 73760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (( M4MCS_kStreamState_STARTED == pC->AudioState) 73770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (uiAudioStepCount < 1)) ) 73780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 73790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uiAudioStepCount++; 73800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 73810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /**< check if an adio effect has to be applied*/ 73820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MCS_intCheckAudioEffects(pC); 73830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 73840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR != err ) 73850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 73860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 73870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intStepEncoding(): M4MCS_intCheckAudioEffects returns err: 0x%x", 73880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 73890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 73900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 73910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 73920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->AudioEncParams.Format == M4ENCODER_kAudioNULL ) 73930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 73940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MCS_intAudioNullEncoding(pC); 73950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 73960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else /**< Audio transcoding */ 73970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 73980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MCS_intAudioTranscoding(pC); 73990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 74000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 74010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 74020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * No more space, quit properly */ 74030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4WAR_WRITER_STOP_REQ == err ) 74040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 74050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *pProgress = 74060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_UInt8)(( ( (M4OSA_UInt32)pC->ReaderAudioAU.m_CTS 74070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi - pC->uiBeginCutTime) * 100) 74080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi / (pC->uiEndCutTime - pC->uiBeginCutTime)); 74090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 74100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->State = M4MCS_kState_FINISHED; 74110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 74120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* bad file produced on very short 3gp file */ 74130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->ReaderAudioAU.m_CTS - pC->uiBeginCutTime == 0 ) 74140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 74150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Nothing has been encoded -> bad produced file -> error returned */ 74160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE2_0( 74170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intStepEncoding():\ 74180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi audio transcoding returns M4MCS_ERR_OUTPUT_FILE_SIZE_TOO_SMALL"); 74190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_ERR_OUTPUT_FILE_SIZE_TOO_SMALL; 74200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 74210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 74220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 74230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#ifndef M4MCS_AUDIOONLY 74240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* clean AIR context needed to keep media aspect ratio*/ 74250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 74260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4OSA_NULL != pC->m_air_context ) 74270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 74280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4AIR_cleanUp(pC->m_air_context); 74290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 74300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( err != M4NO_ERROR ) 74310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 74320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 74330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4xVSS_PictureCallbackFct: Error when cleaning AIR: 0x%x", 74340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 74350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 74360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 74370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->m_air_context = M4OSA_NULL; 74380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 74390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 74400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#endif /*M4MCS_AUDIOONLY*/ 74410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 74420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE2_0( 74430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intStepEncoding(): \ 74440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi audio transcoding returns M4MCS_ERR_NOMORE_SPACE"); 74450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_ERR_NOMORE_SPACE; 74460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 74470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 74480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 74490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4WAR_NO_MORE_AU == err ) 74500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 74510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioState = M4MCS_kStreamState_FINISHED; 74520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_0( 74530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intStepEncoding(): audio transcoding returns M4WAR_NO_MORE_AU"); 74540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 74550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 74560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else if( M4NO_ERROR != err ) 74570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 74580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 74590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intStepEncoding(): audio transcoding returns 0x%x", 74600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 74610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 74620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 74630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 74640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 74650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Check for end cut */ 74660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* We absolutely want to have less or same audio duration as video -> 74670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (2*pC->m_audioAUDuration) */ 74680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( (M4OSA_UInt32)pC->ReaderAudioAU.m_CTS 74690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi + (2 *pC->m_audioAUDuration) > pC->uiEndCutTime ) 74700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 74710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioState = M4MCS_kStreamState_FINISHED; 74720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 74730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 74740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 74750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 74760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 74770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* ---------- PROGRESS MANAGEMENT ---------- */ 74780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 74790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 74800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Compute progress */ 74810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->novideo ) 74820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 74830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->ReaderAudioAU.m_CTS < pC->uiBeginCutTime ) 74840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 74850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *pProgress = 0; 74860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 74870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 74880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 74890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *pProgress = (M4OSA_UInt8)(( ( (M4OSA_UInt32)pC->ReaderAudioAU.m_CTS 74900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi - pC->uiBeginCutTime) * 100) 74910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi / (pC->uiEndCutTime - pC->uiBeginCutTime)); 74920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 74930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi //printf(": %6.0f\b\b\b\b\b\b\b\b", pC->ReaderAudioAU.m_CTS); 74940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 74950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 74960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 74970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 74980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->dViDecCurrentCts < pC->uiBeginCutTime ) 74990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 75000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *pProgress = 0; 75010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 75020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 75030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 75040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *pProgress = (M4OSA_UInt8)(( ( (M4OSA_UInt32)pC->dViDecCurrentCts 75050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi - pC->uiBeginCutTime) * 100) 75060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi / (pC->uiEndCutTime - pC->uiBeginCutTime)); 75070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 75080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi //printf(": %6.0f\b\b\b\b\b\b\b\b", pC->dViDecCurrentCts); 75090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 75100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 75110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 75120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Sanity check */ 75130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( *pProgress > 99 ) 75140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 75150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *pProgress = 99; 75160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 75170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 75180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 75190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Increment CTS for next step */ 75200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->novideo == M4OSA_FALSE ) 75210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 75220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->EncodingVideoFormat == M4ENCODER_kNULL ) 75230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 75240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->dViDecCurrentCts += 1; 75250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 75260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 75270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 75280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->dViDecCurrentCts += pC->dCtsIncrement; 75290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 75300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 75310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 75320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 75330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * The transcoding is finished when no stream is being encoded anymore */ 75340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( ( pC->novideo) || (M4MCS_kStreamState_FINISHED == pC->VideoState)) 75350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (( pC->noaudio) || (M4MCS_kStreamState_FINISHED == pC->AudioState)) ) 75360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 75370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* the AIR part can only be used when video codecs are compiled*/ 75380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#ifndef M4MCS_AUDIOONLY 75390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* clean AIR context needed to keep media aspect ratio*/ 75400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 75410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4OSA_NULL != pC->m_air_context ) 75420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 75430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4AIR_cleanUp(pC->m_air_context); 75440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 75450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( err != M4NO_ERROR ) 75460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 75470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 75480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4xVSS_PictureCallbackFct: Error when cleaning AIR: 0x%x", 75490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 75500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 75510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 75520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->m_air_context = M4OSA_NULL; 75530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 75540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 75550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#endif /*M4MCS_AUDIOONLY*/ 75560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /**/ 75570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 75580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *pProgress = 100; 75590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->State = M4MCS_kState_FINISHED; 75600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE2_0( 75610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intStepEncoding(): transcoding finished, returning M4MCS_WAR_TRANSCODING_DONE"); 75620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_WAR_TRANSCODING_DONE; 75630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 75640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 75650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 75660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Return with no error */ 75670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_0("M4MCS_intStepEncoding(): returning M4NO_ERROR"); 75680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4NO_ERROR; 75690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 75700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 75710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 75720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 75730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_ERR M4MCS_intStepBeginVideoJump(M4MCS_InternalContext* pC) 75740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 75750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */ 75760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4OSA_ERR M4MCS_intStepBeginVideoJump( M4MCS_InternalContext *pC ) 75770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 75780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_ERR err; 75790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int32 iCts; 75800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 75810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->novideo ) 75820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 75830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->State = M4MCS_kState_BEGINVIDEODECODE; 75840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4NO_ERROR; 75850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 75860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 75870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 75880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Jump to the previous RAP in the clip (first get the time, then jump) */ 75890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi iCts = (M4OSA_Int32)pC->dViDecStartingCts; 75900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->m_pReader->m_pFctGetPrevRapTime(pC->pReaderContext, 75910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4_StreamHandler *)pC->pReaderVideoStream, &iCts); 75920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 75930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4WAR_READER_INFORMATION_NOT_PRESENT == err ) 75940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 75950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* No RAP table, jump backward and predecode */ 75960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi iCts = (M4OSA_Int32)pC->dViDecStartingCts - M4MCS_NO_STSS_JUMP_POINT; 75970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 75980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( iCts < 0 ) 75990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi iCts = 0; 76000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 76010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else if( M4NO_ERROR != err ) 76020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 76030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 76040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intStepBeginVideoJump: m_pFctGetPrevRapTime returns 0x%x!", 76050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 76060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 76070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 76080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 76090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* + CRLV6775 -H.264 Trimming */ 76100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 76110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4OSA_TRUE == pC->bH264Trim ) 76120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 76130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 76140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi // Save jump time for safety, this fix should be generic 76150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 76160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int32 iCtsOri = iCts; 76170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 76180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 76190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->m_pReader->m_pFctJump(pC->pReaderContext, 76200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4_StreamHandler *)pC->pReaderVideoStream, &iCts); 76210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 76220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR != err ) 76230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 76240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 76250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intStepBeginVideoJump: m_pFctJump(V) returns 0x%x!", 76260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 76270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 76280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 76290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 76300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->ReaderVideoAU1.m_structSize == 0 ) 76310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 76320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 76330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Initializes an access Unit */ 76340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->m_pReader->m_pFctFillAuStruct(pC->pReaderContext, 76350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4_StreamHandler *)pC->pReaderVideoStream, 76360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi &pC->ReaderVideoAU1); 76370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 76380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR != err ) 76390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 76400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 76410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_open(): m_pReader->m_pFctFillAuStruct(video) returns 0x%x", 76420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 76430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 76440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 76450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->m_pReaderDataIt->m_pFctGetNextAu(pC->pReaderContext, 76460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4_StreamHandler *)pC->pReaderVideoStream, 76470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi &pC->ReaderVideoAU1); 76480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 76490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4WAR_NO_MORE_AU == err ) 76500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 76510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE2_0( 76520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intVideoNullEncoding(): \ 76530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi m_pReaderDataIt->m_pFctGetNextAu(video) returns M4WAR_NO_MORE_AU"); 76540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* The audio transcoding is finished */ 76550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->VideoState = M4MCS_kStreamState_FINISHED; 76560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 76570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 76580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else if( M4NO_ERROR != err ) 76590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 76600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 76610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intVideoNullEncoding():\ 76620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi m_pReaderDataIt->m_pFctGetNextAu(video) returns 0x%x", 76630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 76640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 76650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 76660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 76670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->ReaderVideoAU1.m_structSize = 0; 76680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 76690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 76700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = H264MCS_ProcessSPS_PPS(pC->m_pInstance, 76710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_UInt8 *)pC->ReaderVideoAU1.m_dataAddress, pC->ReaderVideoAU1.m_size); 76720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 76730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR != err ) 76740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 76750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 76760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intStepBeginVideoJump: H264MCS_ProcessSPS_PPS returns 0x%x!", 76770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 76780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 76790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 76800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 76810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 76820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi // Restore jump time for safety, this fix should be generic 76830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 76840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi iCts = iCtsOri; 76850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 76860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 76870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 76880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* - CRLV6775 -H.264 Trimming */ 76890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 76900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 76910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Decode one step */ 76920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->dViDecCurrentCts = (M4OSA_Double)(iCts + pC->iVideoBeginDecIncr); 76930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 76940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 76950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Be sure we don't decode too far */ 76960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->dViDecCurrentCts > pC->dViDecStartingCts ) 76970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 76980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->dViDecCurrentCts = pC->dViDecStartingCts; 76990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 77000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 77010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 77020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Decode at least once with the bJump flag to true */ 77030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_1( 77040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4VSS3GPP_intClipDecodeVideoUpToCts: Decoding upTo CTS %.3f", 77050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->dViDecCurrentCts); 77060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->isRenderDup = M4OSA_FALSE; 77070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = 77080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->m_pVideoDecoder->m_pFctDecode(pC->pViDecCtxt, &pC->dViDecCurrentCts, 7709b37a9417647c43d6d2713807ed441737c32629f3Chih-Chung Chang M4OSA_TRUE, 0); 77100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 77110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( M4NO_ERROR != err) && (M4WAR_NO_MORE_AU != err) 77120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (err != M4WAR_VIDEORENDERER_NO_NEW_FRAME) ) 77130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 77140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 77150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intStepBeginVideoJump: m_pFctDecode returns 0x%x!", err); 77160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 77170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 77180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 77190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( err == M4WAR_VIDEORENDERER_NO_NEW_FRAME ) 77200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 77210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE2_0("Decoding output the same frame as before 1"); 77220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->isRenderDup = M4OSA_TRUE; 77230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 77240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 77250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 77260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Increment decoding cts for the next step */ 77270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->dViDecCurrentCts += (M4OSA_Double)pC->iVideoBeginDecIncr; 77280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 77290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 77300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Update state automaton */ 77310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->dViDecCurrentCts > pC->dViDecStartingCts ) 77320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 77330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 77340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Be sure we don't decode too far */ 77350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->dViDecCurrentCts = pC->dViDecStartingCts; 77360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->State = M4MCS_kState_PROCESSING; 77370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 77380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 77390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 77400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->State = M4MCS_kState_BEGINVIDEODECODE; 77410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 77420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 77430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 77440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Return with no error */ 77450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_0("M4MCS_intStepBeginVideoJump(): returning M4NO_ERROR"); 77460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4NO_ERROR; 77470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 77480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 77490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 77500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 77510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_ERR M4MCS_intStepBeginVideoDecode(M4MCS_InternalContext* pC) 77520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 77530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */ 77540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4OSA_ERR M4MCS_intStepBeginVideoDecode( M4MCS_InternalContext *pC ) 77550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 77560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_ERR err; 77570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4_MediaTime dDecTarget; 77580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 77590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->novideo ) 77600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 77610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->State = M4MCS_kState_PROCESSING; 77620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4NO_ERROR; 77630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 77640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 77650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 77660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Decode */ 77670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi dDecTarget = pC->dViDecCurrentCts; 77680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_1("M4MCS_intStepBeginDecode: Decoding upTo CTS %.3f", 77690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->dViDecCurrentCts); 77700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->isRenderDup = M4OSA_FALSE; 77710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->m_pVideoDecoder->m_pFctDecode(pC->pViDecCtxt, &dDecTarget, 7772b37a9417647c43d6d2713807ed441737c32629f3Chih-Chung Chang M4OSA_FALSE, 0); 77730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 77740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( M4NO_ERROR != err) && (M4WAR_NO_MORE_AU != err) 77750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (err != M4WAR_VIDEORENDERER_NO_NEW_FRAME) ) 77760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 77770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 77780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intStepBeginVideoDecode: m_pFctDecode returns 0x%x!", err); 77790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 77800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 77810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 77820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( err == M4WAR_VIDEORENDERER_NO_NEW_FRAME ) 77830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 77840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE2_0("Decoding output the same frame as before 2"); 77850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->isRenderDup = M4OSA_TRUE; 77860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 77870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 77880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 77890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Increment decoding cts for the next step */ 77900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->dViDecCurrentCts += (M4OSA_Double)pC->iVideoBeginDecIncr; 77910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 77920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 77930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Update state automaton, if needed */ 77940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( (M4OSA_UInt32)pC->dViDecCurrentCts > pC->dViDecStartingCts) 77950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi || (M4WAR_NO_MORE_AU == err) ) 77960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 77970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 77980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Be sure we don't decode too far */ 77990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->dViDecCurrentCts = (M4OSA_Double)pC->dViDecStartingCts; 78000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->State = M4MCS_kState_PROCESSING; 78010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 78020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 78030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 78040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Return with no error */ 78050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_0("M4MCS_intStepBeginVideoDecode(): returning M4NO_ERROR"); 78060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4NO_ERROR; 78070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 78080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 78090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/*****************************/ 78100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/* define AMR silence frames */ 78110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/*****************************/ 78120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 78130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#define M4VSS3GPP_AMR_AU_SILENCE_FRAME_048_SIZE 13 78140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#define M4VSS3GPP_AMR_AU_SILENCE_FRAME_048_DURATION 160 78150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 78160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#ifdef M4VSS3GPP_SILENCE_FRAMES 78170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 78180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargiconst M4OSA_UInt8 M4VSS3GPP_AMR_AU_SILENCE_FRAME_048[ 78190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4VSS3GPP_AMR_AU_SILENCE_FRAME_048_SIZE] = 78200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 78210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 0x04, 0xFF, 0x18, 0xC7, 0xF0, 0x0D, 0x04, 0x33, 0xFF, 0xE0, 0x00, 0x00, 0x00 78220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi }; 78230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#else 78240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 78250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargiextern 78260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargiconst 78270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_UInt8 78280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4VSS3GPP_AMR_AU_SILENCE_FRAME_048[M4VSS3GPP_AMR_AU_SILENCE_FRAME_048_SIZE]; 78290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 78300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#endif 78310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 78320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/*****************************/ 78330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/* define AAC silence frames */ 78340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/*****************************/ 78350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 78360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#define M4VSS3GPP_AAC_AU_SILENCE_MONO_SIZE 4 78370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 78380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#ifdef M4VSS3GPP_SILENCE_FRAMES 78390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 78400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargiconst M4OSA_UInt8 M4VSS3GPP_AAC_AU_SILENCE_MONO[ 78410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4VSS3GPP_AAC_AU_SILENCE_MONO_SIZE] = 78420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 78430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 0x00, 0xC8, 0x20, 0x07 78440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi }; 78450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#else 78460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 78470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargiextern const M4OSA_UInt8 78480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4VSS3GPP_AAC_AU_SILENCE_MONO[M4VSS3GPP_AAC_AU_SILENCE_MONO_SIZE]; 78490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 78500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#endif 78510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 78520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#define M4VSS3GPP_AAC_AU_SILENCE_STEREO_SIZE 6 78530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 78540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#ifdef M4VSS3GPP_SILENCE_FRAMES 78550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 78560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargiconst M4OSA_UInt8 M4VSS3GPP_AAC_AU_SILENCE_STEREO[ 78570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4VSS3GPP_AAC_AU_SILENCE_STEREO_SIZE] = 78580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 78590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 0x21, 0x10, 0x03, 0x20, 0x54, 0x1C 78600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi }; 78610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#else 78620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 78630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargiextern const 78640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_UInt8 78650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4VSS3GPP_AAC_AU_SILENCE_STEREO[M4VSS3GPP_AAC_AU_SILENCE_STEREO_SIZE]; 78660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 78670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#endif 78680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 78690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 78700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 78710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_ERR M4MCS_intAudioNullEncoding(M4MCS_InternalContext* pC) 78720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4NO_ERROR: No error 78730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 78740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */ 78750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 78760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4OSA_ERR M4MCS_intAudioNullEncoding( M4MCS_InternalContext *pC ) 78770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 78780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_ERR err; 78790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 78800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->noaudio ) 78810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4NO_ERROR; 78820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 78830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Check if all audio frame has been written (happens at begin cut) */ 78840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->ReaderAudioAU.m_size == 0 ) 78850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 78860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 78870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Initializes a new AU if needed */ 78880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->ReaderAudioAU1.m_structSize == 0 ) 78890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 78900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 78910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Initializes an access Unit */ 78920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->m_pReader->m_pFctFillAuStruct(pC->pReaderContext, 78930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4_StreamHandler *)pC->pReaderAudioStream, 78940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi &pC->ReaderAudioAU1); 78950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 78960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR != err ) 78970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 78980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 78990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_open(): m_pReader->m_pFctFillAuStruct(audio) returns 0x%x", 79000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 79010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 79020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 79030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 79040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->m_pDataAddress1 = 79052ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu (M4OSA_MemAddr8)M4OSA_32bitAlignedMalloc(pC->ReaderAudioAU1.m_maxsize, 79060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS, (M4OSA_Char *)"Temporary AU1 buffer"); 79070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 79080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->m_pDataAddress1 == M4OSA_NULL ) 79090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 79100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_0( 79110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intAudioNullEncoding(): allocation error"); 79120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_ALLOC; 79130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 79140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 79150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->m_pReaderDataIt->m_pFctGetNextAu(pC->pReaderContext, 79160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4_StreamHandler *)pC->pReaderAudioStream, 79170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi &pC->ReaderAudioAU1); 79180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 79190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4WAR_NO_MORE_AU == err ) 79200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 79210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE2_0( 79220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intAudioNullEncoding():\ 79230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi m_pReaderDataIt->m_pFctGetNextAu(audio) returns M4WAR_NO_MORE_AU"); 79240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* The audio transcoding is finished */ 79250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioState = M4MCS_kStreamState_FINISHED; 79260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 79270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 79280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else if( M4NO_ERROR != err ) 79290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 79300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 79310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intAudioNullEncoding(): \ 79320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi m_pReaderDataIt->m_pFctGetNextAu(Audio) returns 0x%x", 79330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 79340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 79350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 79360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*FB 2009.04.02: PR surnxp#616: Crash in MCS while Audio AU copying , 79370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi constant memory reader case*/ 79380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->ReaderAudioAU1.m_maxsize 79390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi > pC->pReaderAudioStream->m_basicProperties.m_maxAUSize ) 79400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 79410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Constant memory reader case, we need to reallocate the temporary buffers */ 79420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_intReallocTemporaryAU((M4OSA_MemAddr8 79430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *) &(pC->m_pDataAddress1), pC->ReaderAudioAU1.m_maxsize); 79440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* pC->m_pDataAddress1 and 79450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->m_pDataAddress2 must be reallocated at the same time */ 79460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* because pC->pReaderAudioStream->m_basicProperties.m_maxAUSize take 79470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi maximum value. Then the test "if(pC->ReaderAudioAU?.m_maxsize > 79480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pReaderAudioStream->m_basicProperties.m_maxAUSize)" is never true */ 79490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* and the size of the second buffer is never changed. */ 79500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_intReallocTemporaryAU((M4OSA_MemAddr8 79510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *) &(pC->m_pDataAddress2), pC->ReaderAudioAU1.m_maxsize); 79520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* pC->m_pDataAddress1 and 79530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->m_pDataAddress2 must be reallocated at the same time */ 79540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Update stream properties */ 79550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pReaderAudioStream->m_basicProperties.m_maxAUSize = 79560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->ReaderAudioAU1.m_maxsize; 79570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 79580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /**/ 79599d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu memcpy((void *)pC->m_pDataAddress1, 79609d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu (void *)pC->ReaderAudioAU1.m_dataAddress, 79610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->ReaderAudioAU1.m_size); 79620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 79630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 79640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->ReaderAudioAU2.m_structSize == 0 ) 79650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 79660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 79670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Initializes an access Unit */ 79680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->m_pReader->m_pFctFillAuStruct(pC->pReaderContext, 79690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4_StreamHandler *)pC->pReaderAudioStream, 79700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi &pC->ReaderAudioAU2); 79710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 79720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR != err ) 79730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 79740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 79750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_open(): m_pReader->m_pFctFillAuStruct(audio) returns 0x%x", 79760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 79770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 79780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 79790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->m_pDataAddress2 = 79802ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu (M4OSA_MemAddr8)M4OSA_32bitAlignedMalloc(pC->ReaderAudioAU2.m_maxsize, 79810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS, (M4OSA_Char *)"Temporary AU buffer"); 79820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 79830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->m_pDataAddress2 == M4OSA_NULL ) 79840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 79850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_0( 79860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intAudioNullEncoding(): allocation error"); 79870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_ALLOC; 79880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 79890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 79900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 79910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Read the next audio AU in the input file */ 79920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->ReaderAudioAU2.m_CTS > pC->ReaderAudioAU1.m_CTS ) 79930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 79949d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu memcpy((void *) &pC->ReaderAudioAU, 79959d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu (void *) &pC->ReaderAudioAU2, sizeof(M4_AccessUnit)); 79960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->m_pReaderDataIt->m_pFctGetNextAu(pC->pReaderContext, 79970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4_StreamHandler *)pC->pReaderAudioStream, 79980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi &pC->ReaderAudioAU1); 79990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 80000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->ReaderAudioAU1.m_maxsize 80010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi > pC->pReaderAudioStream->m_basicProperties.m_maxAUSize ) 80020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 80030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Constant memory reader case, we need to reallocate the temporary buffers */ 80040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_intReallocTemporaryAU((M4OSA_MemAddr8 80050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *) &(pC->m_pDataAddress1), pC->ReaderAudioAU1.m_maxsize); 80060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* pC->m_pDataAddress1 80070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * and pC->m_pDataAddress2 must be reallocated at the same time * 80080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * because pC->pReaderAudioStream->m_basicProperties.m_maxAUSize take 80090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * maximum value. Then the test "if(pC->ReaderAudioAU?.m_maxsize > 80100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * pC->pReaderAudioStream->m_basicProperties.m_maxAUSize)" is never true * 80110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * and the size of the second buffer is never changed. 80120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */ 80130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_intReallocTemporaryAU((M4OSA_MemAddr8 80140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *) &(pC->m_pDataAddress2), pC->ReaderAudioAU1.m_maxsize); 80150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* pC->m_pDataAddress1 and 80160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * pC->m_pDataAddress2 must be reallocated at the same time 80170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Update stream properties 80180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */ 80190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pReaderAudioStream->m_basicProperties.m_maxAUSize = 80200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->ReaderAudioAU1.m_maxsize; 80210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 80220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /**/ 80239d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu memcpy((void *)pC->m_pDataAddress1, 80249d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu (void *)pC->ReaderAudioAU1.m_dataAddress, 80250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->ReaderAudioAU1.m_size); 80260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->m_audioAUDuration = 80270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->ReaderAudioAU1.m_CTS - pC->ReaderAudioAU2.m_CTS; 80280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->ReaderAudioAU.m_dataAddress = pC->m_pDataAddress2; 80290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 80300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 80310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 80329d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu memcpy((void *) &pC->ReaderAudioAU, 80339d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu (void *) &pC->ReaderAudioAU1, sizeof(M4_AccessUnit)); 80340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->m_pReaderDataIt->m_pFctGetNextAu(pC->pReaderContext, 80350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4_StreamHandler *)pC->pReaderAudioStream, 80360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi &pC->ReaderAudioAU2); 80370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Crash in MCS while Audio AU copying , 80380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * constant memory reader case 80390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */ 80400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->ReaderAudioAU2.m_maxsize 80410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi > pC->pReaderAudioStream->m_basicProperties.m_maxAUSize ) 80420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 80430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Constant memory reader case, we need to reallocate the temporary buffers */ 80440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_intReallocTemporaryAU((M4OSA_MemAddr8 80450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *) &(pC->m_pDataAddress2), pC->ReaderAudioAU2.m_maxsize); 80460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* pC->m_pDataAddress1 and 80470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * pC->m_pDataAddress2 must be reallocated at the same time 80480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * because pC->pReaderAudioStream->m_basicProperties.m_maxAUSize take maximum 80490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * value. Then the test "if(pC->ReaderAudioAU?.m_maxsize > pC->pReaderAudioStream-> 80500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * m_basicProperties.m_maxAUSize)" is never true 80510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * and the size of the second buffer is never changed. 80520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */ 80530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_intReallocTemporaryAU((M4OSA_MemAddr8 80540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *) &(pC->m_pDataAddress1), pC->ReaderAudioAU2.m_maxsize); 80550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* [ END ] 20091008 JFV PR fix surnxpsw#1071: pC->m_pDataAddress1 and 80560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->m_pDataAddress2 must be reallocated at the same time */ 80570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Update stream properties */ 80580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pReaderAudioStream->m_basicProperties.m_maxAUSize = 80590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->ReaderAudioAU2.m_maxsize; 80600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 80610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /**/ 80629d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu memcpy((void *)pC->m_pDataAddress2, 80639d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu (void *)pC->ReaderAudioAU2.m_dataAddress, 80640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->ReaderAudioAU2.m_size); 80650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->m_audioAUDuration = 80660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->ReaderAudioAU2.m_CTS - pC->ReaderAudioAU1.m_CTS; 80670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->ReaderAudioAU.m_dataAddress = pC->m_pDataAddress1; 80680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 80690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 80700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4WAR_NO_MORE_AU == err ) 80710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 80720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE2_0( 80730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intAudioNullEncoding(): \ 80740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi m_pReaderDataIt->m_pFctGetNextAu(audio) returns M4WAR_NO_MORE_AU"); 80750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* The audio transcoding is finished */ 80760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioState = M4MCS_kStreamState_FINISHED; 80770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 80780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 80790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else if( M4NO_ERROR != err ) 80800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 80810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 80820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intAudioNullEncoding(): \ 80830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi m_pReaderDataIt->m_pFctGetNextAu(Audio) returns 0x%x", 80840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 80850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 80860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 80870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 80880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 80890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 80900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Prepare the writer AU */ 80910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->pWriterDataFcts->pStartAU(pC->pWriterContext, 80920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_WRITER_AUDIO_STREAM_ID, &pC->WriterAudioAU); 80930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 80940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR != err ) 80950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 80960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 80970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intAudioNullEncoding(): pWriterDataFcts->pStartAU(Audio) returns 0x%x", 80980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 80990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 81000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 81010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 81020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->uiAudioAUCount 81030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi == 0 ) /* If it is the first AU, we set it to silence 81040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (else, errors 0x3841, 0x3847 in our AAC decoder) */ 81050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 81060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->InputFileProperties.AudioStreamType == M4VIDEOEDITING_kAAC 81070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi || pC->InputFileProperties.AudioStreamType 81080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi == M4VIDEOEDITING_kAACplus 81090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi || pC->InputFileProperties.AudioStreamType 81100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi == M4VIDEOEDITING_keAACplus ) 81110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 81120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->InputFileProperties.uiNbChannels == 1 ) 81130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 81140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterAudioAU.size = M4VSS3GPP_AAC_AU_SILENCE_MONO_SIZE; 81159d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu memcpy((void *)pC->WriterAudioAU.dataAddress, 81169d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu (void *)M4VSS3GPP_AAC_AU_SILENCE_MONO, 81170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterAudioAU.size); 81180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 81190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else if( pC->InputFileProperties.uiNbChannels == 2 ) 81200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 81210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterAudioAU.size = M4VSS3GPP_AAC_AU_SILENCE_STEREO_SIZE; 81229d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu memcpy((void *)pC->WriterAudioAU.dataAddress, 81239d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu (void *)M4VSS3GPP_AAC_AU_SILENCE_STEREO, 81240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterAudioAU.size); 81250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 81260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 81270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 81280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Must never happen ...*/ 81290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_0( 81300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intAudioNullEncoding: Bad number of channels in audio input"); 81310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_ERR_INVALID_INPUT_FILE; 81320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 81330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 81340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else if( pC->InputFileProperties.AudioStreamType 81350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi == M4VIDEOEDITING_kAMR_NB ) 81360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 81370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterAudioAU.size = M4VSS3GPP_AMR_AU_SILENCE_FRAME_048_SIZE; 81389d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu memcpy((void *)pC->WriterAudioAU.dataAddress, 81399d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu (void *)M4VSS3GPP_AMR_AU_SILENCE_FRAME_048, 81400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterAudioAU.size); 81410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Some remaining AMR AU needs to be copied */ 81420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->ReaderAudioAU.m_size != 0 ) 81430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 81440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Update Writer AU */ 81450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterAudioAU.size += pC->ReaderAudioAU.m_size; 81469d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu memcpy((void *)(pC->WriterAudioAU.dataAddress 81479d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu + M4VSS3GPP_AMR_AU_SILENCE_FRAME_048_SIZE), 81489d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu (void *)pC->ReaderAudioAU.m_dataAddress, 81490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->ReaderAudioAU.m_size); 81500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 81510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 81520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 81530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 81540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*MP3 case: copy the AU*/ 81550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_1( 81560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intAudioNullEncoding(): Copying audio AU: size=%d", 81570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->ReaderAudioAU.m_size); 81589d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu memcpy((void *)pC->WriterAudioAU.dataAddress, 81599d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu (void *)pC->ReaderAudioAU.m_dataAddress, 81600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->ReaderAudioAU.m_size); 81610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterAudioAU.size = pC->ReaderAudioAU.m_size; 81620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 81630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 81640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 81650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 81660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 81670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Copy audio data from reader AU to writer AU */ 81680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_1( 81690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intAudioNullEncoding(): Copying audio AU: size=%d", 81700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->ReaderAudioAU.m_size); 81719d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu memcpy((void *)pC->WriterAudioAU.dataAddress, 81729d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu (void *)pC->ReaderAudioAU.m_dataAddress, 81730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->ReaderAudioAU.m_size); 81740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterAudioAU.size = pC->ReaderAudioAU.m_size; 81750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 81760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 81770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 81780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Convert CTS unit from milliseconds to timescale */ 81790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterAudioAU.CTS = 81800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_Time)((( pC->ReaderAudioAU.m_CTS - pC->iAudioCtsOffset) 81810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * (pC->WriterAudioStream.timeScale / 1000.0))); 81820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 81830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->InputFileProperties.AudioStreamType == M4VIDEOEDITING_kAMR_NB 81840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && pC->uiAudioAUCount == 0 ) 81850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 81860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->iAudioCtsOffset -= 81870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 20; /* Duration of a silence AMR AU, to handle the duration of the added 81880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi silence frame */ 81890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 81900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterAudioAU.nbFrag = 0; 81910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_1("M4MCS_intAudioNullEncoding(): audio AU: CTS=%d ms", 81920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterAudioAU.CTS); 81930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 81940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 81950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Write it to the output file */ 81960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->uiAudioAUCount++; 81970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->pWriterDataFcts->pProcessAU(pC->pWriterContext, 81980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_WRITER_AUDIO_STREAM_ID, &pC->WriterAudioAU); 81990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 82000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR != err ) 82010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 82020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 82030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intAudioNullEncoding(): pWriterDataFcts->pProcessAU(Audio) returns 0x%x", 82040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 82050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 82060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 82070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 82080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* All the audio has been written */ 82090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->ReaderAudioAU.m_size = 0; 82100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 82110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 82120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Return with no error */ 82130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_0("M4MCS_intAudioNullEncoding(): returning M4NO_ERROR"); 82140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4NO_ERROR; 82150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 82160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 82170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 82180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 82190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief Init Audio Transcoding 82200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4NO_ERROR: No error 82210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 82220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */ 82230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4OSA_ERR M4MCS_intAudioTranscoding( M4MCS_InternalContext *pC ) 82240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 82250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_ERR err; /**< General error */ 82260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 82270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 82280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uiBytesDec; /**< Nb of bytes available in the decoder OUT buffer */ 82290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 82300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uiDecoder2Ssrc_NbBytes; /**< Nb of bytes copied into the ssrc IN buffer */ 82310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 82320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi int ssrcErr; /**< Error while ssrc processing */ 82330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 uiSsrcInSize; /**< Size in bytes of ssrc intput buffer */ 82340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 82350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uiSsrcInRoom; /**< Nb of bytes available in the ssrc IN buffer */ 82360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_MemAddr8 82370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pSsrcInput; /**< Pointer to the good buffer location for ssrc input */ 82380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 uiSsrcOutSize; /**< Size in bytes of ssrc output buffer */ 82390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 82400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uiBytesSsrc; /**< Nb of bytes available in the ssrc OUT buffer */ 82410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 82420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt8 82430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi needChannelConversion; /**< Flag to indicate if a stereo <-> mono conversion is needed */ 82440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 82450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uiChannelConvertorCoeff; /**< Multiplicative coefficient if stereo 82460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi <-> mono conversion is applied */ 82470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_MemAddr8 pChannelConvertorInput = 82480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_NULL; /**< Pointer to the good buffer location for channel convertor input */ 82490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 uiChannelConvertorNbSamples = 82500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 0; /**< Nb of pcm samples to convert in channel convertor */ 82510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_MemAddr8 pChannelConvertorOutput = 82520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_NULL; /**< Pointer to the good buffer location for channel convertor output */ 82530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 82540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Time 82550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi frameTimeDelta; /**< Duration of the encoded (then written) data */ 82560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 82570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uiEncoderInRoom; /**< Nb of bytes available in the encoder IN buffer */ 82580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 82590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uiSsrc2Encoder_NbBytes; /**< Nb of bytes copied from the ssrc OUT buffer */ 82600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_MemAddr8 82610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pEncoderInput; /**< Pointer to the good buffer location for encoder input */ 82620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4ENCODER_AudioBuffer pEncInBuffer; /**< Encoder input buffer for api */ 82630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4ENCODER_AudioBuffer pEncOutBuffer; /**< Encoder output buffer for api */ 82640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 82650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int16 *tempBuffOut = M4OSA_NULL; 82660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*FlB 2009.03.04: apply audio effects if an effect is active*/ 82670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int8 *pActiveEffectNumber = &(pC->pActiveEffectNumber); 82680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 82692b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury uint32_t errCode = M4NO_ERROR; 82702b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury 82710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->noaudio ) 82720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4NO_ERROR; 82730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 82740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* _________________ */ 82750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*| |*/ 82760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*| READ AND DECODE |*/ 82770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*|_________________|*/ 82780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 82790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Check if we have to empty the decoder out buffer first */ 82800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4OSA_NULL != pC->pPosInDecBufferOut ) 82810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 82820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi goto m4mcs_intaudiotranscoding_feed_resampler; 82830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 82840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 82850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->m_pAudioDecoder->m_pFctStepAudioDec(pC->pAudioDecCtxt, 82862b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury M4OSA_NULL, &pC->AudioDecBufferOut, M4OSA_FALSE); 82872b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury 82880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 82890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR != err ) 82900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 82910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 82920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intAudioTranscoding(): m_pAudioDecoder->m_pFctStepAudio returns 0x%x", 82930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 82940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 82950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 82960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 82970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#ifdef MCS_DUMP_PCM_TO_FILE 82980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 82990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi fwrite(pC->AudioDecBufferOut.m_dataAddress, 83000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioDecBufferOut.m_bufferSize, 1, file_pcm_decoder); 83010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 83020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#endif 83030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 83042b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury pC->m_pAudioDecoder->m_pFctGetOptionAudioDec(pC->pAudioDecCtxt, 83052b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury M4AD_kOptionID_GetAudioAUErrCode, (M4OSA_DataOption) &errCode); 83060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 83072b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury if ( M4WAR_NO_MORE_AU == errCode ) { 83082b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury pC->AudioState = M4MCS_kStreamState_FINISHED; 83092b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury M4OSA_TRACE2_0( 83102b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury "M4MCS_intAudioTranscoding():\ 83112b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury m_pReaderDataIt->m_pFctGetNextAu(audio) returns M4WAR_NO_MORE_AU"); 83122b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury return errCode; 83132b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury } 83140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 83150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Set the current position in the decoder out buffer */ 83160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pPosInDecBufferOut = pC->AudioDecBufferOut.m_dataAddress; 83170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 83180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* ________________ */ 83190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*| |*/ 83200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*| FEED RESAMPLER |*/ 83210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*|________________|*/ 83220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 83230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargim4mcs_intaudiotranscoding_feed_resampler: 83240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 83250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Check if we have to empty the ssrc out buffer first */ 83260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4OSA_NULL != pC->pPosInSsrcBufferOut ) 83270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 83280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi goto m4mcs_intaudiotranscoding_prepare_input_buffer; 83290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 83300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 83310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Compute number of bytes remaining in the decoder buffer */ 83320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uiSsrcInSize = pC->iSsrcNbSamplIn * sizeof(short) 83330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * pC->pReaderAudioStream->m_nbChannels; 83340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uiBytesDec = ( pC->AudioDecBufferOut.m_dataAddress 83350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi + pC->AudioDecBufferOut.m_bufferSize) - pC->pPosInDecBufferOut; 83360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 83370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Check if we can feed directly the Ssrc with the decoder out buffer */ 83380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( pC->pPosInSsrcBufferIn == pC->pSsrcBufferIn) 83390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (uiBytesDec >= uiSsrcInSize) ) 83400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 83410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pSsrcInput = pC->pPosInDecBufferOut; 83420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 83430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* update data consumed into decoder buffer after resampling */ 83440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( uiBytesDec == uiSsrcInSize ) 83450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pPosInDecBufferOut = M4OSA_NULL; 83460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 83470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pPosInDecBufferOut += uiSsrcInSize; 83480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 83490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi goto m4mcs_intaudiotranscoding_do_resampling; 83500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 83510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 83520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 83530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Compute remaining space in Ssrc buffer in */ 83540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uiSsrcInRoom = ( pC->pSsrcBufferIn + uiSsrcInSize) - pC->pPosInSsrcBufferIn; 83550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 83560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 83570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Nb of bytes copied is the minimum between nb of bytes remaining in 83580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * decoder out buffer and space remaining in ssrc in buffer */ 83590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uiDecoder2Ssrc_NbBytes = 83600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (uiSsrcInRoom < uiBytesDec) ? uiSsrcInRoom : uiBytesDec; 83610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 83620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 83630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Copy from the decoder out buffer into the Ssrc in buffer */ 83649d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu memcpy((void *)pC->pPosInSsrcBufferIn, (void *)pC->pPosInDecBufferOut, 83650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uiDecoder2Ssrc_NbBytes); 83660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 83670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 83680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Update the position in the decoder out buffer */ 83690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pPosInDecBufferOut += uiDecoder2Ssrc_NbBytes; 83700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 83710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 83720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Update the position in the Ssrc in buffer */ 83730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pPosInSsrcBufferIn += uiDecoder2Ssrc_NbBytes; 83740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 83750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 83760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Check if the decoder buffer out is empty */ 83770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( pC->pPosInDecBufferOut - pC->AudioDecBufferOut.m_dataAddress) 83780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi == (M4OSA_Int32)pC->AudioDecBufferOut.m_bufferSize ) 83790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 83800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pPosInDecBufferOut = M4OSA_NULL; 83810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 83820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 83830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Check if the Ssrc in buffer is ready (= full) */ 83840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( pC->pPosInSsrcBufferIn - pC->pSsrcBufferIn) 83850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi < (M4OSA_Int32)uiSsrcInSize ) 83860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 83870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi goto m4mcs_intaudiotranscoding_end; 83880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 83890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 83900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pSsrcInput = pC->pSsrcBufferIn; 83910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 83920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* update data consumed into ssrc buffer in after resampling (empty) */ 83930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pPosInSsrcBufferIn = pC->pSsrcBufferIn; 83940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 83950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* ___________________ */ 83960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*| |*/ 83970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*| DO THE RESAMPLING |*/ 83980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*|___________________|*/ 83990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 84000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargim4mcs_intaudiotranscoding_do_resampling: 84010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 84020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 84030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * No need for memcopy, we can feed Ssrc directly with the data in the audio 84040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi decoder out buffer*/ 84050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 84060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ssrcErr = 0; 84070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 84080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->pReaderAudioStream->m_nbChannels == 1 ) 84090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 84100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi tempBuffOut = 84112ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu (short *)M4OSA_32bitAlignedMalloc((pC->iSsrcNbSamplOut * sizeof(short) * 2 84120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * ((*pC).InputFileProperties).uiNbChannels), 84130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4VSS3GPP,(M4OSA_Char *) "tempBuffOut"); 84149d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu memset((void *)tempBuffOut, 0,(pC->iSsrcNbSamplOut * sizeof(short) * 2 84159d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu * ((*pC).InputFileProperties).uiNbChannels)); 84160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 84170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LVAudioresample_LowQuality((short *)tempBuffOut, (short *)pSsrcInput, 84181156ea5eaffa0ed46f377c836363fd6499f3b3f9Basavapatna Dattaguru pC->iSsrcNbSamplOut, pC->pLVAudioResampler); 84190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 84200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 84210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 84229d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu memset((void *)pC->pSsrcBufferOut, 0, (pC->iSsrcNbSamplOut * sizeof(short) 84239d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu * ((*pC).InputFileProperties).uiNbChannels)); 84240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 84250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi LVAudioresample_LowQuality((short *)pC->pSsrcBufferOut, 84261156ea5eaffa0ed46f377c836363fd6499f3b3f9Basavapatna Dattaguru (short *)pSsrcInput, pC->iSsrcNbSamplOut, pC->pLVAudioResampler); 84270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 84280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 84290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->pReaderAudioStream->m_nbChannels == 1 ) 84300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 84310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi From2iToMono_16((short *)tempBuffOut, (short *)pC->pSsrcBufferOut, 84320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (short)pC->iSsrcNbSamplOut); 84332ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu free(tempBuffOut); 84340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 84350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 84360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 84370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( 0 != ssrcErr ) 84380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 84390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 84400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intAudioTranscoding: SSRC_Process returns 0x%x, \ 84410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi returning M4MCS_ERR_AUDIO_CONVERSION_FAILED", 84420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ssrcErr); 84430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_ERR_AUDIO_CONVERSION_FAILED; 84440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 84450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 84460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pPosInSsrcBufferOut = pC->pSsrcBufferOut; 84470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 84480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* ______________________ */ 84490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*| |*/ 84500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*| PREPARE INPUT BUFFER |*/ 84510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*|______________________|*/ 84520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 84530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargim4mcs_intaudiotranscoding_prepare_input_buffer: 84540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 84550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Set the flag for channel conversion requirement */ 84560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( pC->AudioEncParams.ChannelNum == M4ENCODER_kMono) 84570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (pC->pReaderAudioStream->m_nbChannels == 2) ) 84580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 84590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi needChannelConversion = 1; 84600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uiChannelConvertorCoeff = 4; 84610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 84620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else if( ( pC->AudioEncParams.ChannelNum == M4ENCODER_kStereo) 84630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (pC->pReaderAudioStream->m_nbChannels == 1) ) 84640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 84650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi needChannelConversion = 2; 84660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uiChannelConvertorCoeff = 1; 84670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 84680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 84690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 84700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi needChannelConversion = 0; 84710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uiChannelConvertorCoeff = 2; 84720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 84730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 84740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Compute number of bytes remaining in the Ssrc buffer */ 84750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uiSsrcOutSize = pC->iSsrcNbSamplOut * sizeof(short) 84760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * pC->pReaderAudioStream->m_nbChannels; 84770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uiBytesSsrc = 84780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ( pC->pSsrcBufferOut + uiSsrcOutSize) - pC->pPosInSsrcBufferOut; 84790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 84800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Check if the ssrc buffer is full */ 84810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->pPosInSsrcBufferOut == pC->pSsrcBufferOut ) 84820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 84830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uiSsrc2Encoder_NbBytes = 84840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->audioEncoderGranularity * uiChannelConvertorCoeff / 2; 84850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 84860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Check if we can feed directly the encoder with the ssrc out buffer */ 84870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( pC->pPosInAudioEncoderBuffer == M4OSA_NULL) 84880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (uiBytesSsrc >= uiSsrc2Encoder_NbBytes) ) 84890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 84900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* update position in ssrc out buffer after encoding */ 84910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( uiBytesSsrc == uiSsrc2Encoder_NbBytes ) 84920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pPosInSsrcBufferOut = M4OSA_NULL; 84930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 84940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pPosInSsrcBufferOut += uiSsrc2Encoder_NbBytes; 84950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 84960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* mark the encoder buffer ready (= full) */ 84970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pPosInAudioEncoderBuffer = 84980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pAudioEncoderBuffer + pC->audioEncoderGranularity; 84990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 85000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( needChannelConversion > 0 ) 85010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 85020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* channel convertor writes directly into encoder buffer */ 85030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pEncoderInput = pC->pAudioEncoderBuffer; 85040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 85050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pChannelConvertorInput = pC->pSsrcBufferOut; 85060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pChannelConvertorOutput = pC->pAudioEncoderBuffer; 85070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uiChannelConvertorNbSamples = 85080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uiSsrc2Encoder_NbBytes / sizeof(short); 85090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 85100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi goto m4mcs_intaudiotranscoding_channel_convertor; 85110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 85120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 85130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 85140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* encode directly from ssrc out buffer */ 85150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pEncoderInput = pC->pSsrcBufferOut; 85160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 85170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi goto m4mcs_intaudiotranscoding_encode_and_write; 85180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 85190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 85200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 85210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 85220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 85230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Compute remaining space in encoder buffer in */ 85240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->pPosInAudioEncoderBuffer == M4OSA_NULL ) 85250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 85260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pPosInAudioEncoderBuffer = pC->pAudioEncoderBuffer; 85270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 85280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 85290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uiEncoderInRoom = ( pC->pAudioEncoderBuffer + pC->audioEncoderGranularity) 85300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi - pC->pPosInAudioEncoderBuffer; 85310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pEncoderInput = pC->pAudioEncoderBuffer; 85320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 85330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 85340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Nb of bytes copied is the minimum between nb of bytes remaining in 85350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * decoder out buffer and space remaining in ssrc in buffer */ 85360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uiSsrc2Encoder_NbBytes = 85370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (( uiEncoderInRoom * uiChannelConvertorCoeff / 2) < uiBytesSsrc) 85380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ? (uiEncoderInRoom * uiChannelConvertorCoeff / 2) : uiBytesSsrc; 85390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 85400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( needChannelConversion > 0 ) 85410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 85420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* channel convertor writes directly into encoder buffer */ 85430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pChannelConvertorInput = pC->pPosInSsrcBufferOut; 85440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pChannelConvertorOutput = pC->pPosInAudioEncoderBuffer; 85450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uiChannelConvertorNbSamples = uiSsrc2Encoder_NbBytes / sizeof(short); 85460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 85470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 85480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 85490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* copy from the ssrc out buffer into the encoder in buffer */ 85509d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu memcpy((void *)pC->pPosInAudioEncoderBuffer, (void *)pC->pPosInSsrcBufferOut, 85510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uiSsrc2Encoder_NbBytes); 85520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 85530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 85540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Update position in ssrc out buffer after encoding */ 85550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pPosInSsrcBufferOut += uiSsrc2Encoder_NbBytes; 85560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 85570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Update the position in the encoder in buffer */ 85580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pPosInAudioEncoderBuffer += 85590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uiSsrc2Encoder_NbBytes * 2 / uiChannelConvertorCoeff; 85600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 85610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Check if the ssrc buffer out is empty */ 85620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( pC->pPosInSsrcBufferOut - pC->pSsrcBufferOut) 85630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi == (M4OSA_Int32)uiSsrcOutSize ) 85640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 85650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pPosInSsrcBufferOut = M4OSA_NULL; 85660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 85670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 85680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* go to next statement */ 85690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( needChannelConversion > 0 ) 85700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi goto m4mcs_intaudiotranscoding_channel_convertor; 85710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 85720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi goto m4mcs_intaudiotranscoding_encode_and_write; 85730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 85740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* _________________ */ 85750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*| |*/ 85760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*| STEREO <-> MONO |*/ 85770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*|_________________|*/ 85780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 85790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargim4mcs_intaudiotranscoding_channel_convertor: 85800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 85810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* convert the input pcm stream to mono or to stereo */ 85820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi switch( needChannelConversion ) 85830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 85840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case 1: /* stereo to mono */ 85850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi From2iToMono_16((short *)pChannelConvertorInput, 85860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (short *)pChannelConvertorOutput, 85870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (short)(uiChannelConvertorNbSamples / 2)); 85880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 85890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 85900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case 2: /* mono to stereo */ 85910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi MonoTo2I_16((short *)pChannelConvertorInput, 85920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (short *)pChannelConvertorOutput, 85930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (short)uiChannelConvertorNbSamples); 85940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 85950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 85960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 85970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* __________________ */ 85980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*| |*/ 85990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*| ENCODE AND WRITE |*/ 86000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*|__________________|*/ 86010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 86020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargim4mcs_intaudiotranscoding_encode_and_write: 86030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 86040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Check if the encoder in buffer is ready (= full) */ 86050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( pC->pPosInAudioEncoderBuffer - pC->pAudioEncoderBuffer) 86060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi < (M4OSA_Int32)pC->audioEncoderGranularity ) 86070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 86080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi goto m4mcs_intaudiotranscoding_end; 86090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 86100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 86110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* [Mono] or [Stereo interleaved] : all is in one buffer */ 86120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pEncInBuffer.pTableBuffer[0] = pEncoderInput; 86130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pEncInBuffer.pTableBufferSize[0] = pC->audioEncoderGranularity; 86140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pEncInBuffer.pTableBuffer[1] = M4OSA_NULL; 86150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pEncInBuffer.pTableBufferSize[1] = 0; 86160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 86170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Time in ms from data size, because it is PCM16 samples */ 86180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi frameTimeDelta = 86190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ( pEncInBuffer.pTableBufferSize[0] * uiChannelConvertorCoeff / 2) 86200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi / sizeof(short) / pC->pReaderAudioStream->m_nbChannels; 86210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 86220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 86230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Prepare the writer AU */ 86240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->pWriterDataFcts->pStartAU(pC->pWriterContext, 86250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_WRITER_AUDIO_STREAM_ID, &pC->WriterAudioAU); 86260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 86270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR != err ) 86280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 86290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 86300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intAudioTranscoding(): pWriterDataFcts->pStartAU(Audio) returns 0x%x", 86310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 86320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 86330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 86340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 86350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*FlB 2009.03.04: apply audio effects if an effect is active*/ 86360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( *pActiveEffectNumber >= 0 && *pActiveEffectNumber < pC->nbEffects ) 86370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 86380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->pEffects[*pActiveEffectNumber].ExtAudioEffectFct != M4OSA_NULL ) 86390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 86400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_ExternalProgress pProgress; 8641c5dac4d3fa18a3497242669b823f78a7e48e4e39hongteng M4OSA_UInt32 tempProgress = 0; 86420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pProgress.uiClipTime = (M4OSA_UInt32)pC->ReaderAudioAU.m_CTS; 86430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 86440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pProgress.uiOutputTime = ( pC->WriterAudioAU.CTS * 1000) 86450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi / pC->WriterAudioStream.timeScale; 8646c5dac4d3fa18a3497242669b823f78a7e48e4e39hongteng tempProgress = ( (M4OSA_UInt32)pC->ReaderAudioAU.m_CTS 86470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi - pC->pEffects[*pActiveEffectNumber].uiStartTime 86480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi - pC->uiBeginCutTime) * 1000; 86490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pProgress.uiProgress = 8650c5dac4d3fa18a3497242669b823f78a7e48e4e39hongteng (M4OSA_UInt32)(tempProgress / (M4OSA_UInt32)pC->pEffects[ 86510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *pActiveEffectNumber].uiDuration); 86520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 86530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->pEffects[*pActiveEffectNumber].ExtAudioEffectFct( 86540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pEffects[*pActiveEffectNumber].pExtAudioEffectFctCtxt, 86550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_Int16 *)pEncInBuffer.pTableBuffer[0], 86560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pEncInBuffer.pTableBufferSize[0], &pProgress); 86570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 86580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( err != M4NO_ERROR ) 86590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 86600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 86610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intAudioTranscoding(): ExtAudioEffectFct() returns 0x%x", 86620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 86630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 86640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 86650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 86660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 86670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 86680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 86690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Prepare output buffer */ 86700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pEncOutBuffer.pTableBuffer[0] = 86710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_MemAddr8)pC->WriterAudioAU.dataAddress; 86720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pEncOutBuffer.pTableBufferSize[0] = 0; 86730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 86740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#ifdef MCS_DUMP_PCM_TO_FILE 86750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 86760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi fwrite(pEncInBuffer.pTableBuffer[0], pEncInBuffer.pTableBufferSize[0], 1, 86770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi file_pcm_encoder); 86780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 86790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#endif 86800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 86810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4OSA_FALSE == pC->b_isRawWriter ) 86820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 86830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* This allow to write PCM data to file and to encode AMR data, 86840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi when output file is not RAW */ 86850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->pOutputPCMfile != M4OSA_NULL ) 86860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 86870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pOsaFileWritPtr->writeData(pC->pOutputPCMfile, 86880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pEncInBuffer.pTableBuffer[0], pEncInBuffer.pTableBufferSize[0]); 86890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 86900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 86910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 86920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Encode the PCM audio */ 86930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->pAudioEncoderGlobalFcts->pFctStep(pC->pAudioEncCtxt, 86940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi &pEncInBuffer, &pEncOutBuffer); 86950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 86960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR != err ) 86970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 86980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 86990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intAudioTranscoding(): pAudioEncoderGlobalFcts->pFctStep returns 0x%x", 87000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 87010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 87020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 87030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 87040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* update data consumed into encoder buffer in after encoding (empty) */ 87050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pPosInAudioEncoderBuffer = M4OSA_NULL; 87060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 87070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 87080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Set AU cts and size */ 87090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterAudioAU.size = 87100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pEncOutBuffer. 87110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pTableBufferSize[0]; /**< Get the size of encoded data */ 87120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterAudioAU.CTS += frameTimeDelta; 87130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 87140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 87150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Update duration of the encoded AU */ 87160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->m_audioAUDuration = 87170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ( frameTimeDelta * 1000) / pC->WriterAudioStream.timeScale; 87180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 87190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 87200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Write the encoded AU to the output file */ 87210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->uiAudioAUCount++; 87220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->pWriterDataFcts->pProcessAU(pC->pWriterContext, 87230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_WRITER_AUDIO_STREAM_ID, &pC->WriterAudioAU); 87240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 87250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR != err ) 87260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 87270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 87280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intAudioTranscoding(): pWriterDataFcts->pProcessAU(Audio) returns 0x%x", 87290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 87300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 87310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 87320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 87330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 87340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 87350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* update data consumed into encoder buffer in after encoding (empty) */ 87360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pPosInAudioEncoderBuffer = M4OSA_NULL; 87370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 87380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterAudioAU.dataAddress = 87390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_MemAddr32) 87400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pEncoderInput; /* will be converted back to u8* in file write */ 87410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterAudioAU.size = pC->audioEncoderGranularity; 87420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->uiAudioAUCount++; 87430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 87440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->pWriterDataFcts->pProcessAU(pC->pWriterContext, 87450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_WRITER_AUDIO_STREAM_ID, &pC->WriterAudioAU); 87460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 87470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR != err ) 87480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 87490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 87500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intAudioTranscoding(): pWriterDataFcts->pProcessAU(Audio) returns 0x%x", 87510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 87520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 87530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 87540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 87550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 87560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* _______________ */ 87570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*| |*/ 87580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*| ONE PASS DONE |*/ 87590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*|_______________|*/ 87600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 87610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargim4mcs_intaudiotranscoding_end: 87620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 87630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 87640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Return with no error */ 87650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_0("M4MCS_intAudioTranscoding(): returning M4NO_ERROR"); 87660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4NO_ERROR; 87670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 87680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 87690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 87700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 87710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_ERR M4MCS_intReallocTemporaryAU(M4OSA_MemAddr8* addr, M4OSA_UInt32 newSize) 87720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Used only in case of 3GP constant memory reader, to be able to realloc temporary AU 87730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * because max AU size can be reevaluated during reading 87740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4NO_ERROR: No error 87750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 87760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */ 87770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4OSA_ERR M4MCS_intReallocTemporaryAU( M4OSA_MemAddr8 *addr, 87780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 newSize ) 87790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 87800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( *addr != M4OSA_NULL ) 87810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 87822ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu free(*addr); 87832ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu *addr = (M4OSA_MemAddr8)M4OSA_32bitAlignedMalloc(newSize, M4MCS, 87840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_Char *)"Reallocation of temporary AU buffer"); 87850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 87860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( *addr == M4OSA_NULL ) 87870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 87880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_ALLOC; 87890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 87900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 87910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 87920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4NO_ERROR; 87930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 87940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 87950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 87960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 87970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_ERR M4MCS_intVideoNullEncoding(M4MCS_InternalContext* pC) 87980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @author Alexis Vapillon (NXP Software Vision) 87990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4NO_ERROR: No error 88000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 88010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */ 88020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4OSA_ERR M4MCS_intVideoNullEncoding( M4MCS_InternalContext *pC ) 88030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 88040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 88050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Duration of the AU (find the next AU duration 88060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * to obtain a more precise video end cut) 88070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */ 88080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 videoAUDuration = 0; 88090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 88100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_MemAddr8 WritebufferAdd = M4OSA_NULL; 88110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int32 lastdecodedCTS = 0; 88120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4_AccessUnit lReaderVideoAU; /**< Read video access unit */ 88130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 88140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->novideo ) 88150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4NO_ERROR; 88160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 88170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* H.264 Trimming */ 88180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( ( pC->bH264Trim == M4OSA_TRUE) 88190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (pC->uiVideoAUCount < pC->m_pInstance->clip_sps.num_ref_frames) 88200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (pC->uiBeginCutTime > 0)) 88210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi || (( pC->uiVideoAUCount == 0) && (pC->uiBeginCutTime > 0)) ) 88220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 88230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MCS_intVideoTranscoding(pC); 88240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 88250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 88260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 88270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 88280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if((pC->bLastDecodedFrameCTS == M4OSA_FALSE) && (pC->uiBeginCutTime > 0)) 88290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 88300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi // StageFright encoder does prefetch, the one frame we requested will not be written until 88310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi // the encoder is closed, so do it now rather than in MCS_close 88320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( M4NO_ERROR != err) 88330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi || (M4MCS_kEncoderRunning != pC->encoderState) ) 88340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 88350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_2( 88360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "!!! M4MCS_intVideoNullEncoding ERROR : M4MCS_intVideoTranscoding " 88370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "returns 0x%X w/ encState=%d", err, pC->encoderState); 88380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 88390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 88400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 88410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 88420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Stop and close the encoder now to flush the frame (prefetch) */ 88430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->pVideoEncoderGlobalFcts->pFctStop != M4OSA_NULL ) 88440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 88450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->pVideoEncoderGlobalFcts->pFctStop(pC->pViEncCtxt); 88460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 88470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR != err ) 88480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 88490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 88500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "!!! M4MCS_intVideoNullEncoding ERROR : encoder stop returns 0x%X", 88510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 88520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 88530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 88540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 88550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->encoderState = M4MCS_kEncoderStopped; 88560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->pVideoEncoderGlobalFcts->pFctClose(pC->pViEncCtxt); 88570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 88580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR != err ) 88590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 88600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 88610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "!!! M4MCS_intVideoNullEncoding ERROR : encoder close returns 0x%X", 88620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 88630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 88640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 88650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->encoderState = M4MCS_kEncoderClosed; 88660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 88670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 88680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 8869c5cb77e4ee0b21b5ecb235ec86b31f3fed828693Hong Teng if ((pC->EncodingVideoFormat = M4ENCODER_kNULL) 88700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (pC->bLastDecodedFrameCTS == M4OSA_FALSE) 8871c5cb77e4ee0b21b5ecb235ec86b31f3fed828693Hong Teng && (pC->uiBeginCutTime > 0)) { 88720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 88730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->bLastDecodedFrameCTS = M4OSA_TRUE; 88740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->m_pVideoDecoder->m_pFctGetOption(pC->pViDecCtxt, 88750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4DECODER_kOptionID_AVCLastDecodedFrameCTS, &lastdecodedCTS); 88760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 8877c5cb77e4ee0b21b5ecb235ec86b31f3fed828693Hong Teng if (M4NO_ERROR != err) { 88780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 88790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intVideoNullEncoding: m_pVideoDecoder->m_pFctGetOption returns 0x%x!", 88800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 88810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 88820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 8883c5cb77e4ee0b21b5ecb235ec86b31f3fed828693Hong Teng /* Do not need video decoder any more, need to destroy it. Otherwise it 8884c5cb77e4ee0b21b5ecb235ec86b31f3fed828693Hong Teng * will call reader function which will cause frame lost during triming, 8885c5cb77e4ee0b21b5ecb235ec86b31f3fed828693Hong Teng * since the 3gp reader is shared between MCS and decoder.*/ 8886c5cb77e4ee0b21b5ecb235ec86b31f3fed828693Hong Teng if (M4OSA_NULL != pC->pViDecCtxt) { 8887c5cb77e4ee0b21b5ecb235ec86b31f3fed828693Hong Teng err = pC->m_pVideoDecoder->m_pFctDestroy(pC->pViDecCtxt); 8888c5cb77e4ee0b21b5ecb235ec86b31f3fed828693Hong Teng pC->pViDecCtxt = M4OSA_NULL; 8889c5cb77e4ee0b21b5ecb235ec86b31f3fed828693Hong Teng 8890c5cb77e4ee0b21b5ecb235ec86b31f3fed828693Hong Teng if (M4NO_ERROR != err) { 8891c5cb77e4ee0b21b5ecb235ec86b31f3fed828693Hong Teng M4OSA_TRACE1_1( 8892c5cb77e4ee0b21b5ecb235ec86b31f3fed828693Hong Teng "M4MCS_intVideoNullEncoding: decoder pFctDestroy returns 0x%x", 8893c5cb77e4ee0b21b5ecb235ec86b31f3fed828693Hong Teng err); 8894c5cb77e4ee0b21b5ecb235ec86b31f3fed828693Hong Teng return err; 8895c5cb77e4ee0b21b5ecb235ec86b31f3fed828693Hong Teng } 8896c5cb77e4ee0b21b5ecb235ec86b31f3fed828693Hong Teng } 88970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 88980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->m_pReader->m_pFctJump(pC->pReaderContext, 88990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4_StreamHandler *)pC->pReaderVideoStream, &lastdecodedCTS); 89000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 8901c5cb77e4ee0b21b5ecb235ec86b31f3fed828693Hong Teng if (M4NO_ERROR != err) { 89020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 8903c5cb77e4ee0b21b5ecb235ec86b31f3fed828693Hong Teng "M4MCS_intVideoNullEncoding: m_pFctJump(V) returns 0x%x!", 89040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 89050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 89060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 89070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 89080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 89090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Initializes an access Unit */ 89100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 89110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->m_pReader->m_pFctFillAuStruct(pC->pReaderContext, 89120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4_StreamHandler *)pC->pReaderVideoStream, &lReaderVideoAU); 89130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 8914c5cb77e4ee0b21b5ecb235ec86b31f3fed828693Hong Teng if (M4NO_ERROR != err) { 89150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 8916c5cb77e4ee0b21b5ecb235ec86b31f3fed828693Hong Teng "M4MCS_intVideoNullEncoding:m_pReader->m_pFctFillAuStruct(video)\ 8917c5cb77e4ee0b21b5ecb235ec86b31f3fed828693Hong Teng returns 0x%x", err); 89180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 89190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 89200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 89210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->m_pReaderDataIt->m_pFctGetNextAu(pC->pReaderContext, 89220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4_StreamHandler *)pC->pReaderVideoStream, &lReaderVideoAU); 89230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 8924c5cb77e4ee0b21b5ecb235ec86b31f3fed828693Hong Teng if (M4WAR_NO_MORE_AU == err) { 89250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE2_0( 89260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intVideoNullEncoding():\ 89270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi m_pReaderDataIt->m_pFctGetNextAu(video) returns M4WAR_NO_MORE_AU"); 89280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* The audio transcoding is finished */ 89290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->VideoState = M4MCS_kStreamState_FINISHED; 89300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 89310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 8932c5cb77e4ee0b21b5ecb235ec86b31f3fed828693Hong Teng else if (M4NO_ERROR != err) { 89330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 89340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intVideoNullEncoding():\ 89350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi m_pReaderDataIt->m_pFctGetNextAu(video) returns 0x%x", 89360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 89370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 89380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 89390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 89400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 89410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "### [TS_CHECK] M4MCS_intVideoNullEncoding video AU CTS: %d ", 89420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi lReaderVideoAU.m_CTS); 89430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 89440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 89450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 89460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 89470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 89480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->bLastDecodedFrameCTS = M4OSA_TRUE; 89490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 89500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 89510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Find the next AU duration to obtain a more precise video end cut*/ 89520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 89530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Initializes a new AU if needed */ 89540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 8955c5cb77e4ee0b21b5ecb235ec86b31f3fed828693Hong Teng if (pC->ReaderVideoAU1.m_structSize == 0) { 89560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 89570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Initializes an access Unit */ 89580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->m_pReader->m_pFctFillAuStruct(pC->pReaderContext, 89590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4_StreamHandler *)pC->pReaderVideoStream, 89600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi &pC->ReaderVideoAU1); 89610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 8962c5cb77e4ee0b21b5ecb235ec86b31f3fed828693Hong Teng if (M4NO_ERROR != err) { 89630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 89640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_open(): m_pReader->m_pFctFillAuStruct(video) returns 0x%x", 89650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 89660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 89670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 89680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 89690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->m_pDataVideoAddress1 = 89702ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu (M4OSA_MemAddr8)M4OSA_32bitAlignedMalloc(pC->ReaderVideoAU1.m_maxsize, M4MCS, 89710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_Char *)"Temporary video AU1 buffer"); 89720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 8973c5cb77e4ee0b21b5ecb235ec86b31f3fed828693Hong Teng if (pC->m_pDataVideoAddress1 == M4OSA_NULL) { 89740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_0("M4MCS_intVideoNullEncoding(): allocation error"); 89750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_ALLOC; 89760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 89770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 89780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->m_pReaderDataIt->m_pFctGetNextAu(pC->pReaderContext, 89790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4_StreamHandler *)pC->pReaderVideoStream, 89800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi &pC->ReaderVideoAU1); 89810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 89820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4WAR_NO_MORE_AU == err ) 89830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 89840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE2_0( 89850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intVideoNullEncoding():\ 89860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi m_pReaderDataIt->m_pFctGetNextAu(video) returns M4WAR_NO_MORE_AU"); 89870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* The audio transcoding is finished */ 89880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->VideoState = M4MCS_kStreamState_FINISHED; 89890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 89900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 89910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else if( M4NO_ERROR != err ) 89920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 89930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 89940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intVideoNullEncoding(): m_pReaderDataIt->m_pFctGetNextAu(video)\ 89950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi returns 0x%x", err); 89960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 89970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 89980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 89990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->ReaderVideoAU1.m_maxsize 90000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi > pC->pReaderVideoStream->m_basicProperties.m_maxAUSize ) 90010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 90020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Constant memory reader case, we need to reallocate the temporary buffers */ 90030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_intReallocTemporaryAU((M4OSA_MemAddr8 90040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *) &(pC->m_pDataVideoAddress1), pC->ReaderVideoAU1.m_maxsize); 90050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* pC->m_pDataVideoAddress1 90060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi and pC->m_pDataVideoAddress2 must be reallocated at the same time */ 90070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* because pC->pReaderVideoStream->m_basicProperties.m_maxAUSize take maximum value. 90080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi Then the test "if(pC->ReaderVideoAU?.m_maxsize > pC->pReaderVideoStream-> 90090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi m_basicProperties.m_maxAUSize)" is never true */ 90100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* and the size of the second buffer is never changed. */ 90110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_intReallocTemporaryAU((M4OSA_MemAddr8 90120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *) &(pC->m_pDataVideoAddress2), pC->ReaderVideoAU1.m_maxsize); 90130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* pC->m_pDataVideoAddress1 and 90140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->m_pDataVideoAddress2 must be reallocated at the same time */ 90150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Update stream properties */ 90160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pReaderVideoStream->m_basicProperties.m_maxAUSize = 90170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->ReaderVideoAU1.m_maxsize; 90180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 90199d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu memcpy((void *)pC->m_pDataVideoAddress1, 90209d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu (void *)pC->ReaderVideoAU1.m_dataAddress, 90210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->ReaderVideoAU1.m_size); 90220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 90230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 90240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->ReaderVideoAU2.m_structSize == 0 ) 90250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 90260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 90270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Initializes an access Unit */ 90280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->m_pReader->m_pFctFillAuStruct(pC->pReaderContext, 90290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4_StreamHandler *)pC->pReaderVideoStream, 90300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi &pC->ReaderVideoAU2); 90310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 90320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR != err ) 90330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 90340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 90350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_open(): m_pReader->m_pFctFillAuStruct(video) returns 0x%x", 90360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 90370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 90380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 90390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->m_pDataVideoAddress2 = 90402ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu (M4OSA_MemAddr8)M4OSA_32bitAlignedMalloc(pC->ReaderVideoAU2.m_maxsize, M4MCS, 90410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_Char *)"Temporary video AU buffer"); 90420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 90430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->m_pDataVideoAddress2 == M4OSA_NULL ) 90440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 90450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_0("M4MCS_intVideoNullEncoding(): allocation error"); 90460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_ALLOC; 90470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 90480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 90490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 90500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Read the next video AU in the input file */ 90510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->ReaderVideoAU2.m_CTS > pC->ReaderVideoAU1.m_CTS ) 90520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 90539d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu memcpy((void *) &pC->ReaderVideoAU, 90549d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu (void *) &pC->ReaderVideoAU2, sizeof(M4_AccessUnit)); 90550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->m_pReaderDataIt->m_pFctGetNextAu(pC->pReaderContext, 90560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4_StreamHandler *)pC->pReaderVideoStream, 90570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi &pC->ReaderVideoAU1); 90580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 90590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->ReaderVideoAU1.m_maxsize 90600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi > pC->pReaderVideoStream->m_basicProperties.m_maxAUSize ) 90610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 90620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Constant memory reader case, we need to reallocate the temporary buffers */ 90630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_intReallocTemporaryAU((M4OSA_MemAddr8 90640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *) &(pC->m_pDataVideoAddress1), pC->ReaderVideoAU1.m_maxsize); 90650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* pC->m_pDataVideoAddress1 and 90660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->m_pDataVideoAddress2 must be reallocated at the same time */ 90670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* because pC->pReaderVideoStream->m_basicProperties.m_maxAUSize take maximum value. 90680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi Then the test "if(pC->ReaderVideoAU?.m_maxsize > pC->pReaderVideoStream-> 90690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi m_basicProperties.m_maxAUSize)" is never true */ 90700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* and the size of the second buffer is never changed. */ 90710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_intReallocTemporaryAU((M4OSA_MemAddr8 90720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *) &(pC->m_pDataVideoAddress2), pC->ReaderVideoAU1.m_maxsize); 90730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* pC->m_pDataVideoAddress1 and 90740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->m_pDataVideoAddress2 must be reallocated at the same time */ 90750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Update stream properties */ 90760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pReaderVideoStream->m_basicProperties.m_maxAUSize = 90770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->ReaderVideoAU1.m_maxsize; 90780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 90799d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu memcpy((void *)pC->m_pDataVideoAddress1, 90809d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu (void *)pC->ReaderVideoAU1.m_dataAddress, 90810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->ReaderVideoAU1.m_size); 90820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi videoAUDuration = pC->ReaderVideoAU1.m_CTS - pC->ReaderVideoAU2.m_CTS; 90830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->ReaderVideoAU.m_dataAddress = pC->m_pDataVideoAddress2; 90840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 90850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 90860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 90879d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu memcpy((void *) &pC->ReaderVideoAU, 90889d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu (void *) &pC->ReaderVideoAU1, sizeof(M4_AccessUnit)); 90890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->m_pReaderDataIt->m_pFctGetNextAu(pC->pReaderContext, 90900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4_StreamHandler *)pC->pReaderVideoStream, 90910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi &pC->ReaderVideoAU2); 90920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 90930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->ReaderVideoAU2.m_maxsize 90940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi > pC->pReaderVideoStream->m_basicProperties.m_maxAUSize ) 90950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 90960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Constant memory reader case, we need to reallocate the temporary buffers */ 90970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_intReallocTemporaryAU((M4OSA_MemAddr8 90980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *) &(pC->m_pDataVideoAddress2), pC->ReaderVideoAU2.m_maxsize); 90990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* pC->m_pDataVideoAddress1 and 91000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->m_pDataVideoAddress2 must be reallocated at the same time */ 91010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* because pC->pReaderVideoStream->m_basicProperties.m_maxAUSize take maximum value. 91020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi Then the test "if(pC->ReaderVideoAU?.m_maxsize > pC->pReaderVideoStream-> 91030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi m_basicProperties.m_maxAUSize)" is never true */ 91040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* and the size of the second buffer is never changed. */ 91050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_intReallocTemporaryAU((M4OSA_MemAddr8 91060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi *) &(pC->m_pDataVideoAddress1), pC->ReaderVideoAU2.m_maxsize); 91070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* pC->m_pDataVideoAddress1 and 91080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->m_pDataVideoAddress2 must be reallocated at the same time */ 91090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Update stream properties */ 91100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pReaderVideoStream->m_basicProperties.m_maxAUSize = 91110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->ReaderVideoAU2.m_maxsize; 91120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 91139d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu memcpy((void *)pC->m_pDataVideoAddress2, 91149d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu (void *)pC->ReaderVideoAU2.m_dataAddress, 91150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->ReaderVideoAU2.m_size); 91160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi videoAUDuration = pC->ReaderVideoAU2.m_CTS - pC->ReaderVideoAU1.m_CTS; 91170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->ReaderVideoAU.m_dataAddress = pC->m_pDataVideoAddress1; 91180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 91190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 91200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4WAR_NO_MORE_AU == err ) 91210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 91220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE2_0( 91230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intVideoNullEncoding():\ 91240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi m_pReaderDataIt->m_pFctGetNextAu(video) returns M4WAR_NO_MORE_AU"); 91250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* The video transcoding is finished */ 91260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->VideoState = M4MCS_kStreamState_FINISHED; 91270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 91280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 91290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else if( M4NO_ERROR != err ) 91300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 91310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 91320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intVideoNullEncoding(): m_pReaderDataIt->m_pFctGetNextAu(Video) returns 0x%x", 91330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 91340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 91350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 91360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 91370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 91380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 91390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Prepare the writer AU */ 91400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->pWriterDataFcts->pStartAU(pC->pWriterContext, 91410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_WRITER_VIDEO_STREAM_ID, &pC->WriterVideoAU); 91420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 91430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR != err ) 91440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 91450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 91460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intVideoNullEncoding(): pWriterDataFcts->pStartAU(Video) returns 0x%x", 91470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 91480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 91490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 91500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 91510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Copy video data from reader AU to writer AU */ 91520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_1( 91530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intVideoNullEncoding(): Copying video AU: size=%d", 91540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->ReaderVideoAU.m_size); 91550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* + CRLV6775 -H.264 Trimming */ 91560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4OSA_TRUE == pC->bH264Trim ) 91570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 91580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->H264MCSTempBufferSize 91590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi < (pC->ReaderVideoAU.m_size + 2048) ) 91600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 91610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->H264MCSTempBufferSize = 91620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (pC->ReaderVideoAU.m_size + 2048); 91630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 91640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->H264MCSTempBuffer != M4OSA_NULL ) 91650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 91662ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu free(pC->H264MCSTempBuffer); 91670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 91680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->H264MCSTempBuffer = 91692ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu (M4OSA_UInt8 *)M4OSA_32bitAlignedMalloc(pC->H264MCSTempBufferSize, 91700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS, (M4OSA_Char *)"pC->H264MCSTempBuffer"); 91710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 91720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->H264MCSTempBuffer == M4OSA_NULL ) 91730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 91740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_0( 91750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intVideoNullEncoding(): allocation error"); 91760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_ALLOC; 91770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 91780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 91790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 91800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->H264MCSTempBufferDataSize = pC->H264MCSTempBufferSize; 91810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 91820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = H264MCS_ProcessNALU(pC->m_pInstance, 91830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_UInt8 *)pC->ReaderVideoAU.m_dataAddress, 91840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->ReaderVideoAU.m_size, pC->H264MCSTempBuffer, 91850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_Int32 *)&pC->H264MCSTempBufferDataSize); 91860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 91870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->m_pInstance->is_done == 1 ) 91880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 91890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_convetFromByteStreamtoNALStream( 91900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_UInt8 *)pC->ReaderVideoAU.m_dataAddress , 91910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->ReaderVideoAU.m_size); 91920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 91939d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu memcpy((void *)pC->WriterVideoAU.dataAddress, 91949d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu (void *)(pC->ReaderVideoAU.m_dataAddress + 4), 91950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->ReaderVideoAU.m_size - 4); 91960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterVideoAU.size = pC->ReaderVideoAU.m_size - 4; 91970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi WritebufferAdd = 91980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_MemAddr8)pC->WriterVideoAU.dataAddress; 91990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 92000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 92010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 92029d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu memcpy((void *)pC->WriterVideoAU.dataAddress, 92039d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu (void *)(pC->H264MCSTempBuffer + 4), 92040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->H264MCSTempBufferDataSize - 4); 92050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterVideoAU.size = pC->H264MCSTempBufferDataSize - 4; 92060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi WritebufferAdd = 92070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_MemAddr8)pC->WriterVideoAU.dataAddress; 92080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 92090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 92100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* H.264 Trimming */ 92110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 92120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 92139d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu memcpy((void *)pC->WriterVideoAU.dataAddress, 92149d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu (void *)pC->ReaderVideoAU.m_dataAddress, 92150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->ReaderVideoAU.m_size); 92160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterVideoAU.size = pC->ReaderVideoAU.m_size; 92170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 92180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 92190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Convert CTS unit from milliseconds to timescale */ 92200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterVideoAU.CTS = 92210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_Time)((( pC->ReaderVideoAU.m_CTS - pC->dViDecStartingCts) 92220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * (pC->WriterVideoStream.timeScale / 1000.0))); 92230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterVideoAU.nbFrag = 0; 92240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterVideoAU.attribute = pC->ReaderVideoAU.m_attribute; 92250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 92260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_1("M4MCS_intVideoNullEncoding(): video AU: CTS=%d ms", 92270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->WriterVideoAU.CTS); 92280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 92290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 92300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Write it to the output file */ 92310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->uiVideoAUCount++; 92320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->pWriterDataFcts->pProcessAU(pC->pWriterContext, 92330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_WRITER_VIDEO_STREAM_ID, &pC->WriterVideoAU); 92340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 92350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR != err ) 92360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 92370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 92380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intVideoNullEncoding(): pWriterDataFcts->pProcessAU(Video) returns 0x%x", 92390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 92400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 92410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 92420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* + CRLV6775 -H.264 Trimming */ 92430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4OSA_TRUE == pC->bH264Trim ) 92440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 92450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->m_pInstance->is_done == 1 ) 92460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 92479d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu memcpy((void *)(WritebufferAdd - 4), 92489d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu (void *)(pC->ReaderVideoAU.m_dataAddress), 4); 92490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 92500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 92510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 92529d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu memcpy((void *)(WritebufferAdd - 4), 92539d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu (void *)(pC->H264MCSTempBuffer), 4); 92540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 92550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } /* H.264 Trimming */ 92560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 92570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 92580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Check for end cut. */ 92590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Bug fix 11/12/2008: We absolutely want to have less or same video duration -> 92600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (2*videoAUDuration) to have a more precise end cut*/ 92610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->ReaderVideoAU.m_CTS + (2 *videoAUDuration) > pC->uiEndCutTime ) 92620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 92630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->VideoState = M4MCS_kStreamState_FINISHED; 92640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 92650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 92660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 92670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Return with no error */ 92680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_0("M4MCS_intVideoNullEncoding(): returning M4NO_ERROR"); 92690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4NO_ERROR; 92700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 92710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 92720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 92730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 92740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_ERR M4MCS_intVideoTranscoding(M4MCS_InternalContext* pC) 92750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @author Alexis Vapillon (NXP Software Vision) 92760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4NO_ERROR: No error 92770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 92780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */ 92790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4OSA_ERR M4MCS_intVideoTranscoding( M4MCS_InternalContext *pC ) 92800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 92810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 92820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4_MediaTime mtTranscodedTime = 0.0; 92830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4ENCODER_FrameMode FrameMode; 92840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int32 derive = 0; 92850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 92860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 92870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Get video CTS to decode */ 92880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi mtTranscodedTime = pC->dViDecCurrentCts; 92890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi FrameMode = M4ENCODER_kNormalFrame; 92900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 92910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 92920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Decode video */ 92930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_1( 92940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intVideoTranscoding(): Calling m_pVideoDecoder->m_pFctDecode(%.2f)", 92950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi mtTranscodedTime); 92960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->isRenderDup = M4OSA_FALSE; 92970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->m_pVideoDecoder->m_pFctDecode(pC->pViDecCtxt, &mtTranscodedTime, 9298b37a9417647c43d6d2713807ed441737c32629f3Chih-Chung Chang M4OSA_FALSE, 0); 92990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 93000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4WAR_NO_MORE_AU == err ) 93010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 93020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi FrameMode = 93030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4ENCODER_kLastFrame; /**< We will give this value to the encoder to 93040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ask for the end of the encoding */ 93050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->VideoState = M4MCS_kStreamState_FINISHED; 93060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 93070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else if( err == M4WAR_VIDEORENDERER_NO_NEW_FRAME ) 93080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 93090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE2_0("Decoding output the same frame as before 3"); 93100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->isRenderDup = M4OSA_TRUE; 93110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 93120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else if( M4NO_ERROR != err ) 93130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 93140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 93150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intVideoTranscoding(): m_pVideoDecoder->m_pFctDecode returns 0x%x!", 93160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 93170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 93180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 93190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 93200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 93210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Check for end cut. 93220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * We must check here if the end cut is reached, because in that case we must 93230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * call the last encode step (-> bLastFrame set to true) */ 9324383e6a64c6cd633f3b44fcf7e9ca76612f1c9f14Danny Fernandes if( ( pC->dViDecCurrentCts + pC->dCtsIncrement ) >= (pC->uiEndCutTime 93250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi + M4MCS_ABS(pC->dViDecStartingCts - pC->uiBeginCutTime)) ) 93260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 93270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi FrameMode = 93280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4ENCODER_kLastFrame; /**< We will give this value to the encoder to 93290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ask for the end of the encoding */ 93300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->VideoState = M4MCS_kStreamState_FINISHED; 93310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi derive = (M4OSA_Int32)(( pC->dViDecCurrentCts + pC->dCtsIncrement + 0.5) 93320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi - (pC->uiEndCutTime 93330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi + M4MCS_ABS(pC->dViDecStartingCts - pC->uiBeginCutTime))); 93340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 93350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 93360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Update starting CTS to have a more precise value ( 93370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi the begin cut is not a real CTS)*/ 93380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->uiVideoAUCount == 0 ) 93390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 93400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->dViDecStartingCts = mtTranscodedTime; 93410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->dViDecCurrentCts = pC->dViDecStartingCts; 93420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 93430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 93440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 93450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Encode video */ 93460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_1( 93470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intVideoTranscoding(): Calling pVideoEncoderGlobalFcts->pFctEncode with videoCts\ 93480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi = %.2f",pC->ReaderVideoAU.m_CTS); 93490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->uiVideoAUCount++; 93500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* update the given duration (the begin cut is not a real CTS)*/ 93510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->pVideoEncoderGlobalFcts->pFctEncode(pC->pViEncCtxt, M4OSA_NULL, 93520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (pC->dViDecCurrentCts - pC->dViDecStartingCts - (derive >> 1)), 93530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi FrameMode); 93540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 93550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 93560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 93570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 93580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 93590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 93600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_ERR M4MCS_intGetInputClipProperties(M4MCS_InternalContext* pContext) 93610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @author Dounya Manai (NXP Software Vision) 93620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief Retrieve the properties of the audio and video streams from the input file. 93630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param pContext (IN) MCS context 93640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4NO_ERROR: No error 93650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4ERR_PARAMETER: pContext is M4OSA_NULL (If Debug Level >= 2) 93660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 93670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */ 93680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4OSA_ERR M4MCS_intGetInputClipProperties( M4MCS_InternalContext *pC ) 93690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 93700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4DECODER_MPEG4_DecoderConfigInfo DecConfInfo; 93710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4READER_3GP_H263Properties H263prop; 93720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_ERR err; 93730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 videoBitrate; 93740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4DECODER_VideoSize videoSize; 93750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4_AACType iAacType = 0; 93760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 93770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 93780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Check input parameters */ 93790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF2(M4OSA_NULL == pC, M4ERR_PARAMETER, 93800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intGetInputClipProperties: pC is M4OSA_NULL"); 93810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 93820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 93830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Reset common characteristics */ 93840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.bAnalysed = M4OSA_FALSE; 93850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.FileType = 0; 93860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.Version[0] = M4VIDEOEDITING_VERSION_MAJOR; 93870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.Version[1] = M4VIDEOEDITING_VERSION_MINOR; 93880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.Version[2] = M4VIDEOEDITING_VERSION_REVISION; 93890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.uiClipDuration = 0; 93900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 93919d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu memset((void *) &pC->InputFileProperties.ftyp, 93929d73576eaba7f8e788f1883ed1d767270ccd0fc2Shyam Pallapothu 0, sizeof(M4VIDEOEDITING_FtypBox)); 93930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 93940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 93950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Reset video characteristics */ 93960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.VideoStreamType = M4VIDEOEDITING_kNoneVideo; 93970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.uiClipVideoDuration = 0; 93980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.uiVideoBitrate = 0; 93990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.uiVideoMaxAuSize = 0; 94000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.uiVideoWidth = 0; 94010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.uiVideoHeight = 0; 94020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.uiVideoTimeScale = 0; 94030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.fAverageFrameRate = 0.0; 9404803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury pC->InputFileProperties.uiVideoLevel = 9405803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury M4VIDEOEDITING_VIDEO_UNKNOWN_LEVEL; 9406803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury pC->InputFileProperties.uiVideoProfile = 9407803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury M4VIDEOEDITING_VIDEO_UNKNOWN_PROFILE; 94080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.bMPEG4dataPartition = M4OSA_FALSE; 94090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.bMPEG4rvlc = M4OSA_FALSE; 94100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.bMPEG4resynchMarker = M4OSA_FALSE; 94110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 94120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 94130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Reset audio characteristics */ 94140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.AudioStreamType = M4VIDEOEDITING_kNoneAudio; 94150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.uiClipAudioDuration = 0; 94160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.uiAudioBitrate = 0; 94170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.uiAudioMaxAuSize = 0; 94180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.uiNbChannels = 0; 94190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.uiSamplingFrequency = 0; 94200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.uiExtendedSamplingFrequency = 0; 94210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.uiDecodedPcmSize = 0; 94220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 94230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Reset compatibility chart (not used in MCS) */ 94240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.bVideoIsEditable = M4OSA_FALSE; 94250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.bAudioIsEditable = M4OSA_FALSE; 94260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.bVideoIsCompatibleWithMasterClip = M4OSA_FALSE; 94270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.bAudioIsCompatibleWithMasterClip = M4OSA_FALSE; 94280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 94290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 94300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Video stream properties */ 94310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4OSA_NULL != pC->pReaderVideoStream ) 94320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 94330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi switch( pC->pReaderVideoStream->m_basicProperties.m_streamType ) 94340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 94350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4DA_StreamTypeVideoMpeg4: 94360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.VideoStreamType = M4VIDEOEDITING_kMPEG4; 94370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 94380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 94390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4DA_StreamTypeVideoH263: 94400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.VideoStreamType = M4VIDEOEDITING_kH263; 94410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 94420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 94430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4DA_StreamTypeVideoMpeg4Avc: 94440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.VideoStreamType = M4VIDEOEDITING_kH264; 94450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 94460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 94470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4DA_StreamTypeUnknown: 94480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi default: 94490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.VideoStreamType = 94500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4VIDEOEDITING_kUnsupportedVideo; 94510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 94520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 94530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 94540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* if bitrate not available retrieve an estimation of the overall bitrate */ 94550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.uiVideoBitrate = 94560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pReaderVideoStream->m_basicProperties.m_averageBitRate; 94570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 94580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( 0 == pC->InputFileProperties.uiVideoBitrate ) 94590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 94600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->m_pReader->m_pFctGetOption(pC->pReaderContext, 94610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4READER_kOptionID_Bitrate, &videoBitrate); 94620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 94630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4OSA_NULL != pC->pReaderAudioStream ) 94640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 94650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* we get the overall bitrate, substract the audio bitrate if any */ 94660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi videoBitrate -= 94670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pReaderAudioStream->m_basicProperties.m_averageBitRate; 94680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 94690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.uiVideoBitrate = videoBitrate; 94700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 94710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 94720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 94730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Retrieve the Profile & Level */ 94740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( M4VIDEOEDITING_kH263 != pC->InputFileProperties.VideoStreamType) 94750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (M4VIDEOEDITING_kH264 94760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi != pC->InputFileProperties.VideoStreamType) ) 94770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 94780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Use the DSI parsing function from the external video shell decoder. 94790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi See the comments in M4VSS3GPP_ClipAnalysis.c, it's pretty much the 94800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi same issue. */ 94810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 94820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4DECODER_EXTERNAL_ParseVideoDSI(pC->pReaderVideoStream-> 94830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi m_basicProperties.m_pDecoderSpecificInfo, 94840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pReaderVideoStream-> 94850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi m_basicProperties.m_decoderSpecificInfoSize, 94860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi &DecConfInfo, &videoSize); 94870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 94880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR != err ) 94890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 94900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 94910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intGetInputClipProperties():\ 94920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4DECODER_EXTERNAL_ParseVideoDSI returns 0x%08X", 94930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 94940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 94950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 94960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 94970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pReaderVideoStream->m_videoWidth = videoSize.m_uiWidth; 94980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pReaderVideoStream->m_videoHeight = videoSize.m_uiHeight; 94990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.uiVideoTimeScale = DecConfInfo.uiTimeScale; 95000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.bMPEG4dataPartition = 95010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi DecConfInfo.bDataPartition; 95020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.bMPEG4rvlc = DecConfInfo.bUseOfRVLC; 95030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.bMPEG4resynchMarker = 95040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi DecConfInfo.uiUseOfResynchMarker; 95050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 9506803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury err = getMPEG4ProfileAndLevel(DecConfInfo.uiProfile, 9507803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury &(pC->InputFileProperties.uiVideoProfile), 9508803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury &(pC->InputFileProperties.uiVideoLevel)); 9509803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury if ( M4NO_ERROR != err ) { 9510803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury M4OSA_TRACE1_1("M4MCS_intGetInputClipProperties():\ 9511803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury getMPEG4ProfileAndLevel returns 0x%08X", err); 9512803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury return err; 95130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 95140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 9515803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury else if( M4VIDEOEDITING_kH263 == 9516803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury pC->InputFileProperties.VideoStreamType ) { 9517803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury 9518803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury err = getH263ProfileAndLevel(pC->pReaderVideoStream-> 9519803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury m_basicProperties.m_pDecoderSpecificInfo, 9520803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury pC->pReaderVideoStream->m_basicProperties.m_decoderSpecificInfoSize, 9521803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury &(pC->InputFileProperties.uiVideoProfile), 9522803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury &(pC->InputFileProperties.uiVideoLevel)); 9523803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury if ( M4NO_ERROR != err ) { 9524803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury M4OSA_TRACE1_1("M4MCS_intGetInputClipProperties():\ 9525803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury getH263ProfileAndLevel returns 0x%08X", err); 95260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 95270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 95280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* For h263 set default timescale : 30000:1001 */ 95290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.uiVideoTimeScale = 30000; 95300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 9531803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury else if ( M4VIDEOEDITING_kH264 == 9532803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury pC->InputFileProperties.VideoStreamType ) { 95330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 9534803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury pC->InputFileProperties.uiVideoTimeScale = 30000; 9535803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury err = getAVCProfileAndLevel(pC->pReaderVideoStream-> 9536803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury m_basicProperties.m_pDecoderSpecificInfo, 9537803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury pC->pReaderVideoStream->m_basicProperties.m_decoderSpecificInfoSize, 9538803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury &(pC->InputFileProperties.uiVideoProfile), 9539803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury &(pC->InputFileProperties.uiVideoLevel)); 9540803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury if ( M4NO_ERROR != err ) { 9541803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury M4OSA_TRACE1_1("M4MCS_intGetInputClipProperties():\ 9542803534b2a9fa331afdd7beda713de1db006c084aRajneesh Chowdury getAVCProfileAndLevel returns 0x%08X", err); 95430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 95440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 95450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 95460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 95470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Here because width x height is correct only after dsi parsing 95480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (done in create decoder) */ 95490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.uiVideoHeight = 95500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pReaderVideoStream->m_videoHeight; 95510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.uiVideoWidth = 95520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pReaderVideoStream->m_videoWidth; 95530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.uiClipVideoDuration = 95540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_UInt32)pC->pReaderVideoStream->m_basicProperties.m_duration; 95550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.fAverageFrameRate = 95560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pReaderVideoStream->m_averageFrameRate; 95570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.uiVideoMaxAuSize = 95580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pReaderVideoStream->m_basicProperties.m_maxAUSize; 955916757d256453f0c765c13ca9d97ca89fc5565420Rajneesh Chowdury pC->InputFileProperties.videoRotationDegrees = 956016757d256453f0c765c13ca9d97ca89fc5565420Rajneesh Chowdury pC->pReaderVideoStream->videoRotationDegrees; 95610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 95620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 95630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 95640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4OSA_TRUE == pC->bUnsupportedVideoFound ) 95650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 95660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.VideoStreamType = 95670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4VIDEOEDITING_kUnsupportedVideo; 95680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 95690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 95700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 95710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.VideoStreamType = M4VIDEOEDITING_kNoneVideo; 95720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 95730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 95740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 95750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 95760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Audio stream properties */ 95770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4OSA_NULL != pC->pReaderAudioStream ) 95780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 95790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi switch( pC->pReaderAudioStream->m_basicProperties.m_streamType ) 95800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 95810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4DA_StreamTypeAudioAmrNarrowBand: 95820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.AudioStreamType = 95830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4VIDEOEDITING_kAMR_NB; 95840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 95850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 95860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4DA_StreamTypeAudioAac: 95870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.AudioStreamType = M4VIDEOEDITING_kAAC; 95880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 95890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 95900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4DA_StreamTypeAudioMp3: 95910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.AudioStreamType = M4VIDEOEDITING_kMP3; 95920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 95930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 95940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4DA_StreamTypeAudioEvrc: 95950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.AudioStreamType = M4VIDEOEDITING_kEVRC; 95960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 95970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 95980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4DA_StreamTypeUnknown: 95990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi default: 96000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.AudioStreamType = 96010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4VIDEOEDITING_kUnsupportedAudio; 96020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 96030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 96040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 96050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( ( M4OSA_NULL != pC->m_pAudioDecoder) 96060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (M4OSA_NULL == pC->pAudioDecCtxt) ) 96070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 96080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_1( 96090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intGetInputClipProperties: calling CreateAudioDecoder, userData= 0x%x", 96100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->m_pCurrentAudioDecoderUserData); 961124b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury 961224b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury if( M4OSA_FALSE == pC->bExtOMXAudDecoder ) { 961324b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury err = M4MCS_intCheckAndGetCodecProperties(pC); 961424b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury } 961524b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury else 96160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 961724b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury err = pC->m_pAudioDecoder->m_pFctCreateAudioDec( 961824b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury &pC->pAudioDecCtxt, pC->pReaderAudioStream, 961924b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury pC->m_pCurrentAudioDecoderUserData); 962024b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury 962124b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury if( M4NO_ERROR == err ) 96220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 962324b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury /* AAC properties*/ 962424b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury //get from Reader; temporary, till Audio decoder shell API available to 962524b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury //get the AAC properties 962624b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury pC->AacProperties.aNumChan = 962724b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury pC->pReaderAudioStream->m_nbChannels; 962824b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury pC->AacProperties.aSampFreq = 962924b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury pC->pReaderAudioStream->m_samplingFrequency; 963024b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury 963124b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury err = pC->m_pAudioDecoder->m_pFctGetOptionAudioDec( 963224b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury pC->pAudioDecCtxt, M4AD_kOptionID_StreamType, 963324b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury (M4OSA_DataOption) &iAacType); 96340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 963524b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury if( M4NO_ERROR != err ) 96360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 963724b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury M4OSA_TRACE1_1( 963824b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury "M4MCS_intGetInputClipProperties:\ 963924b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury m_pAudioDecoder->m_pFctGetOptionAudioDec returns err 0x%x", 964024b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury err); 964124b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury iAacType = M4_kAAC; //set to default 964224b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury err = M4NO_ERROR; 964324b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury } 964424b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury else 964524b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury { 964624b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury M4OSA_TRACE3_1( 964724b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury "M4MCS_intGetInputClipProperties:\ 964824b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury m_pAudioDecoder->m_pFctGetOptionAudioDec returns streamType %d", 964924b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury iAacType); 965024b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury } 96510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 965224b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury switch( iAacType ) 965324b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury { 965424b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury case M4_kAAC: 965524b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury pC->AacProperties.aSBRPresent = 0; 965624b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury pC->AacProperties.aPSPresent = 0; 965724b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury break; 96580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 965924b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury case M4_kAACplus: 966024b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury pC->AacProperties.aSBRPresent = 1; 966124b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury pC->AacProperties.aPSPresent = 0; 966224b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury pC->AacProperties.aExtensionSampFreq = 966324b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury pC->pReaderAudioStream-> 966424b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury m_samplingFrequency; //TODO 966524b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury break; 96660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 966724b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury case M4_keAACplus: 966824b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury pC->AacProperties.aSBRPresent = 1; 966924b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury pC->AacProperties.aPSPresent = 1; 967024b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury pC->AacProperties.aExtensionSampFreq = 967124b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury pC->pReaderAudioStream-> 967224b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury m_samplingFrequency; //TODO 967324b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury break; 967424b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury case M4_kUnknown: 967524b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury break; 967624b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury default: 967724b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury break; 967824b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury } 967924b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury M4OSA_TRACE3_2( 968024b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury "M4MCS_intGetInputClipProperties: AAC NBChans=%d, SamplFreq=%d", 968124b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury pC->AacProperties.aNumChan, 968224b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury pC->AacProperties.aSampFreq); 96830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 96840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 96850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 96860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR != err ) 96870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 96880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 96890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intGetInputClipProperties:\ 96900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi m_pAudioDecoder->m_pFctCreateAudioDec returns 0x%x", 96910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 96920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 96930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 96940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 96950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 96960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi //EVRC 96970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->pReaderAudioStream->m_basicProperties.m_streamType 96980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi == M4DA_StreamTypeAudioEvrc ) 96990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 97000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* decoder not implemented yet, provide some default values for the null encoding */ 97010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pReaderAudioStream->m_nbChannels = 1; 97020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pReaderAudioStream->m_samplingFrequency = 8000; 97030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 97040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 97050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 97060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Bugfix P4ME00001128: With some IMTC files, the AMR bit rate is 0 kbps according 97070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi the GetProperties function */ 97080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( 0 == pC->pReaderAudioStream->m_basicProperties.m_averageBitRate ) 97090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 97100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4VIDEOEDITING_kAMR_NB 97110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi == pC->InputFileProperties.AudioStreamType ) 97120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 97130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 97140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Better returning a guessed 12.2 kbps value than a sure-to-be-false 97150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 0 kbps value! */ 97160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.uiAudioBitrate = 97170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4VIDEOEDITING_k12_2_KBPS; 97180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 97190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else if( M4VIDEOEDITING_kEVRC 97200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi == pC->InputFileProperties.AudioStreamType ) 97210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 97220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 97230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Better returning a guessed 8.5 kbps value than a sure-to-be-false 97240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 0 kbps value! */ 97250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.uiAudioBitrate = 97260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4VIDEOEDITING_k9_2_KBPS; 97270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 97280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 97290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 97300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 FileBitrate; 97310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 97320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Can happen also for aac, in this case we calculate an approximative */ 97330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* value from global bitrate and video bitrate */ 97340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->m_pReader->m_pFctGetOption(pC->pReaderContext, 97350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4READER_kOptionID_Bitrate, 97360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_DataOption) &FileBitrate); 97370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 97380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR != err ) 97390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 97400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 97410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intGetInputClipProperties: M4READER_kOptionID_Bitrate returns 0x%x", 97420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 97430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 97440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 97450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.uiAudioBitrate = 97460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi FileBitrate 97470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi - pC-> 97480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi InputFileProperties. 97490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi uiVideoBitrate /* normally setted to 0, if no video */; 97500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 97510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 97520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 97530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 97540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.uiAudioBitrate = 97550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pReaderAudioStream->m_basicProperties.m_averageBitRate; 97560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 97570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 97580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.uiNbChannels = 97590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pReaderAudioStream->m_nbChannels; 97600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.uiSamplingFrequency = 97610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pReaderAudioStream->m_samplingFrequency; 97620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.uiClipAudioDuration = 97630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_UInt32)pC->pReaderAudioStream->m_basicProperties.m_duration; 97640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.uiAudioMaxAuSize = 97650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pReaderAudioStream->m_basicProperties.m_maxAUSize; 97660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 97670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Bug: with aac, value is 0 until decoder start() is called */ 97680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.uiDecodedPcmSize = 97690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pReaderAudioStream->m_byteFrameLength 97700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * pC->pReaderAudioStream->m_byteSampleSize 97710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * pC->pReaderAudioStream->m_nbChannels; 97720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 97730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* New aac properties */ 97740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4DA_StreamTypeAudioAac 97750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi == pC->pReaderAudioStream->m_basicProperties.m_streamType ) 97760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 97770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.uiNbChannels = pC->AacProperties.aNumChan; 97780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.uiSamplingFrequency = 97790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AacProperties.aSampFreq; 97800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 97810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->AacProperties.aSBRPresent ) 97820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 97830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.AudioStreamType = 97840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4VIDEOEDITING_kAACplus; 97850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.uiExtendedSamplingFrequency = 97860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AacProperties.aExtensionSampFreq; 97870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 97880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 97890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->AacProperties.aPSPresent ) 97900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 97910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.AudioStreamType = 97920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4VIDEOEDITING_keAACplus; 97930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 97940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 97950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 97960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 97970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 97980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4OSA_TRUE == pC->bUnsupportedAudioFound ) 97990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 98000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.AudioStreamType = 98010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4VIDEOEDITING_kUnsupportedAudio; 98020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 98030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 98040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 98050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.AudioStreamType = M4VIDEOEDITING_kNoneAudio; 98060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 98070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 98080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 98090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Get 'ftyp' atom */ 98100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->m_pReader->m_pFctGetOption(pC->pReaderContext, 98110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4READER_kOptionID_3gpFtypBox, &pC->InputFileProperties.ftyp); 98120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 98130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Analysis is successful */ 98140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->InputFileProperties.uiClipVideoDuration 98150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi > pC->InputFileProperties.uiClipAudioDuration ) 98160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.uiClipDuration = 98170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.uiClipVideoDuration; 98180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 98190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.uiClipDuration = 98200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.uiClipAudioDuration; 98210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 98220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.FileType = pC->InputFileType; 98230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileProperties.bAnalysed = M4OSA_TRUE; 98240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 98250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4NO_ERROR; 98260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 98270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 98280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 98290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 98300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_UInt32 M4MCS_intGetFrameSize_AMRNB(M4OSA_MemAddr8 pAudioFrame) 98310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief Return the length, in bytes, of the AMR Narrow-Band frame contained in the given buffer 98320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @note 98330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param pCpAudioFrame (IN) AMRNB frame 98340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4NO_ERROR: No error 98350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 98360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */ 98370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4OSA_UInt32 M4MCS_intGetFrameSize_AMRNB( M4OSA_MemAddr8 pAudioFrame ) 98380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 98390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 frameSize = 0; 98400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 frameType = ( ( *pAudioFrame) &(0xF << 3)) >> 3; 98410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 98420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi switch( frameType ) 98430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 98440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case 0: 98450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi frameSize = 95; 98460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; /* 4750 bps */ 98470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 98480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case 1: 98490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi frameSize = 103; 98500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; /* 5150 bps */ 98510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 98520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case 2: 98530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi frameSize = 118; 98540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; /* 5900 bps */ 98550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 98560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case 3: 98570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi frameSize = 134; 98580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; /* 6700 bps */ 98590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 98600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case 4: 98610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi frameSize = 148; 98620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; /* 7400 bps */ 98630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 98640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case 5: 98650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi frameSize = 159; 98660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; /* 7950 bps */ 98670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 98680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case 6: 98690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi frameSize = 204; 98700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; /* 10200 bps */ 98710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 98720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case 7: 98730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi frameSize = 244; 98740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; /* 12000 bps */ 98750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 98760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case 8: 98770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi frameSize = 39; 98780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; /* SID (Silence) */ 98790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 98800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case 15: 98810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi frameSize = 0; 98820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; /* No data */ 98830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 98840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi default: 98850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_0( 98860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intGetFrameSize_AMRNB(): Corrupted AMR frame! returning 0."); 98870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return 0; 98880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 98890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 98900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return (1 + (( frameSize + 7) / 8)); 98910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 98920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 98930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 98940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 98950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_UInt32 M4MCS_intGetFrameSize_EVRC(M4OSA_MemAddr8 pAudioFrame) 98960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief Return the length, in bytes, of the EVRC frame contained in the given buffer 98970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @note 98980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * 0 1 2 3 98990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * +-+-+-+-+ 99000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * |fr type| RFC 3558 99010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * +-+-+-+-+ 99020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * 99030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Frame Type: 4 bits 99040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * The frame type indicates the type of the corresponding codec data 99050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * frame in the RTP packet. 99060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * 99070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * For EVRC and SMV codecs, the frame type values and size of the 99080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * associated codec data frame are described in the table below: 99090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * 99100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Value Rate Total codec data frame size (in octets) 99110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * --------------------------------------------------------- 99120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * 0 Blank 0 (0 bit) 99130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * 1 1/8 2 (16 bits) 99140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * 2 1/4 5 (40 bits; not valid for EVRC) 99150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * 3 1/2 10 (80 bits) 99160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * 4 1 22 (171 bits; 5 padded at end with zeros) 99170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * 5 Erasure 0 (SHOULD NOT be transmitted by sender) 99180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * 99190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param pCpAudioFrame (IN) EVRC frame 99200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4NO_ERROR: No error 99210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 99220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */ 99230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4OSA_UInt32 M4MCS_intGetFrameSize_EVRC( M4OSA_MemAddr8 pAudioFrame ) 99240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 99250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 frameSize = 0; 99260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 frameType = ( *pAudioFrame) &0x0F; 99270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 99280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi switch( frameType ) 99290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 99300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case 0: 99310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi frameSize = 0; 99320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; /* blank */ 99330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 99340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case 1: 99350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi frameSize = 16; 99360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; /* 1/8 */ 99370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 99380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case 2: 99390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi frameSize = 40; 99400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; /* 1/4 */ 99410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 99420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case 3: 99430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi frameSize = 80; 99440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; /* 1/2 */ 99450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 99460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case 4: 99470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi frameSize = 171; 99480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; /* 1 */ 99490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 99500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case 5: 99510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi frameSize = 0; 99520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; /* erasure */ 99530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 99540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi default: 99550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_0( 99560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_intGetFrameSize_EVRC(): Corrupted EVRC frame! returning 0."); 99570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return 0; 99580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 99590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 99600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return (1 + (( frameSize + 7) / 8)); 99610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 99620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 99630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 99640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 99650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_ERR M4MCS_intCheckMaxFileSize(M4MCS_Context pContext) 99660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief Check if max file size is greater enough to encode a file with the 99670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * current selected bitrates and duration. 99680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param pContext (IN) MCS context 99690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4NO_ERROR 99700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4MCS_ERR_MAXFILESIZE_TOO_SMALL 99710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 99720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */ 99730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4OSA_ERR M4MCS_intCheckMaxFileSize( M4MCS_Context pContext ) 99740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 99750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_InternalContext *pC = (M4MCS_InternalContext *)(pContext); 99760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 99770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 duration; 99780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 audiobitrate; 99790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 videobitrate; 99800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 99810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* free file size : OK */ 99820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->uiMaxFileSize == 0 ) 99830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4NO_ERROR; 99840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 99850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* duration */ 99860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->uiEndCutTime == 0 ) 99870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 99880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi duration = pC->InputFileProperties.uiClipDuration - pC->uiBeginCutTime; 99890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 99900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 99910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 99920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi duration = pC->uiEndCutTime - pC->uiBeginCutTime; 99930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 99940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 99950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* audio bitrate */ 99960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->noaudio ) 99970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 99980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi audiobitrate = 0; 99990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 100000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else if( pC->AudioEncParams.Format == M4ENCODER_kAudioNULL ) 100010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 100020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi audiobitrate = pC->InputFileProperties.uiAudioBitrate; 100030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 100040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else if( pC->uiAudioBitrate == M4VIDEOEDITING_kUndefinedBitrate ) 100050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 100060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi switch( pC->AudioEncParams.Format ) 100070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 100080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case M4ENCODER_kAMRNB: 100090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi audiobitrate = M4VIDEOEDITING_k12_2_KBPS; 100100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 100110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi //EVRC 100120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi // case M4ENCODER_kEVRC: 100130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi // audiobitrate = M4VIDEOEDITING_k9_2_KBPS; 100140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi // break; 100150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 100160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi default: /* AAC and MP3*/ 100170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi audiobitrate = 100180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (pC->AudioEncParams.ChannelNum == M4ENCODER_kMono) 100190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ? M4VIDEOEDITING_k16_KBPS : M4VIDEOEDITING_k32_KBPS; 100200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 100210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 100220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 100230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 100240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 100250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi audiobitrate = pC->uiAudioBitrate; 100260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 100270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 100280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* video bitrate */ 100290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->novideo ) 100300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 100310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi videobitrate = 0; 100320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 100330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else if( pC->EncodingVideoFormat == M4ENCODER_kNULL ) 100340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 100350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi videobitrate = pC->InputFileProperties.uiVideoBitrate; 100360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 100370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else if( pC->uiVideoBitrate == M4VIDEOEDITING_kUndefinedBitrate ) 100380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 100390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi videobitrate = M4VIDEOEDITING_k16_KBPS; 100400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 100410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 100420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 100430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi videobitrate = pC->uiVideoBitrate; 100440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 100450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 100460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* max file size */ 100470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( (M4OSA_UInt32)pC->uiMaxFileSize 100480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi < (M4OSA_UInt32)(M4MCS_MOOV_OVER_FILESIZE_RATIO 100490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * (audiobitrate + videobitrate) * (duration / 8000.0)) ) 100500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_ERR_MAXFILESIZE_TOO_SMALL; 100510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 100520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4NO_ERROR; 100530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 100540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 100550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 100560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 100570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4VIDEOEDITING_Bitrate M4MCS_intGetNearestBitrate(M4OSA_UInt32 freebitrate, M4OSA_Int8 mode) 100580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief Returns the closest bitrate value from the enum list of type M4VIDEOEDITING_Bitrate 100590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param freebitrate: unsigned int value 100600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param mode: -1:previous,0:current,1:next 100610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return bitrate value in enum list M4VIDEOEDITING_Bitrate 100620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 100630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */ 100640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4VIDEOEDITING_Bitrate 100650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4MCS_intGetNearestBitrate( M4OSA_Int32 freebitrate, M4OSA_Int8 mode ) 100660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 100670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Int32 bitarray [] = 100680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 100690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 0, M4VIDEOEDITING_k16_KBPS, M4VIDEOEDITING_k24_KBPS, 100700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4VIDEOEDITING_k32_KBPS, M4VIDEOEDITING_k48_KBPS, 100710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4VIDEOEDITING_k64_KBPS, M4VIDEOEDITING_k96_KBPS, 100720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4VIDEOEDITING_k128_KBPS, M4VIDEOEDITING_k192_KBPS, 100730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4VIDEOEDITING_k256_KBPS, M4VIDEOEDITING_k288_KBPS, 100740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4VIDEOEDITING_k384_KBPS, M4VIDEOEDITING_k512_KBPS, 100750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4VIDEOEDITING_k800_KBPS, M4VIDEOEDITING_k2_MBPS, 100760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4VIDEOEDITING_k5_MBPS, 100770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4VIDEOEDITING_k8_MBPS, /*+ New Encoder bitrates */ 100780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_INT32_MAX 100790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi }; 100800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 100810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi const M4OSA_UInt32 nbbitrates = 14; 100820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 i; 100830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 100840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi for ( i = 0; freebitrate >= bitarray[i]; i++ ); 100850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 100860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi switch( mode ) 100870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 100880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case -1: /* previous */ 100890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( i <= 2 ) 100900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return 0; 100910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 100920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return bitarray[i - 2]; 100930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 100940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 100950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case 0: /* current */ 100960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( i <= 1 ) 100970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return 0; 100980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 100990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return bitarray[i - 1]; 101000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 101010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 101020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi case 1: /* next */ 101030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( i >= nbbitrates ) 101040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4OSA_INT32_MAX; 101050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 101060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return bitarray[i]; 101070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi break; 101080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 101090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 101100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return 0; 101110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 101120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 101130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 101140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 101150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_ERR M4MCS_intCleanUp_ReadersDecoders(M4MCS_InternalContext* pC); 101160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief Free all resources allocated by M4MCS_open() 101170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param pContext (IN) MCS context 101180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4NO_ERROR: No error 101190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 101200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */ 101210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargistatic M4OSA_ERR M4MCS_intCleanUp_ReadersDecoders( M4MCS_InternalContext *pC ) 101220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 101230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 101240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 101250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE2_1("M4MCS_intCleanUp_ReadersDecoders called with pC=0x%x", pC); 101260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 101270838c94f1aa41b4ce8d441c49d7b92e109d224b9Chih-Chung Chang /**/ 101280838c94f1aa41b4ce8d441c49d7b92e109d224b9Chih-Chung Chang /* ----- Free video decoder stuff, if needed ----- */ 101290838c94f1aa41b4ce8d441c49d7b92e109d224b9Chih-Chung Chang 101300838c94f1aa41b4ce8d441c49d7b92e109d224b9Chih-Chung Chang if( M4OSA_NULL != pC->pViDecCtxt ) 101310838c94f1aa41b4ce8d441c49d7b92e109d224b9Chih-Chung Chang { 101320838c94f1aa41b4ce8d441c49d7b92e109d224b9Chih-Chung Chang err = pC->m_pVideoDecoder->m_pFctDestroy(pC->pViDecCtxt); 101330838c94f1aa41b4ce8d441c49d7b92e109d224b9Chih-Chung Chang pC->pViDecCtxt = M4OSA_NULL; 101340838c94f1aa41b4ce8d441c49d7b92e109d224b9Chih-Chung Chang 101350838c94f1aa41b4ce8d441c49d7b92e109d224b9Chih-Chung Chang if( M4NO_ERROR != err ) 101360838c94f1aa41b4ce8d441c49d7b92e109d224b9Chih-Chung Chang { 101370838c94f1aa41b4ce8d441c49d7b92e109d224b9Chih-Chung Chang M4OSA_TRACE1_1( 101380838c94f1aa41b4ce8d441c49d7b92e109d224b9Chih-Chung Chang "M4MCS_cleanUp: m_pVideoDecoder->pFctDestroy returns 0x%x", 101390838c94f1aa41b4ce8d441c49d7b92e109d224b9Chih-Chung Chang err); 101400838c94f1aa41b4ce8d441c49d7b92e109d224b9Chih-Chung Chang /**< don't return, we still have stuff to free */ 101410838c94f1aa41b4ce8d441c49d7b92e109d224b9Chih-Chung Chang } 101420838c94f1aa41b4ce8d441c49d7b92e109d224b9Chih-Chung Chang } 101430838c94f1aa41b4ce8d441c49d7b92e109d224b9Chih-Chung Chang 101440838c94f1aa41b4ce8d441c49d7b92e109d224b9Chih-Chung Chang /* ----- Free the audio decoder stuff ----- */ 101450838c94f1aa41b4ce8d441c49d7b92e109d224b9Chih-Chung Chang 101460838c94f1aa41b4ce8d441c49d7b92e109d224b9Chih-Chung Chang if( M4OSA_NULL != pC->pAudioDecCtxt ) 101470838c94f1aa41b4ce8d441c49d7b92e109d224b9Chih-Chung Chang { 101480838c94f1aa41b4ce8d441c49d7b92e109d224b9Chih-Chung Chang err = pC->m_pAudioDecoder->m_pFctDestroyAudioDec(pC->pAudioDecCtxt); 101490838c94f1aa41b4ce8d441c49d7b92e109d224b9Chih-Chung Chang pC->pAudioDecCtxt = M4OSA_NULL; 101500838c94f1aa41b4ce8d441c49d7b92e109d224b9Chih-Chung Chang 101510838c94f1aa41b4ce8d441c49d7b92e109d224b9Chih-Chung Chang if( M4NO_ERROR != err ) 101520838c94f1aa41b4ce8d441c49d7b92e109d224b9Chih-Chung Chang { 101530838c94f1aa41b4ce8d441c49d7b92e109d224b9Chih-Chung Chang M4OSA_TRACE1_1( 101540838c94f1aa41b4ce8d441c49d7b92e109d224b9Chih-Chung Chang "M4MCS_cleanUp: m_pAudioDecoder->m_pFctDestroyAudioDec returns 0x%x", 101550838c94f1aa41b4ce8d441c49d7b92e109d224b9Chih-Chung Chang err); 101560838c94f1aa41b4ce8d441c49d7b92e109d224b9Chih-Chung Chang /**< don't return, we still have stuff to free */ 101570838c94f1aa41b4ce8d441c49d7b92e109d224b9Chih-Chung Chang } 101580838c94f1aa41b4ce8d441c49d7b92e109d224b9Chih-Chung Chang } 101590838c94f1aa41b4ce8d441c49d7b92e109d224b9Chih-Chung Chang 101600838c94f1aa41b4ce8d441c49d7b92e109d224b9Chih-Chung Chang if( M4OSA_NULL != pC->AudioDecBufferOut.m_dataAddress ) 101610838c94f1aa41b4ce8d441c49d7b92e109d224b9Chih-Chung Chang { 101620838c94f1aa41b4ce8d441c49d7b92e109d224b9Chih-Chung Chang free(pC->AudioDecBufferOut.m_dataAddress); 101630838c94f1aa41b4ce8d441c49d7b92e109d224b9Chih-Chung Chang pC->AudioDecBufferOut.m_dataAddress = M4OSA_NULL; 101640838c94f1aa41b4ce8d441c49d7b92e109d224b9Chih-Chung Chang } 101650838c94f1aa41b4ce8d441c49d7b92e109d224b9Chih-Chung Chang 101660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* ----- Free reader stuff, if needed ----- */ 101670838c94f1aa41b4ce8d441c49d7b92e109d224b9Chih-Chung Chang // We cannot free the reader before decoders because the decoders may read 101680838c94f1aa41b4ce8d441c49d7b92e109d224b9Chih-Chung Chang // from the reader (in another thread) before being stopped. 101690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 101700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4OSA_NULL != pC-> 101710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pReaderContext ) /**< may be M4OSA_NULL if M4MCS_open was not called */ 101720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 101730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->m_pReader->m_pFctClose(pC->pReaderContext); 101740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 101750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR != err ) 101760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 101770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1("M4MCS_cleanUp: m_pReader->m_pFctClose returns 0x%x", 101780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err); 101790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /**< don't return, we still have stuff to free */ 101800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 101810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 101820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->m_pReader->m_pFctDestroy(pC->pReaderContext); 101830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pReaderContext = M4OSA_NULL; 101840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 101850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( M4NO_ERROR != err ) 101860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 101870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1( 101880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_cleanUp: m_pReader->m_pFctDestroy returns 0x%x", err); 101890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /**< don't return, we still have stuff to free */ 101900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 101910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 101920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 101930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->m_pDataAddress1 != M4OSA_NULL ) 101940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 101952ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu free(pC->m_pDataAddress1); 101960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->m_pDataAddress1 = M4OSA_NULL; 101970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 101980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 101990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->m_pDataAddress2 != M4OSA_NULL ) 102000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 102012ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu free(pC->m_pDataAddress2); 102020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->m_pDataAddress2 = M4OSA_NULL; 102030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 102040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*Bug fix 11/12/2008 (to obtain more precise video end cut)*/ 102050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->m_pDataVideoAddress1 != M4OSA_NULL ) 102060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 102072ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu free(pC->m_pDataVideoAddress1); 102080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->m_pDataVideoAddress1 = M4OSA_NULL; 102090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 102100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 102110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if( pC->m_pDataVideoAddress2 != M4OSA_NULL ) 102120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 102132ee9722574bb93eaa3f4499faf9c82fcf63f8da3Shyam Pallapothu free(pC->m_pDataVideoAddress2); 102140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->m_pDataVideoAddress2 = M4OSA_NULL; 102150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 102160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 102170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4NO_ERROR; 102180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 102190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 102200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 102210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi/** 102220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 102230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 102240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_ERR M4MCS_open_normalMode(M4MCS_Context pContext, M4OSA_Void* pFileIn, 102250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4OSA_Void* pFileOut, M4OSA_Void* pTempFile); 102260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @brief Set the MCS input and output files. It is the same as M4MCS_open without 102270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * M4MCS_WITH_FAST_OPEN flag 102280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiIt is used in VideoArtist 102290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @note It opens the input file, but the output file is not created yet. 102300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param pContext (IN) MCS context 102310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param pFileIn (IN) Input file to transcode (The type of this parameter 102320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * (URL, pipe...) depends on the OSAL implementation). 102330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param mediaType (IN) Container type (.3gp,.amr, ...) of input file. 102340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param pFileOut (IN) Output file to create (The type of this parameter 102350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * (URL, pipe...) depends on the OSAL implementation). 102360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @param pTempFile (IN) Temporary file for the constant memory writer to store 102370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * metadata ("moov.bin"). 102380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4NO_ERROR: No error 102390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4ERR_PARAMETER: At least one parameter is M4OSA_NULL (debug only) 102400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4ERR_STATE: MCS is not in an appropriate state for this function to be called 102410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4ERR_ALLOC: There is no more available memory 102420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4ERR_FILE_NOT_FOUND: The input file has not been found 102430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4MCS_ERR_INVALID_INPUT_FILE: The input file is not a valid file, or is corrupted 102440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * @return M4MCS_ERR_INPUT_FILE_CONTAINS_NO_SUPPORTED_STREAM: The input file contains no 102450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * supported audio or video stream 102460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ****************************************************************************** 102470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi */ 102480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray KundargiM4OSA_ERR M4MCS_open_normalMode(M4MCS_Context pContext, M4OSA_Void* pFileIn, 102490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4VIDEOEDITING_FileType InputFileType, 102500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_Void* pFileOut, M4OSA_Void* pTempFile) 102510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi{ 102520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_InternalContext *pC = (M4MCS_InternalContext*)(pContext); 102530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_ERR err; 102540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 102550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4READER_MediaFamily mediaFamily; 102560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4_StreamHandler* pStreamHandler; 102570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 102580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE2_3("M4MCS_open_normalMode called with pContext=0x%x, pFileIn=0x%x,\ 102590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pFileOut=0x%x", pContext, pFileIn, pFileOut); 102600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 102610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 102620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Check input parameters */ 102630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL == pContext), M4ERR_PARAMETER, 102640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_open_normalMode: pContext is M4OSA_NULL"); 102650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_DEBUG_IF2((M4OSA_NULL == pFileIn) , M4ERR_PARAMETER, 102660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi "M4MCS_open_normalMode: pFileIn is M4OSA_NULL"); 102670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 102680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if ((InputFileType == M4VIDEOEDITING_kFileType_JPG) 102690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ||(InputFileType == M4VIDEOEDITING_kFileType_PNG) 102700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ||(InputFileType == M4VIDEOEDITING_kFileType_GIF) 102710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ||(InputFileType == M4VIDEOEDITING_kFileType_BMP)) 102720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 102730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_0("M4MCS_open_normalMode: Still picture is not\ 102740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi supported with this function"); 102750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_ERR_INPUT_FILE_CONTAINS_NO_SUPPORTED_STREAM; 102760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 102770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 102780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 102790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Check state automaton */ 102800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4MCS_kState_CREATED != pC->State) 102810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 102820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1("M4MCS_open_normalMode(): Wrong State (%d), returning M4ERR_STATE", 102830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->State); 102840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4ERR_STATE; 102850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 102860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 102870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Copy function input parameters into our context */ 102880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pInputFile = pFileIn; 102890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->InputFileType = InputFileType; 102900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pOutputFile = pFileOut; 102910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pTemporaryFile = pTempFile; 102920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 102930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /***********************************/ 102940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Open input file with the reader */ 102950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /***********************************/ 102960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 102970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MCS_setCurrentReader(pContext, pC->InputFileType); 102980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4ERR_CHECK_RETURN(err); 102990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 103000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 103010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Reset reader related variables */ 103020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->VideoState = M4MCS_kStreamState_NOSTREAM; 103030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioState = M4MCS_kStreamState_NOSTREAM; 103040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pReaderVideoStream = M4OSA_NULL; 103050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pReaderAudioStream = M4OSA_NULL; 103060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 103070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*******************************************************/ 103080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* Initializes the reader shell and open the data file */ 103090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /*******************************************************/ 103100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->m_pReader->m_pFctCreate(&pC->pReaderContext); 103110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4NO_ERROR != err) 103120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 103130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1("M4MCS_open_normalMode(): m_pReader->m_pFctCreate returns 0x%x", err); 103140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 103150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 103160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 103170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 103180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Link the reader interface to the reader context */ 103190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->m_pReaderDataIt->m_readerContext = pC->pReaderContext; 103200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 103210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 103220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Set the reader shell file access functions */ 103230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->m_pReader->m_pFctSetOption(pC->pReaderContext, 103240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4READER_kOptionID_SetOsaFileReaderFctsPtr, 103250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4OSA_DataOption)pC->pOsaFileReadPtr); 103260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4NO_ERROR != err) 103270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 103280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1("M4MCS_open_normalMode(): m_pReader->m_pFctSetOption returns 0x%x", err); 103290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 103300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 103310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 103320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 103330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Open the input file */ 103340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->m_pReader->m_pFctOpen(pC->pReaderContext, pC->pInputFile); 103350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4NO_ERROR != err) 103360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 103370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_UInt32 uiDummy, uiCoreId; 103380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1("M4MCS_open_normalMode(): m_pReader->m_pFctOpen returns 0x%x", err); 103390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 1034056650d036303b87a203bf3e931f2eb16161697b6Santosh Madhava if (err == ((M4OSA_UInt32)M4ERR_UNSUPPORTED_MEDIA_TYPE)) { 1034156650d036303b87a203bf3e931f2eb16161697b6Santosh Madhava M4OSA_TRACE1_0("M4MCS_open_normalMode(): returning M4MCS_ERR_FILE_DRM_PROTECTED"); 1034256650d036303b87a203bf3e931f2eb16161697b6Santosh Madhava return M4MCS_ERR_FILE_DRM_PROTECTED; 1034356650d036303b87a203bf3e931f2eb16161697b6Santosh Madhava } else { 1034456650d036303b87a203bf3e931f2eb16161697b6Santosh Madhava /** 1034556650d036303b87a203bf3e931f2eb16161697b6Santosh Madhava * If the error is from the core reader, we change it to a public VXS error */ 1034656650d036303b87a203bf3e931f2eb16161697b6Santosh Madhava M4OSA_ERR_SPLIT(err, uiDummy, uiCoreId, uiDummy); 1034756650d036303b87a203bf3e931f2eb16161697b6Santosh Madhava if (M4MP4_READER == uiCoreId) 1034856650d036303b87a203bf3e931f2eb16161697b6Santosh Madhava { 1034956650d036303b87a203bf3e931f2eb16161697b6Santosh Madhava M4OSA_TRACE1_0("M4MCS_open_normalMode(): returning M4MCS_ERR_INVALID_INPUT_FILE"); 1035056650d036303b87a203bf3e931f2eb16161697b6Santosh Madhava return M4MCS_ERR_INVALID_INPUT_FILE; 1035156650d036303b87a203bf3e931f2eb16161697b6Santosh Madhava } 103520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 103530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 103540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 103550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 103560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 103570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Get the streams from the input file */ 103580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi while (M4NO_ERROR == err) 103590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 103600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->m_pReader->m_pFctGetNextStream(pC->pReaderContext, &mediaFamily, 103610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi &pStreamHandler); 103620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 103630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 103640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * In case we found a BIFS stream or something else...*/ 103650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if((err == ((M4OSA_UInt32)M4ERR_READER_UNKNOWN_STREAM_TYPE)) 103660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi || (err == ((M4OSA_UInt32)M4WAR_TOO_MUCH_STREAMS))) 103670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 103680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4NO_ERROR; 103690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi continue; 103700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 103710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 103720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4NO_ERROR == err) /**< One stream found */ 103730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 103740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 103750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Found the first video stream */ 103760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if ((M4READER_kMediaFamilyVideo == mediaFamily) \ 103770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (M4OSA_NULL == pC->pReaderVideoStream)) 103780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 103790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if ((M4DA_StreamTypeVideoH263==pStreamHandler->m_streamType) || 103800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4DA_StreamTypeVideoMpeg4==pStreamHandler->m_streamType) 103810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#ifdef M4VSS_SUPPORT_VIDEO_AVC 103820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ||(M4DA_StreamTypeVideoMpeg4Avc==pStreamHandler->m_streamType)) 103830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#else 103840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi ||((M4DA_StreamTypeVideoMpeg4Avc==pStreamHandler->m_streamType) 103850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi &&(pC->m_pVideoDecoderItTable[M4DECODER_kVideoTypeAVC] != M4OSA_NULL))) 103860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#endif 103870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 103880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_0("M4MCS_open_normalMode():\ 103890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi Found a H263 or MPEG-4 video stream in input 3gpp clip"); 103900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 103910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 103920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Keep pointer to the video stream */ 103930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pReaderVideoStream = (M4_VideoStreamHandler*)pStreamHandler; 103940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->bUnsupportedVideoFound = M4OSA_FALSE; 103950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pStreamHandler->m_bStreamIsOK = M4OSA_TRUE; 103960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 103970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 103980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Init our video stream state variable */ 103990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->VideoState = M4MCS_kStreamState_STARTED; 104000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 104010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 104020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Reset the stream reader */ 104030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->m_pReader->m_pFctReset(pC->pReaderContext, 104040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4_StreamHandler*)pC->pReaderVideoStream); 104050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4NO_ERROR != err) 104060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 104070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1("M4MCS_open_normalMode():\ 104080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi m_pReader->m_pFctReset(video) returns 0x%x", err); 104090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 104100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 104110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 104120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 104130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Initializes an access Unit */ 104140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->m_pReader->m_pFctFillAuStruct(pC->pReaderContext, pStreamHandler, 104150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi &pC->ReaderVideoAU); 104160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4NO_ERROR != err) 104170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 104180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1("M4MCS_open_normalMode():\ 104190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi m_pReader->m_pFctFillAuStruct(video) returns 0x%x", err); 104200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 104210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 104220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 104230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else /**< Not H263 or MPEG-4 (H264, etc.) */ 104240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 104250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1("M4MCS_open_normalMode():\ 104260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi Found an unsupported video stream (0x%x) in input 3gpp clip", 104270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pStreamHandler->m_streamType); 104280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 104290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->bUnsupportedVideoFound = M4OSA_TRUE; 104300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pStreamHandler->m_bStreamIsOK = M4OSA_FALSE; 104310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 104320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 104330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 104340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Found the first audio stream */ 104350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else if ((M4READER_kMediaFamilyAudio == mediaFamily) 104360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi && (M4OSA_NULL == pC->pReaderAudioStream)) 104370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 104380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if ((M4DA_StreamTypeAudioAmrNarrowBand==pStreamHandler->m_streamType) || 104390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4DA_StreamTypeAudioAac==pStreamHandler->m_streamType) || 104400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4DA_StreamTypeAudioMp3==pStreamHandler->m_streamType) || 104410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4DA_StreamTypeAudioEvrc==pStreamHandler->m_streamType) ) 104420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 104430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_0("M4MCS_open_normalMode(): Found an AMR-NB, AAC \ 104440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi or MP3 audio stream in input clip"); 104450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 104460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 104470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Keep pointer to the audio stream */ 104480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pReaderAudioStream = (M4_AudioStreamHandler*)pStreamHandler; 104490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pStreamHandler->m_bStreamIsOK = M4OSA_TRUE; 104500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->bUnsupportedAudioFound = M4OSA_FALSE; 104510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 104520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 104530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Init our audio stream state variable */ 104540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->AudioState = M4MCS_kStreamState_STARTED; 104550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 104560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 104570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Reset the stream reader */ 104580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->m_pReader->m_pFctReset(pC->pReaderContext, 104590c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (M4_StreamHandler*)pC->pReaderAudioStream); 104600c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4NO_ERROR != err) 104610c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 104620c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1("M4MCS_open_normalMode():\ 104630c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi m_pReader->m_pFctReset(audio) returns 0x%x", err); 104640c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 104650c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 104660c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 104670c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 104680c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Initializes an access Unit */ 104690c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = pC->m_pReader->m_pFctFillAuStruct(pC->pReaderContext, pStreamHandler, 104700c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi &pC->ReaderAudioAU); 104710c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4NO_ERROR != err) 104720c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 104730c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1("M4MCS_open_normalMode(): \ 104740c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi m_pReader->m_pFctFillAuStruct(audio) returns 0x%x", err); 104750c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 104760c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 104770c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 104780c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 104790c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Output max AU size is equal to input max AU size (this value 104800c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * will be changed if there is audio transcoding) */ 104810c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->uiAudioMaxAuSize = pStreamHandler->m_maxAUSize; 104820c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 104830c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 104840c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 104850c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 104860c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /**< Not AMR-NB, AAC, MP3 nor EVRC (AMR-WB, WAV...) */ 104870c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1("M4MCS_open_normalMode(): Found an unsupported audio stream\ 104880c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi (0x%x) in input 3gpp clip", pStreamHandler->m_streamType); 104890c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 104900c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->bUnsupportedAudioFound = M4OSA_TRUE; 104910c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pStreamHandler->m_bStreamIsOK = M4OSA_FALSE; 104920c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 104930c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 104940c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 104950c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } /**< end of while (M4NO_ERROR == err) */ 104960c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 104970c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 104980c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Check we found at least one supported stream */ 104990c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if((M4OSA_NULL == pC->pReaderVideoStream) && (M4OSA_NULL == pC->pReaderAudioStream)) 105000c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 105010c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_0("M4MCS_open_normalMode(): returning \ 105020c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_ERR_INPUT_FILE_CONTAINS_NO_SUPPORTED_STREAM"); 105030c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4MCS_ERR_INPUT_FILE_CONTAINS_NO_SUPPORTED_STREAM; 105040c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 105050c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 105060c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#ifndef M4VSS_ENABLE_EXTERNAL_DECODERS 105070c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if(pC->VideoState == M4MCS_kStreamState_STARTED) 105080c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 105090c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MCS_setCurrentVideoDecoder(pContext, 105100c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pReaderVideoStream->m_basicProperties.m_streamType); 105110c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4ERR_CHECK_RETURN(err); 105120c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 105130c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi#endif 105140c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 105150c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if(pC->AudioState == M4MCS_kStreamState_STARTED) 105160c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 105170c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi //EVRC 105180c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if(M4DA_StreamTypeAudioEvrc != pStreamHandler->m_streamType) 105190c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /* decoder not supported yet, but allow to do null encoding */ 105200c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 105210c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MCS_setCurrentAudioDecoder(pContext, 105220c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->pReaderAudioStream->m_basicProperties.m_streamType); 105230c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4ERR_CHECK_RETURN(err); 105240c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 105250c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 105260c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 105270c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 105280c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Get the audio and video stream properties */ 105290c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi err = M4MCS_intGetInputClipProperties(pC); 105300c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (M4NO_ERROR != err) 105310c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 105320c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE1_1("M4MCS_open_normalMode():\ 105330c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4MCS_intGetInputClipProperties returns 0x%x", err); 105340c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return err; 105350c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 105360c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 105370c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 105380c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Set the begin cut decoding increment according to the input frame rate */ 105390c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi if (0. != pC->InputFileProperties.fAverageFrameRate) /**< sanity check */ 105400c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 105410c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->iVideoBeginDecIncr = (M4OSA_Int32)(3000. \ 105420c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi / pC->InputFileProperties.fAverageFrameRate); /**< about 3 frames */ 105430c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 105440c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi else 105450c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi { 105460c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->iVideoBeginDecIncr = 200; /**< default value: 200 milliseconds (3 frames @ 15fps)*/ 105470c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi } 105480c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 105490c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 105500c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Update state automaton */ 105510c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi pC->State = M4MCS_kState_OPENED; 105520c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 105530c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi /** 105540c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi * Return with no error */ 105550c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi M4OSA_TRACE3_0("M4MCS_open_normalMode(): returning M4NO_ERROR"); 105560c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi return M4NO_ERROR; 105570c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi} 105580c1c027b0a0b386482d18fac0c35f2b7385d1924Dharmaray Kundargi 1055924b93d4fdf9bf470060627303a61c138f534d2ddRajneesh ChowduryM4OSA_ERR M4MCS_intCheckAndGetCodecProperties( 105602b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury M4MCS_InternalContext *pC) { 105612b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury 105622b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury M4OSA_ERR err = M4NO_ERROR; 105632b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury M4AD_Buffer outputBuffer; 105642b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury uint32_t optionValue =0; 105652b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury 1056624b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury M4OSA_TRACE3_0("M4MCS_intCheckAndGetCodecProperties :start"); 105672b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury 105682b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury // Decode first audio frame from clip to get properties from codec 105692b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury 1057024b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury if (M4DA_StreamTypeAudioAac == 1057124b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury pC->pReaderAudioStream->m_basicProperties.m_streamType) { 1057224b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury 1057324b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury err = pC->m_pAudioDecoder->m_pFctCreateAudioDec( 105742b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury &pC->pAudioDecCtxt, 105752b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury pC->pReaderAudioStream, &(pC->AacProperties)); 1057624b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury } else { 1057724b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury err = pC->m_pAudioDecoder->m_pFctCreateAudioDec( 1057824b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury &pC->pAudioDecCtxt, 1057924b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury pC->pReaderAudioStream, 1058024b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury pC->m_pCurrentAudioDecoderUserData); 1058124b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury } 1058220db0a4ef7996f9b36f28aa1c0bd296549da526aRajneesh Chowdury if (M4NO_ERROR != err) { 1058320db0a4ef7996f9b36f28aa1c0bd296549da526aRajneesh Chowdury 1058420db0a4ef7996f9b36f28aa1c0bd296549da526aRajneesh Chowdury M4OSA_TRACE1_1( 1058520db0a4ef7996f9b36f28aa1c0bd296549da526aRajneesh Chowdury "M4MCS_intCheckAndGetCodecProperties: m_pFctCreateAudioDec \ 1058620db0a4ef7996f9b36f28aa1c0bd296549da526aRajneesh Chowdury returns 0x%x", err); 1058720db0a4ef7996f9b36f28aa1c0bd296549da526aRajneesh Chowdury return err; 1058820db0a4ef7996f9b36f28aa1c0bd296549da526aRajneesh Chowdury } 105892b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury 105902b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury pC->m_pAudioDecoder->m_pFctSetOptionAudioDec(pC->pAudioDecCtxt, 105912b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury M4AD_kOptionID_3gpReaderInterface, (M4OSA_DataOption) pC->m_pReaderDataIt); 105922b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury 105932b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury pC->m_pAudioDecoder->m_pFctSetOptionAudioDec(pC->pAudioDecCtxt, 105942b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury M4AD_kOptionID_AudioAU, (M4OSA_DataOption) &pC->ReaderAudioAU); 105952b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury 105962b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury if( pC->m_pAudioDecoder->m_pFctStartAudioDec != M4OSA_NULL ) { 105972b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury 105982b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury err = pC->m_pAudioDecoder->m_pFctStartAudioDec(pC->pAudioDecCtxt); 105992b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury if( M4NO_ERROR != err ) { 106002b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury 106012b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury M4OSA_TRACE1_1( 1060224b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury "M4MCS_intCheckAndGetCodecProperties: m_pFctStartAudioDec \ 106032b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury returns 0x%x", err); 106042b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury return err; 106052b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury } 106062b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury } 106072b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury 106082b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury /** 106092b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury * Allocate output buffer for the audio decoder */ 106102b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury outputBuffer.m_bufferSize = 106112b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury pC->pReaderAudioStream->m_byteFrameLength 106122b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury * pC->pReaderAudioStream->m_byteSampleSize 106132b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury * pC->pReaderAudioStream->m_nbChannels; 106142b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury 106152b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury if( outputBuffer.m_bufferSize > 0 ) { 106162b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury 106172b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury outputBuffer.m_dataAddress = 106182b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury (M4OSA_MemAddr8)M4OSA_32bitAlignedMalloc(outputBuffer.m_bufferSize \ 106192b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury *sizeof(short), M4MCS, (M4OSA_Char *)"outputBuffer.m_bufferSize"); 106202b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury 106212b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury if( M4OSA_NULL == outputBuffer.m_dataAddress ) { 106222b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury 106232b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury M4OSA_TRACE1_0( 1062424b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury "M4MCS_intCheckAndGetCodecProperties():\ 106252b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury unable to allocate outputBuffer.m_dataAddress, returning M4ERR_ALLOC"); 106262b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury return M4ERR_ALLOC; 106272b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury } 106282b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury } 106292b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury 106302b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury err = pC->m_pAudioDecoder->m_pFctStepAudioDec(pC->pAudioDecCtxt, 106312b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury M4OSA_NULL, &outputBuffer, M4OSA_FALSE); 106322b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury 106332b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury if ( err == M4WAR_INFO_FORMAT_CHANGE ) { 106342b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury 106352b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury // Get the properties from codec node 106362b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury pC->m_pAudioDecoder->m_pFctGetOptionAudioDec(pC->pAudioDecCtxt, 106372b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury M4AD_kOptionID_AudioNbChannels, (M4OSA_DataOption) &optionValue); 106382b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury 106392b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury // Reset Reader structure value also 106402b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury pC->pReaderAudioStream->m_nbChannels = optionValue; 106412b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury 106422b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury pC->m_pAudioDecoder->m_pFctGetOptionAudioDec(pC->pAudioDecCtxt, 106432b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury M4AD_kOptionID_AudioSampFrequency, (M4OSA_DataOption) &optionValue); 106442b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury 106452b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury // Reset Reader structure value also 106462b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury pC->pReaderAudioStream->m_samplingFrequency = optionValue; 106472b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury 1064824b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury if (M4DA_StreamTypeAudioAac == 1064924b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury pC->pReaderAudioStream->m_basicProperties.m_streamType) { 1065024b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury 1065124b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury pC->AacProperties.aNumChan = 1065224b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury pC->pReaderAudioStream->m_nbChannels; 1065324b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury pC->AacProperties.aSampFreq = 1065424b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury pC->pReaderAudioStream->m_samplingFrequency; 1065524b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury 1065624b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury } 1065724b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury 106582b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury } else if( err != M4NO_ERROR) { 1065924b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury M4OSA_TRACE1_1("M4MCS_intCheckAndGetCodecProperties:\ 106602b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury m_pFctStepAudioDec returns err = 0x%x", err); 106612b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury } 106622b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury 106632b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury free(outputBuffer.m_dataAddress); 106642b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury 106652b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury // Reset the stream reader 106662b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury err = pC->m_pReader->m_pFctReset(pC->pReaderContext, 106672b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury (M4_StreamHandler *)pC->pReaderAudioStream); 106682b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury 106692b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury if (M4NO_ERROR != err) { 1067024b93d4fdf9bf470060627303a61c138f534d2ddRajneesh Chowdury M4OSA_TRACE1_1("M4MCS_intCheckAndGetCodecProperties\ 106712b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury Error in reseting reader: 0x%x", err); 106722b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury } 106732b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury 106742b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury return err; 106752b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury 106762b421029254f3149928646def0a84e6f380a47a9Rajneesh Chowdury} 10677413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10678413326960d3b3f6c591685e56a30150087ff08ffRajneesh ChowduryM4OSA_ERR M4MCS_intLimitBitratePerCodecProfileLevel( 10679413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury M4ENCODER_AdvancedParams* EncParams) { 10680413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10681413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury M4OSA_ERR err = M4NO_ERROR; 10682413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10683413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury switch (EncParams->Format) { 10684413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury case M4ENCODER_kH263: 10685413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury EncParams->Bitrate = M4MCS_intLimitBitrateForH263Enc( 10686413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury EncParams->videoProfile, 10687413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury EncParams->videoLevel, EncParams->Bitrate); 10688413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury break; 10689413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10690413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury case M4ENCODER_kMPEG4: 10691413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury EncParams->Bitrate = M4MCS_intLimitBitrateForMpeg4Enc( 10692413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury EncParams->videoProfile, 10693413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury EncParams->videoLevel, EncParams->Bitrate); 10694413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury break; 10695413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10696413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury case M4ENCODER_kH264: 10697413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury EncParams->Bitrate = M4MCS_intLimitBitrateForH264Enc( 10698413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury EncParams->videoProfile, 10699413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury EncParams->videoLevel, EncParams->Bitrate); 10700413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury break; 10701413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10702413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury default: 10703413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury M4OSA_TRACE1_1("M4MCS_intLimitBitratePerCodecProfileLevel: \ 10704413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury Wrong enc format %d", EncParams->Format); 10705413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury err = M4ERR_PARAMETER; 10706413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury break; 10707413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury } 10708413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10709413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury return err; 10710413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10711413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury} 10712413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10713413326960d3b3f6c591685e56a30150087ff08ffRajneesh ChowduryM4OSA_Int32 M4MCS_intLimitBitrateForH264Enc(M4OSA_Int32 profile, 10714413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury M4OSA_Int32 level, M4OSA_Int32 bitrate) { 10715413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10716413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury M4OSA_Int32 vidBitrate = 0; 10717413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10718413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury switch (profile) { 10719413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury case OMX_VIDEO_AVCProfileBaseline: 10720413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury case OMX_VIDEO_AVCProfileMain: 10721413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10722413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury switch (level) { 10723413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10724413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury case OMX_VIDEO_AVCLevel1: 10725413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury vidBitrate = (bitrate > 64000) ? 64000 : bitrate; 10726413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury break; 10727413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10728413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury case OMX_VIDEO_AVCLevel1b: 10729413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury vidBitrate = (bitrate > 128000) ? 128000 : bitrate; 10730413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury break; 10731413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10732413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury case OMX_VIDEO_AVCLevel11: 10733413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury vidBitrate = (bitrate > 192000) ? 192000 : bitrate; 10734413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury break; 10735413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10736413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury case OMX_VIDEO_AVCLevel12: 10737413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury vidBitrate = (bitrate > 384000) ? 384000 : bitrate; 10738413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury break; 10739413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10740413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury case OMX_VIDEO_AVCLevel13: 10741413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury vidBitrate = (bitrate > 768000) ? 768000 : bitrate; 10742413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury break; 10743413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10744413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury case OMX_VIDEO_AVCLevel2: 10745413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury vidBitrate = (bitrate > 2000000) ? 2000000 : bitrate; 10746413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury break; 10747413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10748413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury case OMX_VIDEO_AVCLevel21: 10749413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury vidBitrate = (bitrate > 4000000) ? 4000000 : bitrate; 10750413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury break; 10751413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10752413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury case OMX_VIDEO_AVCLevel22: 10753413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury vidBitrate = (bitrate > 4000000) ? 4000000 : bitrate; 10754413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury break; 10755413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10756413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury case OMX_VIDEO_AVCLevel3: 10757413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury vidBitrate = (bitrate > 10000000) ? 10000000 : bitrate; 10758413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury break; 10759413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10760413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury case OMX_VIDEO_AVCLevel31: 10761413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury vidBitrate = (bitrate > 14000000) ? 14000000 : bitrate; 10762413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury break; 10763413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10764413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury case OMX_VIDEO_AVCLevel32: 10765413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury vidBitrate = (bitrate > 20000000) ? 20000000 : bitrate; 10766413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury break; 10767413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10768413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury case OMX_VIDEO_AVCLevel4: 10769413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury vidBitrate = (bitrate > 20000000) ? 20000000 : bitrate; 10770413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury break; 10771413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10772413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury case OMX_VIDEO_AVCLevel41: 10773413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury vidBitrate = (bitrate > 50000000) ? 50000000 : bitrate; 10774413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury break; 10775413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10776413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury case OMX_VIDEO_AVCLevel42: 10777413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury vidBitrate = (bitrate > 50000000) ? 50000000 : bitrate; 10778413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury break; 10779413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10780413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury case OMX_VIDEO_AVCLevel5: 10781413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury vidBitrate = (bitrate > 135000000) ? 135000000 : bitrate; 10782413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury break; 10783413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10784413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury case OMX_VIDEO_AVCLevel51: 10785413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury vidBitrate = (bitrate > 240000000) ? 240000000 : bitrate; 10786413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury break; 10787413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10788413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury default: 10789413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury vidBitrate = bitrate; 10790413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury break; 10791413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury } 10792413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury break; 10793413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10794413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury case OMX_VIDEO_AVCProfileHigh: 10795413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury switch (level) { 10796413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury case OMX_VIDEO_AVCLevel1: 10797413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury vidBitrate = (bitrate > 80000) ? 80000 : bitrate; 10798413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury break; 10799413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10800413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury case OMX_VIDEO_AVCLevel1b: 10801413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury vidBitrate = (bitrate > 160000) ? 160000 : bitrate; 10802413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury break; 10803413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10804413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury case OMX_VIDEO_AVCLevel11: 10805413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury vidBitrate = (bitrate > 240000) ? 240000 : bitrate; 10806413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury break; 10807413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10808413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury case OMX_VIDEO_AVCLevel12: 10809413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury vidBitrate = (bitrate > 480000) ? 480000 : bitrate; 10810413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury break; 10811413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10812413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury case OMX_VIDEO_AVCLevel13: 10813413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury vidBitrate = (bitrate > 960000) ? 960000 : bitrate; 10814413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury break; 10815413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10816413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury case OMX_VIDEO_AVCLevel2: 10817413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury vidBitrate = (bitrate > 2500000) ? 2500000 : bitrate; 10818413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury break; 10819413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10820413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury case OMX_VIDEO_AVCLevel21: 10821413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury vidBitrate = (bitrate > 5000000) ? 5000000 : bitrate; 10822413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury break; 10823413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10824413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury case OMX_VIDEO_AVCLevel22: 10825413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury vidBitrate = (bitrate > 5000000) ? 5000000 : bitrate; 10826413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury break; 10827413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10828413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury case OMX_VIDEO_AVCLevel3: 10829413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury vidBitrate = (bitrate > 12500000) ? 12500000 : bitrate; 10830413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury break; 10831413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10832413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury case OMX_VIDEO_AVCLevel31: 10833413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury vidBitrate = (bitrate > 17500000) ? 17500000 : bitrate; 10834413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury break; 10835413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10836413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury case OMX_VIDEO_AVCLevel32: 10837413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury vidBitrate = (bitrate > 25000000) ? 25000000 : bitrate; 10838413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury break; 10839413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10840413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury case OMX_VIDEO_AVCLevel4: 10841413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury vidBitrate = (bitrate > 25000000) ? 25000000 : bitrate; 10842413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury break; 10843413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10844413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury case OMX_VIDEO_AVCLevel41: 10845413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury vidBitrate = (bitrate > 62500000) ? 62500000 : bitrate; 10846413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury break; 10847413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10848413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury case OMX_VIDEO_AVCLevel42: 10849413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury vidBitrate = (bitrate > 62500000) ? 62500000 : bitrate; 10850413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury break; 10851413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10852413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury case OMX_VIDEO_AVCLevel5: 10853413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury vidBitrate = (bitrate > 168750000) ? 168750000 : bitrate; 10854413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury break; 10855413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10856413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury case OMX_VIDEO_AVCLevel51: 10857413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury vidBitrate = (bitrate > 300000000) ? 300000000 : bitrate; 10858413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury break; 10859413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10860413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury default: 10861413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury vidBitrate = bitrate; 10862413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury break; 10863413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury } 10864413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury break; 10865413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10866413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury default: 10867413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury // We do not handle any other AVC profile for now. 10868413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury // Return input bitrate 10869413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury vidBitrate = bitrate; 10870413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury break; 10871413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury } 10872413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10873413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury return vidBitrate; 10874413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury} 10875413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10876413326960d3b3f6c591685e56a30150087ff08ffRajneesh ChowduryM4OSA_Int32 M4MCS_intLimitBitrateForMpeg4Enc(M4OSA_Int32 profile, 10877413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury M4OSA_Int32 level, M4OSA_Int32 bitrate) { 10878413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10879413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury M4OSA_Int32 vidBitrate = 0; 10880413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10881413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury switch (profile) { 10882413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury case OMX_VIDEO_MPEG4ProfileSimple: 10883413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury switch (level) { 10884413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10885413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury case OMX_VIDEO_MPEG4Level0: 10886413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury vidBitrate = (bitrate > 64000) ? 64000 : bitrate; 10887413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury break; 10888413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10889413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury case OMX_VIDEO_MPEG4Level0b: 10890413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury vidBitrate = (bitrate > 128000) ? 128000 : bitrate; 10891413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury break; 10892413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10893413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury case OMX_VIDEO_MPEG4Level1: 10894413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury vidBitrate = (bitrate > 64000) ? 64000 : bitrate; 10895413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury break; 10896413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10897413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury case OMX_VIDEO_MPEG4Level2: 10898413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury vidBitrate = (bitrate > 128000) ? 128000 : bitrate; 10899413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury break; 10900413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10901413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury case OMX_VIDEO_MPEG4Level3: 10902413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury vidBitrate = (bitrate > 384000) ? 384000 : bitrate; 10903413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury break; 10904413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10905413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury default: 10906413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury vidBitrate = bitrate; 10907413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury break; 10908413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury } 10909413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury break; 10910413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10911413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury default: 10912413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury // We do not handle any other MPEG4 profile for now. 10913413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury // Return input bitrate 10914413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury vidBitrate = bitrate; 10915413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury break; 10916413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury } 10917413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10918413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury return vidBitrate; 10919413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury} 10920413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10921413326960d3b3f6c591685e56a30150087ff08ffRajneesh ChowduryM4OSA_Int32 M4MCS_intLimitBitrateForH263Enc(M4OSA_Int32 profile, 10922413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury M4OSA_Int32 level, M4OSA_Int32 bitrate) { 10923413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10924413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury M4OSA_Int32 vidBitrate = 0; 10925413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10926413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury switch (profile) { 10927413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury case OMX_VIDEO_H263ProfileBaseline: 10928413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury switch (level) { 10929413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10930413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury case OMX_VIDEO_H263Level10: 10931413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury vidBitrate = (bitrate > 64000) ? 64000 : bitrate; 10932413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury break; 10933413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10934413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury case OMX_VIDEO_H263Level20: 10935413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury vidBitrate = (bitrate > 128000) ? 128000 : bitrate; 10936413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury break; 10937413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10938413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury case OMX_VIDEO_H263Level30: 10939413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury vidBitrate = (bitrate > 384000) ? 384000 : bitrate; 10940413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury break; 10941413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10942413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury default: 10943413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury vidBitrate = bitrate; 10944413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury break; 10945413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury } 10946413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury break; 10947413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10948413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury default: 10949413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury // We do not handle any other H263 profile for now. 10950413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury // Return input bitrate 10951413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury vidBitrate = bitrate; 10952413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury break; 10953413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury } 10954413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury 10955413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury return vidBitrate; 10956413326960d3b3f6c591685e56a30150087ff08ffRajneesh Chowdury} 10957