khronosfws/openmax_al/src/camera/xacameraitf.c
changeset 12 5a06f39ad45b
child 16 43d09473c595
equal deleted inserted replaced
0:71ca22bcf22a 12:5a06f39ad45b
       
     1 /*
       
     2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description: 
       
    15 *
       
    16 */
       
    17 
       
    18 #include <stdio.h>
       
    19 #include <stdlib.h>
       
    20 #include <assert.h>
       
    21 #include "xacameraitf.h"
       
    22 #ifdef _GSTREAMER_BACKEND_
       
    23 #include "XACameraItfAdaptation.h"
       
    24 #endif
       
    25 #include "xathreadsafety.h"
       
    26 
       
    27 /* XACameraItfImpl* GetImpl(XACameraItf self)
       
    28  * Description: Validate interface pointer and cast it to implementation pointer.
       
    29  */
       
    30 static XACameraItfImpl* GetImpl(XACameraItf self)
       
    31 {
       
    32     if( self )
       
    33     {
       
    34         XACameraItfImpl* impl = (XACameraItfImpl*)(*self);
       
    35         if( impl && (impl == impl->self) )
       
    36         {
       
    37             return impl;
       
    38         }
       
    39     }
       
    40     return NULL;
       
    41 }
       
    42 
       
    43 /*****************************************************************************
       
    44  * Base interface XACameraItf implementation
       
    45  *****************************************************************************/
       
    46 
       
    47 /**
       
    48  * XAresult XACameraItfImpl_RegisterCallback( XACameraItf self,
       
    49  *                                            xaCameraCallback callback,
       
    50  *                                            void *pContext )
       
    51  * Description: Sets callback for camera event notification.
       
    52  **/
       
    53 XAresult XACameraItfImpl_RegisterCallback( XACameraItf self,
       
    54                                            xaCameraCallback callback,
       
    55                                            void *pContext )
       
    56 {
       
    57     XAresult ret = XA_RESULT_SUCCESS;
       
    58     XACameraItfImpl* impl = GetImpl(self);
       
    59 
       
    60     DEBUG_API("->XACameraItfImpl_RegisterCallback");
       
    61     if( !impl )
       
    62     {
       
    63         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
       
    64         DEBUG_API("<-XACameraItfImpl_RegisterCallback");
       
    65         /* invalid parameter */
       
    66         return XA_RESULT_PARAMETER_INVALID;
       
    67     }
       
    68 
       
    69     impl->callback = callback;
       
    70     impl->context = pContext;
       
    71     impl->cbPtrToSelf = self;
       
    72 
       
    73     DEBUG_API("<-XACameraItfImpl_RegisterCallback");
       
    74     return ret;
       
    75 }
       
    76 
       
    77 /**
       
    78  * XAresult XACameraItfImpl_SetFlashMode( XACameraItf self, XAuint32 flashMode )
       
    79  * Description: Sets the camera flash setting.
       
    80  **/
       
    81 XAresult XACameraItfImpl_SetFlashMode( XACameraItf self, XAuint32 flashMode )
       
    82 {
       
    83     XAresult ret = XA_RESULT_SUCCESS;
       
    84     XACameraItfImpl* impl = GetImpl(self);
       
    85 
       
    86     DEBUG_API("->XACameraItfImpl_SetFlashMode");
       
    87     XA_IMPL_THREAD_SAFETY_ENTRY(XATSCamera);
       
    88 
       
    89     if( !impl || flashMode > XA_CAMERA_FLASHMODE_TORCH || flashMode < XA_CAMERA_FLASHMODE_OFF )
       
    90     {
       
    91         /* invalid parameter */
       
    92         XA_IMPL_THREAD_SAFETY_EXIT(XATSCamera);
       
    93         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
       
    94         DEBUG_API("<-XACameraItfImpl_SetFlashMode");
       
    95         return XA_RESULT_PARAMETER_INVALID;
       
    96     }
       
    97 
       
    98     /* check is flash mode changed */
       
    99     if( impl->flashMode != flashMode )
       
   100     {
       
   101 #ifdef _GSTREAMER_BACKEND_    
       
   102         ret = XACameraItfAdapt_SetFlashMode( impl->adapCtx, flashMode );
       
   103 #endif        
       
   104         if ( ret == XA_RESULT_SUCCESS )
       
   105         {
       
   106             impl->flashMode = flashMode;
       
   107         }
       
   108         /* wait for adaptation */
       
   109         impl->flashReady = XA_BOOLEAN_FALSE;
       
   110     }
       
   111 
       
   112     XA_IMPL_THREAD_SAFETY_EXIT(XATSCamera);
       
   113     DEBUG_API("<-XACameraItfImpl_SetFlashMode");
       
   114     return ret;
       
   115 }
       
   116 
       
   117 /**
       
   118  * XAresult XACameraItfImpl_GetFlashMode( XACameraItf self, XAuint32 *pFlashMode )
       
   119  * Description: Gets the camera flash setting.
       
   120  **/
       
   121 XAresult XACameraItfImpl_GetFlashMode( XACameraItf self, XAuint32 *pFlashMode )
       
   122 {
       
   123     XAresult ret = XA_RESULT_SUCCESS;
       
   124     XACameraItfImpl* impl = GetImpl(self);
       
   125 
       
   126     DEBUG_API("->XACameraItfImpl_GetFlashMode");
       
   127     if( !impl || !pFlashMode )
       
   128     {
       
   129         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
       
   130         DEBUG_API("<-XACameraItfImpl_GetFlashMode");
       
   131         /* invalid parameter */
       
   132         return XA_RESULT_PARAMETER_INVALID;
       
   133     }
       
   134 
       
   135     *pFlashMode = impl->flashMode;
       
   136 
       
   137     DEBUG_API("<-XACameraItfImpl_GetFlashMode");
       
   138     return ret;
       
   139 }
       
   140 
       
   141 /**
       
   142  * XAresult XACameraItfImpl_IsFlashReady( XACameraItf self, XAboolean *pReady )
       
   143  * Description: Queries whether the flash is ready for use.
       
   144  **/
       
   145 XAresult XACameraItfImpl_IsFlashReady( XACameraItf self, XAboolean *pReady )
       
   146 {
       
   147     XAresult ret = XA_RESULT_SUCCESS;
       
   148     XACameraItfImpl* impl = GetImpl(self);
       
   149 
       
   150     DEBUG_API("->XACameraItfImpl_IsFlashReady");
       
   151     if( !impl || !pReady )
       
   152     {
       
   153         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
       
   154         DEBUG_API("<-XACameraItfImpl_IsFlashReady");
       
   155         /* invalid parameter */
       
   156         return XA_RESULT_PARAMETER_INVALID;
       
   157     }
       
   158     *pReady = impl->flashReady;
       
   159 
       
   160     DEBUG_API("<-XACameraItfImpl_IsFlashReady");
       
   161     return ret;
       
   162 }
       
   163 
       
   164 /**
       
   165  * XAresult XACameraItfImpl_SetFocusMode( XACameraItf self, XAuint32 focusMode,
       
   166  *                                        XAmillimeter manualSetting,
       
   167  *                                        XAboolean macroEnabled )
       
   168  * Description: Sets the camera focus mode.
       
   169  **/
       
   170 XAresult XACameraItfImpl_SetFocusMode( XACameraItf self, XAuint32 focusMode,
       
   171                                        XAmillimeter manualSetting,
       
   172                                        XAboolean macroEnabled )
       
   173 {
       
   174     XAresult ret = XA_RESULT_SUCCESS;
       
   175     XACameraItfImpl* impl = GetImpl(self);
       
   176 
       
   177     DEBUG_API("->XACameraItfImpl_SetFocusMode");
       
   178     XA_IMPL_THREAD_SAFETY_ENTRY(XATSCamera);
       
   179 
       
   180     if( !impl || focusMode < XA_CAMERA_FOCUSMODE_MANUAL || focusMode > XA_CAMERA_FOCUSMODE_CONTINUOUS_CENTROID )
       
   181     {
       
   182         /* invalid parameter */
       
   183         XA_IMPL_THREAD_SAFETY_EXIT(XATSCamera);
       
   184         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
       
   185         DEBUG_API("<-XACameraItfImpl_SetFocusMode");
       
   186         return XA_RESULT_PARAMETER_INVALID;
       
   187     }
       
   188 
       
   189     /* check is focus mode changed */
       
   190     if( impl->focusMode != focusMode )
       
   191     {
       
   192 #ifdef _GSTREAMER_BACKEND_       
       
   193         ret = XACameraItfAdapt_SetFocusMode( impl->adapCtx, focusMode, manualSetting, macroEnabled  );
       
   194 #endif        
       
   195         if ( ret == XA_RESULT_SUCCESS )
       
   196         {
       
   197             impl->focusMode = focusMode;
       
   198             impl->focusManualSetting = manualSetting;
       
   199             impl->macroEnabled = macroEnabled;
       
   200         }
       
   201     }
       
   202 
       
   203     XA_IMPL_THREAD_SAFETY_EXIT(XATSCamera);
       
   204     DEBUG_API("<-XACameraItfImpl_SetFocusMode");
       
   205     return ret;
       
   206 }
       
   207 
       
   208 /**
       
   209  * XAresult XACameraItfImpl_GetFocusMode( XACameraItf self,
       
   210  *                                        XAuint32 *pFocusMode,
       
   211  *                                        XAmillimeter *pManualSetting,
       
   212  *                                        XAboolean *pMacroEnabled )
       
   213  * Description: Gets the camera focus mode.
       
   214  **/
       
   215 XAresult XACameraItfImpl_GetFocusMode( XACameraItf self,
       
   216                                        XAuint32 *pFocusMode,
       
   217                                        XAmillimeter *pManualSetting,
       
   218                                        XAboolean *pMacroEnabled )
       
   219 {
       
   220     XAresult ret = XA_RESULT_SUCCESS;
       
   221     XACameraItfImpl* impl = GetImpl(self);
       
   222 
       
   223     DEBUG_API("->XACameraItfImpl_GetFocusMode");
       
   224     if( !impl || !pFocusMode || !pManualSetting || !pMacroEnabled )
       
   225     {
       
   226         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
       
   227         DEBUG_API("<-XACameraItfImpl_GetFocusMode");
       
   228         /* invalid parameter */
       
   229         return XA_RESULT_PARAMETER_INVALID;
       
   230     }
       
   231 
       
   232     *pFocusMode = impl->focusMode;
       
   233     *pMacroEnabled = impl->macroEnabled;
       
   234 
       
   235     if( impl->focusMode & XA_CAMERA_FOCUSMODE_MANUAL )
       
   236     {
       
   237         *pManualSetting = impl->focusManualSetting;
       
   238     }
       
   239 
       
   240     DEBUG_API("<-XACameraItfImpl_GetFocusMode");
       
   241     return ret;
       
   242 }
       
   243 
       
   244 /**
       
   245  * XAresult XACameraItfImpl_SetFocusRegionPattern( XACameraItf self,
       
   246  *                                                 XAuint32 focusPattern,
       
   247  *                                                 XAuint32 activePoints1,
       
   248  *                                                 XAuint32 activePoints2 )
       
   249  * Description: Set the camera focus region pattern.
       
   250  **/
       
   251 XAresult XACameraItfImpl_SetFocusRegionPattern( XACameraItf self,
       
   252                                                 XAuint32 focusPattern,
       
   253                                                 XAuint32 activePoints1,
       
   254                                                 XAuint32 activePoints2 )
       
   255 {
       
   256     XAresult ret = XA_RESULT_SUCCESS;
       
   257     XACameraItfImpl* impl = GetImpl(self);
       
   258 
       
   259     DEBUG_API("->XACameraItfImpl_SetFocusRegionPattern");
       
   260     XA_IMPL_THREAD_SAFETY_ENTRY(XATSCamera);
       
   261 
       
   262     if( !impl || focusPattern < XA_FOCUSPOINTS_ONE || focusPattern > XA_FOCUSPOINTS_CUSTOM )
       
   263     {
       
   264         /* invalid parameter */
       
   265         XA_IMPL_THREAD_SAFETY_EXIT(XATSCamera);
       
   266         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
       
   267         DEBUG_API("<-XACameraItfImpl_SetFocusRegionPattern");
       
   268         return XA_RESULT_PARAMETER_INVALID;
       
   269     }
       
   270 
       
   271     /* check is focus pattern changed */
       
   272     if( focusPattern == impl->focusPattern )
       
   273     {
       
   274 #ifdef _GSTREAMER_BACKEND_   
       
   275         ret = XACameraItfAdapt_SetFocusRegionPattern( impl->adapCtx, focusPattern, activePoints1, activePoints2 );
       
   276 #endif
       
   277         if (ret == XA_RESULT_SUCCESS)
       
   278         {
       
   279             impl->focusPattern = focusPattern;
       
   280             if( !(impl->focusMode & XA_CAMERA_FOCUSMODE_MANUAL) )
       
   281             {
       
   282                 impl->activePoints1 = activePoints1;
       
   283                 impl->activePoints2 = activePoints2;
       
   284             }
       
   285         }
       
   286     }
       
   287 
       
   288     XA_IMPL_THREAD_SAFETY_EXIT(XATSCamera);
       
   289     DEBUG_API("<-XACameraItfImpl_SetFocusRegionPattern");
       
   290     return ret;
       
   291 }
       
   292 
       
   293 /**
       
   294  * XAresult XACameraItfImpl_GetFocusRegionPattern( XACameraItf self,
       
   295  *                                                 XAuint32 *pFocusPattern,
       
   296  *                                                 XAuint32 *pActivePoints1,
       
   297  *                                                 XAuint32 *pActivePoints2 )
       
   298  * Description: Gets the camera focus region pattern.
       
   299  **/
       
   300 XAresult XACameraItfImpl_GetFocusRegionPattern( XACameraItf self,
       
   301                                                 XAuint32 *pFocusPattern,
       
   302                                                 XAuint32 *pActivePoints1,
       
   303                                                 XAuint32 *pActivePoints2 )
       
   304 {
       
   305     XAresult ret = XA_RESULT_SUCCESS;
       
   306     XACameraItfImpl* impl = GetImpl(self);
       
   307 
       
   308     DEBUG_API("->XACameraItfImpl_GetFocusRegionPattern");
       
   309     if( !impl || !pFocusPattern || !pActivePoints1 || !pActivePoints2 )
       
   310     {
       
   311         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
       
   312         DEBUG_API("<-XACameraItfImpl_GetFocusRegionPattern");
       
   313         /* invalid parameter */
       
   314         return XA_RESULT_PARAMETER_INVALID;
       
   315     }
       
   316 
       
   317     *pFocusPattern = impl->focusPattern;
       
   318 
       
   319     if( !(impl->focusMode & XA_CAMERA_FOCUSMODE_MANUAL) &&
       
   320         (impl->focusPattern == XA_FOCUSPOINTS_CUSTOM) )
       
   321     {
       
   322         *pActivePoints1 = impl->activePoints1;
       
   323         *pActivePoints2 = impl->activePoints2;
       
   324     }
       
   325 
       
   326     DEBUG_API("<-XACameraItfImpl_GetFocusRegionPattern");
       
   327     return ret;
       
   328 }
       
   329 
       
   330 /**
       
   331  * XAresult XACameraItfImpl_GetFocusRegionPositions( XACameraItf self,
       
   332  *                                                   XAuint32 *pNumPositionEntries,
       
   333  *                                                   XAFocusPointPosition *pFocusPosition )
       
   334  * Description: Get the camera focus region pattern's positioning and size for each
       
   335  * point in the active focus pattern.
       
   336  **/
       
   337 XAresult XACameraItfImpl_GetFocusRegionPositions( XACameraItf self,
       
   338                                                   XAuint32 *pNumPositionEntries,
       
   339                                                   XAFocusPointPosition *pFocusPosition )
       
   340 {
       
   341     XAresult ret = XA_RESULT_SUCCESS;
       
   342     XACameraItfImpl* impl = GetImpl(self);
       
   343 
       
   344     DEBUG_API("->XACameraItfImpl_GetFocusRegionPositions");
       
   345     if( !impl || !pNumPositionEntries || !pFocusPosition )
       
   346     {
       
   347         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
       
   348         DEBUG_API("<-XACameraItfImpl_GetFocusRegionPositions");
       
   349         /* invalid parameter */
       
   350         return XA_RESULT_PARAMETER_INVALID;
       
   351     }
       
   352 
       
   353 #ifdef _GSTREAMER_BACKEND_       
       
   354     ret = XACameraItfAdapt_GetFocusRegionPositions( impl->adapCtx, pNumPositionEntries,
       
   355                                                     pFocusPosition );
       
   356 #endif
       
   357     DEBUG_API("<-XACameraItfImpl_GetFocusRegionPositions");
       
   358     return ret;
       
   359 }
       
   360 
       
   361 /**
       
   362  * XAresult XACameraItfImpl_GetFocusModeStatus( XACameraItf self,
       
   363  *                                              XAuint32 *pFocusStatus,
       
   364  *                                              XAuint32 *pRegionStatus1,
       
   365  *                                              XAuint32 *pRegionStatus2 )
       
   366  * Description: Gets the camera focus status.
       
   367  **/
       
   368 XAresult XACameraItfImpl_GetFocusModeStatus( XACameraItf self,
       
   369                                              XAuint32 *pFocusStatus,
       
   370                                              XAuint32 *pRegionStatus1,
       
   371                                              XAuint32 *pRegionStatus2 )
       
   372 {
       
   373     XAresult ret = XA_RESULT_SUCCESS;
       
   374     XACameraItfImpl* impl = GetImpl(self);
       
   375 
       
   376     DEBUG_API("->XACameraItfImpl_GetFocusModeStatus");
       
   377     if( !impl || !*pFocusStatus )
       
   378     {
       
   379         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
       
   380         DEBUG_API("<-XACameraItfImpl_GetFocusModeStatus");
       
   381         /* invalid parameter */
       
   382         return XA_RESULT_PARAMETER_INVALID;
       
   383     }
       
   384     *pFocusStatus = impl->focusStatus;
       
   385 
       
   386     DEBUG_API("<-XACameraItfImpl_GetFocusModeStatus");
       
   387     return ret;
       
   388 }
       
   389 
       
   390 /**
       
   391  * XAresult XACameraItfImpl_SetMeteringMode( XACameraItf self, XAuint32 meteringMode )
       
   392  * Description: Sets the camera metering mode for exposure.
       
   393  **/
       
   394 XAresult XACameraItfImpl_SetMeteringMode( XACameraItf self, XAuint32 meteringMode )
       
   395 {
       
   396     XAresult ret = XA_RESULT_SUCCESS;
       
   397     XACameraItfImpl* impl = GetImpl(self);
       
   398 
       
   399     DEBUG_API("->XACameraItfImpl_SetMeteringMode");
       
   400     XA_IMPL_THREAD_SAFETY_ENTRY(XATSCamera);
       
   401 
       
   402     if( !impl || meteringMode < XA_CAMERA_METERINGMODE_AVERAGE || meteringMode >XA_CAMERA_METERINGMODE_MATRIX )
       
   403     {
       
   404         /* invalid parameter */
       
   405         XA_IMPL_THREAD_SAFETY_EXIT(XATSCamera);
       
   406         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
       
   407         DEBUG_API("<-XACameraItfImpl_SetMeteringMode");
       
   408         return XA_RESULT_PARAMETER_INVALID;
       
   409     }
       
   410 #ifdef _GSTREAMER_BACKEND_   
       
   411     ret = XACameraItfAdapt_SetMeteringMode( impl->adapCtx, meteringMode );
       
   412 #endif
       
   413     if ( ret == XA_RESULT_SUCCESS )
       
   414     {
       
   415         impl->meteringMode = meteringMode;
       
   416     }
       
   417 
       
   418     XA_IMPL_THREAD_SAFETY_EXIT(XATSCamera);
       
   419     DEBUG_API("<-XACameraItfImpl_SetMeteringMode");
       
   420     return ret;
       
   421 }
       
   422 
       
   423 /**
       
   424  * XAresult XACameraItfImpl_GetMeteringMode( XACameraItf self, XAuint32 *pMeteringMode )
       
   425  * Description: Gets the camera metering mode for exposure.
       
   426  **/
       
   427 XAresult XACameraItfImpl_GetMeteringMode( XACameraItf self, XAuint32 *pMeteringMode )
       
   428 {
       
   429     XAresult ret = XA_RESULT_SUCCESS;
       
   430     XACameraItfImpl* impl = GetImpl(self);
       
   431     DEBUG_API("->XACameraItfImpl_GetMeteringMode");
       
   432 
       
   433     if( !impl || !pMeteringMode )
       
   434     {
       
   435         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
       
   436         DEBUG_API("<-XACameraItfImpl_GetMeteringMode");
       
   437         /* invalid parameter */
       
   438         return XA_RESULT_PARAMETER_INVALID;
       
   439     }
       
   440 
       
   441     *pMeteringMode = impl->meteringMode;
       
   442 
       
   443     DEBUG_API("<-XACameraItfImpl_GetMeteringMode");
       
   444     return ret;
       
   445 }
       
   446 
       
   447 /**
       
   448  * XAresult XACameraItfImpl_SetExposureMode( XACameraItf self, XAuint32 exposure,
       
   449  *                                           XAuint32 compensation )
       
   450  * Description: Sets the camera exposure mode.
       
   451  **/
       
   452 XAresult XACameraItfImpl_SetExposureMode( XACameraItf self, XAuint32 exposure,
       
   453                                           XAuint32 compensation )
       
   454 {
       
   455     XAresult ret = XA_RESULT_SUCCESS;
       
   456     XACameraItfImpl* impl = NULL;
       
   457 
       
   458     DEBUG_API("->XACameraItfImpl_SetExposureMode");
       
   459     XA_IMPL_THREAD_SAFETY_ENTRY(XATSCamera);
       
   460     impl = GetImpl(self);
       
   461     if( !impl || exposure < XA_CAMERA_EXPOSUREMODE_MANUAL || exposure > XA_CAMERA_EXPOSUREMODE_NIGHTPORTRAIT )
       
   462     {
       
   463         XA_IMPL_THREAD_SAFETY_EXIT(XATSCamera);
       
   464         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
       
   465         DEBUG_API("<-XACameraItfImpl_SetExposureMode");
       
   466         /* invalid parameter */
       
   467         return XA_RESULT_PARAMETER_INVALID;
       
   468     }
       
   469 
       
   470     /* check is focus mode changed */
       
   471     if( impl->exposureMode != exposure || impl->compensation != compensation )
       
   472     {
       
   473 #ifdef _GSTREAMER_BACKEND_   
       
   474     ret = XACameraItfAdapt_SetExposureMode( impl->adapCtx, exposure, exposure );
       
   475 #endif
       
   476         if ( ret == XA_RESULT_SUCCESS )
       
   477         {
       
   478             impl->exposureMode = exposure;
       
   479             impl->compensation = compensation;
       
   480         }
       
   481     }
       
   482 
       
   483     XA_IMPL_THREAD_SAFETY_EXIT(XATSCamera);
       
   484     DEBUG_API("<-XACameraItfImpl_SetExposureMode");
       
   485     return ret;
       
   486 }
       
   487 
       
   488 /**
       
   489  * XAresult XACameraItfImpl_GetExposureMode( XACameraItf self, XAuint32 *pExposure,
       
   490  *                                           XAuint32 *pCompensation )
       
   491  * Description: Gets the camera exposure mode.
       
   492  **/
       
   493 XAresult XACameraItfImpl_GetExposureMode( XACameraItf self, XAuint32 *pExposure,
       
   494                                           XAuint32 *pCompensation )
       
   495 {
       
   496     XAresult ret = XA_RESULT_SUCCESS;
       
   497     XACameraItfImpl* impl = NULL;
       
   498 
       
   499     DEBUG_API("->XACameraItfImpl_GetExposureMode");
       
   500     impl = GetImpl(self);
       
   501     if( !impl || !pExposure || !pCompensation )
       
   502     {
       
   503         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
       
   504         DEBUG_API("<-XACameraItfImpl_GetExposureMode");
       
   505         /* invalid parameter */
       
   506         return XA_RESULT_PARAMETER_INVALID;
       
   507     }
       
   508 
       
   509     *pExposure = impl->exposureMode;
       
   510     *pCompensation = impl->compensation;
       
   511 
       
   512     DEBUG_API("<-XACameraItfImpl_GetExposureMode");
       
   513     return ret;
       
   514 }
       
   515 
       
   516 /**
       
   517  * XAresult XACameraItfImpl_SetISOSensitivity( XACameraItf self, XAuint32 isoSensitivity,
       
   518  *                                             XAuint32 manualSetting )
       
   519  * Description: Sets the camera ISO sensitivity.
       
   520  **/
       
   521 XAresult XACameraItfImpl_SetISOSensitivity( XACameraItf self, XAuint32 isoSensitivity,
       
   522                                             XAuint32 manualSetting )
       
   523 {
       
   524     XAresult ret = XA_RESULT_SUCCESS;
       
   525     XACameraItfImpl* impl = NULL;
       
   526 
       
   527     DEBUG_API("->XACameraItfImpl_SetISOSensitivity");
       
   528     XA_IMPL_THREAD_SAFETY_ENTRY(XATSCamera);
       
   529     impl = GetImpl(self);
       
   530     if( !impl || isoSensitivity<XA_CAMERA_ISOSENSITIVITYMODE_MANUAL || isoSensitivity>XA_CAMERA_ISOSENSITIVITYMODE_AUTO )
       
   531     {
       
   532         /* invalid parameter */
       
   533         XA_IMPL_THREAD_SAFETY_EXIT(XATSCamera);
       
   534         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
       
   535         DEBUG_API("<-XACameraItfImpl_SetISOSensitivity");
       
   536         return XA_RESULT_PARAMETER_INVALID;
       
   537     }
       
   538 
       
   539     /* check is focus mode changed */
       
   540     if( impl->isoSensitivity != isoSensitivity || impl->isoManualSetting != manualSetting )
       
   541     {
       
   542 #ifdef _GSTREAMER_BACKEND_   
       
   543     ret = XACameraItfAdapt_SetISOSensitivity( impl->adapCtx, isoSensitivity, manualSetting );
       
   544 #endif
       
   545         if ( ret == XA_RESULT_SUCCESS )
       
   546         {
       
   547             impl->isoSensitivity = isoSensitivity;
       
   548             impl->isoManualSetting = manualSetting;
       
   549         }
       
   550     }
       
   551 
       
   552     XA_IMPL_THREAD_SAFETY_EXIT(XATSCamera);
       
   553     DEBUG_API("<-XACameraItfImpl_SetISOSensitivity");
       
   554     return ret;
       
   555 }
       
   556 
       
   557 /**
       
   558  * XAresult XACameraItfImpl_GetISOSensitivity( XACameraItf self, XAuint32 *pIsoSensitivity,
       
   559  *                                             XAuint32 *pManualSetting )
       
   560  * Description: Gets the camera ISO sensitivity.
       
   561  **/
       
   562 XAresult XACameraItfImpl_GetISOSensitivity( XACameraItf self, XAuint32 *pIsoSensitivity,
       
   563                                             XAuint32 *pManualSetting )
       
   564 {
       
   565     XAresult ret = XA_RESULT_SUCCESS;
       
   566     XACameraItfImpl* impl = NULL;
       
   567 
       
   568     DEBUG_API("->XACameraItfImpl_GetISOSensitivity");
       
   569     impl = GetImpl(self);
       
   570     if( !impl || !pIsoSensitivity || !pManualSetting )
       
   571     {
       
   572         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
       
   573         DEBUG_API("<-XACameraItfImpl_GetISOSensitivity");
       
   574         /* invalid parameter */
       
   575         return XA_RESULT_PARAMETER_INVALID;
       
   576     }
       
   577 
       
   578     *pIsoSensitivity = impl->isoSensitivity;
       
   579 
       
   580     if( impl->isoSensitivity == XA_CAMERA_ISOSENSITIVITYMODE_MANUAL )
       
   581     {
       
   582         *pManualSetting = impl->isoManualSetting;
       
   583     }
       
   584     if( impl->isoSensitivity == XA_CAMERA_ISOSENSITIVITYMODE_AUTO )
       
   585     {
       
   586         *pManualSetting = 0;
       
   587     }
       
   588 
       
   589     DEBUG_API("<-XACameraItfImpl_GetISOSensitivity");
       
   590     return ret;
       
   591 }
       
   592 
       
   593 /**
       
   594  * XAresult XACameraItfImpl_SetAperture( XACameraItf self, XAuint32 aperture,
       
   595  *                                       XAuint32 manualSetting )
       
   596  * Description: Sets the camera aperture.
       
   597  **/
       
   598 XAresult XACameraItfImpl_SetAperture( XACameraItf self, XAuint32 aperture,
       
   599                                       XAuint32 manualSetting )
       
   600 {
       
   601     XAresult ret = XA_RESULT_SUCCESS;
       
   602     XACameraItfImpl* impl = NULL;
       
   603 
       
   604     DEBUG_API("->XACameraItfImpl_SetAperture");
       
   605     XA_IMPL_THREAD_SAFETY_ENTRY(XATSCamera);
       
   606     impl = GetImpl(self);
       
   607     if( !impl || aperture<XA_CAMERA_APERTUREMODE_MANUAL || aperture>XA_CAMERA_APERTUREMODE_AUTO )
       
   608     {
       
   609         /* invalid parameter */
       
   610         XA_IMPL_THREAD_SAFETY_EXIT(XATSCamera);
       
   611         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
       
   612         DEBUG_API("<-XACameraItfImpl_SetAperture");
       
   613         return XA_RESULT_PARAMETER_INVALID;
       
   614     }
       
   615 
       
   616     /* check is aperture mode or value changed */
       
   617     if( impl->aperture != aperture || impl->apertureManualSetting != manualSetting )
       
   618     {
       
   619 #ifdef _GSTREAMER_BACKEND_   
       
   620         ret = XACameraItfAdapt_SetAperture( impl->adapCtx, aperture, manualSetting );
       
   621 #endif
       
   622         if ( ret == XA_RESULT_SUCCESS )
       
   623         {
       
   624             impl->aperture = aperture;
       
   625             impl->apertureManualSetting = manualSetting;
       
   626         }
       
   627     }
       
   628 
       
   629     XA_IMPL_THREAD_SAFETY_EXIT(XATSCamera);
       
   630     DEBUG_API("<-XACameraItfImpl_SetAperture");
       
   631     return ret;
       
   632 }
       
   633 
       
   634 /**
       
   635  * XAresult XACameraItfImpl_GetAperture( XACameraItf self, XAuint32 *pAperture,
       
   636  *                                       XAuint32 *pManualSetting )
       
   637  * Description: Gets the camera aperture.
       
   638  **/
       
   639 XAresult XACameraItfImpl_GetAperture( XACameraItf self, XAuint32 *pAperture,
       
   640                                       XAuint32 *pManualSetting )
       
   641 {
       
   642     XAresult ret = XA_RESULT_SUCCESS;
       
   643     XACameraItfImpl* impl = NULL;
       
   644 
       
   645     DEBUG_API("->XACameraItfImpl_GetAperture");
       
   646     impl = GetImpl(self);
       
   647     if( !impl || !pAperture || !pManualSetting )
       
   648     {
       
   649         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
       
   650         DEBUG_API("<-XACameraItfImpl_GetAperture");
       
   651         /* invalid parameter */
       
   652         return XA_RESULT_PARAMETER_INVALID;
       
   653     }
       
   654 
       
   655     *pAperture = impl->aperture;
       
   656 
       
   657     if( impl->aperture == XA_CAMERA_APERTUREMODE_MANUAL )
       
   658     {
       
   659         *pManualSetting = impl->apertureManualSetting;
       
   660     }
       
   661     if( impl->aperture == XA_CAMERA_APERTUREMODE_AUTO )
       
   662     {
       
   663           *pManualSetting = 0;
       
   664     }
       
   665 
       
   666     DEBUG_API("<-XACameraItfImpl_GetAperture");
       
   667     return ret;
       
   668 }
       
   669 
       
   670 /**
       
   671  * XAresult XACameraItfImpl_SetShutterSpeed( XACameraItf self, XAuint32 shutterSpeed,
       
   672  *                                           XAmicrosecond manualSetting )
       
   673  * Description: Sets the camera shutter speed.
       
   674  **/
       
   675 XAresult XACameraItfImpl_SetShutterSpeed( XACameraItf self, XAuint32 shutterSpeed,
       
   676                                           XAmicrosecond manualSetting )
       
   677 {
       
   678     XAresult ret = XA_RESULT_SUCCESS;
       
   679     XACameraItfImpl* impl = NULL;
       
   680 
       
   681     DEBUG_API("->XACameraItfImpl_SetShutterSpeed");
       
   682     XA_IMPL_THREAD_SAFETY_ENTRY(XATSCamera);
       
   683     impl = GetImpl(self);
       
   684     if( !impl || shutterSpeed < XA_CAMERA_SHUTTERSPEEDMODE_MANUAL || shutterSpeed > XA_CAMERA_SHUTTERSPEEDMODE_AUTO )
       
   685     {
       
   686         /* invalid parameter */
       
   687         XA_IMPL_THREAD_SAFETY_EXIT(XATSCamera);
       
   688         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
       
   689         DEBUG_API("<-XACameraItfImpl_SetShutterSpeed");
       
   690         return XA_RESULT_PARAMETER_INVALID;
       
   691     }
       
   692 
       
   693 #ifdef _GSTREAMER_BACKEND_   
       
   694     ret = XACameraItfAdapt_SetShutterSpeed( impl->adapCtx, shutterSpeed, manualSetting );
       
   695 #endif
       
   696     if ( ret == XA_RESULT_SUCCESS )
       
   697     {
       
   698         impl->shutterManualSetting = manualSetting;
       
   699         impl->shutterSpeed = shutterSpeed;
       
   700     }
       
   701 
       
   702     XA_IMPL_THREAD_SAFETY_EXIT(XATSCamera);
       
   703     DEBUG_API("<-XACameraItfImpl_SetShutterSpeed");
       
   704     return ret;
       
   705 }
       
   706 
       
   707 /**
       
   708  * XAresult XACameraItfImpl_GetShutterSpeed( XACameraItf self, XAuint32 *pShutterSpeed,
       
   709  *                                           XAmicrosecond *pManualSetting )
       
   710  * Description: Gets the camera shutter speed.
       
   711  **/
       
   712 XAresult XACameraItfImpl_GetShutterSpeed( XACameraItf self, XAuint32 *pShutterSpeed,
       
   713                                           XAmicrosecond *pManualSetting )
       
   714 {
       
   715     XAresult ret = XA_RESULT_SUCCESS;
       
   716     XACameraItfImpl* impl = NULL;
       
   717 
       
   718     DEBUG_API("->XACameraItfImpl_GetShutterSpeed");
       
   719     impl = GetImpl(self);
       
   720     if( !impl || !pShutterSpeed || !pManualSetting )
       
   721     {
       
   722         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
       
   723         DEBUG_API("<-XACameraItfImpl_GetShutterSpeed");
       
   724         /* invalid parameter */
       
   725         return XA_RESULT_PARAMETER_INVALID;
       
   726     }
       
   727 
       
   728     *pShutterSpeed = impl->shutterSpeed;
       
   729 
       
   730     if( impl->shutterSpeed == XA_CAMERA_SHUTTERSPEEDMODE_MANUAL )
       
   731     {
       
   732         *pManualSetting = impl->shutterManualSetting;
       
   733     }
       
   734     if( impl->shutterSpeed == XA_CAMERA_SHUTTERSPEEDMODE_AUTO )
       
   735     {
       
   736         *pManualSetting = 0;
       
   737     }
       
   738 
       
   739     DEBUG_API("<-XACameraItfImpl_GetShutterSpeed");
       
   740     return ret;
       
   741 }
       
   742 
       
   743 /**
       
   744  * XAresult XACameraItfImpl_SetWhiteBalance( XACameraItf self, XAuint32 whiteBalance,
       
   745  *                                           XAuint32 manualSetting )
       
   746  * Description: Sets the camera white balance.
       
   747  **/
       
   748 XAresult XACameraItfImpl_SetWhiteBalance( XACameraItf self, XAuint32 whiteBalance,
       
   749                                           XAuint32 manualSetting )
       
   750 {
       
   751     XAresult ret = XA_RESULT_SUCCESS;
       
   752     XACameraItfImpl* impl = NULL;
       
   753 
       
   754     DEBUG_API("->XACameraItfImpl_SetWhiteBalance");
       
   755     XA_IMPL_THREAD_SAFETY_ENTRY(XATSCamera);
       
   756     impl = GetImpl(self);
       
   757     if( !impl )
       
   758     {
       
   759         XA_IMPL_THREAD_SAFETY_EXIT(XATSCamera);
       
   760         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
       
   761         DEBUG_API("<-XACameraItfImpl_SetWhiteBalance");
       
   762         /* invalid parameter */
       
   763         return XA_RESULT_PARAMETER_INVALID;
       
   764     }
       
   765 
       
   766     /* check is whitebalance mode or value changed */
       
   767     if( impl->whiteBalance != whiteBalance || impl->whiteBalManualSetting != manualSetting )
       
   768     {
       
   769 #ifdef _GSTREAMER_BACKEND_   
       
   770         ret = XACameraItfAdapt_SetWhiteBalance( impl->adapCtx, whiteBalance, manualSetting );
       
   771 #endif
       
   772         if ( ret == XA_RESULT_SUCCESS )
       
   773         {
       
   774             impl->whiteBalance = whiteBalance;
       
   775             impl->whiteBalManualSetting = manualSetting;
       
   776         }
       
   777     }
       
   778 
       
   779     XA_IMPL_THREAD_SAFETY_EXIT(XATSCamera);
       
   780     DEBUG_API("<-XACameraItfImpl_SetWhiteBalance");
       
   781     return ret;
       
   782 }
       
   783 
       
   784 /**
       
   785  * XAresult XACameraItfImpl_GetWhiteBalance( XACameraItf self, XAuint32 *pWhiteBalance,
       
   786  *                                           XAuint32 *pManualSetting )
       
   787  * Description: Gets the camera white balance.
       
   788  **/
       
   789 XAresult XACameraItfImpl_GetWhiteBalance( XACameraItf self, XAuint32 *pWhiteBalance,
       
   790                                           XAuint32 *pManualSetting )
       
   791 {
       
   792     XAresult ret = XA_RESULT_SUCCESS;
       
   793     XACameraItfImpl* impl = NULL;
       
   794 
       
   795     DEBUG_API("->XACameraItfImpl_GetWhiteBalance");
       
   796     impl = GetImpl(self);
       
   797     if( !impl || !pWhiteBalance || !pManualSetting )
       
   798     {
       
   799         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
       
   800         DEBUG_API("<-XACameraItfImpl_GetWhiteBalance");
       
   801         /* invalid parameter */
       
   802         return XA_RESULT_PARAMETER_INVALID;
       
   803     }
       
   804 
       
   805     *pWhiteBalance = impl->whiteBalance;
       
   806 
       
   807     if( impl->whiteBalance == XA_CAMERA_WHITEBALANCEMODE_MANUAL )
       
   808     {
       
   809         *pManualSetting = impl->whiteBalManualSetting;
       
   810     }
       
   811 
       
   812     DEBUG_API("<-XACameraItfImpl_GetWhiteBalance");
       
   813     return ret;
       
   814 }
       
   815 
       
   816 /**
       
   817  * XAresult XACameraItfImpl_SetAutoLocks( XACameraItf self, XAuint32 locks )
       
   818  * Description: Locks the given automatic camera settings. This method is typically
       
   819  * called when the camera trigger is half-pressed.
       
   820  **/
       
   821 XAresult XACameraItfImpl_SetAutoLocks( XACameraItf self, XAuint32 locks )
       
   822 {
       
   823     XAresult ret = XA_RESULT_SUCCESS;
       
   824     XACameraItfImpl* impl = NULL;
       
   825 
       
   826     XA_IMPL_THREAD_SAFETY_ENTRY(XATSCamera);
       
   827     DEBUG_API("->XACameraItfImpl_SetAutoLocks");
       
   828     impl = GetImpl(self);
       
   829     if( !impl || locks < XA_CAMERA_LOCK_AUTOFOCUS ||
       
   830         (locks > (  XA_CAMERA_LOCK_AUTOFOCUS & XA_CAMERA_LOCK_AUTOEXPOSURE & XA_CAMERA_LOCK_AUTOWHITEBALANCE )))
       
   831     {
       
   832         XA_IMPL_THREAD_SAFETY_EXIT(XATSCamera);
       
   833         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
       
   834         DEBUG_API("<-XACameraItfImpl_SetAutoLocks");
       
   835         /* invalid parameter */
       
   836         return XA_RESULT_PARAMETER_INVALID;
       
   837     }
       
   838 
       
   839 #ifdef _GSTREAMER_BACKEND_   
       
   840     ret = XACameraItfAdapt_SetAutoLocks( impl->adapCtx, locks );
       
   841 #endif
       
   842     if ( ret == XA_RESULT_SUCCESS )
       
   843     {
       
   844         impl->locks = locks;
       
   845     }
       
   846 
       
   847     XA_IMPL_THREAD_SAFETY_EXIT(XATSCamera);
       
   848     DEBUG_API("<-XACameraItfImpl_SetAutoLocks");
       
   849     return ret;
       
   850 }
       
   851 
       
   852 /**
       
   853  * XAresult XACameraItfImpl_GetAutoLocks( XACameraItf self, XAuint32 *locks )
       
   854  * Description: Gets the current state of the automatic camera settings locks.
       
   855  **/
       
   856 XAresult XACameraItfImpl_GetAutoLocks( XACameraItf self, XAuint32 *locks )
       
   857 {
       
   858     XAresult ret = XA_RESULT_SUCCESS;
       
   859     XACameraItfImpl* impl = NULL;
       
   860 
       
   861     DEBUG_API("->XACameraItfImpl_GetAutoLocks");
       
   862     impl = GetImpl(self);
       
   863     if( !impl || !locks )
       
   864     {
       
   865         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
       
   866         DEBUG_API("<-XACameraItfImpl_GetAutoLocks");
       
   867         /* invalid parameter */
       
   868         return XA_RESULT_PARAMETER_INVALID;
       
   869     }
       
   870 
       
   871     *locks = impl->locks;
       
   872 
       
   873     DEBUG_API("<-XACameraItfImpl_GetAutoLocks");
       
   874     return ret;
       
   875 }
       
   876 
       
   877 /**
       
   878  * XAresult XACameraItfImpl_SetZoom( XACameraItf self, XAuint32 zoom,
       
   879  *                                   XAboolean digitalEnabled, XAuint32 speed,
       
   880  *                                   XAboolean async )
       
   881  * Description: Sets the new zoom factor.
       
   882  **/
       
   883 XAresult XACameraItfImpl_SetZoom( XACameraItf self, XApermille zoom,
       
   884                                   XAboolean digitalEnabled, XAuint32 speed,
       
   885                                   XAboolean async )
       
   886 {
       
   887     XAresult ret = XA_RESULT_SUCCESS;
       
   888     XACameraItfImpl* impl = NULL;
       
   889 
       
   890     DEBUG_API("->XACameraItfImpl_SetZoom");
       
   891     XA_IMPL_THREAD_SAFETY_ENTRY(XATSCamera);
       
   892     impl = GetImpl(self);
       
   893     if( !impl || !( speed == XA_CAMERA_ZOOM_FASTEST ||  speed == XA_CAMERA_ZOOM_FAST
       
   894         || speed == XA_CAMERA_ZOOM_NORMAL || speed == XA_CAMERA_ZOOM_SLOW ) )
       
   895     {
       
   896         /* invalid parameter */
       
   897         XA_IMPL_THREAD_SAFETY_EXIT(XATSCamera);
       
   898         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
       
   899         DEBUG_API("<-XACameraItfImpl_SetZoom");
       
   900         return XA_RESULT_PARAMETER_INVALID;
       
   901     }
       
   902 
       
   903 #ifdef _GSTREAMER_BACKEND_   
       
   904     ret = XACameraItfAdapt_SetZoom( impl->adapCtx, zoom, digitalEnabled, speed, async );
       
   905 #endif
       
   906     if ( ret == XA_RESULT_SUCCESS )
       
   907     {
       
   908         impl->zoom = zoom;
       
   909         impl->digitalEnabled = digitalEnabled;
       
   910         impl->speed = speed;
       
   911         impl->async = async;
       
   912     }
       
   913 
       
   914     XA_IMPL_THREAD_SAFETY_EXIT(XATSCamera);
       
   915     DEBUG_API("<-XACameraItfImpl_SetZoom");
       
   916     return ret;
       
   917 }
       
   918 
       
   919 /**
       
   920  * XAresult XACameraItfImpl_GetZoom( XACameraItf self, XAuint32 *pZoom,
       
   921  *                                   XAboolean *pDigital )
       
   922  * Description: Gets the current zoom factor.
       
   923  **/
       
   924 XAresult XACameraItfImpl_GetZoom( XACameraItf self, XApermille *pZoom,
       
   925                                   XAboolean *pDigital )
       
   926 {
       
   927     XAresult ret = XA_RESULT_SUCCESS;
       
   928     XACameraItfImpl* impl = NULL;
       
   929 
       
   930     DEBUG_API("->XACameraItfImpl_GetZoom");
       
   931     impl = GetImpl(self);
       
   932     if( !impl || !pZoom || !pDigital )
       
   933     {
       
   934         DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
       
   935         DEBUG_API("<-XACameraItfImpl_GetZoom");
       
   936         /* invalid parameter */
       
   937         return XA_RESULT_PARAMETER_INVALID;
       
   938     }
       
   939 
       
   940     *pZoom = impl->zoom;
       
   941     *pDigital = impl->digitalEnabled;
       
   942 
       
   943     DEBUG_API("<-XACameraItfImpl_GetZoom");
       
   944     return ret;
       
   945 }
       
   946 
       
   947 
       
   948 /*****************************************************************************
       
   949  * XACameraItfImpl -specific methods
       
   950  *****************************************************************************/
       
   951 
       
   952 /* XACameraItfImpl* XACameraItfImpl_Create()
       
   953  * Description: Allocate and initialize CameraItfImpl
       
   954  */
       
   955 #ifdef _GSTREAMER_BACKEND_   
       
   956 
       
   957 XACameraItfImpl* XACameraItfImpl_Create( XAAdaptationBaseCtx *adapCtx )
       
   958 {
       
   959     XACameraItfImpl* self = (XACameraItfImpl*)
       
   960         calloc(1,sizeof(XACameraItfImpl));
       
   961     DEBUG_API("->XACameraItfImpl_Create");
       
   962     if( self )
       
   963     {
       
   964         /* init itf default implementation */
       
   965         self->itf.RegisterCallback = XACameraItfImpl_RegisterCallback;
       
   966         self->itf.SetFlashMode = XACameraItfImpl_SetFlashMode;
       
   967         self->itf.GetFlashMode = XACameraItfImpl_GetFlashMode;
       
   968         self->itf.IsFlashReady = XACameraItfImpl_IsFlashReady;
       
   969         self->itf.SetFocusMode = XACameraItfImpl_SetFocusMode;
       
   970         self->itf.GetFocusMode = XACameraItfImpl_GetFocusMode;
       
   971         self->itf.SetFocusRegionPattern = XACameraItfImpl_SetFocusRegionPattern;
       
   972         self->itf.GetFocusRegionPattern = XACameraItfImpl_GetFocusRegionPattern;
       
   973         self->itf.GetFocusRegionPositions = XACameraItfImpl_GetFocusRegionPositions;
       
   974         self->itf.GetFocusModeStatus = XACameraItfImpl_GetFocusModeStatus;
       
   975         self->itf.SetMeteringMode = XACameraItfImpl_SetMeteringMode;
       
   976         self->itf.GetMeteringMode = XACameraItfImpl_GetMeteringMode;
       
   977         self->itf.SetExposureMode = XACameraItfImpl_SetExposureMode;
       
   978         self->itf.GetExposureMode = XACameraItfImpl_GetExposureMode;
       
   979         self->itf.SetISOSensitivity = XACameraItfImpl_SetISOSensitivity;
       
   980         self->itf.GetISOSensitivity = XACameraItfImpl_GetISOSensitivity;
       
   981         self->itf.SetAperture = XACameraItfImpl_SetAperture;
       
   982         self->itf.GetAperture = XACameraItfImpl_GetAperture;
       
   983         self->itf.SetShutterSpeed = XACameraItfImpl_SetShutterSpeed;
       
   984         self->itf.GetShutterSpeed = XACameraItfImpl_GetShutterSpeed;
       
   985         self->itf.SetWhiteBalance = XACameraItfImpl_SetWhiteBalance;
       
   986         self->itf.GetWhiteBalance = XACameraItfImpl_GetWhiteBalance;
       
   987         self->itf.SetAutoLocks = XACameraItfImpl_SetAutoLocks;
       
   988         self->itf.GetAutoLocks = XACameraItfImpl_GetAutoLocks;
       
   989         self->itf.SetZoom = XACameraItfImpl_SetZoom;
       
   990         self->itf.GetZoom = XACameraItfImpl_GetZoom;
       
   991 
       
   992 
       
   993         /* init variables */
       
   994         self->flashReady = XA_BOOLEAN_TRUE;
       
   995         self->adapCtx = adapCtx;
       
   996         self->cbPtrToSelf = NULL;
       
   997 #ifdef _GSTREAMER_BACKEND_
       
   998         XAAdaptationBase_AddEventHandler( adapCtx, &XACameraItfImp_AdaptCb, XA_CAMERAITFEVENTS, self );
       
   999 #endif
       
  1000         self->self = self;
       
  1001     }
       
  1002 
       
  1003     DEBUG_API("<-XACameraItfImpl_Create");
       
  1004     return self;
       
  1005 }
       
  1006 
       
  1007 #endif
       
  1008 /* void XACameraItfImpl_Free(XACameraItfImpl* self)
       
  1009  * Description: Free all resources reserved at XACameraItfImpl_Create
       
  1010  */
       
  1011 void XACameraItfImpl_Free(XACameraItfImpl* self)
       
  1012 {
       
  1013     DEBUG_API("->XACameraItfImpl_Free");
       
  1014     assert( self==self->self );
       
  1015 #ifdef _GSTREAMER_BACKEND_   
       
  1016     XAAdaptationBase_RemoveEventHandler( self->adapCtx, &XACameraItfImp_AdaptCb );
       
  1017 #endif
       
  1018     free( self );
       
  1019     DEBUG_API("<-XACameraItfImpl_Free");
       
  1020 }
       
  1021 
       
  1022 #ifdef _GSTREAMER_BACKEND_
       
  1023 /* void XACameraItfAdapt_AdaptCb( void *pHandlerCtx, XAAdaptEvent *event )
       
  1024  * @param void *pHandlerCtx - pointer to cb context (XACameraItfImpl)
       
  1025  * @param XAAdaptEvent *event  - Event
       
  1026  * Description: Event handler for adaptation events
       
  1027  */
       
  1028 void XACameraItfImp_AdaptCb( void *pHandlerCtx, XAAdaptEvent *event )
       
  1029 {
       
  1030     XACameraItfImpl* impl =(XACameraItfImpl*)pHandlerCtx;
       
  1031     XAuint32 eventData=0;
       
  1032 
       
  1033     DEBUG_API("->XACameraItfImp_AdaptCb");
       
  1034     if(!impl)
       
  1035     {
       
  1036         DEBUG_ERR("XACameraItfAdapt_AdaptCb, invalid context pointer!");
       
  1037         DEBUG_API("<-XACameraItfImp_AdaptCb");
       
  1038         return;
       
  1039     }
       
  1040     assert(event);
       
  1041 
       
  1042     if( event->data )
       
  1043     {
       
  1044         eventData = *(XAuint32*)event->data;
       
  1045     }
       
  1046     switch( event->eventid )
       
  1047     {
       
  1048         case XA_CAMERACBEVENT_FOCUSSTATUS:
       
  1049             impl->focusStatus = eventData;
       
  1050             break;
       
  1051         case XA_CAMERACBEVENT_ZOOMSTATUS:
       
  1052             impl->zoom = eventData;
       
  1053             break;
       
  1054         case XA_CAMERACBEVENT_EXPOSURESTATUS:
       
  1055             impl->focusStatus = eventData;
       
  1056             break;
       
  1057         case XA_CAMERACBEVENT_FLASHREADY:
       
  1058             impl->flashReady = XA_BOOLEAN_TRUE;
       
  1059             break;
       
  1060         case XA_CAMERACBEVENT_WHITEBALANCELOCKED:
       
  1061         case XA_CAMERACBEVENT_ROTATION:
       
  1062         default:
       
  1063             break;
       
  1064     }
       
  1065 
       
  1066     if( impl->callback )
       
  1067     {
       
  1068         impl->callback( impl->cbPtrToSelf, impl->context, event->eventid, eventData );
       
  1069     }
       
  1070     DEBUG_API("<-XACameraItfImp_AdaptCb");
       
  1071 }
       
  1072 
       
  1073 #endif