khronosfws/openmax_al/src/mediaplayer/xamediaplayer.c
branchRCL_3
changeset 20 0ac9a5310753
parent 19 095bea5f582e
child 21 999b2818a0eb
--- a/khronosfws/openmax_al/src/mediaplayer/xamediaplayer.c	Tue Aug 31 15:43:02 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,620 +0,0 @@
-/*
- * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of "Eclipse Public License v1.0"
- * which accompanies this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html".
- *
- * Initial Contributors:
- * Nokia Corporation - initial contribution.
- *
- * Contributors:
- *
- * Description: Media Player Object Implementation
- *
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-#include "xamediaplayer.h"
-#include "xaplayitf.h"
-#include "xaseekitf.h"
-#include "xaprefetchstatusitf.h"
-#include "xadynintmgmtitf.h"
-#include "xavolumeitf.h"
-#include "xametadataextractionitf.h"
-#include "xaplaybackrateitf.h"
-#include "xaconfigextensionsitf.h"
-#include "xathreadsafety.h"
-#include "xametadataadaptation.h"
-#include "xacapabilitiesmgr.h"
-#include "xadynamicsourceitf.h"
-#include "xastreaminformationitf.h"
-#include "xanlinearvolumeitf.h"
-#include "xanvolumeextitf.h"
-
-extern void* vfHandle;
-
-/* Static mapping of enumeration XAMediaPlayerInterfaces to interface iids */
-static const XAInterfaceID* xaMediaPlayerItfIIDs[MP_ITFCOUNT] =
-    {
-    &XA_IID_OBJECT,
-    &XA_IID_DYNAMICINTERFACEMANAGEMENT,
-    &XA_IID_PLAY,
-    &XA_IID_SEEK,
-    &XA_IID_VOLUME,
-    &XA_IID_PREFETCHSTATUS,
-    &XA_IID_CONFIGEXTENSION,
-    &XA_IID_DYNAMICSOURCE,
-    &XA_IID_METADATAEXTRACTION,
-    &XA_IID_PLAYBACKRATE,
-    &XA_IID_NOKIAVOLUMEEXT,
-    &XA_IID_NOKIALINEARVOLUME,
-    &XA_IID_STREAMINFORMATION
-    };
-
-/* Global methods */
-
-/* XAResult XAMediaPlayerImpl_CreateMediaPlayer
- * Create object
- */
-XAresult XAMediaPlayerImpl_CreateMediaPlayer(FrameworkMap* mapper,
-        XACapabilities* capabilities, XAObjectItf *pPlayer,
-        XADataSource *pDataSrc, XADataSource *pBankSrc,
-        XADataSink *pAudioSnk, XADataSink *pImageVideoSnk,
-        XADataSink *pVibra, XADataSink *pLEDArray, XAuint32 numInterfaces,
-        const XAInterfaceID *pInterfaceIds,
-        const XAboolean *pInterfaceRequired)
-    {
-    XAuint8 itfIdx = 0;
-    XAMediaType mediaType = XA_MEDIATYPE_UNKNOWN;
-    XAMediaPlayerImpl* pPlayerImpl = NULL;
-    FWMgrFwType fwType;
-    XAObjectItfImpl* pBaseObj = NULL;
-    const char *uri = NULL;
-    XAresult ret = XA_RESULT_SUCCESS;
-    XADataLocator_IODevice* tmpIODevice;
-    XADataLocator_IODevice locatorIODevice;
-
-    DEBUG_API("->XAMediaPlayerImpl_CreateMediaPlayer");
-
-    XA_IMPL_THREAD_SAFETY_ENTRY(XATSMediaPlayer);
-
-    if (!pPlayer || !pDataSrc)
-        {
-        XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer);
-        DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
-        DEBUG_API("<-XAMediaPlayerImpl_CreateMediaPlayer");
-        return XA_RESULT_PARAMETER_INVALID;
-        }
-    /* check sink&source parameters */
-    ret = XACommon_ValidateDataLocator(6, pAudioSnk, pImageVideoSnk,
-            pDataSrc, pBankSrc, pVibra, pLEDArray);
-    if (ret != XA_RESULT_SUCCESS)
-        {
-        XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer);
-        DEBUG_API("<-XAMediaPlayerImpl_CreateMediaPlayer");
-        return ret;
-        }
-    /* also, check source availability */
-    ret = XACommon_CheckDataSource(pDataSrc, &mediaType);
-    if (ret != XA_RESULT_SUCCESS)
-        {
-        XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer);
-        DEBUG_API("<-XAMediaPlayerImpl_CreateMediaPlayer");
-        return ret;
-        }
-
-    /* instantiate object */
-    pPlayerImpl = (XAMediaPlayerImpl*) calloc(1, sizeof(XAMediaPlayerImpl));
-    if (!pPlayerImpl)
-        {
-        /* memory allocation failed */
-        XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer);
-        DEBUG_API("<-XAMediaPlayerImpl_CreateMediaPlayer");
-        return XA_RESULT_MEMORY_FAILURE;
-        }
-    pBaseObj = &pPlayerImpl->baseObj;
-
-    /* Initialize base object default implementation */
-    XAObjectItfImpl_Init(pBaseObj, MP_ITFCOUNT, xaMediaPlayerItfIIDs,
-            XAMediaPlayerImpl_DoRealize, XAMediaPlayerImpl_DoResume,
-            XAMediaPlayerImpl_FreeResources);
-
-    /* Mark interfaces that need to be exposed */
-    /* Implicit and mandated interfaces */
-    pBaseObj->interfaceMap[MP_PLAYITF].required = XA_BOOLEAN_TRUE;
-    pBaseObj->interfaceMap[MP_DIMITF].required = XA_BOOLEAN_TRUE;
-
-    /* Explicit interfaces */
-    if ((numInterfaces != 0) && pInterfaceIds && pInterfaceRequired)
-        {
-        /* Check required interfaces */
-        for (itfIdx = 0; itfIdx < numInterfaces; itfIdx++)
-            {
-            /* If mapEntry is null then required interface is not supported.*/
-            XAObjItfMapEntry *entry = XAObjectItfImpl_GetItfEntry(
-                    (XAObjectItf) &(pBaseObj), pInterfaceIds[itfIdx]);
-            if (!entry)
-                {
-                if (pInterfaceRequired[itfIdx])
-                    {
-                    /* required interface cannot be accommodated - fail creation */
-                    DEBUG_ERR("Required interface not found - abort creation!");
-                    ret = XA_RESULT_FEATURE_UNSUPPORTED;
-                    break;
-                    }
-                else
-                    {
-                    DEBUG_INFO("Requested (not required) interface not found - continue creation");
-                    }
-                }
-            else
-                { /* weed out unsupported content-aware itf's */
-                if ((mediaType == XA_MEDIATYPE_IMAGE && (entry->mapIdx == MP_SEEKITF 
-                        || entry->mapIdx == MP_VOLUMEITF)))
-                    {
-                    entry->required = XA_BOOLEAN_FALSE;
-                    if (pInterfaceRequired[itfIdx])
-                        {
-                        DEBUG_ERR("Required interface not supported for given media - abort creation!");
-                        ret = XA_RESULT_FEATURE_UNSUPPORTED;
-                        break;
-                        }
-                    }
-                else
-                    {
-                    entry->required = XA_BOOLEAN_TRUE;
-                    }
-                }
-            }
-        }
-
-    if (ret != XA_RESULT_SUCCESS)
-        { /* creation fails */
-        XAObjectItfImpl_Destroy((XAObjectItf) &(pBaseObj));
-        return ret;
-        }
-
-    /* Mark interfaces that can be handled dynamically */
-    /* Mandated dynamic itfs */
-    pBaseObj->interfaceMap[MP_METADATAEXTRACTIONITF].isDynamic
-            = XA_BOOLEAN_TRUE;
-    pBaseObj->interfaceMap[MP_PLAYBACKRATEITF].isDynamic = XA_BOOLEAN_TRUE;
-
-    /*Set ObjectItf to point to newly created object*/
-    *pPlayer = (XAObjectItf) &(pBaseObj->self);
-
-    /*initialize XAPlayerImpl variables */
-
-    pPlayerImpl->dataSrc = pDataSrc;
-    pPlayerImpl->bankSrc = pBankSrc;
-    pPlayerImpl->audioSnk = pAudioSnk;
-    pPlayerImpl->imageVideoSnk = pImageVideoSnk;
-    pPlayerImpl->vibra = pVibra;
-    pPlayerImpl->LEDArray = pLEDArray;
-
-    // Handle possible radio:      
-    tmpIODevice = (XADataLocator_IODevice*) (pPlayerImpl->dataSrc->pLocator);
-    locatorIODevice = *tmpIODevice;
-    if (locatorIODevice.deviceType == XA_IODEVICE_RADIO)
-        {
-        fwType = (FWMgrFwType) FWMgrFWMMF;
-        }
-    else
-        {
-        /* Determine framework type that can handle recording */
-        fwType = (FWMgrFwType) FWMgrMOUnknown;
-        /**/
-        if (pDataSrc->pLocator)
-            {
-            XADataLocator_URI* dataLoc =
-                    (XADataLocator_URI*) pDataSrc->pLocator;
-            if (dataLoc->locatorType == XA_DATALOCATOR_URI)
-                {
-                uri = (char*) dataLoc->URI;
-                }
-            }
-        fwType = XAFrameworkMgr_GetFramework(mapper, uri, FWMgrMOPlayer);
-
-        if (fwType == FWMgrMOUnknown)
-            {
-            ret = XA_RESULT_CONTENT_UNSUPPORTED;
-            XAObjectItfImpl_Destroy((XAObjectItf) &(pBaseObj));
-            XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
-            DEBUG_API("<-XAMediaPlayerImpl_CreateMediaPlayer");
-            return ret;
-            }
-        } // end else
-
-    if (fwType == FWMgrFWMMF)
-        {
-        pPlayerImpl->adaptationCtxMMF = XAMediaPlayerAdaptMMF_Create(
-                pPlayerImpl->dataSrc, pPlayerImpl->bankSrc,
-                pPlayerImpl->audioSnk, pPlayerImpl->imageVideoSnk,
-                pPlayerImpl->vibra, pPlayerImpl->LEDArray);
-
-        pPlayerImpl->curAdaptCtx = pPlayerImpl->adaptationCtxMMF;
-        }
-
-    pPlayerImpl->curAdaptCtx->capslist = capabilities;
-    pPlayerImpl->curAdaptCtx->fwtype = fwType;
-
-    XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
-    DEBUG_API("<-XAMediaPlayerImpl_CreateMediaPlayer");
-    return XA_RESULT_SUCCESS;
-    }
-
-/* XAResult XAMediaPlayerImpl_QueryNumSupportedInterfaces
- * Statically query supported interfaces
- */
-XAresult XAMediaPlayerImpl_QueryNumSupportedInterfaces(
-        XAuint32 * pNumSupportedInterfaces)
-    {
-    DEBUG_API("->XAMediaPlayerImpl_QueryNumSupportedInterfaces");
-
-    if (pNumSupportedInterfaces)
-        {
-        *pNumSupportedInterfaces = MP_ITFCOUNT;
-        DEBUG_API("<-XAMediaPlayerImpl_QueryNumSupportedInterfaces");
-        return XA_RESULT_SUCCESS;
-        }
-    else
-        {
-        DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
-        DEBUG_API("<-XAMediaPlayerImpl_QueryNumSupportedInterfaces");
-        return XA_RESULT_PARAMETER_INVALID;
-        }
-    }
-
-/* XAResult XAMediaPlayerImpl_QuerySupportedInterfaces
- * Statically query supported interfaces
- */
-XAresult XAMediaPlayerImpl_QuerySupportedInterfaces(XAuint32 index,
-        XAInterfaceID * pInterfaceId)
-    {
-    DEBUG_API("->XAMediaPlayerImpl_QuerySupportedInterfaces");
-
-    if (index >= MP_ITFCOUNT || !pInterfaceId)
-        {
-        if (pInterfaceId)
-            {
-            *pInterfaceId = XA_IID_NULL;
-            }DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
-            DEBUG_API("<-XAMediaPlayerImpl_QuerySupportedInterfaces");
-        return XA_RESULT_PARAMETER_INVALID;
-        }
-    else
-        {
-        *pInterfaceId = *(xaMediaPlayerItfIIDs[index]);
-        DEBUG_API("<-XAMediaPlayerImpl_QuerySupportedInterfaces");
-        return XA_RESULT_SUCCESS;
-        }
-    }
-
-/*
- * Realize the object
- */
-XAresult XAMediaPlayerImpl_DoRealize(XAObjectItf self)
-    {
-    XAObjectItfImpl* pObj = (XAObjectItfImpl*) (*self);
-    XAMediaPlayerImpl* pImpl = (XAMediaPlayerImpl*) (pObj);
-    XAuint8 itfIdx = 0;
-    void *pItf = NULL;
-    XAresult ret = XA_RESULT_SUCCESS;
-
-    DEBUG_API("->XAMediaPlayerImpl_DoRealize");
-    XA_IMPL_THREAD_SAFETY_ENTRY( XATSMediaPlayer );
-
-    /* check casting from correct pointer type */
-    if (!pImpl || pObj != pImpl->baseObj.self)
-        {
-        /* invalid parameter */
-        XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
-        DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
-        DEBUG_API("<-XAMediaPlayerImpl_DoRealize");
-        return XA_RESULT_PARAMETER_INVALID;
-        }
-
-    /* Realize all implicit and explicitly wanted interfaces */
-    for (itfIdx = 0; itfIdx < MP_ITFCOUNT; itfIdx++)
-        {
-        if (!(pObj->interfaceMap[itfIdx].pItf)
-                && pObj->interfaceMap[itfIdx].required)
-            {
-            switch (itfIdx)
-                {
-                case MP_DIMITF:
-                    pItf = XADIMItfImpl_Create();
-                    if (pItf)
-                        {
-                        XADIMItfImpl_Init(pItf, self,
-                                XAMediaPlayerImpl_DoAddItf,
-                                XAMediaPlayerImpl_DoResumeItf,
-                                XAMediaPlayerImpl_DoRemoveItf);
-                        }
-                    break;
-                case MP_PLAYITF:
-                    pItf = XAPlayItfImpl_Create(pImpl);
-                    if (pImpl->dataSrc)
-                        {
-                        XAuint32 locType =
-                                *((XAuint32*) (pImpl->dataSrc->pLocator));
-                        if (locType == XA_DATALOCATOR_IODEVICE)
-                            {
-                            XADataLocator_IODevice
-                                    *ioDevice =
-                                            (XADataLocator_IODevice*) (pImpl->dataSrc->pLocator);
-                            if (ioDevice->deviceType == XA_IODEVICE_CAMERA)
-                                {
-                                vfHandle = (void*) pItf;
-                                DEBUG_INFO_A1("Stored view finder pointer to global address %x", vfHandle);
-                                }
-                            }
-                        else
-                            {
-
-                            }
-                        }
-                    break;
-                case MP_VOLUMEITF:
-                    pItf = XAVolumeItfImpl_Create(pImpl->curAdaptCtx);
-                    break;
-                case MP_SEEKITF:
-                    pItf = XASeekItfImpl_Create(pImpl);
-                    break;
-                case MP_PREFETCHSTATUSITF:
-                    pItf = XAPrefetchStatusItfImpl_Create(pImpl);
-                    break;
-                case MP_METADATAEXTRACTIONITF:
-                    pItf = XAMetadataExtractionItfImpl_Create(
-                            pImpl->curAdaptCtx);
-                    break;
-                case MP_PLAYBACKRATEITF:
-                    pItf = XAPlaybackRateItfImpl_Create(pImpl);
-                    break;
-                case MP_CONFIGEXTENSIONITF:
-                    pItf = XAConfigExtensionsItfImpl_Create();
-                    XAConfigExtensionsItfImpl_SetContext(pItf,
-                            pImpl->curAdaptCtx);
-                    break;
-                case MP_DYNAMICSOURCEITF:
-                    pItf = XADynamicSourceItfImpl_Create(pImpl->curAdaptCtx);
-                    break;
-                case MP_NOKIAVOLUMEEXT:
-                    pItf = XANokiaVolumeExtItfImpl_Create(pImpl->curAdaptCtx);
-                    break;
-                case MP_NOKIALINEARVOLUME:
-                    pItf = XANokiaLinearVolumeItfImpl_Create(
-                            pImpl->curAdaptCtx);
-                    break;
-                case MP_STREAMINFORMATIONITF:
-                    pItf = XAStreamInformationItfImpl_Create(
-                            pImpl->curAdaptCtx);
-                    break;
-                default:
-                    break;
-                }
-            if (!pItf)
-                {
-                /* Memory allocation failed */
-                XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
-                DEBUG_ERR("XA_RESULT_MEMORY_FAILURE");
-                DEBUG_API("<-XAMediaPlayerImpl_DoRealize");
-                return XA_RESULT_MEMORY_FAILURE;
-                }
-            else
-                {
-                pObj->interfaceMap[itfIdx].pItf = pItf;
-                }
-            }
-        }
-    /* init adaptation */
-    if (pImpl->curAdaptCtx->fwtype == FWMgrFWMMF)
-        {
-        ret = XAMediaPlayerAdaptMMF_PostInit(
-                (XAAdaptationMMFCtx*) pImpl->adaptationCtxMMF);
-        }
-
-    if (ret != XA_RESULT_SUCCESS)
-        {
-        XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
-        DEBUG_ERR("Adaptation init failed!");
-        DEBUG_API("<-XAMediaPlayerImpl_DoRealize");
-        return ret;
-        }
-
-    pObj->state = XA_OBJECT_STATE_REALIZED;
-
-    XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer );
-    DEBUG_API("<-XAMediaPlayerImpl_DoRealize");
-    return XA_RESULT_SUCCESS;
-    }
-
-/*
- * Resume object
- */
-XAresult XAMediaPlayerImpl_DoResume(XAObjectItf self)
-    {
-    DEBUG_API("->XAMediaPlayerImpl_DoResume");
-    DEBUG_API("<-XAMediaPlayerImpl_DoResume");
-    /* suspended state not supported by this implementation */
-    return XA_RESULT_PRECONDITIONS_VIOLATED;
-    }
-
-/**
- * void XAMediaPlayerImpl_FreeResources(XAObjectItf self)
- * Description: Free all resources reserved at XAMediaPlayerImpl_DoRealize()
- **/
-void XAMediaPlayerImpl_FreeResources(XAObjectItf self)
-    {
-    XAObjectItfImpl* pObj = (XAObjectItfImpl*) (*self);
-    XAuint8 itfIdx = 0;
-    XAMediaPlayerImpl* pImpl = (XAMediaPlayerImpl*) pObj;
-    DEBUG_API("->XAMediaPlayerImpl_FreeResources");
-    XA_IMPL_THREAD_SAFETY_ENTRY_FOR_VOID_FUNCTIONS( XATSMediaPlayer );
-
-    assert(pObj && pImpl && pObj == pObj->self);
-    for (itfIdx = 0; itfIdx < MP_ITFCOUNT; itfIdx++)
-        {
-        void *pItf = pObj->interfaceMap[itfIdx].pItf;
-        if (pItf)
-            {
-            switch (itfIdx)
-                {
-                case MP_DIMITF:
-                    XADIMItfImpl_Free(pItf);
-                    break;
-                case MP_PLAYITF:
-                    XAPlayItfImpl_Free(pItf);
-                    break;
-                case MP_VOLUMEITF:
-                    XAVolumeItfImpl_Free(pItf);
-                    break;
-                case MP_SEEKITF:
-                    XASeekItfImpl_Free(pItf);
-                    break;
-                case MP_PREFETCHSTATUSITF:
-                    XAPrefetchStatusItfImpl_Free(pItf);
-                    break;
-                case MP_METADATAEXTRACTIONITF:
-                    XAMetadataExtractionItfImpl_Free(pItf);
-                    break;
-                case MP_PLAYBACKRATEITF:
-                    XAPlaybackRateItfImpl_Free(pItf);
-                    break;
-                case MP_CONFIGEXTENSIONITF:
-                    XAConfigExtensionsItfImpl_Free(pItf);
-                    break;
-                case MP_DYNAMICSOURCEITF:
-                    XADynamicSourceItfImpl_Free(pItf);
-                    break;
-                case MP_NOKIAVOLUMEEXT:
-                    XANokiaVolumeExtItfImpl_Free(pItf);
-                    break;
-                case MP_NOKIALINEARVOLUME:
-                    XANokiaLinearVolumeItfImpl_Free(pItf);
-                    break;
-                case MP_STREAMINFORMATIONITF:
-                    XAStreamInformationItfImpl_Free(pItf);
-                    break;
-
-                }
-            pObj->interfaceMap[itfIdx].pItf = NULL;
-            }
-        }
-
-    if (pImpl->curAdaptCtx)
-        {
-        if (pImpl->curAdaptCtx->fwtype == FWMgrFWMMF)
-            {
-            XAMediaPlayerAdaptMMF_Destroy(
-                    (XAAdaptationMMFCtx*) pImpl->adaptationCtxMMF);
-            }
-        }
-
-    XA_IMPL_THREAD_SAFETY_EXIT_FOR_VOID_FUNCTIONS( XATSMediaPlayer );
-    DEBUG_API("<-XAMediaPlayerImpl_FreeResources");
-    return;
-    }
-
-/* XAMediaPlayerImpl_DoAddItf
- * Dynamically add an interface, object specific parts
- */
-XAresult XAMediaPlayerImpl_DoAddItf(XAObjectItf self,
-        XAObjItfMapEntry *mapEntry)
-    {
-
-    XAObjectItfImpl* pObj = (XAObjectItfImpl*) (*self);
-    XAMediaPlayerImpl* pImpl = (XAMediaPlayerImpl*) (pObj);
-
-    XAresult ret = XA_RESULT_SUCCESS;
-    DEBUG_API("->XAMediaPlayerImpl_DoAddItf");
-
-    if (mapEntry)
-        {
-        switch (mapEntry->mapIdx)
-            {
-
-            case MP_METADATAEXTRACTIONITF:
-                mapEntry->pItf = XAMetadataExtractionItfImpl_Create(
-                        pImpl->curAdaptCtx);
-                break;
-            case MP_PLAYBACKRATEITF:
-                mapEntry->pItf = XAPlaybackRateItfImpl_Create(pImpl);
-                break;
-            default:
-                DEBUG_ERR("XAMediaPlayerImpl_DoAddItf unknown id")
-                ;
-                ret = XA_RESULT_FEATURE_UNSUPPORTED;
-                break;
-            }
-
-        if (!mapEntry->pItf && ret == XA_RESULT_SUCCESS)
-            {
-            DEBUG_ERR("XAMediaPlayerImpl_DoAddItf itf creation failed");
-            ret = XA_RESULT_MEMORY_FAILURE;
-            }
-        }
-    else
-        {
-        ret = XA_RESULT_PARAMETER_INVALID;
-        }
-
-    DEBUG_API("<-XAMediaPlayerImpl_DoAddItf");
-    return ret;
-    }
-
-/* XAMediaPlayerImpl_DoResumeItf
- * Try to resume lost interface, object specific parts
- */
-XAresult XAMediaPlayerImpl_DoResumeItf(XAObjectItf self,
-        XAObjItfMapEntry *mapEntry)
-    {
-    /* For now, no difference between suspended and unrealised itfs */
-    XAresult ret = XA_RESULT_SUCCESS;
-    DEBUG_API("->XAMediaPlayerImpl_DoResumeItf");
-    ret = XAMediaPlayerImpl_DoAddItf(self, mapEntry);
-    DEBUG_API("<-XAMediaPlayerImpl_DoResumeItf");
-    return ret;
-    }
-
-/* XAMediaPlayerImpl_DoRemoveItf
- * Dynamically remove an interface, object specific parts
- */
-XAresult XAMediaPlayerImpl_DoRemoveItf(XAObjectItf self,
-        XAObjItfMapEntry *mapEntry)
-    {
-    XAresult ret = XA_RESULT_SUCCESS;
-    DEBUG_API("->XAMediaPlayerImpl_DoRemoveItf");
-
-    if (mapEntry)
-        {
-        switch (mapEntry->mapIdx)
-            {
-            case MP_METADATAEXTRACTIONITF:
-                XAMetadataExtractionItfImpl_Free(mapEntry->pItf);
-                break;
-            case MP_PLAYBACKRATEITF:
-                XAPlaybackRateItfImpl_Free(mapEntry->pItf);
-                break;
-            default:
-                DEBUG_ERR("XAMediaPlayerImpl_DoRemoveItf unknown id")
-                ;
-                ret = XA_RESULT_FEATURE_UNSUPPORTED;
-                break;
-            }
-        mapEntry->pItf = NULL;
-        }
-    else
-        {
-        ret = XA_RESULT_PARAMETER_INVALID;
-        }
-
-    DEBUG_API("<-XAMediaPlayerImpl_DoRemoveItf");
-    return ret;
-    }
-