diff -r 80975da52420 -r 43d09473c595 khronosfws/openmax_al/src/adaptation/xastaticcameracapsadaptation.c --- a/khronosfws/openmax_al/src/adaptation/xastaticcameracapsadaptation.c Mon May 03 12:59:52 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,562 +0,0 @@ -/* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: -* -*/ - -#include -#include -#include -#include -#include "XAGlobals.h" -#include "XAStaticCameraCapsAdaptation.h" -#include "XAStaticCapsAdaptation.h" - -#define XACAMERAIMPL_DEFAULT_MAX_ZOOM 16000 /* 16x */ -#define XACAMERAIMPL_DEFAULT_MAX_ISO 1600 -#define XACAMERAIMPL_DEFAULT_MIN_ISO 200 -#define XACAMERAIMPL_DEFAULT_MAX_APERTURE 3200 /* f/32 */ -#define XACAMERAIMPL_DEFAULT_MIN_APERTURE 75 /* f/0.75 */ - -static XAStaticCameraCapsData allCameraCaps[] = -{ -#ifdef XA_USE_TEST_PLUGINS - { XA_ADAPTID_VIDEOTESTSRC, { (XAchar*)"videotestsrc", 0, 0, 0, 0, 0, 0, 0, 0, 0 } } -#else - { XA_ADAPTID_V4L2SRC, { (XAchar*)"v4l2src", 0, 0, 0, 0, 0, 0, 0, 0, 0 } } -#endif -}; - -/*forward declaration*/ -XAuint32 XAStaticCameraCaps_IdxFromId(XAuint32 cameraDeviceID); - -/* - * void XAStaticCameraCaps_Init() - */ -void XAStaticCameraCaps_Init() -{ - GstElement* element=NULL; - GstPhotoCaps photoCaps = GST_PHOTOGRAPHY_CAPS_NONE; - GError* gerror=NULL; - guint32 i=0; - guint32 numDevices = sizeof(allCameraCaps)/sizeof(XAStaticCameraCapsData); - gboolean detected = FALSE; - - - if ( !gst_init_check( NULL, NULL, &gerror ) ) - { - DEBUG_ERR("Gst Initalization failure."); - return; - } - for(i=0;i allCameraCaps[i].XAcaps.maxWidth) - { - allCameraCaps[i].XAcaps.maxWidth = width; - } - } - - value = gst_structure_get_value( capsStruct, "height" ); - if (GST_VALUE_HOLDS_INT_RANGE(value)) - { - detected = TRUE; - height = gst_value_get_int_range_max( value ); - if(height > allCameraCaps[i].XAcaps.maxHeight) - { - allCameraCaps[i].XAcaps.maxHeight = height; - } - } - } - } - } - } - - if(!detected) - { - DEBUG_ERR("Warn: could not get maxWidth and maxHeight from GST!!"); - allCameraCaps[i].XAcaps.maxWidth = 0x7FFFFFFF; - allCameraCaps[i].XAcaps.maxHeight = 0x7FFFFFFF; - } - - if(GST_IS_PHOTOGRAPHY(element)) - { - photoCaps = gst_photography_get_capabilities(GST_PHOTOGRAPHY(element)); - if( photoCaps & GST_PHOTOGRAPHY_CAPS_FLASH ) - { - allCameraCaps[i].XAcaps.featuresSupported |= XA_CAMERACAP_FLASH; - allCameraCaps[i].XAcaps.flashModesSupported = XA_CAMERA_FLASHMODE_OFF | - XA_CAMERA_FLASHMODE_ON | - XA_CAMERA_FLASHMODE_AUTO | - XA_CAMERA_FLASHMODE_REDEYEREDUCTION | - XA_CAMERA_FLASHMODE_FILLIN; - } - if( photoCaps & GST_PHOTOGRAPHY_CAPS_FOCUS ) - { - allCameraCaps[i].XAcaps.featuresSupported |= XA_CAMERACAP_AUTOFOCUS; - allCameraCaps[i].XAcaps.focusModesSupported = XA_CAMERA_FOCUSMODE_AUTO; - } - if( photoCaps & GST_PHOTOGRAPHY_CAPS_EXPOSURE ) - { - allCameraCaps[i].XAcaps.featuresSupported |= XA_CAMERACAP_MANUALEXPOSURE; - allCameraCaps[i].XAcaps.exposureModesSupported = XA_CAMERA_EXPOSUREMODE_AUTO | - XA_CAMERA_EXPOSUREMODE_PORTRAIT | - XA_CAMERA_EXPOSUREMODE_SPORTS | - XA_CAMERA_EXPOSUREMODE_NIGHT; - } - - if( photoCaps & GST_PHOTOGRAPHY_CAPS_ISO_SPEED ) - { - allCameraCaps[i].XAcaps.featuresSupported |= XA_CAMERACAP_MANUALISOSENSITIVITY; - } - if( photoCaps & GST_PHOTOGRAPHY_CAPS_APERTURE ) - { - allCameraCaps[i].XAcaps.featuresSupported |= XA_CAMERACAP_MANUALAPERTURE; - } - if( photoCaps & GST_PHOTOGRAPHY_CAPS_WB_MODE ) - { - allCameraCaps[i].XAcaps.featuresSupported |= XA_CAMERACAP_AUTOWHITEBALANCE; - allCameraCaps[i].XAcaps.whiteBalanceModesSupported = XA_CAMERA_WHITEBALANCEMODE_AUTO | - XA_CAMERA_WHITEBALANCEMODE_SUNLIGHT | - XA_CAMERA_WHITEBALANCEMODE_CLOUDY | - XA_CAMERA_WHITEBALANCEMODE_TUNGSTEN | - XA_CAMERA_WHITEBALANCEMODE_FLUORESCENT | - XA_CAMERA_WHITEBALANCEMODE_SUNSET; - } - if( photoCaps & GST_PHOTOGRAPHY_CAPS_ZOOM ) - { - allCameraCaps[i].XAcaps.featuresSupported |= XA_CAMERACAP_DIGITALZOOM; - } - } - } - } -} - -/* - * XAresult XAStaticCameraCaps_GetCameraCapabilities( - * XAuint32* pIndex, - * XAuint32* pCameraDeviceID, - * XACameraDescriptor* pDescriptor) - * - */ -XAresult XAStaticCameraCaps_GetCameraCapabilities( - XAuint32* pIndex, - XAuint32* pCameraDeviceID, - XACameraDescriptor* pDescriptor) -{ - guint32 idx = 0; - guint32 numDevices = sizeof(allCameraCaps)/sizeof(XAStaticCameraCapsData); - - if(!pDescriptor) - { - if(pIndex) /* query number of devices */ - { - *pIndex = numDevices; - DEBUG_API("<-XAStaticCameraCaps_GetCameraCapabilities"); - return XA_RESULT_SUCCESS; - } - else - { - DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); - DEBUG_API("<-XAStaticCameraCaps_GetCameraCapabilities"); - return XA_RESULT_PARAMETER_INVALID; - } - } - - if( !pIndex && pCameraDeviceID ) - { - /* get index from ID */ - idx = XAStaticCameraCaps_IdxFromId(*pCameraDeviceID); - } - else if( pIndex && pCameraDeviceID ) - { - idx = *pIndex; - } - else - { - DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); - DEBUG_API("<-XAStaticCameraCaps_GetCameraCapabilities"); - return XA_RESULT_PARAMETER_INVALID; - } - - if( idx >= numDevices ) - { - DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); - DEBUG_API("<-XAStaticCameraCaps_GetCameraCapabilities"); - return XA_RESULT_PARAMETER_INVALID; - } - else - { - /*fill capabilities*/ - memcpy(pDescriptor, &allCameraCaps[idx].XAcaps, sizeof(XACameraDescriptor) ); - *pCameraDeviceID = allCameraCaps[idx].deviceID; - } - - DEBUG_API("<-XAStaticCameraCaps_GetCameraCapabilities"); - return XA_RESULT_SUCCESS; -} - -/* - * XAresult XAStaticCameraCaps_QueryFocusRegionPatterns( - * XAuint32 cameraDeviceID, - * XAuint32* pPatternID, - * XAuint32* pFocusPattern, - * XAuint32* pCustomPoints1, - * XAuint32* pCustomPoints2) - */ -XAresult XAStaticCameraCaps_QueryFocusRegionPatterns( - XAuint32 cameraDeviceID, - XAuint32* pPatternID, - XAuint32* pFocusPattern, - XAuint32* pCustomPoints1, - XAuint32* pCustomPoints2) -{ - DEBUG_API("->XAStaticCameraCaps_QueryFocusRegionPatterns"); - if( !pFocusPattern ) - { /* return number of focus patterns */ - if(!pPatternID) - { - DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); - DEBUG_API("<-XAStaticCameraCaps_QueryFocusRegionPatterns"); - return XA_RESULT_PARAMETER_INVALID; - } - /* no support in GST */ - DEBUG_INFO("No support in gst"); - *pPatternID = 0; - } - else - { - if( !(pFocusPattern&&pCustomPoints1&&pCustomPoints2) ) - { - DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); - DEBUG_API("<-XAStaticCameraCaps_QueryFocusRegionPatterns"); - return XA_RESULT_PARAMETER_INVALID; - } - DEBUG_INFO("No support in gst"); - *pFocusPattern = 0; - *pCustomPoints1 = 0; - *pCustomPoints2 = 0; - /*no focus patterns, index always out of range*/ - DEBUG_API("<-XAStaticCameraCaps_QueryFocusRegionPatterns"); - return XA_RESULT_PARAMETER_INVALID; - } - - DEBUG_API("<-XAStaticCameraCaps_QueryFocusRegionPatterns"); - return XA_RESULT_SUCCESS; -} - -/* - * XAresult XAStaticCameraCaps_GetSupportedAutoLocks( - * XAuint32 cameraDeviceID, - * XAuint32* pNumCombinations, - * XAuint32** ppLocks) - */ -XAresult XAStaticCameraCaps_GetSupportedAutoLocks( - XAuint32 cameraDeviceID, - XAuint32* pNumCombinations, - XAuint32** ppLocks) -{ - DEBUG_API("->XAStaticCameraCaps_GetSupportedAutoLocks"); - /* No support in gst. - * Spec: "If no settings are supported, - * this method returns XA_RESULT_FEATURE_UNSUPPORTED." - **/ - DEBUG_INFO("No support in gst"); - if(pNumCombinations) - { - *pNumCombinations = 0; - } - DEBUG_API("<-XAStaticCameraCaps_GetSupportedAutoLocks"); - return XA_RESULT_FEATURE_UNSUPPORTED; -} - -/* - * XAresult XAStaticCameraCaps_GetSupportedFocusManualSettings( - * XAuint32 cameraDeviceID, - * XAboolean macroEnabled, - * XAmillimeter* pMinValue, - * XAmillimeter* pMaxValue, - * XAuint32* pNumSettings, - * XAmillimeter** ppSettings) - */ -XAresult XAStaticCameraCaps_GetSupportedFocusManualSettings( - XAuint32 cameraDeviceID, - XAboolean macroEnabled, - XAmillimeter* pMinValue, - XAmillimeter* pMaxValue, - XAuint32* pNumSettings, - XAmillimeter** ppSettings) -{ - DEBUG_API("->XAStaticCameraCaps_GetSupportedFocusManualSettings"); - /* No support in gst. - * Spec: "If no settings are supported, - * this method returns XA_RESULT_FEATURE_UNSUPPORTED." - **/ - DEBUG_INFO("No support in gst"); - if(pNumSettings) - { - *pNumSettings = 0; - } - DEBUG_API("<-XAStaticCameraCaps_GetSupportedFocusManualSettings"); - return XA_RESULT_FEATURE_UNSUPPORTED; -} - -/* - * XAresult XAStaticCameraCaps_GetSupportedISOSensitivitySettings( - * XAuint32 cameraDeviceID, - * XAuint32* pMinValue, - * XAuint32* pMaxValue, - * XAuint32* pNumSettings, - * XAuint32** ppSettings) - */ -XAresult XAStaticCameraCaps_GetSupportedISOSensitivitySettings( - XAuint32 cameraDeviceID, - XAuint32* pMinValue, - XAuint32* pMaxValue, - XAuint32* pNumSettings, - XAuint32** ppSettings) -{ - DEBUG_API("->XAStaticCameraCaps_GetSupportedISOSensitivitySettings"); - if( !pNumSettings ) - { - return XA_RESULT_PARAMETER_INVALID; - } - if( !ppSettings ) - { - /* no items in ppSettings array*/ - *pNumSettings = 0; - } - else - { - if( !(pMinValue && pMaxValue) ) - { - DEBUG_API("<-XAStaticCameraCaps_GetSupportedISOSensitivitySettings"); - return XA_RESULT_PARAMETER_INVALID; - } - /* continuous range */ - *pNumSettings = 0; - /* NOTE: no way to query actual values from gstreamer, use hardcoded default values */ - *pMinValue = XACAMERAIMPL_DEFAULT_MIN_ISO; - *pMaxValue = XACAMERAIMPL_DEFAULT_MAX_ISO; - } - DEBUG_API("<-XAStaticCameraCaps_GetSupportedISOSensitivitySettings"); - return XA_RESULT_SUCCESS; -} - -/* - * XAresult XAStaticCameraCaps_GetSupportedApertureManualSettings( - * XAuint32 cameraDeviceID, - * XAuint32* pMinValue, - * XAuint32* pMaxValue, - * XAuint32* pNumSettings, - * XAuint32** ppSettings) - */ -XAresult XAStaticCameraCaps_GetSupportedApertureManualSettings( - XAuint32 cameraDeviceID, - XAuint32* pMinValue, - XAuint32* pMaxValue, - XAuint32* pNumSettings, - XAuint32** ppSettings) -{ - DEBUG_API("->XAStaticCameraCaps_GetSupportedApertureManualSettings"); - if( !pNumSettings ) - { - DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); - DEBUG_API("<-XAStaticCameraCaps_GetSupportedApertureManualSettings"); - return XA_RESULT_PARAMETER_INVALID; - } - if( !ppSettings ) - { - /* no items in ppSettings array*/ - *pNumSettings = 0; - } - else - { - /* continuous range */ - *pNumSettings = 0; - /* NOTE: no way to query actual values from gstreamer, use hardcoded default values */ - *pMinValue = XACAMERAIMPL_DEFAULT_MIN_APERTURE; - *pMaxValue = XACAMERAIMPL_DEFAULT_MAX_APERTURE; - } - DEBUG_API("<-XAStaticCameraCaps_GetSupportedApertureManualSettings"); - return XA_RESULT_SUCCESS; -} - -/* - * XAresult XAStaticCameraCaps_GetSupportedShutterSpeedManualSettings( - * XAuint32 cameraDeviceID, - * XAmicrosecond* pMinValue, - * XAmicrosecond* pMaxValue, - * XAuint32* pNumSettings, - * XAmicrosecond** ppSettings) - */ -XAresult XAStaticCameraCaps_GetSupportedShutterSpeedManualSettings( - XAuint32 cameraDeviceID, - XAmicrosecond* pMinValue, - XAmicrosecond* pMaxValue, - XAuint32* pNumSettings, - XAmicrosecond** ppSettings) -{ - DEBUG_API("->XAStaticCameraCaps_GetSupportedShutterSpeedManualSettings"); - /* No support in gst. - * Spec: "If no settings are supported, - * this method returns XA_RESULT_FEATURE_UNSUPPORTED." - **/ - DEBUG_INFO("No support in gst"); - if(pNumSettings) - { - *pNumSettings = 0; - } - DEBUG_API("<-XAStaticCameraCaps_GetSupportedShutterSpeedManualSettings"); - return XA_RESULT_FEATURE_UNSUPPORTED; -} - -/* - * XAresult XAStaticCameraCaps_GetSupportedWhiteBalanceManualSettings( - * XAuint32 cameraDeviceID, - * XAuint32* pMinValue, - * XAuint32* pMaxValue, - * XAuint32* pNumSettings, - * XAuint32** ppSettings) - */ -XAresult XAStaticCameraCaps_GetSupportedWhiteBalanceManualSettings( - XAuint32 cameraDeviceID, - XAuint32* pMinValue, - XAuint32* pMaxValue, - XAuint32* pNumSettings, - XAuint32** ppSettings) -{ - DEBUG_API("->XAStaticCameraCaps_GetSupportedWhiteBalanceManualSettings"); - /* No support in gst. - * Spec: "If no settings are supported, - * this method returns XA_RESULT_FEATURE_UNSUPPORTED." - **/ - DEBUG_INFO("No support in gst"); - if(pNumSettings) - { - *pNumSettings = 0; - } - DEBUG_API("<-XAStaticCameraCaps_GetSupportedWhiteBalanceManualSettings"); - return XA_RESULT_FEATURE_UNSUPPORTED; -} - -/* - * XAresult XAStaticCameraCaps_GetSupportedZoomSettings( - * XAuint32 cameraDeviceID, - * XAboolean digitalEnabled, - * XAboolean macroEnabled, - * XApermille* pMaxValue, - * XAuint32* pNumSettings, - * XApermille** ppSettings, - * XAboolean* pSpeedSupported) - */ -XAresult XAStaticCameraCaps_GetSupportedZoomSettings( - XAuint32 cameraDeviceID, - XAboolean digitalEnabled, - XAboolean macroEnabled, - XApermille* pMaxValue, - XAuint32* pNumSettings, - XApermille** ppSettings, - XAboolean* pSpeedSupported) -{ - DEBUG_API("->XAStaticCameraCaps_GetSupportedZoomSettings"); - if( !ppSettings ) - { - if( !pNumSettings ) - { - DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); - DEBUG_API("<-XAStaticCameraCaps_GetSupportedZoomSettings"); - return XA_RESULT_PARAMETER_INVALID; - } - *pNumSettings = 0; - } - else - { - if( !(pMaxValue && pSpeedSupported) ) - { - DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); - DEBUG_API("<-XAStaticCameraCaps_GetSupportedZoomSettings"); - return XA_RESULT_PARAMETER_INVALID; - } - /*NOTE: no way to query actual max value*/ - *pMaxValue = XACAMERAIMPL_DEFAULT_MAX_ZOOM; - /*no gst support for speed settings*/ - *pSpeedSupported = XA_BOOLEAN_FALSE; - *pNumSettings = 0; - } - DEBUG_API("<-XAStaticCameraCaps_GetSupportedZoomSettings"); - return XA_RESULT_SUCCESS; -} - -/* - * XAuint32 XAStaticCameraCaps_IdxFromId(XAuint32 cameraDeviceID) - */ -XAuint32 XAStaticCameraCaps_IdxFromId(XAuint32 cameraDeviceID) -{ - XAuint32 devId = 0; - XAuint32 idx = 0; - guint32 numDevices = sizeof(allCameraCaps)/sizeof(XAStaticCameraCapsData); - - if(cameraDeviceID == XA_DEFAULTDEVICEID_CAMERA) - { - devId = XACAMERAIMPL_DEFAULT_DEVICE; - } - else - { - devId = cameraDeviceID; - } - - /* query capas with id -> find index*/ - for(idx=0; idx