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_Codecs.c 197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief MCS implementation 207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note This file contains all functions related to audio/video 217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * codec manipulations. 227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************** 277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Includes 287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************** 297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "NXPSW_CompilerSwitches.h" 317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4OSA_Debug.h" /* Include for OSAL debug services */ 327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4MCS_InternalTypes.h" /* Internal types of the MCS */ 337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef M4MCS_SUPPORT_VIDEC_3GP 367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4_MPEG4VI_VideoHandler.h" /*needed for renderer error codes*/ 377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif 387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4MCS_clearInterfaceTables() 437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief Clear encoders, decoders, reader and writers interfaces tables 447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pContext (IN/OUT) MCS context. 457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR: No error 467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER: The context is null 477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4MCS_clearInterfaceTables(M4MCS_Context pContext) 507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4MCS_InternalContext* pC = (M4MCS_InternalContext*)pContext; 527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt8 i; 537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((M4OSA_NULL == pC), M4ERR_PARAMETER, "invalid context pointer"); 557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Initialisation that will allow to check if registering twice */ 577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->pWriterGlobalFcts = M4OSA_NULL; 587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->pWriterDataFcts = M4OSA_NULL; 597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->pVideoEncoderGlobalFcts = M4OSA_NULL; 607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->pAudioEncoderGlobalFcts = M4OSA_NULL; 617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->pCurrentVideoEncoderExternalAPI = M4OSA_NULL; 637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->pCurrentVideoEncoderUserData = M4OSA_NULL; 647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for (i = 0; i < M4WRITER_kType_NB; i++ ) 667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->WriterInterface[i].pGlobalFcts = M4OSA_NULL; 687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->WriterInterface[i].pDataFcts = M4OSA_NULL; 697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for (i = 0; i < M4ENCODER_kVideo_NB; i++ ) 727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->pVideoEncoderInterface[i] = M4OSA_NULL; 747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->pVideoEncoderExternalAPITable[i] = M4OSA_NULL; 757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->pVideoEncoderUserDataTable[i] = M4OSA_NULL; 767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for (i = 0; i < M4ENCODER_kAudio_NB; i++ ) 797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->pAudioEncoderInterface[i] = M4OSA_NULL; 817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->pAudioEncoderFlag[i] = M4OSA_FALSE; 827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->pAudioEncoderUserDataTable[i] = M4OSA_NULL; 837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Initialisation that will allow to check if registering twice */ 867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pReader = M4OSA_NULL; 877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pReaderDataIt = M4OSA_NULL; 887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_uiNbRegisteredReaders = 0; 897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for (i = 0; i < M4READER_kMediaType_NB; i++ ) 917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pReaderGlobalItTable[i] = M4OSA_NULL; 937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pReaderDataItTable[i] = M4OSA_NULL; 947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pVideoDecoder = M4OSA_NULL; 977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef M4VSS_ENABLE_EXTERNAL_DECODERS 987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pCurrentVideoDecoderUserData = M4OSA_NULL; 997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif /* M4VSS_ENABLE_EXTERNAL_DECODERS */ 1007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_uiNbRegisteredVideoDec = 0; 1017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for (i = 0; i < M4DECODER_kVideoType_NB; i++ ) 1027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 1037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pVideoDecoderItTable[i] = M4OSA_NULL; 1047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef M4VSS_ENABLE_EXTERNAL_DECODERS 1057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pVideoDecoderUserDataTable[i] = M4OSA_NULL; 1067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif /* M4VSS_ENABLE_EXTERNAL_DECODERS */ 1077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 1087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pAudioDecoder = M4OSA_NULL; 1107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for (i = 0; i < M4AD_kType_NB; i++ ) 1117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 1127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pAudioDecoderItTable[i] = M4OSA_NULL; 1137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pAudioDecoderFlagTable[i] = M4OSA_FALSE; 1147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pAudioDecoderUserDataTable[i] = M4OSA_NULL; 1157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 1167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 1187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 1197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 1217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 1227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4MCS_registerWriter() 1237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief This function will register a specific file format writer. 1247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note According to the Mediatype, this function will store in the internal context 1257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * the writer context. 1267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pContext: (IN) Execution context. 1277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR: there is no error 1287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER pContext,pWtrGlobalInterface or 1297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * pWtrDataInterface is M4OSA_NULL 1307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * (debug only), or invalid MediaType 1317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 1327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 1337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4MCS_registerWriter(M4MCS_Context pContext, M4WRITER_OutputFileType MediaType, 1347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4WRITER_GlobalInterface* pWtrGlobalInterface, 1357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4WRITER_DataInterface* pWtrDataInterface) 1367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 1377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4MCS_InternalContext* pC = (M4MCS_InternalContext*)pContext; 1387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 1407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Check input parameters */ 1417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF2((pC == M4OSA_NULL),M4ERR_PARAMETER, 1427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "MCS: context is M4OSA_NULL in M4MCS_registerWriter"); 1437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF2((pWtrGlobalInterface == M4OSA_NULL),M4ERR_PARAMETER, 1447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "pWtrGlobalInterface is M4OSA_NULL in M4MCS_registerWriter"); 1457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF2((pWtrDataInterface == M4OSA_NULL),M4ERR_PARAMETER, 1467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "pWtrDataInterface is M4OSA_NULL in M4MCS_registerWriter"); 1477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE3_3("MCS: M4MCS_registerWriter called with pContext=0x%x,\ 1497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pWtrGlobalInterface=0x%x, pWtrDataInterface=0x%x", pC,pWtrGlobalInterface, 1507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pWtrDataInterface); 1517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if((MediaType == M4WRITER_kUnknown) || (MediaType >= M4WRITER_kType_NB)) 1537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 1547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1(M4OSA_TRUE, M4ERR_PARAMETER, "Invalid media type"); 1557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_PARAMETER; 1567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 1577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (pC->WriterInterface[MediaType].pGlobalFcts != M4OSA_NULL) 1597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 1607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* a writer corresponding to this media type has already been registered !*/ 1617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1(M4OSA_TRUE, M4ERR_PARAMETER, "This media type has already been registered"); 1627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_PARAMETER; 1637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 1647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* 1667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Save writer interface in context */ 1677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->WriterInterface[MediaType].pGlobalFcts = pWtrGlobalInterface; 1687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->WriterInterface[MediaType].pDataFcts = pWtrDataInterface; 1697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 1717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 1727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 1747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 1757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4MCS_registerEncoder() 1767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief This function will register a specific video encoder. 1777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note According to the Mediatype, this function will store in the internal context 1787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * the encoder context. 1797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pContext: (IN) Execution context. 1807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR: there is no error 1817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER pContext or pEncGlobalInterface is M4OSA_NULL (debug only), 1827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * or invalid MediaType 1837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 1847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 1857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4MCS_registerVideoEncoder ( 1867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4MCS_Context pContext, 1877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4ENCODER_Format MediaType, 1887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4ENCODER_GlobalInterface *pEncGlobalInterface) 1897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 1907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4MCS_InternalContext* pC = (M4MCS_InternalContext*)pContext; 1917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 1937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Check input parameters */ 1947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF2((pC == M4OSA_NULL),M4ERR_PARAMETER, 1957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "MCS: context is M4OSA_NULL in M4MCS_registerVideoEncoder"); 1967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF2((pEncGlobalInterface == M4OSA_NULL),M4ERR_PARAMETER, 1977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "pEncGlobalInterface is M4OSA_NULL in M4MCS_registerVideoEncoder"); 1987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE3_2("MCS: M4MCS_registerVideoEncoder called with pContext=0x%x,\ 2007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pEncGlobalInterface=0x%x", pC, pEncGlobalInterface); 2017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (MediaType >= M4ENCODER_kVideo_NB) 2037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 2047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1(M4OSA_TRUE, M4ERR_PARAMETER, "Invalid video encoder type"); 2057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_PARAMETER; 2067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 2077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (pC->pVideoEncoderInterface[MediaType] != M4OSA_NULL) 2097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 2107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* can be legitimate, in cases where we have one version that can use external encoders 2117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi but which still has the built-in one to be able to work without an external encoder; in 2127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi this case the new encoder simply replaces the old one (i.e. we unregister it first). */ 213694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pC->pVideoEncoderInterface[MediaType]); 2147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->pVideoEncoderInterface[MediaType] = M4OSA_NULL; 2157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 2167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* 2187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Save encoder interface in context */ 2197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->pVideoEncoderInterface[MediaType] = pEncGlobalInterface; 2207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* The actual userData and external API will be set by the registration function in the case 2217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi of an external encoder (add it as a parameter to this function in the long run?) */ 2227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->pVideoEncoderUserDataTable[MediaType] = M4OSA_NULL; 2237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->pVideoEncoderExternalAPITable[MediaType] = M4OSA_NULL; 2247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 2267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 2277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 2297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 2307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4MCS_registerAudioEncoder() 2317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief This function will register a specific audio encoder. 2327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note According to the Mediatype, this function will store in the internal context 2337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * the encoder context. 2347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pContext: (IN) Execution context. 2357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param mediaType: (IN) The media type. 2367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pEncGlobalInterface: (OUT) the encoder interface functions. 2377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR: there is no error 2387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER: pContext or pEncGlobalInterface is 2397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_NULL (debug only) 2407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************** 2417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 2427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4MCS_registerAudioEncoder( 2437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4MCS_Context pContext, 2447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4ENCODER_AudioFormat MediaType, 2457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4ENCODER_AudioGlobalInterface *pEncGlobalInterface) 2467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 2477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4MCS_InternalContext* pC = (M4MCS_InternalContext*)pContext; 2487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 2507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Check input parameters */ 2517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF2((pC == M4OSA_NULL),M4ERR_PARAMETER, 2527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "MCS: context is M4OSA_NULL in M4MCS_registerAudioEncoder"); 2537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF2((pEncGlobalInterface == M4OSA_NULL),M4ERR_PARAMETER, 2547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "pEncGlobalInterface is M4OSA_NULL in M4MCS_registerAudioEncoder"); 2557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_TRACE3_2("MCS: M4MCS_registerAudioEncoder called with pContext=0x%x,\ 2577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pEncGlobalInterface=0x%x", pC, pEncGlobalInterface); 2587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (MediaType >= M4ENCODER_kAudio_NB) 2607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 2617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1(M4OSA_TRUE, M4ERR_PARAMETER, "Invalid audio encoder type"); 2627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_PARAMETER; 2637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 2647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(M4OSA_NULL != pC->pAudioEncoderInterface[MediaType]) 2667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 267694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pC->pAudioEncoderInterface[MediaType]); 2687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->pAudioEncoderInterface[MediaType] = M4OSA_NULL; 2697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(M4OSA_NULL != pC->pAudioEncoderUserDataTable[MediaType]) 2717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 272694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pC->pAudioEncoderUserDataTable[MediaType]); 2737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->pAudioEncoderUserDataTable[MediaType] = M4OSA_NULL; 2747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 2757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 2767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* 2787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Save encoder interface in context */ 2797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->pAudioEncoderInterface[MediaType] = pEncGlobalInterface; 2807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->pAudioEncoderFlag[MediaType] = M4OSA_FALSE; /* internal encoder */ 2817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 2837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 2847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 2867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 2877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4MCS_registerReader() 2887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief Register reader. 2897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pContext (IN/OUT) MCS context. 2907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR: No error 2917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER: A parameter is null (in DEBUG only) 2927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 2937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 2947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4MCS_registerReader( 2957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4MCS_Context pContext, 2967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4READER_MediaType mediaType, 2977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4READER_GlobalInterface *pRdrGlobalInterface, 2987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4READER_DataInterface *pRdrDataInterface) 2997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 3007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4MCS_InternalContext* pC = (M4MCS_InternalContext*)pContext; 3017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((M4OSA_NULL == pC), M4ERR_PARAMETER, "invalid context pointer"); 3037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((M4OSA_NULL == pRdrGlobalInterface), 3047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4ERR_PARAMETER, "M4MCS_registerReader: invalid pointer on global interface"); 3057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((M4OSA_NULL == pRdrDataInterface), 3067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4ERR_PARAMETER, "M4MCS_registerReader: invalid pointer on data interface"); 3077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (mediaType == M4READER_kMediaTypeUnknown || mediaType >= M4READER_kMediaType_NB) 3097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1(M4OSA_TRUE, M4ERR_PARAMETER, "Invalid media type"); 3117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_PARAMETER; 3127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (pC->m_pReaderGlobalItTable[mediaType] != M4OSA_NULL) 3157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* a reader corresponding to this media type has already been registered !*/ 3177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1(M4OSA_TRUE, M4ERR_PARAMETER, "This media type has already been registered"); 3187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_PARAMETER; 3197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pReaderGlobalItTable[mediaType] = pRdrGlobalInterface; 3227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pReaderDataItTable[mediaType] = pRdrDataInterface; 3237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_uiNbRegisteredReaders++; 3257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 3277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 3287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 3307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 3317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4MCS_registerVideoDecoder() 3327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief Register video decoder 3337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pContext (IN/OUT) MCS context. 3347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param decoderType (IN) Decoder type 3357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pDecoderInterface (IN) Decoder interface. 3367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR: No error 3377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER: A parameter is null (in DEBUG only), or the decoder 3387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * type is invalid 3397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 3407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 3417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4MCS_registerVideoDecoder( 3427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4MCS_Context pContext, 3437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4DECODER_VideoType decoderType, 3447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4DECODER_VideoInterface *pDecoderInterface) 3457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 3467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4MCS_InternalContext* pC = (M4MCS_InternalContext*)pContext; 3477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((M4OSA_NULL == pC), M4ERR_PARAMETER, "invalid context pointer"); 3497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((M4OSA_NULL == pDecoderInterface), M4ERR_PARAMETER, 3507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "M4MCS_registerVideoDecoder: invalid pointer on decoder interface"); 3517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (decoderType >= M4DECODER_kVideoType_NB) 3537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1(M4OSA_TRUE, M4ERR_PARAMETER, "Invalid video decoder type"); 3557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_PARAMETER; 3567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (pC->m_pVideoDecoderItTable[decoderType] != M4OSA_NULL) 3597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifndef M4VSS_ENABLE_EXTERNAL_DECODERS 3617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* a decoder corresponding to this media type has already been registered !*/ 3627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1(M4OSA_TRUE, M4ERR_PARAMETER, "Decoder has already been registered"); 3637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_PARAMETER; 3647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#else /* external decoders are possible */ 3657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* can be legitimate, in cases where we have one version that can use external decoders 3667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi but which still has the built-in one to be able to work without an external decoder; in 3677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi this case the new decoder simply replaces the old one (i.e. we unregister it first). */ 368694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pC->m_pVideoDecoderItTable[decoderType]); 3697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pVideoDecoderItTable[decoderType] = M4OSA_NULL; 3707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* oh, and don't forget the user data, too. */ 3717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (pC->m_pVideoDecoderUserDataTable[decoderType] != M4OSA_NULL) 3727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 373694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pC->m_pVideoDecoderUserDataTable[decoderType]); 3747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pVideoDecoderUserDataTable[decoderType] = M4OSA_NULL; 3757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif /* are external decoders possible? */ 3777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pVideoDecoderItTable[decoderType] = pDecoderInterface; 3807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef M4VSS_ENABLE_EXTERNAL_DECODERS 3817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pVideoDecoderUserDataTable[decoderType] = M4OSA_NULL; 3827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* The actual userData will be set by the registration function in the case 3837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi of an external decoder (add it as a parameter to this function in the long run?) */ 3847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif /* M4VSS_ENABLE_EXTERNAL_DECODERS */ 3857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_uiNbRegisteredVideoDec++; 3867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 3887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 3897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 3917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 3927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4MCS_registerAudioDecoder() 3937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief Register audio decoder 3947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note This function is used internaly by the MCS to 3957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * register audio decoders, 3967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param context (IN/OUT) MCS context. 3977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param decoderType (IN) Audio decoder type 3987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pDecoderInterface (IN) Audio decoder interface. 3997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR: No error 4007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER: A parameter is null, or the decoder type is invalid(in DEBUG only) 4017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 4027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 4037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4MCS_registerAudioDecoder( 4047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4MCS_Context pContext, 4057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4AD_Type decoderType, 4067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4AD_Interface *pDecoderInterface) 4077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 4087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4MCS_InternalContext* pC = (M4MCS_InternalContext*)pContext; 4097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((M4OSA_NULL == pC), M4ERR_PARAMETER, "invalid context pointer"); 4117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((M4OSA_NULL == pDecoderInterface), M4ERR_PARAMETER, 4127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "M4MCS_registerAudioDecoder: invalid pointer on decoder interface"); 4137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (decoderType >= M4AD_kType_NB) 4157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 4167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1(M4OSA_TRUE, M4ERR_PARAMETER, "Invalid audio decoder type"); 4177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_PARAMETER; 4187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(M4OSA_NULL != pC->m_pAudioDecoderItTable[decoderType]) 4217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 422694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pC->m_pAudioDecoderItTable[decoderType]); 4237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pAudioDecoderItTable[decoderType] = M4OSA_NULL; 4247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(M4OSA_NULL != pC->m_pAudioDecoderUserDataTable[decoderType]) 4267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 427694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pC->m_pAudioDecoderUserDataTable[decoderType]); 4287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pAudioDecoderUserDataTable[decoderType] = M4OSA_NULL; 4297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pAudioDecoderItTable[decoderType] = pDecoderInterface; 4327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pAudioDecoderFlagTable[decoderType] = M4OSA_FALSE; /* internal decoder */ 4337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 4357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 4367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 4387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 4397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4MCS_unRegisterAllWriters() 4407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief Unregister writer 4417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pContext (IN/OUT) MCS context. 4427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR: No error 4437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER: A parameter is null (in DEBUG only) 4447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 4457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 4467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4MCS_unRegisterAllWriters(M4MCS_Context pContext) 4477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 4487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4MCS_InternalContext* pC = (M4MCS_InternalContext*)pContext; 4497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Int32 i; 4507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((M4OSA_NULL == pC), M4ERR_PARAMETER, "invalid context pointer"); 4527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for (i = 0; i < M4WRITER_kType_NB; i++) 4547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 4557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (pC->WriterInterface[i].pGlobalFcts != M4OSA_NULL) 4567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 457694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pC->WriterInterface[i].pGlobalFcts ); 4587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->WriterInterface[i].pGlobalFcts = M4OSA_NULL; 4597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (pC->WriterInterface[i].pDataFcts != M4OSA_NULL) 4617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 462694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pC->WriterInterface[i].pDataFcts ); 4637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->WriterInterface[i].pDataFcts = M4OSA_NULL; 4647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->pWriterGlobalFcts = M4OSA_NULL; 4687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->pWriterDataFcts = M4OSA_NULL; 4697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 4717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 4727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 4747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 4757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4MCS_unRegisterAllEncoders() 4767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief Unregister the encoders 4777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pContext (IN/OUT) MCS context. 4787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR: No error 4797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER: A parameter is null (in DEBUG only) 4807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 4817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 4827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4MCS_unRegisterAllEncoders(M4MCS_Context pContext) 4837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 4847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4MCS_InternalContext* pC = (M4MCS_InternalContext*)pContext; 4857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Int32 i; 4867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((M4OSA_NULL == pC), M4ERR_PARAMETER, "invalid context pointer"); 4887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for (i = 0; i < M4ENCODER_kVideo_NB; i++) 4907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 4917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (pC->pVideoEncoderInterface[i] != M4OSA_NULL) 4927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 493694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pC->pVideoEncoderInterface[i] ); 4947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->pVideoEncoderInterface[i] = M4OSA_NULL; 4957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for (i = 0; i < M4ENCODER_kAudio_NB; i++) 4997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 5007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (pC->pAudioEncoderInterface[i] != M4OSA_NULL) 5017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 5027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*Don't free external audio encoders interfaces*/ 5037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_FALSE == pC->pAudioEncoderFlag[i]) 5047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 505694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pC->pAudioEncoderInterface[i] ); 5067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 5077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->pAudioEncoderInterface[i] = M4OSA_NULL; 5087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 5097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 5107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->pVideoEncoderGlobalFcts = M4OSA_NULL; 5127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->pAudioEncoderGlobalFcts = M4OSA_NULL; 5137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 5157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 5167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 5187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 5197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4MCS_unRegisterAllReaders() 5207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief Unregister reader 5217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pContext (IN/OUT) MCS context. 5227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR: No error 5237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER: A parameter is null (in DEBUG only) 5247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 5257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 5267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4MCS_unRegisterAllReaders(M4MCS_Context pContext) 5277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 5287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4MCS_InternalContext* pC = (M4MCS_InternalContext*)pContext; 5297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Int32 i; 5307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((M4OSA_NULL == pC), M4ERR_PARAMETER, "invalid context pointer"); 5327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for (i = 0; i < M4READER_kMediaType_NB; i++) 5347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 5357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (pC->m_pReaderGlobalItTable[i] != M4OSA_NULL) 5367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 537694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pC->m_pReaderGlobalItTable[i] ); 5387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pReaderGlobalItTable[i] = M4OSA_NULL; 5397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 5407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (pC->m_pReaderDataItTable[i] != M4OSA_NULL) 5417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 542694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pC->m_pReaderDataItTable[i] ); 5437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pReaderDataItTable[i] = M4OSA_NULL; 5447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 5457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 5467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_uiNbRegisteredReaders = 0; 5487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pReader = M4OSA_NULL; 5497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pReaderDataIt = M4OSA_NULL; 5507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 5527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 5537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 5557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 5567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4MCS_unRegisterAllDecoders() 5577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief Unregister the decoders 5587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pContext (IN/OUT) MCS context. 5597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR: No error 5607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER: A parameter is null (in DEBUG only) 5617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 5627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 5637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4MCS_unRegisterAllDecoders(M4MCS_Context pContext) 5647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 5657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4MCS_InternalContext* pC = (M4MCS_InternalContext*)pContext; 5667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Int32 i; 5677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((M4OSA_NULL == pC), M4ERR_PARAMETER, "invalid context pointer"); 5697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for (i = 0; i < M4DECODER_kVideoType_NB; i++) 5717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 5727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (pC->m_pVideoDecoderItTable[i] != M4OSA_NULL) 5737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 574694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pC->m_pVideoDecoderItTable[i] ); 5757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pVideoDecoderItTable[i] = M4OSA_NULL; 5767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 5777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 5787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for (i = 0; i < M4AD_kType_NB; i++) 5807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 5817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (pC->m_pAudioDecoderItTable[i] != M4OSA_NULL) 5827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 5837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /*Don't free external audio decoders interfaces*/ 5847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_FALSE == pC->m_pAudioDecoderFlagTable[i]) 5857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 586694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pC->m_pAudioDecoderItTable[i] ); 5877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 5887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pAudioDecoderItTable[i] = M4OSA_NULL; 5897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 5907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 5917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_uiNbRegisteredVideoDec = 0; 5937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pVideoDecoder = M4OSA_NULL; 5947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pAudioDecoder = M4OSA_NULL; 5967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 5987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 5997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 6017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 6027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4MCS_setCurrentWriter() 6037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief Set current writer 6047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pContext (IN/OUT) MCS context. 6057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param mediaType (IN) Media type. 6067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR: No error 6077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER: A parameter is null (in DEBUG only) 6087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4WAR_MCS_MEDIATYPE_NOT_SUPPORTED: Media type not supported 6097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 6107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 6117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4MCS_setCurrentWriter( M4MCS_Context pContext, 6127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIDEOEDITING_FileType mediaType) 6137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 6147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4MCS_InternalContext* pC = (M4MCS_InternalContext*)pContext; 6157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4WRITER_OutputFileType writerType; 6167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((M4OSA_NULL == pC), M4ERR_PARAMETER, "invalid context pointer"); 6187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi switch (mediaType) 6207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 6217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_kFileType_3GPP: 6227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_kFileType_MP4: 623e1f105895f913b19ad848cc90a3cd57dad657abfDharmaray Kundargi case M4VIDEOEDITING_kFileType_M4V: 6247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi writerType = M4WRITER_k3GPP; 6257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 6267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_kFileType_AMR: 6277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi writerType = M4WRITER_kAMR; 6287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 6297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_kFileType_MP3: 6307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi writerType = M4WRITER_kMP3; 6317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 6327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_kFileType_PCM: 6337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->b_isRawWriter = M4OSA_TRUE; 6347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi writerType = M4WRITER_kPCM; 6357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 6367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi default: 6377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1(M4OSA_TRUE, M4MCS_WAR_MEDIATYPE_NOT_SUPPORTED, 6387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "Writer type not supported"); 6397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4MCS_WAR_MEDIATYPE_NOT_SUPPORTED; 6407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 6417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->pWriterGlobalFcts = pC->WriterInterface[writerType].pGlobalFcts; 6437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->pWriterDataFcts = pC->WriterInterface[writerType].pDataFcts; 6447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (pC->pWriterGlobalFcts == M4OSA_NULL || pC->pWriterDataFcts == M4OSA_NULL) 6467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 6477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1(M4OSA_TRUE, M4MCS_WAR_MEDIATYPE_NOT_SUPPORTED, 6487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "Writer type not supported"); 6497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4MCS_WAR_MEDIATYPE_NOT_SUPPORTED; 6507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 6517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->pWriterDataFcts->pWriterContext = M4OSA_NULL; 6537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 6557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 6567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 6587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 6597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4MCS_setCurrentVideoEncoder() 6607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief Set a video encoder 6617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pContext (IN/OUT) MCS context. 6627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param MediaType (IN) Encoder type 6637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR: No error 6647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER: A parameter is null (in DEBUG only) 6657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4WAR_MCS_MEDIATYPE_NOT_SUPPORTED: Media type not supported 6667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 6677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 6687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4MCS_setCurrentVideoEncoder( 6697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4MCS_Context pContext, 6707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIDEOEDITING_VideoFormat mediaType) 6717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 6727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4MCS_InternalContext* pC = (M4MCS_InternalContext*)pContext; 6737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4ENCODER_Format encoderType; 6747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((M4OSA_NULL == pC), M4ERR_PARAMETER, "invalid context pointer"); 6767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi switch (mediaType) 6787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 6797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_kH263: 6807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi encoderType = M4ENCODER_kH263; 6817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 6827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_kMPEG4: 6837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi encoderType = M4ENCODER_kMPEG4; 6847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 6857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_kH264: 6867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef M4VSS_SUPPORT_ENCODER_AVC 6877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi encoderType = M4ENCODER_kH264; 6887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 6897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif 6907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi default: 6917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1(M4OSA_TRUE, M4MCS_WAR_MEDIATYPE_NOT_SUPPORTED, 6927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "Video encoder type not supported"); 6937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4MCS_WAR_MEDIATYPE_NOT_SUPPORTED; 6947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 6957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->pVideoEncoderGlobalFcts = pC->pVideoEncoderInterface[encoderType]; 6977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->pCurrentVideoEncoderExternalAPI = pC->pVideoEncoderExternalAPITable[encoderType]; 6987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->pCurrentVideoEncoderUserData = pC->pVideoEncoderUserDataTable[encoderType]; 6997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (pC->pVideoEncoderGlobalFcts == M4OSA_NULL) 7017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 7027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1(M4OSA_TRUE, M4MCS_WAR_MEDIATYPE_NOT_SUPPORTED, 7037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "Video encoder type not supported"); 7047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4MCS_WAR_MEDIATYPE_NOT_SUPPORTED; 7057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 7067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 7087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 7097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 7117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 7127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4MCS_setCurrentAudioEncoder() 7137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief Set an audio encoder 7147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param context (IN/OUT) MCS context. 7157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param MediaType (IN) Encoder type 7167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR: No error 7177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER: A parameter is null (in DEBUG only) 7187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 7197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 7207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4MCS_setCurrentAudioEncoder( 7217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4MCS_Context pContext, 7227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIDEOEDITING_AudioFormat mediaType) 7237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 7247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4MCS_InternalContext* pC = (M4MCS_InternalContext*)pContext; 7257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4ENCODER_AudioFormat encoderType; 7267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((M4OSA_NULL == pC), M4ERR_PARAMETER, "invalid context pointer"); 7287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi switch (mediaType) 7307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 7317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_kAMR_NB: 7327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi encoderType = M4ENCODER_kAMRNB; 7337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 7347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_kAAC: 7357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi encoderType = M4ENCODER_kAAC; 7367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 7377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_kMP3: 7387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi encoderType = M4ENCODER_kMP3; 7397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 7407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi//EVRC 7417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi// case M4VIDEOEDITING_kEVRC: 7427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi// encoderType = M4ENCODER_kEVRC; 7437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi// break; 7447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi default: 7457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1(M4OSA_TRUE, M4MCS_WAR_MEDIATYPE_NOT_SUPPORTED, 7467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "Audio encoder type not supported"); 7477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4MCS_WAR_MEDIATYPE_NOT_SUPPORTED; 7487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 7497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->pAudioEncoderGlobalFcts = pC->pAudioEncoderInterface[encoderType]; 7517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->pCurrentAudioEncoderUserData = pC->pAudioEncoderUserDataTable[encoderType]; 7527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (pC->pAudioEncoderGlobalFcts == M4OSA_NULL) 7547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 7557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1(M4OSA_TRUE, M4MCS_WAR_MEDIATYPE_NOT_SUPPORTED, 7567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "Audio encoder type not supported"); 7577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4MCS_WAR_MEDIATYPE_NOT_SUPPORTED; 7587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 7597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 7617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 7627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 7647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 7657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4MCS_setCurrentReader() 7667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief Set current reader 7677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pContext (IN/OUT) MCS context. 7687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param mediaType (IN) Media type. 7697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR: No error 7707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER: A parameter is null (in DEBUG only) 7717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4WAR_MCS_MEDIATYPE_NOT_SUPPORTED: Media type not supported 7727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 7737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 7747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4MCS_setCurrentReader( M4MCS_Context pContext, 7757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VIDEOEDITING_FileType mediaType) 7767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 7777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4MCS_InternalContext* pC = (M4MCS_InternalContext*)pContext; 7787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4READER_MediaType readerType; 7797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((M4OSA_NULL == pC), M4ERR_PARAMETER, "invalid context pointer"); 7817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 7827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi switch (mediaType) 7837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 7847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_kFileType_3GPP: 7857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_kFileType_MP4: 786e1f105895f913b19ad848cc90a3cd57dad657abfDharmaray Kundargi case M4VIDEOEDITING_kFileType_M4V: 7877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi readerType = M4READER_kMediaType3GPP; 7887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 7897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_kFileType_AMR: 7907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi readerType = M4READER_kMediaTypeAMR; 7917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 7927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4VIDEOEDITING_kFileType_MP3: 7937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi readerType = M4READER_kMediaTypeMP3; 7947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 7957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi default: 7967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1(M4OSA_TRUE, M4MCS_WAR_MEDIATYPE_NOT_SUPPORTED, 7977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "Reader type not supported"); 7987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4MCS_WAR_MEDIATYPE_NOT_SUPPORTED; 7997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 8007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 8017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pReader = pC->m_pReaderGlobalItTable[readerType]; 8027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pReaderDataIt = pC->m_pReaderDataItTable[readerType]; 8037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 8047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (pC->m_pReader == M4OSA_NULL || pC->m_pReaderDataIt == M4OSA_NULL) 8057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 8067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1(M4OSA_TRUE, M4MCS_WAR_MEDIATYPE_NOT_SUPPORTED, 8077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "Reader type not supported"); 8087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4MCS_WAR_MEDIATYPE_NOT_SUPPORTED; 8097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 8107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 8117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 8127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 8137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 8147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 8157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4MCS_setCurrentVideoDecoder() 8167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief Set a video decoder 8177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pContext (IN/OUT) MCS context. 8187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param decoderType (IN) Decoder type 8197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR: No error 8207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER: A parameter is null (in DEBUG only) 8217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4WAR_MCS_MEDIATYPE_NOT_SUPPORTED: Media type not supported 8227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 8237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 8247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4MCS_setCurrentVideoDecoder( M4MCS_Context pContext, 8257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4_StreamType mediaType) 8267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 8277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4MCS_InternalContext* pC = (M4MCS_InternalContext*)pContext; 8287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4DECODER_VideoType decoderType; 8297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 8307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((M4OSA_NULL == pC), M4ERR_PARAMETER, "invalid context pointer"); 8317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 8327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi switch (mediaType) 8337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 8347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4DA_StreamTypeVideoMpeg4: 8357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4DA_StreamTypeVideoH263: 8367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi decoderType = M4DECODER_kVideoTypeMPEG4; 8377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 8387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4DA_StreamTypeVideoMpeg4Avc: 8397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi decoderType = M4DECODER_kVideoTypeAVC; 8407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 8417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi default: 8427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1(M4OSA_TRUE, M4MCS_WAR_MEDIATYPE_NOT_SUPPORTED, 8437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "Video decoder type not supported"); 8447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4MCS_WAR_MEDIATYPE_NOT_SUPPORTED; 8457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 8467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 8477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pVideoDecoder = pC->m_pVideoDecoderItTable[decoderType]; 8487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef M4VSS_ENABLE_EXTERNAL_DECODERS 8497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pCurrentVideoDecoderUserData = 8507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pVideoDecoderUserDataTable[decoderType]; 8517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif /* M4VSS_ENABLE_EXTERNAL_DECODERS */ 8527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 8537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (pC->m_pVideoDecoder == M4OSA_NULL) 8547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 8557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1(M4OSA_TRUE, M4MCS_WAR_MEDIATYPE_NOT_SUPPORTED, 8567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "Video decoder type not supported"); 8577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4MCS_WAR_MEDIATYPE_NOT_SUPPORTED; 8587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 8597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 8607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 8617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 8627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 8637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 8647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 8657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_ERR M4MCS_setCurrentAudioDecoder() 8667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief Set an audio decoder 8677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param context (IN/OUT) MCS context. 8687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param decoderType (IN) Decoder type 8697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4NO_ERROR: No error 8707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return M4ERR_PARAMETER: A parameter is null (in DEBUG only) 8717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 8727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 8737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4MCS_setCurrentAudioDecoder( M4MCS_Context pContext, 8747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4_StreamType mediaType) 8757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 8767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4MCS_InternalContext* pC = (M4MCS_InternalContext*)pContext; 8777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4AD_Type decoderType; 8787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 8797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1((M4OSA_NULL == pC), M4ERR_PARAMETER, "invalid context pointer"); 8807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 8817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi switch (mediaType) 8827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 8837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4DA_StreamTypeAudioAmrNarrowBand: 8847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi decoderType = M4AD_kTypeAMRNB; 8857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 8867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4DA_StreamTypeAudioAac: 8877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4DA_StreamTypeAudioAacADTS: 8887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4DA_StreamTypeAudioAacADIF: 8897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi decoderType = M4AD_kTypeAAC; 8907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 8917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case M4DA_StreamTypeAudioMp3: 8927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi decoderType = M4AD_kTypeMP3; 8937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 8947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi//EVRC 8957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi// case M4DA_StreamTypeAudioEvrc: 8967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi// decoderType = M4AD_kTypeEVRC; 8977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi// break; 8987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi default: 8997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1(M4OSA_TRUE, M4MCS_WAR_MEDIATYPE_NOT_SUPPORTED, 9007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "Audio decoder type not supported"); 9017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4MCS_WAR_MEDIATYPE_NOT_SUPPORTED; 9027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 9037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 9047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pAudioDecoder = pC->m_pAudioDecoderItTable[decoderType]; 9057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pCurrentAudioDecoderUserData = 9067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pC->m_pAudioDecoderUserDataTable[decoderType]; 9077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 9087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (pC->m_pAudioDecoder == M4OSA_NULL) 9097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 9107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_DEBUG_IF1(M4OSA_TRUE, M4MCS_WAR_MEDIATYPE_NOT_SUPPORTED, 9117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi "Audio decoder type not supported"); 9127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4MCS_WAR_MEDIATYPE_NOT_SUPPORTED; 9137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 9147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 9157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 9167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 9177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 918