17c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* 27c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Copyright (C) 2011 The Android Open Source Project 37c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 47c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Licensed under the Apache License, Version 2.0 (the "License"); 57c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * you may not use this file except in compliance with the License. 67c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * You may obtain a copy of the License at 77c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 87c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * http://www.apache.org/licenses/LICENSE-2.0 97c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Unless required by applicable law or agreed to in writing, software 117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * distributed under the License is distributed on an "AS IS" BASIS, 127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * See the License for the specific language governing permissions and 147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * limitations under the License. 157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************* 187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @file M4MCS_API.c 197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief MCS implementation (Video Compressor Service) 207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note This file implements the API and the processing of the MCS 217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************* 227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi **/ 237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/****************/ 257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*** Includes ***/ 267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/****************/ 277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * OSAL headers */ 307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4OSA_Memory.h" /**< OSAL memory management */ 317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4OSA_Debug.h" /**< OSAL debug management */ 327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* Our headers */ 347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4MCS_API.h" 357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4MCS_ErrorCodes.h" 367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4MCS_InternalTypes.h" 377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4MCS_InternalConfig.h" 387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4MCS_InternalFunctions.h" 397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* Common headers (for aac) */ 417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4_Common.h" 427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef M4VSS_ENABLE_EXTERNAL_DECODERS 447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4VD_EXTERNAL_Interface.h" 457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif /* M4VSS_ENABLE_EXTERNAL_DECODERS */ 467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4MCS_intCheckAudioEffects(M4MCS_InternalContext* pContext) 527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief Check if an effect has to be applied currently 537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note It is called by the stepEncoding function 547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pContext (IN) MCS internal context 557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR: No error 567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4MCS_intCheckAudioEffects(M4MCS_InternalContext* pC) 597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Int8 *pActiveEffectNumber = &(pC->pActiveEffectNumber); 617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *pActiveEffectNumber = -1; 637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pC->ReaderAudioAU.m_CTS > pC->uiBeginCutTime 657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi && pC->ReaderAudioAU.m_CTS < pC->uiEndCutTime) 667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 outputRelatedTime = 0; 687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt8 uiEffectIndex = 0; 697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi outputRelatedTime = 707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_UInt32)(pC->ReaderAudioAU.m_CTS - pC->uiBeginCutTime + 0.5); 717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for(uiEffectIndex=0; uiEffectIndex<pC->nbEffects; uiEffectIndex++) 737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if ((outputRelatedTime >= 757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_UInt32)(pC->pEffects[uiEffectIndex].uiStartTime)) && 767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (outputRelatedTime < 777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_UInt32)(pC->pEffects[uiEffectIndex].uiStartTime +\ 787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->pEffects[uiEffectIndex].uiDuration))) 797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *pActiveEffectNumber = uiEffectIndex; 817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi uiEffectIndex = pC->nbEffects; 827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4MCS_editAudioEffectFct_FadeIn() 937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief Apply audio effect FadeIn to pPCMdata 947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pC (IN/OUT) Internal edit context 957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pPCMdata (IN/OUT) Input and Output PCM audio data 967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param uiPCMsize (IN) Size of pPCMdata 977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pProgress (IN) Effect progress 987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR: No error 997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 1007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 1017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4MCS_editAudioEffectFct_FadeIn( M4OSA_Void *pFunctionContext, 1027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Int16 *pPCMdata, 1037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 uiPCMsize, 1047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4MCS_ExternalProgress *pProgress) 1057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 1067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* we will cast each Int16 sample into this Int32 variable */ 1077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Int32 i32sample; 1087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 1107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Sanity check */ 1117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pProgress->uiProgress > 1000) 1127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 1137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pProgress->uiProgress = 1000; 1147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 1157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 1177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * From buffer size (bytes) to number of sample (int16): divide by two */ 1187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi uiPCMsize >>= 1; 1197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 1217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Loop on samples */ 1227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi while (uiPCMsize-->0) /**< decrementing to optimize */ 1237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 1247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi i32sample = *pPCMdata; 1257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi i32sample *= pProgress->uiProgress; 1267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi i32sample /= 1000; 1277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *pPCMdata++ = (M4OSA_Int16)i32sample; 1287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 1297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 1317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Return */ 1327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE3_0("M4MCS_editAudioEffectFct_FadeIn: returning M4NO_ERROR"); 1337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 1347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 1357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 1387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 1397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4MCS_editAudioEffectFct_FadeOut() 1407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief Apply audio effect FadeIn to pPCMdata 1417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pC (IN/OUT) Internal edit context 1427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pPCMdata (IN/OUT) Input and Output PCM audio data 1437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param uiPCMsize (IN) Size of pPCMdata 1447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pProgress (IN) Effect progress 1457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR: No error 1467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 1477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 1487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4MCS_editAudioEffectFct_FadeOut( M4OSA_Void *pFunctionContext, 1497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Int16 *pPCMdata, 1507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 uiPCMsize, 1517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4MCS_ExternalProgress *pProgress) 1527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 1537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* we will cast each Int16 sample into this Int32 variable */ 1547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Int32 i32sample; 1557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 1577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Sanity check */ 1587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pProgress->uiProgress > 1000) 1597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 1607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pProgress->uiProgress = 1000; 1617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 1627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pProgress->uiProgress = 1000 - pProgress->uiProgress; 1637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 1657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * From buffer size (bytes) to number of sample (int16): divide by two */ 1667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi uiPCMsize >>= 1; 1677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 1697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Loop on samples */ 1707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi while (uiPCMsize-->0) /**< decrementing to optimize */ 1717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 1727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi i32sample = *pPCMdata; 1737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi i32sample *= pProgress->uiProgress; 1747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi i32sample /= 1000; 1757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *pPCMdata++ = (M4OSA_Int16)i32sample; 1767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 1777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 1797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Return */ 1807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE3_0("M4MCS_editAudioEffectFct_FadeOut: returning M4NO_ERROR"); 1817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 1827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 1837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 184