/*
* Copyright (C) 2012 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <system/camera_metadata.h>
#include <hardware/camera2.h>
#include <gtest/gtest.h>
#include <iostream>
class Camera2Test: public testing::Test {
public:
static void SetUpTestCase() {
int res;
hw_module_t *module = NULL;
res = hw_get_module(CAMERA_HARDWARE_MODULE_ID,
(const hw_module_t **)&module);
ASSERT_EQ(0, res)
<< "Failure opening camera hardware module: " << res;
ASSERT_TRUE(NULL != module)
<< "No camera module was set by hw_get_module";
std::cout << " Camera module name: " << module->name << std::endl;
std::cout << " Camera module author: " << module->author << std::endl;
std::cout << " Camera module API version: 0x" << std::hex
<< module->module_api_version << std::endl;
std::cout << " Camera module HAL API version: 0x" << std::hex
<< module->hal_api_version << std::endl;
int16_t version2_0 = CAMERA_MODULE_API_VERSION_2_0;
ASSERT_EQ(version2_0, module->module_api_version)
<< "Camera module version is 0x"
<< std::hex << module->module_api_version
<< ", not 2.0. (0x"
<< std::hex << CAMERA_MODULE_API_VERSION_2_0 << ")";
sCameraModule = reinterpret_cast<camera_module_t*>(module);
sNumCameras = sCameraModule->get_number_of_cameras();
ASSERT_LT(0, sNumCameras) << "No camera devices available!";
std::cout << " Camera device count: " << sNumCameras << std::endl;
sCameraSupportsHal2 = new bool[sNumCameras];
for (int i = 0; i < sNumCameras; i++) {
camera_info info;
res = sCameraModule->get_camera_info(i, &info);
ASSERT_EQ(0, res)
<< "Failure getting camera info for camera " << i;
std::cout << " Camera device: " << std::dec
<< i << std::endl;;
std::cout << " Facing: " << std::dec
<< info.facing << std::endl;
std::cout << " Orientation: " << std::dec
<< info.orientation << std::endl;
std::cout << " Version: 0x" << std::hex <<
info.device_version << std::endl;
if (info.device_version >= CAMERA_DEVICE_API_VERSION_2_0) {
sCameraSupportsHal2[i] = true;
ASSERT_TRUE(NULL != info.static_camera_characteristics);
std::cout << " Static camera metadata:" << std::endl;
dump_camera_metadata(info.static_camera_characteristics, 0, 1);
} else {
sCameraSupportsHal2[i] = false;
}
}
}
static const camera_module_t *getCameraModule() {
return sCameraModule;
}
static const camera2_device_t *openCameraDevice(int id) {
if (NULL == sCameraSupportsHal2) return NULL;
if (id >= sNumCameras) return NULL;
if (!sCameraSupportsHal2[id]) return NULL;
hw_device_t *device = NULL;
const camera_module_t *cam_module = getCameraModule();
char camId[10];
int res;
snprintf(camId, 10, "%d", id);
res = cam_module->common.methods->open(
(const hw_module_t*)cam_module,
camId,
&device);
if (res < 0 || cam_module == NULL) {
return NULL;
}
camera2_device_t *cam_device =
reinterpret_cast<camera2_device_t*>(device);
return cam_device;
}
private:
static camera_module_t *sCameraModule;
static int sNumCameras;
static bool *sCameraSupportsHal2;
};
camera_module_t *Camera2Test::sCameraModule = NULL;
int Camera2Test::sNumCameras = 0;
bool *Camera2Test::sCameraSupportsHal2 = NULL;
TEST_F(Camera2Test, Basic) {
ASSERT_TRUE(NULL != getCameraModule());
}