/* * 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 #include #include #include 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(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(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()); }