khronosfws/openmax_al/src/engine/xaengineitf.c
changeset 19 4a629bc82c5e
parent 12 5a06f39ad45b
child 21 2ed61feeead6
child 31 8dfd592727cb
--- 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 Apr 30 19:18:45 2010 -0500
@@ -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");