khronosfws/openmax_al/src/common/xaobjectitf.c
branchRCL_3
changeset 20 0ac9a5310753
parent 19 095bea5f582e
child 21 999b2818a0eb
--- a/khronosfws/openmax_al/src/common/xaobjectitf.c	Tue Aug 31 15:43:02 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,499 +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: Object Interface Implementation
- *
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <assert.h>
-
-#include "xaobjectitf.h"
-
-/**
- * Base interface XAObjectItf implementation
- */
-XAresult XAObjectItfImpl_Realize(XAObjectItf self, XAboolean async)
-    {
-    XAObjectItfImpl* pObjImp = (XAObjectItfImpl*) (*self);
-    XAresult retval = XA_RESULT_SUCCESS;
-
-    DEBUG_API("->XAObjectItfImpl_Realize");
-    if (!pObjImp || pObjImp != pObjImp->self)
-        {
-        DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
-        DEBUG_API("<-XAObjectItfImpl_Realize");
-        /* invalid parameter */
-        return XA_RESULT_PARAMETER_INVALID;
-        }
-
-    if (async)
-        {
-        /* invoke asynchronously */
-        if (!pObjImp->callBack)
-            {
-            retval = XA_RESULT_PARAMETER_INVALID;
-            }
-        else
-            {
-            /* check if another async operation is processed */
-            if (pObjImp->asyncOngoing)
-                {
-                /* abort ongoing operation */
-                XAImpl_CancelThread(pObjImp->asyncThr);
-                }
-            pObjImp->asyncOngoing = XA_BOOLEAN_TRUE;
-            if (XAImpl_StartThread(pObjImp->asyncThr, NULL,
-                    XAObjectItfImpl_AsyncRealize, (void*) (self)))
-                {
-                pObjImp->asyncOngoing = XA_BOOLEAN_FALSE;
-                retval = XA_RESULT_RESOURCE_ERROR;
-                }
-            else
-                {
-                retval = XA_RESULT_SUCCESS;
-                }
-            }
-        }
-    else
-        {
-        /* Check if the object is in unrealized state */
-        if (pObjImp->state != XA_OBJECT_STATE_UNREALIZED)
-            {
-            DEBUG_ERR("XA_RESULT_PRECONDITIONS_VIOLATED");
-            DEBUG_API("<-XAObjectItfImpl_Realize");
-            return XA_RESULT_PRECONDITIONS_VIOLATED;
-            }
-        /* invoke synchronously */
-        if (pObjImp->DoRealizeImpl)
-            {
-            retval = pObjImp->DoRealizeImpl(self);
-            }
-        }
-    DEBUG_API("<-XAObjectItfImpl_Realize");
-    return retval;
-    }
-
-XAresult XAObjectItfImpl_Resume(XAObjectItf self, XAboolean async)
-    {
-    XAresult retval = XA_RESULT_SUCCESS;
-    XAObjectItfImpl* pObjImp = (XAObjectItfImpl*) (*self);
-    DEBUG_API("->XAObjectItfImpl_Resume");
-
-    if (!pObjImp || pObjImp != pObjImp->self)
-        {
-        DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
-        DEBUG_API("<-XAObjectItfImpl_Resume");
-        /* invalid parameter */
-        return XA_RESULT_PARAMETER_INVALID;
-        }
-    if (async)
-        {
-        /* invoke asynchronously */
-        if (!pObjImp->callBack)
-            {
-            retval = XA_RESULT_PARAMETER_INVALID;
-            }
-        else
-            {
-            /* check if another async operation is processed */
-            if (pObjImp->asyncOngoing)
-                {
-                /* abort ongoing operation */
-                XAImpl_CancelThread(pObjImp->asyncThr);
-                }
-            pObjImp->asyncOngoing = XA_BOOLEAN_TRUE;
-            if (XAImpl_StartThread(pObjImp->asyncThr, NULL,
-                    XAObjectItfImpl_AsyncResume, (void*) (self)))
-                {
-                pObjImp->asyncOngoing = XA_BOOLEAN_FALSE;
-                retval = XA_RESULT_RESOURCE_ERROR;
-                }
-            else
-                {
-                retval = XA_RESULT_SUCCESS;
-                }
-            }
-        }
-    else
-        {
-        /* invoke synchronously */
-        if (pObjImp->DoResumeImpl)
-            {
-            retval = pObjImp->DoResumeImpl(self);
-            }
-        }
-    DEBUG_API("<-XAObjectItfImpl_Resume");
-    return retval;
-    }
-
-XAresult XAObjectItfImpl_GetState(XAObjectItf self, XAuint32 *pState)
-    {
-    XAObjectItfImpl* pObjImp = (XAObjectItfImpl*) (*self);
-    DEBUG_API("->XAObjectItfImpl_GetState");
-    if (!pObjImp || pObjImp != pObjImp->self || !pState)
-        {
-        DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
-        DEBUG_API("<-XAObjectItfImpl_GetState");
-        /* invalid parameter */
-        return XA_RESULT_PARAMETER_INVALID;
-        }
-    *pState = pObjImp->state;
-
-    DEBUG_API("<-XAObjectItfImpl_GetState");
-    return XA_RESULT_SUCCESS;
-    }
-
-XAresult XAObjectItfImpl_GetInterface(XAObjectItf self,
-        const XAInterfaceID iid, void *pInterface)
-    {
-    XAObjectItfImpl* pObjImp = (XAObjectItfImpl*) (*self);
-    XAObjItfMapEntry *mapEntry = NULL;
-    DEBUG_API("->XAObjectItfImpl_GetInterface");
-
-    if (!pObjImp || pObjImp != pObjImp->self || !pInterface || !iid)
-        {
-        DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
-        DEBUG_API("<-XAObjectItfImpl_GetInterface");
-        /* invalid parameter */
-        return XA_RESULT_PARAMETER_INVALID;
-        }
-
-    if (pObjImp->state != XA_OBJECT_STATE_REALIZED)
-        {
-        DEBUG_ERR("XA_RESULT_PRECONDITIONS_VIOLATED");
-        DEBUG_API("<-XAObjectItfImpl_GetInterface");
-        /*state is not correct */
-        return XA_RESULT_PRECONDITIONS_VIOLATED;
-        }
-
-    mapEntry = XAObjectItfImpl_GetItfEntry(self, iid);
-    if (mapEntry && mapEntry->pItf)
-        {
-        *(void**) pInterface = &(mapEntry->pItf);
-        DEBUG_API("<-XAObjectItfImpl_GetInterface");
-        return XA_RESULT_SUCCESS;
-        }
-    else
-        {
-        DEBUG_ERR("XA_RESULT_FEATURE_UNSUPPORTED");
-        DEBUG_API("<-XAObjectItfImpl_GetInterface");
-        return XA_RESULT_FEATURE_UNSUPPORTED;
-        }
-    }
-
-XAresult XAObjectItfImpl_RegisterCallback(XAObjectItf self,
-        xaObjectCallback callback, void *pContext)
-    {
-    XAObjectItfImpl* pObjImp = (XAObjectItfImpl*) (*self);
-    DEBUG_API("->XAObjectItfImpl_RegisterCallback");
-
-    if (!pObjImp || pObjImp != pObjImp->self)
-        {
-        DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
-        DEBUG_API("<-XAObjectItfImpl_RegisterCallback");
-        /* invalid parameter */
-        return XA_RESULT_PARAMETER_INVALID;
-        }
-    pObjImp->callBack = callback;
-    pObjImp->context = pContext;
-    pObjImp->cbPtrToSelf = self;
-
-    DEBUG_API("<-XAObjectItfImpl_RegisterCallback");
-    return XA_RESULT_SUCCESS;
-    }
-
-void XAObjectItfImpl_AbortAsyncOperation(XAObjectItf self)
-    {
-    XAObjectItfImpl* pObjImp = (XAObjectItfImpl*) (*self);
-    DEBUG_API("->XAObjectItfImpl_AbortAsyncOperation");
-
-    if (pObjImp && (pObjImp == pObjImp->self) && pObjImp->callBack
-            && pObjImp->asyncOngoing)
-        {
-        /* abort ongoing operation */
-        XAImpl_CancelThread(pObjImp->asyncThr);
-        }
-
-    DEBUG_API("<-XAObjectItfImpl_AbortAsyncOperation");
-    }
-
-void XAObjectItfImpl_Destroy(XAObjectItf self)
-    {
-    XAObjectItfImpl* pObjImp = (XAObjectItfImpl*) (*self);
-    DEBUG_API("->XAObjectItfImpl_Destroy");
-
-    if (pObjImp && pObjImp == pObjImp->self)
-        {
-        if (pObjImp->asyncOngoing)
-            {
-            /* abort ongoing operation */
-            XAImpl_CancelThread(pObjImp->asyncThr);
-            }
-        /* free object specific resources */
-        if (pObjImp->FreeResourcesImpl)
-            {
-            pObjImp->FreeResourcesImpl(self);
-            }
-        free(pObjImp->interfaceMap);
-        XAImpl_DeleteThreadHandle(pObjImp->asyncThr);
-        free(pObjImp);
-        }
-
-    DEBUG_API("<-XAObjectItfImpl_Destroy");
-    }
-
-XAresult XAObjectItfImpl_SetPriority(XAObjectItf self, XAint32 priority,
-        XAboolean preemptable)
-    {
-    XAObjectItfImpl* pObjImp = (XAObjectItfImpl*) (*self);
-    DEBUG_API("->XAObjectItfImpl_SetPriority");
-
-    if (!pObjImp || pObjImp != pObjImp->self)
-        {
-        DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
-        DEBUG_API("<-XAObjectItfImpl_SetPriority");
-        /* invalid parameter */
-        return XA_RESULT_PARAMETER_INVALID;
-        }
-    pObjImp->priority = priority;
-    pObjImp->preemptable = preemptable;
-
-    DEBUG_API("<-XAObjectItfImpl_SetPriority");
-    return XA_RESULT_SUCCESS;
-    }
-
-XAresult XAObjectItfImpl_GetPriority(XAObjectItf self, XAint32 *pPriority,
-        XAboolean *pPreemptable)
-    {
-    XAObjectItfImpl* pObjImp = (XAObjectItfImpl*) (*self);
-    DEBUG_API("->XAObjectItfImpl_GetPriority");
-
-    if (!pObjImp || pObjImp != pObjImp->self)
-        {
-        DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
-        DEBUG_API("<-XAObjectItfImpl_GetPriority");
-        /* invalid parameter */
-        return XA_RESULT_PARAMETER_INVALID;
-        }
-    *pPriority = pObjImp->priority;
-    *pPreemptable = pObjImp->preemptable;
-
-    DEBUG_API("<-XAObjectItfImpl_GetPriority");
-    return XA_RESULT_SUCCESS;
-    }
-
-XAresult XAObjectItfImpl_SetLossOfControlInterfaces(XAObjectItf self,
-        XAint16 numInterfaces, XAInterfaceID *pInterfaceIDs,
-        XAboolean enabled)
-    {
-    XAObjectItfImpl* pObjImp = (XAObjectItfImpl*) (*self);
-    XAint32 itfIndex = 0;
-    XAObjItfMapEntry *mapEntry = NULL;
-    DEBUG_API("->XAObjectItfImpl_SetLossOfControlInterfaces");
-
-    if (!pObjImp || pObjImp != pObjImp->self || !pInterfaceIDs)
-        {
-        DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
-        DEBUG_API("<-XAObjectItfImpl_SetLossOfControlInterfaces");
-        /* invalid parameter */
-        return XA_RESULT_PARAMETER_INVALID;
-        }
-    if (pInterfaceIDs)
-        {
-        for (itfIndex = 0; itfIndex < numInterfaces; itfIndex++)
-            {
-            mapEntry = XAObjectItfImpl_GetItfEntry(self,
-                    pInterfaceIDs[itfIndex]);
-            if (mapEntry)
-                {
-                mapEntry->locEnabled = enabled;
-                }
-            }
-        }
-
-    DEBUG_API("<-XAObjectItfImpl_SetLossOfControlInterfaces");
-    return XA_RESULT_SUCCESS;
-    }
-
-/**
- * XAObjectItfImpl -specific methods
- **/
-
-/*
- * Allocate and init new object itf instance
- */
-XAresult XAObjectItfImpl_Init(XAObjectItfImpl* self, XAuint32 itfCount,
-        const XAInterfaceID** itfIIDs, xaDoRealizeImpl doRealizeImpl,
-        xaDoResumeImpl doResumeImpl, xaFreeResourcesImpl freeResourcesImpl)
-    {
-    XAuint32 i = 0;
-    DEBUG_API("->XAObjectItfImpl_Init");
-
-    assert( self && itfIIDs && doRealizeImpl && doResumeImpl && freeResourcesImpl );
-
-    self->interfaceMap = (XAObjItfMapEntry*) calloc(itfCount,
-            sizeof(XAObjItfMapEntry));
-    if (!self->interfaceMap)
-        {
-        free(self);
-        DEBUG_ERR("XA_RESULT_MEMORY_FAILURE");
-        DEBUG_API("<-XAObjectItfImpl_Init");
-        return XA_RESULT_MEMORY_FAILURE;
-        }
-    if (XAImpl_CreateThreadHandle(&(self->asyncThr)) != XA_RESULT_SUCCESS)
-        {
-        free(self);
-        DEBUG_ERR("XA_RESULT_MEMORY_FAILURE");
-        DEBUG_API("<-XAObjectItfImpl_Init");
-        return XA_RESULT_MEMORY_FAILURE;
-        }
-    for (i = 0; i < itfCount; i++)
-        {
-        self->interfaceMap[i].mapIdx = i;
-        self->interfaceMap[i].iid = *(itfIIDs[i]);
-        self->interfaceMap[i].pItf = NULL;
-        self->interfaceMap[i].locEnabled = XA_BOOLEAN_FALSE;
-        self->interfaceMap[i].required = XA_BOOLEAN_FALSE;
-        self->interfaceMap[i].isDynamic = XA_BOOLEAN_FALSE;
-        }
-    self->interfaceMap[0].pItf = self;
-    self->interfaceMap[0].required = XA_BOOLEAN_TRUE;
-
-    self->interfaceCount = itfCount;
-    self->priority = XA_PRIORITY_NORMAL;
-    self->preemptable = XA_BOOLEAN_FALSE;
-    self->state = XA_OBJECT_STATE_UNREALIZED;
-    self->callBack = NULL;
-    self->context = NULL;
-    self->asyncOngoing = XA_BOOLEAN_FALSE;
-    self->cbPtrToSelf = NULL;
-
-    self->DoRealizeImpl = doRealizeImpl;
-    self->DoResumeImpl = doResumeImpl;
-    self->FreeResourcesImpl = freeResourcesImpl;
-
-    /* init itf default implementation */
-    self->itf.Realize = XAObjectItfImpl_Realize;
-    self->itf.Resume = XAObjectItfImpl_Resume;
-    self->itf.GetState = XAObjectItfImpl_GetState;
-    self->itf.GetInterface = XAObjectItfImpl_GetInterface;
-    self->itf.RegisterCallback = XAObjectItfImpl_RegisterCallback;
-    self->itf.AbortAsyncOperation = XAObjectItfImpl_AbortAsyncOperation;
-    self->itf.Destroy = XAObjectItfImpl_Destroy;
-    self->itf.SetPriority = XAObjectItfImpl_SetPriority;
-    self->itf.GetPriority = XAObjectItfImpl_GetPriority;
-    self->itf.SetLossOfControlInterfaces
-            = XAObjectItfImpl_SetLossOfControlInterfaces;
-    self->self = self;
-
-    DEBUG_API("<-XAObjectItfImpl_Init");
-    return XA_RESULT_SUCCESS;
-    }
-
-/*
- * Asynchronous invocation of Realize
- */
-void* XAObjectItfImpl_AsyncRealize(void* args)
-    {
-    XAresult retval = XA_RESULT_SUCCESS;
-    XAObjectItfImpl* pObjImp = (XAObjectItfImpl*) (*(XAObjectItf) (args));
-    DEBUG_API("->XAObjectItfImpl_AsyncRealize");
-
-    if (pObjImp && pObjImp == pObjImp->self)
-        {
-        /* Check if the object is in unrealized state */
-        if (pObjImp->state != XA_OBJECT_STATE_UNREALIZED)
-            {
-            retval = XA_RESULT_PRECONDITIONS_VIOLATED;
-            }
-        else if (pObjImp->DoRealizeImpl)
-            {
-            retval = pObjImp->DoRealizeImpl((XAObjectItf) (args));
-            }
-        if (pObjImp->callBack)
-            {
-            pObjImp->callBack(pObjImp->cbPtrToSelf, pObjImp->context,
-                    XA_OBJECT_EVENT_ASYNC_TERMINATION, retval,
-                    pObjImp->state, NULL);
-            }
-        pObjImp->asyncOngoing = XA_BOOLEAN_FALSE;
-        XAImpl_ExitThread(pObjImp->asyncThr);
-        }
-    else
-        {
-        DEBUG_API("XAObjectItfImpl_AsyncRealize: INVALID args");
-        }
-
-    DEBUG_API("<-XAObjectItfImpl_AsyncRealize");
-    return NULL;
-    }
-
-/*
- * Asynchronous invocation of Resume
- */
-void* XAObjectItfImpl_AsyncResume(void* args)
-    {
-    XAresult retval = XA_RESULT_SUCCESS;
-    XAObjectItfImpl* pObjImp = (XAObjectItfImpl*) (*(XAObjectItf) (args));
-    DEBUG_API("->XAObjectItfImpl_AsyncResume");
-
-    if (pObjImp && pObjImp == pObjImp->self)
-        {
-        if (pObjImp->DoResumeImpl)
-            {
-            retval = pObjImp->DoResumeImpl((XAObjectItf) (args));
-            }
-        if (pObjImp->callBack)
-            {
-            pObjImp->callBack(pObjImp->cbPtrToSelf, pObjImp->context,
-                    XA_OBJECT_EVENT_ASYNC_TERMINATION, retval,
-                    pObjImp->state, NULL);
-            }
-        pObjImp->asyncOngoing = XA_BOOLEAN_FALSE;
-        XAImpl_ExitThread(pObjImp->asyncThr);
-        }
-    else
-        {
-        DEBUG_API("XAObjectItfImpl_AsyncResume: INVALID args");
-        }
-
-    DEBUG_API("<-XAObjectItfImpl_AsyncResume");
-    return NULL;
-    }
-
-XAObjItfMapEntry* XAObjectItfImpl_GetItfEntry(const XAObjectItf self,
-        const XAInterfaceID iid)
-    {
-    XAuint32 mapIndex = 0;
-    XAObjectItfImpl* pObjImp = (XAObjectItfImpl*) (*self);
-    DEBUG_API("->XAObjectItfImpl_GetItfEntry");
-
-    if (pObjImp && (pObjImp == pObjImp->self) && pObjImp->interfaceMap && iid)
-        {
-        /* Check interface */
-        for (mapIndex = 0; mapIndex < pObjImp->interfaceCount; mapIndex++)
-            {
-            if (XACommon_EqualIIds(pObjImp->interfaceMap[mapIndex].iid, iid))
-                {
-                DEBUG_API("<-XAObjectItfImpl_GetItfEntry");
-                return &(pObjImp->interfaceMap[mapIndex]);
-                }
-            }
-        }
-
-    DEBUG_API("<-XAObjectItfImpl_GetItfEntry");
-    return NULL;
-    }
-