Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android中Camera獲取系統支持的情景模式

android中Camera獲取系統支持的情景模式

編輯:關於Android編程

在我們調相機時, 經常有測試提出相機的模型情景模式不支持。下面我們來分析下怎樣看android系統相機的情景模式。我們以MTK的實現為例。


在底層mediatek/proprietary/custom/mt8127/hal/sendepfeature/ov2680_raw/config.ftbl.ov2680_mipi_raw.h 這個文件定義的我們的相機支持哪些情景模式

#if 1
    //  Scene Mode
    FTABLE_CONFIG_AS_TYPE_OF_DEFAULT_VALUES(
        KEY_AS_(MtkCameraParameters::KEY_SCENE_MODE), 
        SCENE_AS_DEFAULT_SCENE(
            ITEM_AS_DEFAULT_(MtkCameraParameters::SCENE_MODE_AUTO), 
            ITEM_AS_VALUES_(
                MtkCameraParameters::SCENE_MODE_AUTO, 
//                MtkCameraParameters::SCENE_MODE_NORMAL, 
                MtkCameraParameters::SCENE_MODE_PORTRAIT,       
                MtkCameraParameters::SCENE_MODE_LANDSCAPE, 
                MtkCameraParameters::SCENE_MODE_NIGHT,          
                MtkCameraParameters::SCENE_MODE_NIGHT_PORTRAIT, 
                MtkCameraParameters::SCENE_MODE_THEATRE,        
                MtkCameraParameters::SCENE_MODE_BEACH, 
                MtkCameraParameters::SCENE_MODE_SNOW,           
                MtkCameraParameters::SCENE_MODE_SUNSET, 
                MtkCameraParameters::SCENE_MODE_STEADYPHOTO,    
//                MtkCameraParameters::SCENE_MODE_FIREWORKS, 
                MtkCameraParameters::SCENE_MODE_SPORTS,         
                MtkCameraParameters::SCENE_MODE_PARTY, 
                MtkCameraParameters::SCENE_MODE_CANDLELIGHT, 
//                MtkCameraParameters::SCENE_MODE_HDR, 
            )
        ), 
    )
#endif

這個文件定義的我們的相機支持的哪些情景模式,SCENE_MODE_HDR,, HDR模式, SCENE_MODE_NIGHT夜景模式........


有了這個後, android framework會根據這些做相應的處理, 然後傳入到上層, 上層java就可以判斷我們是否能支持該模式,

在hal層, CameraHardwareInterface.h中

status_t initialize(hw_module_t *module)
{
   ......
   camera_module_t *cameraModule = reinterpret_cast(module);
   camera_info info;
   status_t res = cameraModule->get_camera_info(atoi(mName.string()), &info);
   ......
}

這裡進行初始化Camera的相關信息, 我們所需要的情景模式保存在結構體 camera_info中。

在CameraService.cpp中getCameraCharacteristics()方法中獲取CameraInfo信息

status_t CameraService::getCameraCharacteristics(int cameraId,
                                                CameraMetadata* cameraInfo) {
    if (!cameraInfo) {
        ALOGE("%s: cameraInfo is NULL", __FUNCTION__);
        return BAD_VALUE;
    }

    if (!mModule) {
        ALOGE("%s: camera hardware module doesn't exist", __FUNCTION__);
        return -ENODEV;
    }

    if (cameraId < 0 || cameraId >= mNumberOfCameras) {
        ALOGE("%s: Invalid camera id: %d", __FUNCTION__, cameraId);
        return BAD_VALUE;
    }

    int facing;
    status_t ret = OK;
    if (mModule->common.module_api_version < CAMERA_MODULE_API_VERSION_2_0 ||
            getDeviceVersion(cameraId, &facing) <= CAMERA_DEVICE_API_VERSION_2_1 ) {
        /**
         * Backwards compatibility mode for old HALs:
         * - Convert CameraInfo into static CameraMetadata properties.
         * - Retrieve cached CameraParameters for this camera.  If none exist,
         *   attempt to open CameraClient and retrieve the CameraParameters.
         * - Convert cached CameraParameters into static CameraMetadata
         *   properties.
         */
        ALOGI("%s: Switching to HAL1 shim implementation...", __FUNCTION__);

        if ((ret = generateShimMetadata(cameraId, cameraInfo)) != OK) {
            return ret;
        }

    } else {
        /**
         * Normal HAL 2.1+ codepath.
         */
        struct camera_info info;
        ret = filterGetInfoErrorCode(mModule->get_camera_info(cameraId, &info));
        *cameraInfo = info.static_camera_characteristics;
    }

    return ret;
}





  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved