khronosfws/openmax_al/src/gst_adaptation/xastaticcameracapsadaptation.c
author hgs
Fri, 14 May 2010 18:19:45 -0500
changeset 20 b67dd1fc57c5
parent 19 4a629bc82c5e
permissions -rw-r--r--
201019
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
19
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description: 
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
#include <stdio.h>
hgs
parents:
diff changeset
    19
#include <string.h>
20
hgs
parents: 19
diff changeset
    20
#include <gst/gst.h>
hgs
parents: 19
diff changeset
    21
#include <gst/interfaces/photography.h>
19
hgs
parents:
diff changeset
    22
#include "xaglobals.h"
hgs
parents:
diff changeset
    23
#include "xastaticcameracapsadaptation.h"
hgs
parents:
diff changeset
    24
#include "xaadptbasectx.h"
hgs
parents:
diff changeset
    25
hgs
parents:
diff changeset
    26
#define XACAMERAIMPL_DEFAULT_MAX_ZOOM 16000 /* 16x */
hgs
parents:
diff changeset
    27
#define XACAMERAIMPL_DEFAULT_MAX_ISO 1600
hgs
parents:
diff changeset
    28
#define XACAMERAIMPL_DEFAULT_MIN_ISO 200
hgs
parents:
diff changeset
    29
#define XACAMERAIMPL_DEFAULT_MAX_APERTURE 3200 /* f/32 */
hgs
parents:
diff changeset
    30
#define XACAMERAIMPL_DEFAULT_MIN_APERTURE 75   /* f/0.75 */
hgs
parents:
diff changeset
    31
hgs
parents:
diff changeset
    32
static XAStaticCameraCapsData allCameraCaps[] =
hgs
parents:
diff changeset
    33
{
hgs
parents:
diff changeset
    34
#ifdef XA_USE_TEST_PLUGINS
hgs
parents:
diff changeset
    35
        { XA_ADAPTID_VIDEOTESTSRC, { (XAchar*)"videotestsrc", 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
hgs
parents:
diff changeset
    36
#else
hgs
parents:
diff changeset
    37
        { XA_ADAPTID_V4L2SRC, { (XAchar*)"v4l2src", 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
hgs
parents:
diff changeset
    38
#endif
hgs
parents:
diff changeset
    39
};
hgs
parents:
diff changeset
    40
hgs
parents:
diff changeset
    41
/*forward declaration*/
hgs
parents:
diff changeset
    42
XAuint32 XAStaticCameraCaps_IdxFromId(XAuint32 cameraDeviceID);
hgs
parents:
diff changeset
    43
hgs
parents:
diff changeset
    44
/*
hgs
parents:
diff changeset
    45
 * void XAStaticCameraCaps_Init()
hgs
parents:
diff changeset
    46
 */
hgs
parents:
diff changeset
    47
void XAStaticCameraCaps_Init()
hgs
parents:
diff changeset
    48
{
hgs
parents:
diff changeset
    49
    GstElement* element=NULL;
hgs
parents:
diff changeset
    50
    GstPhotoCaps photoCaps = GST_PHOTOGRAPHY_CAPS_NONE;
hgs
parents:
diff changeset
    51
    GError* gerror=NULL;
hgs
parents:
diff changeset
    52
    guint32 i=0;
hgs
parents:
diff changeset
    53
    guint32 numDevices = sizeof(allCameraCaps)/sizeof(XAStaticCameraCapsData);
hgs
parents:
diff changeset
    54
    gboolean detected = FALSE;
hgs
parents:
diff changeset
    55
hgs
parents:
diff changeset
    56
hgs
parents:
diff changeset
    57
    if ( !gst_init_check( NULL, NULL, &gerror ) )
hgs
parents:
diff changeset
    58
    {
hgs
parents:
diff changeset
    59
        DEBUG_ERR("Gst Initalization failure.");
hgs
parents:
diff changeset
    60
        return;
hgs
parents:
diff changeset
    61
    }
hgs
parents:
diff changeset
    62
    for(i=0;i<numDevices;i++)
hgs
parents:
diff changeset
    63
    {
hgs
parents:
diff changeset
    64
        /*init values*/
hgs
parents:
diff changeset
    65
        allCameraCaps[i].XAcaps.orientation = XA_ORIENTATION_UNKNOWN;
hgs
parents:
diff changeset
    66
        allCameraCaps[i].XAcaps.featuresSupported = 0;
hgs
parents:
diff changeset
    67
        allCameraCaps[i].XAcaps.exposureModesSupported = 0;
hgs
parents:
diff changeset
    68
        allCameraCaps[i].XAcaps.flashModesSupported = 0;
hgs
parents:
diff changeset
    69
        allCameraCaps[i].XAcaps.focusModesSupported = 0;
hgs
parents:
diff changeset
    70
        allCameraCaps[i].XAcaps.meteringModesSupported = 0;
hgs
parents:
diff changeset
    71
        allCameraCaps[i].XAcaps.whiteBalanceModesSupported = 0;
hgs
parents:
diff changeset
    72
        allCameraCaps[i].XAcaps.maxWidth = 0;
hgs
parents:
diff changeset
    73
        allCameraCaps[i].XAcaps.maxHeight = 0;
hgs
parents:
diff changeset
    74
hgs
parents:
diff changeset
    75
        element = gst_element_factory_make((char*)allCameraCaps[i].XAcaps.name,NULL);
hgs
parents:
diff changeset
    76
        if(element)
hgs
parents:
diff changeset
    77
        {
hgs
parents:
diff changeset
    78
            GstPad* srcPad = gst_element_get_static_pad( element, "src");
hgs
parents:
diff changeset
    79
            if (srcPad)
hgs
parents:
diff changeset
    80
            {
hgs
parents:
diff changeset
    81
                guint32 j = 0, cnt = 0, width = 0, height = 0;
hgs
parents:
diff changeset
    82
                GstCaps* srcCaps = gst_pad_get_caps( srcPad );
hgs
parents:
diff changeset
    83
hgs
parents:
diff changeset
    84
                /* search caps for absolute maximum values */
hgs
parents:
diff changeset
    85
                if(srcCaps)
hgs
parents:
diff changeset
    86
                {
hgs
parents:
diff changeset
    87
                    cnt = gst_caps_get_size( srcCaps );
hgs
parents:
diff changeset
    88
                    for( j = 0; j < cnt; j++ )
hgs
parents:
diff changeset
    89
                    {
hgs
parents:
diff changeset
    90
                        G_CONST_RETURN GValue* value = NULL;
hgs
parents:
diff changeset
    91
                        GstStructure* capsStruct = gst_caps_get_structure( srcCaps, j );
hgs
parents:
diff changeset
    92
hgs
parents:
diff changeset
    93
                        if(capsStruct)
hgs
parents:
diff changeset
    94
                        {
hgs
parents:
diff changeset
    95
                            value = gst_structure_get_value( capsStruct, "width" );
hgs
parents:
diff changeset
    96
                            if (GST_VALUE_HOLDS_INT_RANGE(value))
hgs
parents:
diff changeset
    97
                            {
hgs
parents:
diff changeset
    98
                                detected = TRUE;
hgs
parents:
diff changeset
    99
                                width = gst_value_get_int_range_max( value );
hgs
parents:
diff changeset
   100
                                if(width > allCameraCaps[i].XAcaps.maxWidth)
hgs
parents:
diff changeset
   101
                                {
hgs
parents:
diff changeset
   102
                                    allCameraCaps[i].XAcaps.maxWidth = width;
hgs
parents:
diff changeset
   103
                                }
hgs
parents:
diff changeset
   104
                            }
hgs
parents:
diff changeset
   105
hgs
parents:
diff changeset
   106
                            value = gst_structure_get_value( capsStruct, "height" );
hgs
parents:
diff changeset
   107
                            if (GST_VALUE_HOLDS_INT_RANGE(value))
hgs
parents:
diff changeset
   108
                            {
hgs
parents:
diff changeset
   109
                                detected = TRUE;
hgs
parents:
diff changeset
   110
                                height = gst_value_get_int_range_max( value );
hgs
parents:
diff changeset
   111
                                if(height > allCameraCaps[i].XAcaps.maxHeight)
hgs
parents:
diff changeset
   112
                                {
hgs
parents:
diff changeset
   113
                                    allCameraCaps[i].XAcaps.maxHeight = height;
hgs
parents:
diff changeset
   114
                                }
hgs
parents:
diff changeset
   115
                            }
hgs
parents:
diff changeset
   116
                        }
hgs
parents:
diff changeset
   117
                    }
hgs
parents:
diff changeset
   118
                }
hgs
parents:
diff changeset
   119
            }
hgs
parents:
diff changeset
   120
hgs
parents:
diff changeset
   121
            if(!detected)
hgs
parents:
diff changeset
   122
            {
hgs
parents:
diff changeset
   123
                DEBUG_ERR("Warn: could not get maxWidth and maxHeight from GST!!");
hgs
parents:
diff changeset
   124
                allCameraCaps[i].XAcaps.maxWidth = 0x7FFFFFFF;
hgs
parents:
diff changeset
   125
                allCameraCaps[i].XAcaps.maxHeight =  0x7FFFFFFF;
hgs
parents:
diff changeset
   126
            }
hgs
parents:
diff changeset
   127
hgs
parents:
diff changeset
   128
            if(GST_IS_PHOTOGRAPHY(element))
hgs
parents:
diff changeset
   129
            {
hgs
parents:
diff changeset
   130
                photoCaps = gst_photography_get_capabilities(GST_PHOTOGRAPHY(element));
hgs
parents:
diff changeset
   131
                if( photoCaps & GST_PHOTOGRAPHY_CAPS_FLASH )
hgs
parents:
diff changeset
   132
                {
hgs
parents:
diff changeset
   133
                    allCameraCaps[i].XAcaps.featuresSupported |= XA_CAMERACAP_FLASH;
hgs
parents:
diff changeset
   134
                    allCameraCaps[i].XAcaps.flashModesSupported = XA_CAMERA_FLASHMODE_OFF |
hgs
parents:
diff changeset
   135
                                                       XA_CAMERA_FLASHMODE_ON |
hgs
parents:
diff changeset
   136
                                                       XA_CAMERA_FLASHMODE_AUTO |
hgs
parents:
diff changeset
   137
                                                       XA_CAMERA_FLASHMODE_REDEYEREDUCTION |
hgs
parents:
diff changeset
   138
                                                       XA_CAMERA_FLASHMODE_FILLIN;
hgs
parents:
diff changeset
   139
                }
hgs
parents:
diff changeset
   140
                if( photoCaps & GST_PHOTOGRAPHY_CAPS_FOCUS )
hgs
parents:
diff changeset
   141
                {
hgs
parents:
diff changeset
   142
                    allCameraCaps[i].XAcaps.featuresSupported |= XA_CAMERACAP_AUTOFOCUS;
hgs
parents:
diff changeset
   143
                    allCameraCaps[i].XAcaps.focusModesSupported = XA_CAMERA_FOCUSMODE_AUTO;
hgs
parents:
diff changeset
   144
                }
hgs
parents:
diff changeset
   145
                if( photoCaps & GST_PHOTOGRAPHY_CAPS_EXPOSURE )
hgs
parents:
diff changeset
   146
                {
hgs
parents:
diff changeset
   147
                    allCameraCaps[i].XAcaps.featuresSupported |= XA_CAMERACAP_MANUALEXPOSURE;
hgs
parents:
diff changeset
   148
                    allCameraCaps[i].XAcaps.exposureModesSupported = XA_CAMERA_EXPOSUREMODE_AUTO |
hgs
parents:
diff changeset
   149
                                                          XA_CAMERA_EXPOSUREMODE_PORTRAIT |
hgs
parents:
diff changeset
   150
                                                          XA_CAMERA_EXPOSUREMODE_SPORTS |
hgs
parents:
diff changeset
   151
                                                          XA_CAMERA_EXPOSUREMODE_NIGHT;
hgs
parents:
diff changeset
   152
                }
hgs
parents:
diff changeset
   153
hgs
parents:
diff changeset
   154
                if( photoCaps & GST_PHOTOGRAPHY_CAPS_ISO_SPEED )
hgs
parents:
diff changeset
   155
                {
hgs
parents:
diff changeset
   156
                    allCameraCaps[i].XAcaps.featuresSupported |= XA_CAMERACAP_MANUALISOSENSITIVITY;
hgs
parents:
diff changeset
   157
                }
hgs
parents:
diff changeset
   158
                if( photoCaps & GST_PHOTOGRAPHY_CAPS_APERTURE )
hgs
parents:
diff changeset
   159
                {
hgs
parents:
diff changeset
   160
                    allCameraCaps[i].XAcaps.featuresSupported |= XA_CAMERACAP_MANUALAPERTURE;
hgs
parents:
diff changeset
   161
                }
hgs
parents:
diff changeset
   162
                if( photoCaps & GST_PHOTOGRAPHY_CAPS_WB_MODE )
hgs
parents:
diff changeset
   163
                {
hgs
parents:
diff changeset
   164
                    allCameraCaps[i].XAcaps.featuresSupported |= XA_CAMERACAP_AUTOWHITEBALANCE;
hgs
parents:
diff changeset
   165
                    allCameraCaps[i].XAcaps.whiteBalanceModesSupported = XA_CAMERA_WHITEBALANCEMODE_AUTO |
hgs
parents:
diff changeset
   166
                                                              XA_CAMERA_WHITEBALANCEMODE_SUNLIGHT |
hgs
parents:
diff changeset
   167
                                                              XA_CAMERA_WHITEBALANCEMODE_CLOUDY |
hgs
parents:
diff changeset
   168
                                                              XA_CAMERA_WHITEBALANCEMODE_TUNGSTEN |
hgs
parents:
diff changeset
   169
                                                              XA_CAMERA_WHITEBALANCEMODE_FLUORESCENT |
hgs
parents:
diff changeset
   170
                                                              XA_CAMERA_WHITEBALANCEMODE_SUNSET;
hgs
parents:
diff changeset
   171
                }
hgs
parents:
diff changeset
   172
                if( photoCaps & GST_PHOTOGRAPHY_CAPS_ZOOM )
hgs
parents:
diff changeset
   173
                {
hgs
parents:
diff changeset
   174
                    allCameraCaps[i].XAcaps.featuresSupported |= XA_CAMERACAP_DIGITALZOOM;
hgs
parents:
diff changeset
   175
                }
hgs
parents:
diff changeset
   176
            }
hgs
parents:
diff changeset
   177
        }
hgs
parents:
diff changeset
   178
    }
hgs
parents:
diff changeset
   179
}
hgs
parents:
diff changeset
   180
hgs
parents:
diff changeset
   181
/*
hgs
parents:
diff changeset
   182
 * XAresult XAStaticCameraCaps_GetCameraCapabilities(
hgs
parents:
diff changeset
   183
 *                       XAuint32* pIndex,
hgs
parents:
diff changeset
   184
 *                       XAuint32* pCameraDeviceID,
hgs
parents:
diff changeset
   185
 *                       XACameraDescriptor* pDescriptor)
hgs
parents:
diff changeset
   186
 *
hgs
parents:
diff changeset
   187
 */
hgs
parents:
diff changeset
   188
XAresult XAStaticCameraCaps_GetCameraCapabilities(
hgs
parents:
diff changeset
   189
                        XAuint32* pIndex,
hgs
parents:
diff changeset
   190
                        XAuint32* pCameraDeviceID,
hgs
parents:
diff changeset
   191
                        XACameraDescriptor* pDescriptor)
hgs
parents:
diff changeset
   192
{
hgs
parents:
diff changeset
   193
    guint32 idx = 0;
hgs
parents:
diff changeset
   194
    guint32 numDevices = sizeof(allCameraCaps)/sizeof(XAStaticCameraCapsData);
hgs
parents:
diff changeset
   195
hgs
parents:
diff changeset
   196
    if(!pDescriptor)
hgs
parents:
diff changeset
   197
    {
hgs
parents:
diff changeset
   198
        if(pIndex) /* query number of devices */
hgs
parents:
diff changeset
   199
        {
hgs
parents:
diff changeset
   200
            *pIndex = numDevices;
hgs
parents:
diff changeset
   201
            DEBUG_API("<-XAStaticCameraCaps_GetCameraCapabilities");
hgs
parents:
diff changeset
   202
            return XA_RESULT_SUCCESS;
hgs
parents:
diff changeset
   203
        }
hgs
parents:
diff changeset
   204
        else
hgs
parents:
diff changeset
   205
        {
hgs
parents:
diff changeset
   206
            DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
hgs
parents:
diff changeset
   207
            DEBUG_API("<-XAStaticCameraCaps_GetCameraCapabilities");
hgs
parents:
diff changeset
   208
            return XA_RESULT_PARAMETER_INVALID;
hgs
parents:
diff changeset
   209
        }
hgs
parents:
diff changeset
   210
    }
hgs
parents:
diff changeset
   211
hgs
parents:
diff changeset
   212
    if( !pIndex && pCameraDeviceID )
hgs
parents:
diff changeset
   213
    {
hgs
parents:
diff changeset
   214
        /* get index from ID */
hgs
parents:
diff changeset
   215
        idx = XAStaticCameraCaps_IdxFromId(*pCameraDeviceID);
hgs
parents:
diff changeset
   216
    }
hgs
parents:
diff changeset
   217
    else if( pIndex && pCameraDeviceID )
hgs
parents:
diff changeset
   218
    {
hgs
parents:
diff changeset
   219
        idx = *pIndex;
hgs
parents:
diff changeset
   220
    }
hgs
parents:
diff changeset
   221
    else
hgs
parents:
diff changeset
   222
    {
hgs
parents:
diff changeset
   223
        DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
hgs
parents:
diff changeset
   224
        DEBUG_API("<-XAStaticCameraCaps_GetCameraCapabilities");
hgs
parents:
diff changeset
   225
        return XA_RESULT_PARAMETER_INVALID;
hgs
parents:
diff changeset
   226
    }
hgs
parents:
diff changeset
   227
hgs
parents:
diff changeset
   228
    if( idx >= numDevices )
hgs
parents:
diff changeset
   229
    {
hgs
parents:
diff changeset
   230
        DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
hgs
parents:
diff changeset
   231
        DEBUG_API("<-XAStaticCameraCaps_GetCameraCapabilities");
hgs
parents:
diff changeset
   232
        return XA_RESULT_PARAMETER_INVALID;
hgs
parents:
diff changeset
   233
    }
hgs
parents:
diff changeset
   234
    else
hgs
parents:
diff changeset
   235
    {
hgs
parents:
diff changeset
   236
        /*fill capabilities*/
hgs
parents:
diff changeset
   237
        memcpy(pDescriptor, &allCameraCaps[idx].XAcaps, sizeof(XACameraDescriptor) );
hgs
parents:
diff changeset
   238
        *pCameraDeviceID = allCameraCaps[idx].deviceID;
hgs
parents:
diff changeset
   239
    }
hgs
parents:
diff changeset
   240
hgs
parents:
diff changeset
   241
    DEBUG_API("<-XAStaticCameraCaps_GetCameraCapabilities");
hgs
parents:
diff changeset
   242
    return XA_RESULT_SUCCESS;
hgs
parents:
diff changeset
   243
}
hgs
parents:
diff changeset
   244
hgs
parents:
diff changeset
   245
/*
hgs
parents:
diff changeset
   246
 * XAresult XAStaticCameraCaps_QueryFocusRegionPatterns(
hgs
parents:
diff changeset
   247
 *                       XAuint32 cameraDeviceID,
hgs
parents:
diff changeset
   248
 *                       XAuint32* pPatternID,
hgs
parents:
diff changeset
   249
 *                       XAuint32* pFocusPattern,
hgs
parents:
diff changeset
   250
 *                       XAuint32* pCustomPoints1,
hgs
parents:
diff changeset
   251
 *                       XAuint32* pCustomPoints2)
hgs
parents:
diff changeset
   252
 */
hgs
parents:
diff changeset
   253
XAresult XAStaticCameraCaps_QueryFocusRegionPatterns(
hgs
parents:
diff changeset
   254
                        XAuint32 cameraDeviceID,
hgs
parents:
diff changeset
   255
                        XAuint32* pPatternID,
hgs
parents:
diff changeset
   256
                        XAuint32* pFocusPattern,
hgs
parents:
diff changeset
   257
                        XAuint32* pCustomPoints1,
hgs
parents:
diff changeset
   258
                        XAuint32* pCustomPoints2)
hgs
parents:
diff changeset
   259
{
hgs
parents:
diff changeset
   260
    DEBUG_API("->XAStaticCameraCaps_QueryFocusRegionPatterns");
hgs
parents:
diff changeset
   261
    if( !pFocusPattern )
hgs
parents:
diff changeset
   262
    {   /* return number of focus patterns */
hgs
parents:
diff changeset
   263
        if(!pPatternID)
hgs
parents:
diff changeset
   264
        {
hgs
parents:
diff changeset
   265
            DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
hgs
parents:
diff changeset
   266
            DEBUG_API("<-XAStaticCameraCaps_QueryFocusRegionPatterns");
hgs
parents:
diff changeset
   267
            return XA_RESULT_PARAMETER_INVALID;
hgs
parents:
diff changeset
   268
        }
hgs
parents:
diff changeset
   269
        /* no support in GST */
hgs
parents:
diff changeset
   270
        DEBUG_INFO("No support in gst");
hgs
parents:
diff changeset
   271
        *pPatternID = 0;
hgs
parents:
diff changeset
   272
    }
hgs
parents:
diff changeset
   273
    else
hgs
parents:
diff changeset
   274
    {
hgs
parents:
diff changeset
   275
        if( !(pFocusPattern&&pCustomPoints1&&pCustomPoints2) )
hgs
parents:
diff changeset
   276
        {
hgs
parents:
diff changeset
   277
            DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
hgs
parents:
diff changeset
   278
            DEBUG_API("<-XAStaticCameraCaps_QueryFocusRegionPatterns");
hgs
parents:
diff changeset
   279
            return XA_RESULT_PARAMETER_INVALID;
hgs
parents:
diff changeset
   280
        }
hgs
parents:
diff changeset
   281
        DEBUG_INFO("No support in gst");
hgs
parents:
diff changeset
   282
        *pFocusPattern = 0;
hgs
parents:
diff changeset
   283
        *pCustomPoints1 = 0;
hgs
parents:
diff changeset
   284
        *pCustomPoints2 = 0;
hgs
parents:
diff changeset
   285
        /*no focus patterns, index always out of range*/
hgs
parents:
diff changeset
   286
        DEBUG_API("<-XAStaticCameraCaps_QueryFocusRegionPatterns");
hgs
parents:
diff changeset
   287
        return XA_RESULT_PARAMETER_INVALID;
hgs
parents:
diff changeset
   288
    }
hgs
parents:
diff changeset
   289
hgs
parents:
diff changeset
   290
    DEBUG_API("<-XAStaticCameraCaps_QueryFocusRegionPatterns");
hgs
parents:
diff changeset
   291
    return XA_RESULT_SUCCESS;
hgs
parents:
diff changeset
   292
}
hgs
parents:
diff changeset
   293
hgs
parents:
diff changeset
   294
/*
hgs
parents:
diff changeset
   295
 * XAresult XAStaticCameraCaps_GetSupportedAutoLocks(
hgs
parents:
diff changeset
   296
 *                       XAuint32 cameraDeviceID,
hgs
parents:
diff changeset
   297
 *                       XAuint32* pNumCombinations,
hgs
parents:
diff changeset
   298
 *                       XAuint32** ppLocks)
hgs
parents:
diff changeset
   299
 */
hgs
parents:
diff changeset
   300
XAresult XAStaticCameraCaps_GetSupportedAutoLocks(
hgs
parents:
diff changeset
   301
                        XAuint32 cameraDeviceID,
hgs
parents:
diff changeset
   302
                        XAuint32* pNumCombinations,
hgs
parents:
diff changeset
   303
                        XAuint32** ppLocks)
hgs
parents:
diff changeset
   304
{
hgs
parents:
diff changeset
   305
    DEBUG_API("->XAStaticCameraCaps_GetSupportedAutoLocks");
hgs
parents:
diff changeset
   306
    /* No support in gst.
hgs
parents:
diff changeset
   307
     * Spec: "If no settings are supported,
hgs
parents:
diff changeset
   308
     *        this method returns XA_RESULT_FEATURE_UNSUPPORTED."
hgs
parents:
diff changeset
   309
     **/
hgs
parents:
diff changeset
   310
    DEBUG_INFO("No support in gst");
hgs
parents:
diff changeset
   311
    if(pNumCombinations)
hgs
parents:
diff changeset
   312
    {
hgs
parents:
diff changeset
   313
        *pNumCombinations = 0;
hgs
parents:
diff changeset
   314
    }
hgs
parents:
diff changeset
   315
    DEBUG_API("<-XAStaticCameraCaps_GetSupportedAutoLocks");
hgs
parents:
diff changeset
   316
    return XA_RESULT_FEATURE_UNSUPPORTED;
hgs
parents:
diff changeset
   317
}
hgs
parents:
diff changeset
   318
hgs
parents:
diff changeset
   319
/*
hgs
parents:
diff changeset
   320
 * XAresult XAStaticCameraCaps_GetSupportedFocusManualSettings(
hgs
parents:
diff changeset
   321
 *                       XAuint32 cameraDeviceID,
hgs
parents:
diff changeset
   322
 *                       XAboolean macroEnabled,
hgs
parents:
diff changeset
   323
 *                       XAmillimeter* pMinValue,
hgs
parents:
diff changeset
   324
 *                       XAmillimeter* pMaxValue,
hgs
parents:
diff changeset
   325
 *                       XAuint32* pNumSettings,
hgs
parents:
diff changeset
   326
 *                       XAmillimeter** ppSettings)
hgs
parents:
diff changeset
   327
 */
hgs
parents:
diff changeset
   328
XAresult XAStaticCameraCaps_GetSupportedFocusManualSettings(
hgs
parents:
diff changeset
   329
                        XAuint32 cameraDeviceID,
hgs
parents:
diff changeset
   330
                        XAboolean macroEnabled,
hgs
parents:
diff changeset
   331
                        XAmillimeter* pMinValue,
hgs
parents:
diff changeset
   332
                        XAmillimeter* pMaxValue,
hgs
parents:
diff changeset
   333
                        XAuint32* pNumSettings,
hgs
parents:
diff changeset
   334
                        XAmillimeter** ppSettings)
hgs
parents:
diff changeset
   335
{
hgs
parents:
diff changeset
   336
    DEBUG_API("->XAStaticCameraCaps_GetSupportedFocusManualSettings");
hgs
parents:
diff changeset
   337
    /* No support in gst.
hgs
parents:
diff changeset
   338
     * Spec: "If no settings are supported,
hgs
parents:
diff changeset
   339
     *        this method returns XA_RESULT_FEATURE_UNSUPPORTED."
hgs
parents:
diff changeset
   340
     **/
hgs
parents:
diff changeset
   341
    DEBUG_INFO("No support in gst");
hgs
parents:
diff changeset
   342
    if(pNumSettings)
hgs
parents:
diff changeset
   343
    {
hgs
parents:
diff changeset
   344
        *pNumSettings = 0;
hgs
parents:
diff changeset
   345
    }
hgs
parents:
diff changeset
   346
    DEBUG_API("<-XAStaticCameraCaps_GetSupportedFocusManualSettings");
hgs
parents:
diff changeset
   347
    return XA_RESULT_FEATURE_UNSUPPORTED;
hgs
parents:
diff changeset
   348
}
hgs
parents:
diff changeset
   349
hgs
parents:
diff changeset
   350
/*
hgs
parents:
diff changeset
   351
 * XAresult XAStaticCameraCaps_GetSupportedISOSensitivitySettings(
hgs
parents:
diff changeset
   352
 *                       XAuint32 cameraDeviceID,
hgs
parents:
diff changeset
   353
 *                       XAuint32* pMinValue,
hgs
parents:
diff changeset
   354
 *                       XAuint32* pMaxValue,
hgs
parents:
diff changeset
   355
 *                       XAuint32* pNumSettings,
hgs
parents:
diff changeset
   356
 *                       XAuint32** ppSettings)
hgs
parents:
diff changeset
   357
 */
hgs
parents:
diff changeset
   358
XAresult XAStaticCameraCaps_GetSupportedISOSensitivitySettings(
hgs
parents:
diff changeset
   359
                        XAuint32 cameraDeviceID,
hgs
parents:
diff changeset
   360
                        XAuint32* pMinValue,
hgs
parents:
diff changeset
   361
                        XAuint32* pMaxValue,
hgs
parents:
diff changeset
   362
                        XAuint32* pNumSettings,
hgs
parents:
diff changeset
   363
                        XAuint32** ppSettings)
hgs
parents:
diff changeset
   364
{
hgs
parents:
diff changeset
   365
    DEBUG_API("->XAStaticCameraCaps_GetSupportedISOSensitivitySettings");
hgs
parents:
diff changeset
   366
    if( !pNumSettings )
hgs
parents:
diff changeset
   367
    {
hgs
parents:
diff changeset
   368
        return XA_RESULT_PARAMETER_INVALID;
hgs
parents:
diff changeset
   369
    }
hgs
parents:
diff changeset
   370
    if( !ppSettings )
hgs
parents:
diff changeset
   371
    {
hgs
parents:
diff changeset
   372
        /* no items in ppSettings array*/
hgs
parents:
diff changeset
   373
        *pNumSettings = 0;
hgs
parents:
diff changeset
   374
    }
hgs
parents:
diff changeset
   375
    else
hgs
parents:
diff changeset
   376
    {
hgs
parents:
diff changeset
   377
        if( !(pMinValue && pMaxValue) )
hgs
parents:
diff changeset
   378
        {
hgs
parents:
diff changeset
   379
            DEBUG_API("<-XAStaticCameraCaps_GetSupportedISOSensitivitySettings");
hgs
parents:
diff changeset
   380
            return XA_RESULT_PARAMETER_INVALID;
hgs
parents:
diff changeset
   381
        }
hgs
parents:
diff changeset
   382
        /* continuous range */
hgs
parents:
diff changeset
   383
        *pNumSettings = 0;
hgs
parents:
diff changeset
   384
        /* NOTE: no way to query actual values from gstreamer, use hardcoded default values */
hgs
parents:
diff changeset
   385
        *pMinValue = XACAMERAIMPL_DEFAULT_MIN_ISO;
hgs
parents:
diff changeset
   386
        *pMaxValue = XACAMERAIMPL_DEFAULT_MAX_ISO;
hgs
parents:
diff changeset
   387
    }
hgs
parents:
diff changeset
   388
    DEBUG_API("<-XAStaticCameraCaps_GetSupportedISOSensitivitySettings");
hgs
parents:
diff changeset
   389
    return XA_RESULT_SUCCESS;
hgs
parents:
diff changeset
   390
}
hgs
parents:
diff changeset
   391
hgs
parents:
diff changeset
   392
/*
hgs
parents:
diff changeset
   393
 * XAresult XAStaticCameraCaps_GetSupportedApertureManualSettings(
hgs
parents:
diff changeset
   394
 *                       XAuint32 cameraDeviceID,
hgs
parents:
diff changeset
   395
 *                       XAuint32* pMinValue,
hgs
parents:
diff changeset
   396
 *                       XAuint32* pMaxValue,
hgs
parents:
diff changeset
   397
 *                       XAuint32* pNumSettings,
hgs
parents:
diff changeset
   398
 *                       XAuint32** ppSettings)
hgs
parents:
diff changeset
   399
 */
hgs
parents:
diff changeset
   400
XAresult XAStaticCameraCaps_GetSupportedApertureManualSettings(
hgs
parents:
diff changeset
   401
                        XAuint32 cameraDeviceID,
hgs
parents:
diff changeset
   402
                        XAuint32* pMinValue,
hgs
parents:
diff changeset
   403
                        XAuint32* pMaxValue,
hgs
parents:
diff changeset
   404
                        XAuint32* pNumSettings,
hgs
parents:
diff changeset
   405
                        XAuint32** ppSettings)
hgs
parents:
diff changeset
   406
{
hgs
parents:
diff changeset
   407
    DEBUG_API("->XAStaticCameraCaps_GetSupportedApertureManualSettings");
hgs
parents:
diff changeset
   408
    if( !pNumSettings )
hgs
parents:
diff changeset
   409
    {
hgs
parents:
diff changeset
   410
        DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
hgs
parents:
diff changeset
   411
        DEBUG_API("<-XAStaticCameraCaps_GetSupportedApertureManualSettings");
hgs
parents:
diff changeset
   412
        return XA_RESULT_PARAMETER_INVALID;
hgs
parents:
diff changeset
   413
    }
hgs
parents:
diff changeset
   414
    if( !ppSettings )
hgs
parents:
diff changeset
   415
    {
hgs
parents:
diff changeset
   416
        /* no items in ppSettings array*/
hgs
parents:
diff changeset
   417
        *pNumSettings = 0;
hgs
parents:
diff changeset
   418
    }
hgs
parents:
diff changeset
   419
    else
hgs
parents:
diff changeset
   420
    {
hgs
parents:
diff changeset
   421
        /* continuous range */
hgs
parents:
diff changeset
   422
        *pNumSettings = 0;
hgs
parents:
diff changeset
   423
        /* NOTE: no way to query actual values from gstreamer, use hardcoded default values */
hgs
parents:
diff changeset
   424
        *pMinValue = XACAMERAIMPL_DEFAULT_MIN_APERTURE;
hgs
parents:
diff changeset
   425
        *pMaxValue = XACAMERAIMPL_DEFAULT_MAX_APERTURE;
hgs
parents:
diff changeset
   426
    }
hgs
parents:
diff changeset
   427
    DEBUG_API("<-XAStaticCameraCaps_GetSupportedApertureManualSettings");
hgs
parents:
diff changeset
   428
    return XA_RESULT_SUCCESS;
hgs
parents:
diff changeset
   429
}
hgs
parents:
diff changeset
   430
hgs
parents:
diff changeset
   431
/*
hgs
parents:
diff changeset
   432
 * XAresult XAStaticCameraCaps_GetSupportedShutterSpeedManualSettings(
hgs
parents:
diff changeset
   433
 *                        XAuint32 cameraDeviceID,
hgs
parents:
diff changeset
   434
 *                       XAmicrosecond* pMinValue,
hgs
parents:
diff changeset
   435
 *                       XAmicrosecond* pMaxValue,
hgs
parents:
diff changeset
   436
 *                       XAuint32* pNumSettings,
hgs
parents:
diff changeset
   437
 *                       XAmicrosecond** ppSettings)
hgs
parents:
diff changeset
   438
 */
hgs
parents:
diff changeset
   439
XAresult XAStaticCameraCaps_GetSupportedShutterSpeedManualSettings(
hgs
parents:
diff changeset
   440
                        XAuint32 cameraDeviceID,
hgs
parents:
diff changeset
   441
                        XAmicrosecond* pMinValue,
hgs
parents:
diff changeset
   442
                        XAmicrosecond* pMaxValue,
hgs
parents:
diff changeset
   443
                        XAuint32* pNumSettings,
hgs
parents:
diff changeset
   444
                        XAmicrosecond** ppSettings)
hgs
parents:
diff changeset
   445
{
hgs
parents:
diff changeset
   446
    DEBUG_API("->XAStaticCameraCaps_GetSupportedShutterSpeedManualSettings");
hgs
parents:
diff changeset
   447
    /* No support in gst.
hgs
parents:
diff changeset
   448
     * Spec: "If no settings are supported,
hgs
parents:
diff changeset
   449
     *        this method returns XA_RESULT_FEATURE_UNSUPPORTED."
hgs
parents:
diff changeset
   450
     **/
hgs
parents:
diff changeset
   451
    DEBUG_INFO("No support in gst");
hgs
parents:
diff changeset
   452
    if(pNumSettings)
hgs
parents:
diff changeset
   453
    {
hgs
parents:
diff changeset
   454
        *pNumSettings = 0;
hgs
parents:
diff changeset
   455
    }
hgs
parents:
diff changeset
   456
    DEBUG_API("<-XAStaticCameraCaps_GetSupportedShutterSpeedManualSettings");
hgs
parents:
diff changeset
   457
    return XA_RESULT_FEATURE_UNSUPPORTED;
hgs
parents:
diff changeset
   458
}
hgs
parents:
diff changeset
   459
hgs
parents:
diff changeset
   460
/*
hgs
parents:
diff changeset
   461
 * XAresult XAStaticCameraCaps_GetSupportedWhiteBalanceManualSettings(
hgs
parents:
diff changeset
   462
 *                       XAuint32 cameraDeviceID,
hgs
parents:
diff changeset
   463
 *                       XAuint32* pMinValue,
hgs
parents:
diff changeset
   464
 *                       XAuint32* pMaxValue,
hgs
parents:
diff changeset
   465
 *                       XAuint32* pNumSettings,
hgs
parents:
diff changeset
   466
 *                       XAuint32** ppSettings)
hgs
parents:
diff changeset
   467
 */
hgs
parents:
diff changeset
   468
XAresult XAStaticCameraCaps_GetSupportedWhiteBalanceManualSettings(
hgs
parents:
diff changeset
   469
                        XAuint32 cameraDeviceID,
hgs
parents:
diff changeset
   470
                        XAuint32* pMinValue,
hgs
parents:
diff changeset
   471
                        XAuint32* pMaxValue,
hgs
parents:
diff changeset
   472
                        XAuint32* pNumSettings,
hgs
parents:
diff changeset
   473
                        XAuint32** ppSettings)
hgs
parents:
diff changeset
   474
{
hgs
parents:
diff changeset
   475
    DEBUG_API("->XAStaticCameraCaps_GetSupportedWhiteBalanceManualSettings");
hgs
parents:
diff changeset
   476
    /* No support in gst.
hgs
parents:
diff changeset
   477
     * Spec: "If no settings are supported,
hgs
parents:
diff changeset
   478
     *        this method returns XA_RESULT_FEATURE_UNSUPPORTED."
hgs
parents:
diff changeset
   479
     **/
hgs
parents:
diff changeset
   480
    DEBUG_INFO("No support in gst");
hgs
parents:
diff changeset
   481
    if(pNumSettings)
hgs
parents:
diff changeset
   482
    {
hgs
parents:
diff changeset
   483
        *pNumSettings = 0;
hgs
parents:
diff changeset
   484
    }
hgs
parents:
diff changeset
   485
    DEBUG_API("<-XAStaticCameraCaps_GetSupportedWhiteBalanceManualSettings");
hgs
parents:
diff changeset
   486
    return XA_RESULT_FEATURE_UNSUPPORTED;
hgs
parents:
diff changeset
   487
}
hgs
parents:
diff changeset
   488
hgs
parents:
diff changeset
   489
/*
hgs
parents:
diff changeset
   490
 * XAresult XAStaticCameraCaps_GetSupportedZoomSettings(
hgs
parents:
diff changeset
   491
 *                       XAuint32 cameraDeviceID,
hgs
parents:
diff changeset
   492
 *                       XAboolean digitalEnabled,
hgs
parents:
diff changeset
   493
 *                       XAboolean macroEnabled,
hgs
parents:
diff changeset
   494
 *                       XApermille* pMaxValue,
hgs
parents:
diff changeset
   495
 *                       XAuint32* pNumSettings,
hgs
parents:
diff changeset
   496
 *                       XApermille** ppSettings,
hgs
parents:
diff changeset
   497
 *                       XAboolean* pSpeedSupported)
hgs
parents:
diff changeset
   498
 */
hgs
parents:
diff changeset
   499
XAresult XAStaticCameraCaps_GetSupportedZoomSettings(
hgs
parents:
diff changeset
   500
                        XAuint32 cameraDeviceID,
hgs
parents:
diff changeset
   501
                        XAboolean digitalEnabled,
hgs
parents:
diff changeset
   502
                        XAboolean macroEnabled,
hgs
parents:
diff changeset
   503
                        XApermille* pMaxValue,
hgs
parents:
diff changeset
   504
                        XAuint32* pNumSettings,
hgs
parents:
diff changeset
   505
                        XApermille** ppSettings,
hgs
parents:
diff changeset
   506
                        XAboolean* pSpeedSupported)
hgs
parents:
diff changeset
   507
{
hgs
parents:
diff changeset
   508
    DEBUG_API("->XAStaticCameraCaps_GetSupportedZoomSettings");
hgs
parents:
diff changeset
   509
    if( !ppSettings )
hgs
parents:
diff changeset
   510
    {
hgs
parents:
diff changeset
   511
        if( !pNumSettings )
hgs
parents:
diff changeset
   512
        {
hgs
parents:
diff changeset
   513
            DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
hgs
parents:
diff changeset
   514
            DEBUG_API("<-XAStaticCameraCaps_GetSupportedZoomSettings");
hgs
parents:
diff changeset
   515
            return XA_RESULT_PARAMETER_INVALID;
hgs
parents:
diff changeset
   516
        }
hgs
parents:
diff changeset
   517
        *pNumSettings = 0;
hgs
parents:
diff changeset
   518
    }
hgs
parents:
diff changeset
   519
    else
hgs
parents:
diff changeset
   520
    {
hgs
parents:
diff changeset
   521
        if( !(pMaxValue && pSpeedSupported) )
hgs
parents:
diff changeset
   522
        {
hgs
parents:
diff changeset
   523
            DEBUG_ERR("XA_RESULT_PARAMETER_INVALID");
hgs
parents:
diff changeset
   524
            DEBUG_API("<-XAStaticCameraCaps_GetSupportedZoomSettings");
hgs
parents:
diff changeset
   525
            return XA_RESULT_PARAMETER_INVALID;
hgs
parents:
diff changeset
   526
        }
hgs
parents:
diff changeset
   527
        /*NOTE: no way to query actual max value*/
hgs
parents:
diff changeset
   528
        *pMaxValue = XACAMERAIMPL_DEFAULT_MAX_ZOOM;
hgs
parents:
diff changeset
   529
        /*no gst support for speed settings*/
hgs
parents:
diff changeset
   530
        *pSpeedSupported = XA_BOOLEAN_FALSE;
hgs
parents:
diff changeset
   531
        *pNumSettings = 0;
hgs
parents:
diff changeset
   532
    }
hgs
parents:
diff changeset
   533
    DEBUG_API("<-XAStaticCameraCaps_GetSupportedZoomSettings");
hgs
parents:
diff changeset
   534
    return XA_RESULT_SUCCESS;
hgs
parents:
diff changeset
   535
}
hgs
parents:
diff changeset
   536
hgs
parents:
diff changeset
   537
/*
hgs
parents:
diff changeset
   538
 * XAuint32 XAStaticCameraCaps_IdxFromId(XAuint32 cameraDeviceID)
hgs
parents:
diff changeset
   539
 */
hgs
parents:
diff changeset
   540
XAuint32 XAStaticCameraCaps_IdxFromId(XAuint32 cameraDeviceID)
hgs
parents:
diff changeset
   541
{
hgs
parents:
diff changeset
   542
    XAuint32 devId = 0;
hgs
parents:
diff changeset
   543
    XAuint32 idx = 0;
hgs
parents:
diff changeset
   544
    guint32 numDevices = sizeof(allCameraCaps)/sizeof(XAStaticCameraCapsData);
hgs
parents:
diff changeset
   545
hgs
parents:
diff changeset
   546
    if(cameraDeviceID == XA_DEFAULTDEVICEID_CAMERA)
hgs
parents:
diff changeset
   547
    {
hgs
parents:
diff changeset
   548
        devId = XACAMERAIMPL_DEFAULT_DEVICE;
hgs
parents:
diff changeset
   549
    }
hgs
parents:
diff changeset
   550
    else
hgs
parents:
diff changeset
   551
    {
hgs
parents:
diff changeset
   552
        devId = cameraDeviceID;
hgs
parents:
diff changeset
   553
    }
hgs
parents:
diff changeset
   554
hgs
parents:
diff changeset
   555
    /* query capas with id -> find index*/
hgs
parents:
diff changeset
   556
    for(idx=0; idx<numDevices; idx++)
hgs
parents:
diff changeset
   557
    {
hgs
parents:
diff changeset
   558
        if( devId==allCameraCaps[idx].deviceID )
hgs
parents:
diff changeset
   559
            break;
hgs
parents:
diff changeset
   560
    }
hgs
parents:
diff changeset
   561
    return idx;
hgs
parents:
diff changeset
   562
}