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