diff -r 80975da52420 -r 43d09473c595 khronosfws/openmax_al/src/engine/xaengineitf.c --- a/khronosfws/openmax_al/src/engine/xaengineitf.c Mon May 03 12:59:52 2010 +0300 +++ b/khronosfws/openmax_al/src/engine/xaengineitf.c Fri May 14 16:22:35 2010 +0300 @@ -21,13 +21,26 @@ #include "xaengineitf.h" #include "xavibraitf.h" #include "xaledarrayitf.h" -#ifdef _GSTREAMER_BACKEND_ -#include "XAStaticCapsAdaptation.h" -#endif - +#include "xaobjects.h" +#include "xacapabilitiesmgr.h" /*static XAchar implementationText[] = "Implementation does not conform to AL Spec";*/ - +/** + * XAEngineItfImpl* GetImpl(XAEngineItf self) + * Description: Validate interface pointer and cast it to implementation pointer. + **/ +static XAEngineItfImpl* GetImpl(XAEngineItf self) +{ + if( self ) + { + XAEngineItfImpl* impl = (XAEngineItfImpl*)(*self); + if( impl && (impl == impl->self) ) + { + return impl; + } + } + return NULL; +} /** * Base interface XAEngineItf implementation */ @@ -38,8 +51,10 @@ const XAInterfaceID *pInterfaceIds, const XAboolean *pInterfaceRequired) { - return XACameraDeviceImpl_CreateCameraDevice( pDevice, deviceID,numInterfaces, - pInterfaceIds, pInterfaceRequired ); + XAEngineItfImpl* impl = GetImpl(self); + return XACameraDeviceImpl_CreateCameraDevice( impl->mapper,impl->capabilities, + pDevice, deviceID,numInterfaces, + pInterfaceIds, pInterfaceRequired ); } XAresult XAEngineItfImpl_CreateRadioDevice(XAEngineItf self, @@ -48,7 +63,8 @@ const XAInterfaceID *pInterfaceIds, const XAboolean *pInterfaceRequired) { - return XARadioDeviceImpl_CreateRadioDevice( pDevice, numInterfaces, + return XARadioDeviceImpl_CreateRadioDevice( ((XAEngineItfImpl*)self)->mapper, + pDevice, numInterfaces, pInterfaceIds, pInterfaceRequired ); } @@ -59,8 +75,9 @@ const XAInterfaceID *pInterfaceIds, const XAboolean *pInterfaceRequired) { - return XALEDArrayDeviceImpl_CreateLEDArrayDevice( pDevice, deviceID, numInterfaces, - pInterfaceIds, pInterfaceRequired ); + return XALEDArrayDeviceImpl_CreateLEDArrayDevice( ((XAEngineItfImpl*)self)->mapper, + pDevice, deviceID, numInterfaces, + pInterfaceIds, pInterfaceRequired ); } XAresult XAEngineItfImpl_CreateVibraDevice(XAEngineItf self, @@ -70,7 +87,8 @@ const XAInterfaceID *pInterfaceIds, const XAboolean *pInterfaceRequired) { - return XAVibraDeviceImpl_CreateVibraDevice( pDevice, deviceID, numInterfaces, + return XAVibraDeviceImpl_CreateVibraDevice( ((XAEngineItfImpl*)self)->mapper, + pDevice, deviceID, numInterfaces, pInterfaceIds, pInterfaceRequired); } @@ -86,7 +104,9 @@ const XAInterfaceID *pInterfaceIds, const XAboolean *pInterfaceRequired) { - return XAMediaPlayerImpl_CreateMediaPlayer(pPlayer, pDataSrc, pBankSrc, pAudioSnk, + XAEngineItfImpl* impl = GetImpl(self); + return XAMediaPlayerImpl_CreateMediaPlayer(impl->mapper,impl->capabilities, pPlayer, + pDataSrc, pBankSrc, pAudioSnk, pImageVideoSnk, pVibra, pLEDArray, numInterfaces, pInterfaceIds, pInterfaceRequired); } @@ -99,9 +119,17 @@ XAuint32 numInterfaces, const XAInterfaceID * pInterfaceIds, const XAboolean * pInterfaceRequired) -{ - return XAMediaRecorderImpl_CreateMediaRecorder(pRecorder, pAudioSrc, pImageVideoSrc, pDataSnk, - numInterfaces, pInterfaceIds, pInterfaceRequired); +{ + XAEngineItfImpl* impl = GetImpl(self); + return XAMediaRecorderImpl_CreateMediaRecorder(impl->mapper, + impl->capabilities, + pRecorder, + pAudioSrc, + pImageVideoSrc, + pDataSnk, + numInterfaces, + pInterfaceIds, + pInterfaceRequired); } XAresult XAEngineItfImpl_CreateOutputMix(XAEngineItf self, @@ -110,8 +138,10 @@ const XAInterfaceID *pInterfaceIds, const XAboolean *pInterfaceRequired) { - return XAOMixImpl_CreateOutputMix(pMix, numInterfaces, - pInterfaceIds, pInterfaceRequired); + XAEngineItfImpl* impl = GetImpl(self); + return XAOMixImpl_CreateOutputMix(impl->mapper,impl->capabilities, + pMix, numInterfaces, + pInterfaceIds, pInterfaceRequired); } XAresult XAEngineItfImpl_CreateMetadataExtractor(XAEngineItf self, @@ -121,8 +151,10 @@ const XAInterfaceID *pInterfaceIds, const XAboolean *pInterfaceRequired) { - return XAMetadataExtractorImpl_Create(pMetadataExtractor, pDataSource, - numInterfaces, pInterfaceIds, pInterfaceRequired); + XAEngineItfImpl* impl = GetImpl(self); + return XAMetadataExtractorImpl_Create(impl->mapper, impl->capabilities, + pMetadataExtractor, pDataSource, + numInterfaces, pInterfaceIds, pInterfaceRequired); } XAresult XAEngineItfImpl_CreateExtensionObject(XAEngineItf self, @@ -312,9 +344,9 @@ XAuint32 *pLEDDeviceID, XALEDDescriptor *pDescriptor) { -#ifdef _GSTREAMER_BACKEND_ + XALEDDescriptor descriptor; -#endif + DEBUG_API("->XAEngineItfImpl_QueryLEDCapabilities"); if( !pDescriptor ) @@ -330,7 +362,7 @@ } else { -#ifdef _GSTREAMER_BACKEND_ + /* query device capabilities */ if( pIndex ) { @@ -359,7 +391,7 @@ descriptor.primaryLED = PRIMARY_LED; *pDescriptor = descriptor; } -#endif + } DEBUG_API("<-XAEngineItfImpl_QueryLEDCapabilities"); return XA_RESULT_SUCCESS; @@ -370,9 +402,9 @@ XAuint32 *pVibraDeviceID, XAVibraDescriptor *pDescriptor) { -#ifdef _GSTREAMER_BACKEND_ + XAVibraDescriptor descriptor; -#endif + DEBUG_API("->XAEngineItfImpl_QueryVibraCapabilities"); if( !pDescriptor ) @@ -388,7 +420,7 @@ } else { -#ifdef _GSTREAMER_BACKEND_ + /* query device capabilities */ if( pIndex ) { @@ -419,7 +451,7 @@ descriptor.supportsIntensity = XA_BOOLEAN_TRUE; *pDescriptor = descriptor; } -#endif + } DEBUG_API("<-XAEngineItfImpl_QueryVibraCapabilities"); @@ -474,7 +506,7 @@ /** * XAEngineItfImpl -specific methods **/ -XAEngineItfImpl* XAEngineItfImpl_Create() +XAEngineItfImpl* XAEngineItfImpl_Create(FrameworkMap* fwkmapper, XACapabilities* capabilities) { XAEngineItfImpl* self = (XAEngineItfImpl*) calloc(1,sizeof(XAEngineItfImpl)); @@ -501,6 +533,9 @@ self->itf.QueryNumSupportedExtensions = XAEngineItfImpl_QueryNumSupportedExtensions; self->itf.QuerySupportedExtension = XAEngineItfImpl_QuerySupportedExtension; self->itf.IsExtensionSupported = XAEngineItfImpl_IsExtensionSupported; + self->mapper = fwkmapper; + self->capabilities = capabilities; + self->xyz = 50; self->self = self; } DEBUG_API("<-XAEngineItfImpl_Create");