--- a/khronosfws/openmax_al/src/common/xadynintmgmtitf.c Thu May 27 13:20:50 2010 +0300
+++ b/khronosfws/openmax_al/src/common/xadynintmgmtitf.c Wed Jun 23 18:47:10 2010 +0300
@@ -1,19 +1,19 @@
/*
-* 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:
-*
-*/
+ * 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: Dynamic Management Interface Implementation
+ *
+ */
#include <stdlib.h>
#include <assert.h>
@@ -26,17 +26,17 @@
* Description: Validate interface pointer and cast it to implementation pointer.
*/
static XADIMItfImpl* GetImpl(XADynamicInterfaceManagementItf self)
-{
- if( self )
{
- XADIMItfImpl* impl = (XADIMItfImpl*)(*self);
- if( impl && (impl == impl->self) )
+ if (self)
{
+ XADIMItfImpl* impl = (XADIMItfImpl*) (*self);
+ if (impl && (impl == impl->self))
+ {
return impl;
+ }
}
+ return NULL;
}
- return NULL;
-}
/**
* Base Interface XADynamicInterfaceManagementItf implementation
@@ -46,177 +46,171 @@
* Optionally asynchronous method for exposing an interface on an object.
*/
XAresult XADIMItfImpl_AddInterface(XADynamicInterfaceManagementItf self,
- const XAInterfaceID iid,
- XAboolean async)
-{
+ const XAInterfaceID iid, XAboolean async)
+ {
XADIMItfImpl* impl = GetImpl(self);
XAresult retval = XA_RESULT_SUCCESS;
DEBUG_API("->XADIMItfImpl_AddInterface");
- if( !impl )
- {
- DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
- DEBUG_API("<-XADIMItfImpl_AddInterface");
+ if (!impl)
+ {
+ DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");DEBUG_API("<-XADIMItfImpl_AddInterface");
return XA_RESULT_PARAMETER_INVALID;
- }
+ }
- if( async )
- {
+ if (async)
+ {
/* invoke asynchronously */
/* check if another async operation is processed */
- if(impl->asyncOngoing)
- {
+ if (impl->asyncOngoing)
+ {
/* abort ongoing operation */
XAImpl_CancelThread(impl->asyncThr);
- }
+ }
impl->asyncOngoing = XA_BOOLEAN_TRUE;
impl->asyncID = iid;
- if(XAImpl_StartThread(impl->asyncThr, NULL,
- &XADIMItfImpl_AsyncAddItf,(void*)(self)))
- {
+ if (XAImpl_StartThread(impl->asyncThr, NULL,
+ &XADIMItfImpl_AsyncAddItf, (void*) (self)))
+ {
impl->asyncOngoing = XA_BOOLEAN_FALSE;
retval = XA_RESULT_RESOURCE_ERROR;
- }
+ }
else
- {
+ {
retval = XA_RESULT_SUCCESS;
+ }
}
- }
else
- {
+ {
/* invoke synchronously */
retval = XADIMItfImpl_DoAddItf(impl, iid);
- }
+ }
DEBUG_API_A1("<-XADIMItfImpl_AddInterface %lu", retval);
return retval;
-}
+ }
/* XAresult XADIMItfImpl_RemoveInterface
* Synchronous method for removing a dynamically exposed interface on an object.
*/
XAresult XADIMItfImpl_RemoveInterface(XADynamicInterfaceManagementItf self,
- const XAInterfaceID iid)
-{
+ const XAInterfaceID iid)
+ {
XADIMItfImpl* impl = GetImpl(self);
XAresult retval = XA_RESULT_SUCCESS;
DEBUG_API("->XADIMItfImpl_RemoveInterface");
- if( impl )
- {
- XAObjItfMapEntry *mapEntry = NULL;
- if(impl->parent)
- {
- mapEntry = XAObjectItfImpl_GetItfEntry(impl->parent, iid);
- }
- if( mapEntry && mapEntry->isDynamic )
+ if (impl)
{
- if( (mapEntry->pItf) )
+ XAObjItfMapEntry *mapEntry = NULL;
+ if (impl->parent)
{
- if( impl->DoRemoveItfImpl )
+ mapEntry = XAObjectItfImpl_GetItfEntry(impl->parent, iid);
+ }
+ if (mapEntry && mapEntry->isDynamic)
+ {
+ if ((mapEntry->pItf))
{
+ if (impl->DoRemoveItfImpl)
+ {
retval = impl->DoRemoveItfImpl(impl->parent, mapEntry);
- }
+ }
else
- {
+ {
DEBUG_ERR("XADIMItfImpl_RemoveInterface: Object has specified dynamic itfs but not implemented DoRemoveItfImpl!!!");
retval = XA_RESULT_INTERNAL_ERROR;
+ }
+ }
+ else
+ {
+ DEBUG_ERR("XADIMItfImpl_RemoveInterface interface not exposed");
+ retval = XA_RESULT_PRECONDITIONS_VIOLATED;
}
}
- else
- {
- DEBUG_ERR("XADIMItfImpl_RemoveInterface interface not exposed");
- retval = XA_RESULT_PRECONDITIONS_VIOLATED;
+ else /*( mapEntry && mapEntry->isDynamic )*/
+ { /* interface is not supported for dynamic management */
+ DEBUG_ERR("XADIMItfImpl_RemoveInterface interface not supported");
+ retval = XA_RESULT_FEATURE_UNSUPPORTED;
}
}
- else /*( mapEntry && mapEntry->isDynamic )*/
- { /* interface is not supported for dynamic management */
- DEBUG_ERR("XADIMItfImpl_RemoveInterface interface not supported");
- retval = XA_RESULT_FEATURE_UNSUPPORTED;
- }
- }
else
- {
+ {
retval = XA_RESULT_PARAMETER_INVALID;
DEBUG_ERR("XADIMItfImpl_RemoveInterface: INVALID args");
- }
+ }
DEBUG_API_A1("<-XADIMItfImpl_RemoveInterface %lu", retval);
return retval;
-}
+ }
/* XAresult XADIMItfImpl_ResumeInterface
* Optionally asynchronous method for resuming a dynamically exposed interface on the object.
*/
XAresult XADIMItfImpl_ResumeInterface(XADynamicInterfaceManagementItf self,
- const XAInterfaceID iid,
- XAboolean async)
-{
+ const XAInterfaceID iid, XAboolean async)
+ {
XADIMItfImpl* impl = GetImpl(self);
XAresult retval = XA_RESULT_SUCCESS;
DEBUG_API("->XADIMItfImpl_ResumeInterface");
- if( !impl )
- {
- DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
- DEBUG_API("<-XADIMItfImpl_ResumeInterface");
+ if (!impl)
+ {
+ DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");DEBUG_API("<-XADIMItfImpl_ResumeInterface");
return XA_RESULT_PARAMETER_INVALID;
- }
+ }
- if( async )
- {
+ if (async)
+ {
/* invoke asynchronously */
/* check if another async operation is processed */
- if(impl->asyncOngoing)
- {
+ if (impl->asyncOngoing)
+ {
/* abort ongoing operation */
XAImpl_CancelThread(impl->asyncThr);
- }
+ }
impl->asyncOngoing = XA_BOOLEAN_TRUE;
impl->asyncID = iid;
- if(XAImpl_StartThread(impl->asyncThr, NULL,
- &XADIMItfImpl_AsyncResumeItf,(void*)(self)))
- {
+ if (XAImpl_StartThread(impl->asyncThr, NULL,
+ &XADIMItfImpl_AsyncResumeItf, (void*) (self)))
+ {
impl->asyncOngoing = XA_BOOLEAN_FALSE;
retval = XA_RESULT_RESOURCE_ERROR;
- }
+ }
else
- {
+ {
retval = XA_RESULT_SUCCESS;
+ }
}
- }
else
- {
+ {
/* invoke synchronously */
retval = XADIMItfImpl_DoResumeItf(impl, iid);
- }
+ }
DEBUG_API_A1("<-XADIMItfImpl_ResumeInterface %lu", retval);
return retval;
-}
+ }
/* XAresult XADIMItfImpl_RegisterCallback
* Registers a callback on the object
*/
XAresult XADIMItfImpl_RegisterCallback(XADynamicInterfaceManagementItf self,
- xaDynamicInterfaceManagementCallback callback,
- void * pContext)
-{
+ xaDynamicInterfaceManagementCallback callback, void * pContext)
+ {
XADIMItfImpl* impl = GetImpl(self);
DEBUG_API("->XADIMItfImpl_RegisterCallback");
- if( !impl )
- {
- DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
- DEBUG_API("<-XADIMItfImpl_RegisterCallback");
+ if (!impl)
+ {
+ DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");DEBUG_API("<-XADIMItfImpl_RegisterCallback");
return XA_RESULT_PARAMETER_INVALID;
- }
+ }
impl->dimCb = callback;
impl->dimCbContext = pContext;
impl->dimCbPtrToSelf = self;
DEBUG_API("<-XADIMItfImpl_RegisterCallback");
return XA_RESULT_SUCCESS;
-}
+ }
/**
* XADIMItfImpl -specific methods
@@ -226,12 +220,12 @@
* Description: Allocate and initialize DIMItfImpl
*/
XADIMItfImpl* XADIMItfImpl_Create()
-{
- XADIMItfImpl *self = (XADIMItfImpl*)calloc(1,sizeof(XADIMItfImpl));
+ {
+ XADIMItfImpl *self = (XADIMItfImpl*) calloc(1, sizeof(XADIMItfImpl));
DEBUG_API("->XADIMItfImpl_Create");
- if( self )
- {
+ if (self)
+ {
/* init itf default implementation */
self->itf.AddInterface = XADIMItfImpl_AddInterface;
self->itf.RemoveInterface = XADIMItfImpl_RemoveInterface;
@@ -243,38 +237,35 @@
self->dimCbPtrToSelf = NULL;
self->self = self;
- if( XAImpl_CreateThreadHandle(&(self->asyncThr)) != XA_RESULT_SUCCESS )
- {
+ if (XAImpl_CreateThreadHandle(&(self->asyncThr)) != XA_RESULT_SUCCESS)
+ {
free(self);
self = NULL;
- }
+ }
+ }DEBUG_API("<-XADIMItfImpl_Create");
+ return self;
}
- DEBUG_API("<-XADIMItfImpl_Create");
- return self;
-}
/* void XADIMItfImpl_Free(XADIMItfImpl* self)
* Description: Free all resources reserved at XADIMItfImpl_Create
*/
void XADIMItfImpl_Free(XADIMItfImpl* self)
-{
+ {
DEBUG_API("->XADIMItfImpl_Free");
assert(self==self->self);
XAImpl_DeleteThreadHandle(self->asyncThr);
free(self);
DEBUG_API("<-XADIMItfImpl_Free");
-}
+ }
/* void XADIMItfImpl_Init
* Description: Initialize DIM interface. Mandatory to call if dynamic
* interfaces are supported by object.
*/
-void XADIMItfImpl_Init( XADIMItfImpl* self,
- XAObjectItf parent,
- xaDoAddItfImpl doAdd,
- xaDoResumeItfImpl doResume,
- xaDoRemoveItfImpl doRemove)
-{
+void XADIMItfImpl_Init(XADIMItfImpl* self, XAObjectItf parent,
+ xaDoAddItfImpl doAdd, xaDoResumeItfImpl doResume,
+ xaDoRemoveItfImpl doRemove)
+ {
DEBUG_API("->XADIMItfImpl_Init");
assert(self==self->self && parent && doAdd && doResume && doRemove);
@@ -284,184 +275,182 @@
self->DoRemoveItfImpl = doRemove;
DEBUG_API("<-XADIMItfImpl_Init");
-}
+ }
/* void XADIMItfImpl_SendCbEvent
* Description: Object can use this method to send resource events
*/
-void XADIMItfImpl_SendCbEvent( XADIMItfImpl* self,
- XAuint32 event,
- XAresult result,
- const XAInterfaceID iid )
-{
+void XADIMItfImpl_SendCbEvent(XADIMItfImpl* self, XAuint32 event,
+ XAresult result, const XAInterfaceID iid)
+ {
DEBUG_API("->XADIMItfImpl_SendCbEvent");
- if( self->dimCb )
- {
- self->dimCb((XADynamicInterfaceManagementItf)(self), self->dimCbContext,
- event, result, iid);
- }
- DEBUG_API("<-XADIMItfImpl_SendCbEvent");
-}
+ if (self->dimCb)
+ {
+ self->dimCb((XADynamicInterfaceManagementItf) (self),
+ self->dimCbContext, event, result, iid);
+ }DEBUG_API("<-XADIMItfImpl_SendCbEvent");
+ }
/* void* XADIMItfImpl_AsyncAddItf
* Description: Launch AddItf from async thread.
*/
void* XADIMItfImpl_AsyncAddItf(void* args)
-{
+ {
XAresult retval = XA_RESULT_SUCCESS;
XADIMItfImpl* impl = GetImpl(args);
DEBUG_API("->XADIMItfImpl_AsyncAddItf");
- if( impl )
- {
+ if (impl)
+ {
retval = XADIMItfImpl_DoAddItf(impl, impl->asyncID);
- if( impl->dimCb )
- {
- impl->dimCb((XADynamicInterfaceManagementItf)(args), impl->dimCbContext,
- XA_DYNAMIC_ITF_EVENT_ASYNC_TERMINATION, retval, impl->asyncID);
- }
+ if (impl->dimCb)
+ {
+ impl->dimCb((XADynamicInterfaceManagementItf) (args),
+ impl->dimCbContext,
+ XA_DYNAMIC_ITF_EVENT_ASYNC_TERMINATION, retval,
+ impl->asyncID);
+ }
impl->asyncOngoing = XA_BOOLEAN_FALSE;
XAImpl_ExitThread(impl->asyncThr);
- }
+ }
else
- {
+ {
DEBUG_ERR("XADIMItfImpl_AsyncAddItf: INVALID args");
- }
-
+ }
DEBUG_API("<-XADIMItfImpl_AsyncAddItf");
return NULL;
-}
+ }
/* XAresult XADIMItfImpl_DoAddItf
* Description: Handle Itf dynamic addition and call object-specific parts.
* Launched either from async thread or directly.
*/
-XAresult XADIMItfImpl_DoAddItf(XADIMItfImpl* impl,
- const XAInterfaceID iid)
-{
+XAresult XADIMItfImpl_DoAddItf(XADIMItfImpl* impl, const XAInterfaceID iid)
+ {
XAresult retval = XA_RESULT_SUCCESS;
DEBUG_API("->XADIMItfImpl_DoAddItf");
- if( impl )
- {
- XAObjItfMapEntry *mapEntry = NULL;
- if(impl->parent)
- {
- mapEntry = XAObjectItfImpl_GetItfEntry(impl->parent, iid);
- }
- if( mapEntry && mapEntry->isDynamic )
+ if (impl)
{
- if( !(mapEntry->pItf) )
+ XAObjItfMapEntry *mapEntry = NULL;
+ if (impl->parent)
{
- if( impl->DoAddItfImpl )
+ mapEntry = XAObjectItfImpl_GetItfEntry(impl->parent, iid);
+ }
+ if (mapEntry && mapEntry->isDynamic)
+ {
+ if (!(mapEntry->pItf))
{
+ if (impl->DoAddItfImpl)
+ {
retval = impl->DoAddItfImpl(impl->parent, mapEntry);
- }
+ }
else
- {
+ {
DEBUG_ERR("XADIMItfImpl_DoAddItf: Object has specified dynamic itfs but not implemented DoAddItfImpl!!!");
retval = XA_RESULT_INTERNAL_ERROR;
+ }
+ }
+ else
+ {
+ DEBUG_ERR("XADIMItfImpl_DoAddItf interface already exposed");
+ retval = XA_RESULT_PRECONDITIONS_VIOLATED;
}
}
- else
- {
- DEBUG_ERR("XADIMItfImpl_DoAddItf interface already exposed");
- retval = XA_RESULT_PRECONDITIONS_VIOLATED;
+ else /*( mapEntry && mapEntry->isDynamic )*/
+ { /* interface is not supported for dynamic management */
+ DEBUG_ERR("XADIMItfImpl_DoAddItf interface not supported");
+ retval = XA_RESULT_FEATURE_UNSUPPORTED;
}
}
- else /*( mapEntry && mapEntry->isDynamic )*/
- { /* interface is not supported for dynamic management */
- DEBUG_ERR("XADIMItfImpl_DoAddItf interface not supported");
- retval = XA_RESULT_FEATURE_UNSUPPORTED;
- }
- }
else
- {
+ {
retval = XA_RESULT_INTERNAL_ERROR;
DEBUG_ERR("XADIMItfImpl_DoAddItf: INVALID args");
- }
+ }
DEBUG_API("<-XADIMItfImpl_DoAddItf");
return retval;
-}
+ }
/* void* XADIMItfImpl_AsyncResumeItf
* Description: Launch ResumeItf from async thread.
*/
void* XADIMItfImpl_AsyncResumeItf(void* args)
-{
+ {
XAresult retval = XA_RESULT_SUCCESS;
XADIMItfImpl* impl = GetImpl(args);
DEBUG_API("->XADIMItfImpl_AsyncResumeItf");
- if( impl )
- {
+ if (impl)
+ {
retval = XADIMItfImpl_DoResumeItf(impl, impl->asyncID);
- if( impl->dimCb )
- {
- impl->dimCb((XADynamicInterfaceManagementItf)(args), impl->dimCbContext,
- XA_DYNAMIC_ITF_EVENT_ASYNC_TERMINATION, retval, impl->asyncID);
- }
+ if (impl->dimCb)
+ {
+ impl->dimCb((XADynamicInterfaceManagementItf) (args),
+ impl->dimCbContext,
+ XA_DYNAMIC_ITF_EVENT_ASYNC_TERMINATION, retval,
+ impl->asyncID);
+ }
impl->asyncOngoing = XA_BOOLEAN_FALSE;
XAImpl_ExitThread(impl->asyncThr);
- }
+ }
else
- {
+ {
DEBUG_ERR("XADIMItfImpl_AsyncResumeItf: INVALID args");
- }
-
+ }
DEBUG_API("<-XADIMItfImpl_AsyncResumeItf");
return NULL;
-}
+ }
/* void XADIMItfImpl_DoResumeItf
* Description: Handle Itf dynamic resuming and call object-specific parts.
* Launched either from async thread or directly.
*/
-XAresult XADIMItfImpl_DoResumeItf(XADIMItfImpl* impl,
- const XAInterfaceID iid)
-{
+XAresult XADIMItfImpl_DoResumeItf(XADIMItfImpl* impl, const XAInterfaceID iid)
+ {
XAresult retval = XA_RESULT_SUCCESS;
DEBUG_API("->XADIMItfImpl_DoResumeItf");
- if( impl )
- {
- XAObjItfMapEntry *mapEntry = XAObjectItfImpl_GetItfEntry(impl->parent, iid);
- if( mapEntry && mapEntry->isDynamic )
+ if (impl)
{
- if( (!mapEntry->pItf) )
+ XAObjItfMapEntry *mapEntry = XAObjectItfImpl_GetItfEntry(
+ impl->parent, iid);
+ if (mapEntry && mapEntry->isDynamic)
{
- if( impl->DoResumeItfImpl )
+ if ((!mapEntry->pItf))
{
+ if (impl->DoResumeItfImpl)
+ {
retval = impl->DoResumeItfImpl(impl->parent, mapEntry);
- }
+ }
else
- {
+ {
DEBUG_ERR("XADIMItfImpl_DoResumeItf: Object has specified dynamic itfs but not implemented DoResumeItfImpl!!!");
retval = XA_RESULT_INTERNAL_ERROR;
+ }
+ }
+ else
+ {
+ DEBUG_ERR("XADIMItfImpl_DoResumeItf interface already exposed");
+ retval = XA_RESULT_PRECONDITIONS_VIOLATED;
}
}
- else
- {
- DEBUG_ERR("XADIMItfImpl_DoResumeItf interface already exposed");
- retval = XA_RESULT_PRECONDITIONS_VIOLATED;
+ else /*( mapEntry && mapEntry->isDynamic )*/
+ { /* interface is not supported for dynamic management */
+ DEBUG_ERR("XADIMItfImpl_DoResumeItf interface not supported");
+ retval = XA_RESULT_FEATURE_UNSUPPORTED;
}
}
- else /*( mapEntry && mapEntry->isDynamic )*/
- { /* interface is not supported for dynamic management */
- DEBUG_ERR("XADIMItfImpl_DoResumeItf interface not supported");
- retval = XA_RESULT_FEATURE_UNSUPPORTED;
- }
- }
else
- {
+ {
retval = XA_RESULT_INTERNAL_ERROR;
DEBUG_ERR("XADIMItfImpl_DoResumeItf: INVALID args");
- }
+ }
DEBUG_API("<-XADIMItfImpl_DoResumeItf");
return retval;
-}
+ }