khronosfws/openmax_al/src/camera/xacameradevice.c
changeset 16 43d09473c595
parent 12 5a06f39ad45b
equal deleted inserted replaced
14:80975da52420 16:43d09473c595
    24 #include "xadynintmgmtitf.h"
    24 #include "xadynintmgmtitf.h"
    25 #include "xaimagecontrolsitf.h"
    25 #include "xaimagecontrolsitf.h"
    26 #include "xaimageeffectsitf.h"
    26 #include "xaimageeffectsitf.h"
    27 #include "xavideopostprocessingitf.h"
    27 #include "xavideopostprocessingitf.h"
    28 #include "xathreadsafety.h"
    28 #include "xathreadsafety.h"
       
    29 #include "xaframeworkmgr.h"
       
    30 #include "xacameraadaptctx.h"
       
    31 #include "xacapabilitiesmgr.h"
    29 
    32 
    30 /* Static mapping of enumeration XACameraDeviceInterfaces to interface iids */
    33 /* Static mapping of enumeration XACameraDeviceInterfaces to interface iids */
    31 static const XAInterfaceID* XACameraDeviceItfIIDs[CAMERA_ITFCOUNT]=
    34 static const XAInterfaceID* XACameraDeviceItfIIDs[CAMERA_ITFCOUNT]=
    32 {
    35 {
    33     &XA_IID_OBJECT,
    36     &XA_IID_OBJECT,
    45  *****************************************************************************/
    48  *****************************************************************************/
    46 
    49 
    47 /* XAResult XACameraDeviceImpl_Create
    50 /* XAResult XACameraDeviceImpl_Create
    48  * Description: Create object
    51  * Description: Create object
    49  */
    52  */
    50 XAresult XACameraDeviceImpl_CreateCameraDevice(XAObjectItf* pDevice,
    53 XAresult XACameraDeviceImpl_CreateCameraDevice(FrameworkMap* mapper,
       
    54                                                 XACapabilities* capabilities,   
       
    55                                                XAObjectItf* pDevice,
    51                                                XAuint32 deviceID,
    56                                                XAuint32 deviceID,
    52                                                XAuint32 numInterfaces,
    57                                                XAuint32 numInterfaces,
    53                                                const XAInterfaceID * pInterfaceIds,
    58                                                const XAInterfaceID * pInterfaceIds,
    54                                                const XAboolean * pInterfaceRequired)
    59                                                const XAboolean * pInterfaceRequired)
    55 {
    60 {
   128 
   133 
   129     /* Mark interfaces that can be handled dynamically */
   134     /* Mark interfaces that can be handled dynamically */
   130     /* Mandated dynamic itfs */
   135     /* Mandated dynamic itfs */
   131     pBaseObj->interfaceMap[CAMERA_IMAGEEFFECTSITF].isDynamic = XA_BOOLEAN_TRUE;
   136     pBaseObj->interfaceMap[CAMERA_IMAGEEFFECTSITF].isDynamic = XA_BOOLEAN_TRUE;
   132 
   137 
   133 
       
   134     /* Initialize XACameraDeviceImpl variables */
       
   135     pImpl->deviceID = deviceID;
       
   136 #ifdef _GSTREAMER_BACKEND_   
       
   137     pImpl->adaptationCtx = XACameraAdapt_Create(pImpl->deviceID);
       
   138 #endif
       
   139     
       
   140     
       
   141     /* This code is put here to return Feature Not Supported since adaptation is not present*/
   138     /* This code is put here to return Feature Not Supported since adaptation is not present*/
   142     /*************************************************/
   139     /*************************************************/
   143     XAObjectItfImpl_Destroy((XAObjectItf)&(pBaseObj));
   140     XAObjectItfImpl_Destroy((XAObjectItf)&(pBaseObj));
   144     XA_IMPL_THREAD_SAFETY_EXIT(XATSCamera);
   141     XA_IMPL_THREAD_SAFETY_EXIT(XATSCamera);
   145     DEBUG_ERR("Required interface not found - abort creation!");
   142     DEBUG_ERR("Required interface not found - abort creation!");
   146     DEBUG_API("<-XACameraDeviceImpl_Create");
   143     DEBUG_API("<-XACameraDeviceImpl_Create");
   147     return XA_RESULT_FEATURE_UNSUPPORTED;    
   144     return XA_RESULT_FEATURE_UNSUPPORTED;
   148     /*************************************************/
   145     /*************************************************/
   149 
       
   150     
   146     
   151     
   147 /*     Initialize XACameraDeviceImpl variables 
   152     
   148     pImpl->deviceID = deviceID;
   153     /* Set ObjectItf to point to newly created object */
   149 
   154 /*
   150     pImpl->adaptationCtx = XACameraAdapt_Create(pImpl->deviceID);
       
   151 
       
   152      Set ObjectItf to point to newly created object 
   155     *pDevice = (XAObjectItf)&(pBaseObj->self);
   153     *pDevice = (XAObjectItf)&(pBaseObj->self);
   156 
   154 
   157     XA_IMPL_THREAD_SAFETY_EXIT(XATSCamera);
   155     XA_IMPL_THREAD_SAFETY_EXIT(XATSCamera);
   158     DEBUG_API("<-XACameraDeviceImpl_Create");
   156     DEBUG_API("<-XACameraDeviceImpl_Create");
   159     return XA_RESULT_SUCCESS;
   157     return XA_RESULT_SUCCESS;*/
   160 */
       
   161 }
   158 }
   162 
   159 
   163 /* XAResult XACameraDeviceImpl_QueryNumSupportedInterfaces
   160 /* XAResult XACameraDeviceImpl_QueryNumSupportedInterfaces
   164  * Description: Statically query number of supported interfaces
   161  * Description: Statically query number of supported interfaces
   165  */
   162  */
   232         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
   229         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
   233         DEBUG_API("<-XACameraDeviceImpl_DoRealize");
   230         DEBUG_API("<-XACameraDeviceImpl_DoRealize");
   234         return XA_RESULT_PARAMETER_INVALID;
   231         return XA_RESULT_PARAMETER_INVALID;
   235     }
   232     }
   236 
   233 
   237 #ifdef _GSTREAMER_BACKEND_   
   234  
   238     ret = XACameraAdapt_PostInit( pObjImpl->adaptationCtx );
   235     ret = XACameraAdapt_PostInit( pObjImpl->adaptationCtx );
   239 #endif
   236 
   240     if( ret != XA_RESULT_SUCCESS )
   237     if( ret != XA_RESULT_SUCCESS )
   241     {
   238     {
   242         XA_IMPL_THREAD_SAFETY_EXIT(XATSCamera);
   239         XA_IMPL_THREAD_SAFETY_EXIT(XATSCamera);
   243         DEBUG_ERR_A1("Camera adapt postinit - %d", ret);
   240         DEBUG_ERR_A1("Camera adapt postinit - %d", ret);
   244         DEBUG_API("<-XACameraDeviceImpl_DoRealize");
   241         DEBUG_API("<-XACameraDeviceImpl_DoRealize");
   262                                 XACameraDeviceImpl_DoAddItf,
   259                                 XACameraDeviceImpl_DoAddItf,
   263                                 XACameraDeviceImpl_DoResumeItf,
   260                                 XACameraDeviceImpl_DoResumeItf,
   264                                 XACameraDeviceImpl_DoRemoveItf);
   261                                 XACameraDeviceImpl_DoRemoveItf);
   265                     }
   262                     }
   266                     break;
   263                     break;
   267 #ifdef _GSTREAMER_BACKEND_   
   264   
   268                 case CAMERA_CAMERAITF:
   265                 case CAMERA_CAMERAITF:
   269                     pItf = XACameraItfImpl_Create( pObjImpl->adaptationCtx );
   266                     pItf = XACameraItfImpl_Create( pObjImpl->adaptationCtx );
   270                     break;
   267                     break;
   271                 case CAMERA_CONFIGEXTENSIONITF:
   268                 case CAMERA_CONFIGEXTENSIONITF:
   272                     pItf = XAConfigExtensionsItfImpl_Create();
   269                     pItf = XAConfigExtensionsItfImpl_Create();
   278                    pItf = XAImageEffectsItfImpl_Create( pObjImpl->adaptationCtx );
   275                    pItf = XAImageEffectsItfImpl_Create( pObjImpl->adaptationCtx );
   279                    break;
   276                    break;
   280                 case CAMERA_VIDEOPOSTPROCESSINGITF:
   277                 case CAMERA_VIDEOPOSTPROCESSINGITF:
   281                      pItf = XAVideoPostProcessingItfImpl_Create( pObjImpl->adaptationCtx );
   278                      pItf = XAVideoPostProcessingItfImpl_Create( pObjImpl->adaptationCtx );
   282                      break;
   279                      break;
   283 #endif                     
   280                   
   284                 default:
   281                 default:
   285                     break;
   282                     break;
   286             }
   283             }
   287             if( !pItf )
   284             if( !pItf )
   288             {
   285             {
   321  */
   318  */
   322 void XACameraDeviceImpl_FreeResources(XAObjectItf self)
   319 void XACameraDeviceImpl_FreeResources(XAObjectItf self)
   323 {
   320 {
   324     XAObjectItfImpl* pObj = (XAObjectItfImpl*)(*self);
   321     XAObjectItfImpl* pObj = (XAObjectItfImpl*)(*self);
   325     XAuint8 itfIdx = 0;
   322     XAuint8 itfIdx = 0;
       
   323     XACameraDeviceImpl* pImpl = (XACameraDeviceImpl*)(*self);
       
   324     assert( pObj && pImpl && pObj == pObj->self );
   326     DEBUG_API("->XACameraDeviceImpl_FreeResources");
   325     DEBUG_API("->XACameraDeviceImpl_FreeResources");
   327     XA_IMPL_THREAD_SAFETY_ENTRY_FOR_VOID_FUNCTIONS(XATSCamera);
   326     XA_IMPL_THREAD_SAFETY_ENTRY_FOR_VOID_FUNCTIONS(XATSCamera);
   328 #ifdef _GSTREAMER_BACKEND_ 
   327     
   329     XACameraDeviceImpl* pImpl = (XACameraDeviceImpl*)(*self);
   328 
   330     assert( pObj && pImpl && pObj == pObj->self );
       
   331 #endif
       
   332     
   329     
   333 
   330 
   334     /* free all allocated interfaces */
   331     /* free all allocated interfaces */
   335     for(itfIdx = 0; itfIdx < CAMERA_ITFCOUNT; itfIdx++)
   332     for(itfIdx = 0; itfIdx < CAMERA_ITFCOUNT; itfIdx++)
   336     {
   333     {
   361                     break;
   358                     break;
   362             }
   359             }
   363             pObj->interfaceMap[itfIdx].pItf = NULL;
   360             pObj->interfaceMap[itfIdx].pItf = NULL;
   364         }
   361         }
   365     }
   362     }
   366 #ifdef _GSTREAMER_BACKEND_   
   363   
   367     if ( pImpl->adaptationCtx != NULL )
   364     if ( pImpl->adaptationCtx != NULL )
   368     {
   365     {
   369         XACameraAdapt_Destroy( pImpl->adaptationCtx );
   366         XACameraAdapt_Destroy( pImpl->adaptationCtx );
   370         pImpl->adaptationCtx = NULL;
   367         pImpl->adaptationCtx = NULL;
   371     }
   368     }
   372 #endif
   369 
   373     XA_IMPL_THREAD_SAFETY_EXIT_FOR_VOID_FUNCTIONS(XATSCamera);
   370     XA_IMPL_THREAD_SAFETY_EXIT_FOR_VOID_FUNCTIONS(XATSCamera);
   374     DEBUG_API("<-XACameraDeviceImpl_FreeResources");
   371     DEBUG_API("<-XACameraDeviceImpl_FreeResources");
   375     return;
   372     return;
   376 }
   373 }
   377 
   374 
   382 /* XACameraDeviceImpl_DoAddItf
   379 /* XACameraDeviceImpl_DoAddItf
   383  * Dynamically add an interface, object specific parts
   380  * Dynamically add an interface, object specific parts
   384  */
   381  */
   385 XAresult XACameraDeviceImpl_DoAddItf(XAObjectItf self, XAObjItfMapEntry *mapEntry  )
   382 XAresult XACameraDeviceImpl_DoAddItf(XAObjectItf self, XAObjItfMapEntry *mapEntry  )
   386 {
   383 {
   387 #ifdef _GSTREAMER_BACKEND_
   384 
   388     XAObjectItfImpl* pObj = (XAObjectItfImpl*)(*self);
   385     XAObjectItfImpl* pObj = (XAObjectItfImpl*)(*self);
   389     XACameraDeviceImpl* pImpl = (XACameraDeviceImpl*)(pObj);
   386     XACameraDeviceImpl* pImpl = (XACameraDeviceImpl*)(pObj);
   390 #endif
   387 
   391     XAresult ret = XA_RESULT_SUCCESS;
   388     XAresult ret = XA_RESULT_SUCCESS;
   392     DEBUG_API("->XACameraDeviceImpl_DoAddItf");
   389     DEBUG_API("->XACameraDeviceImpl_DoAddItf");
   393     if(mapEntry)
   390     if(mapEntry)
   394     {
   391     {
   395         switch( mapEntry->mapIdx )
   392         switch( mapEntry->mapIdx )
   396         {
   393         {
   397         case CAMERA_IMAGEEFFECTSITF:
   394         case CAMERA_IMAGEEFFECTSITF:
   398 #ifdef _GSTREAMER_BACKEND_   
       
   399             mapEntry->pItf = XAImageEffectsItfImpl_Create( pImpl->adaptationCtx );
   395             mapEntry->pItf = XAImageEffectsItfImpl_Create( pImpl->adaptationCtx );
   400 #endif
       
   401             break;
   396             break;
   402         default:
   397         default:
   403             DEBUG_ERR("XACameraDeviceImpl_DoAddItf unknown id");
   398             DEBUG_ERR("XACameraDeviceImpl_DoAddItf unknown id");
   404             ret = XA_RESULT_FEATURE_UNSUPPORTED;
   399             ret = XA_RESULT_FEATURE_UNSUPPORTED;
   405             break;
   400             break;