blob: 2c46b91edde557d6bbae3c0216048172f0981323 [file] [log] [blame]
// Copyright 2016 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CAMERA_CAMERA3_TEST_CAMERA3_MODULE_FIXTURE_H_
#define CAMERA_CAMERA3_TEST_CAMERA3_MODULE_FIXTURE_H_
#include <dlfcn.h>
#include <map>
#include <memory>
#include <string>
#include <tuple>
#include <vector>
#include <base/synchronization/lock.h>
#include <cros-camera/camera_thread.h>
#include <gtest/gtest.h>
#include "camera3_test/camera3_device_connector.h"
#include "camera3_test/camera3_module_connector.h"
#include "camera3_test/common_types.h"
namespace camera3_test {
const int kMaxNumCameras = 2;
const size_t kNumOfElementsInStreamConfigEntry = 4;
enum {
STREAM_CONFIG_FORMAT_INDEX,
STREAM_CONFIG_WIDTH_INDEX,
STREAM_CONFIG_HEIGHT_INDEX,
STREAM_CONFIG_DIRECTION_INDEX,
STREAM_CONFIG_STALL_DURATION_INDEX = STREAM_CONFIG_DIRECTION_INDEX,
STREAM_CONFIG_MIN_DURATION_INDEX = STREAM_CONFIG_DIRECTION_INDEX
};
// Returns true if the |actual_level| is equal to or beyond the
// |required_level|.
bool isHardwareLevelSupported(uint8_t actual_level, uint8_t required_level);
// Get recording parameter list of camera id, width, height and frame rate
std::vector<std::tuple<int, int32_t, int32_t, float, bool>>
ParseRecordingParams();
class CameraModuleCallbacksHandler {
public:
static void camera_device_status_change(
const camera_module_callbacks_t* callbacks,
int camera_id,
int new_status);
static void torch_mode_status_change(
const camera_module_callbacks_t* callbacks,
const char* camera_id,
int new_status);
static CameraModuleCallbacksHandler* GetInstance();
bool IsExternalCameraPresent(int camera_id);
private:
void CameraDeviceStatusChange(int camera_id,
camera_device_status_t new_status);
void TorchModeStatusChange(int camera_id, torch_mode_status_t new_status);
// All operations are sequenced by |lock_|.
base::Lock lock_;
std::map<int, camera_device_status_t> device_status_;
};
struct CameraModuleCallbacksAux : camera_module_callbacks_t {
static CameraModuleCallbacksAux* GetInstance();
CameraModuleCallbacksAux();
CameraModuleCallbacksHandler* handler;
};
class Camera3Module {
public:
Camera3Module();
Camera3Module(const Camera3Module&) = delete;
Camera3Module& operator=(const Camera3Module&) = delete;
// Get number of cameras
int GetNumberOfCameras();
// Get list of camera IDs
std::vector<int> GetCameraIds();
// Get list of test camera IDs if specify in cmdline args, or default use
// |GetCameraIds|
std::vector<int> GetTestCameraIds();
// Check if a stream format is supported
bool IsFormatAvailable(int cam_id, int format);
// Get camera information
int GetCameraInfo(int cam_id, camera_info* info);
// Open camera device
std::unique_ptr<DeviceConnector> OpenDevice(int cam_id);
// Get vendor tag by the tag name; False is returned if not found.
bool GetVendorTagByName(const std::string name, uint32_t* tag);
// Get the image output formats in this stream configuration
std::vector<int32_t> GetOutputFormats(int cam_id);
// Get the image output resolutions in this stream configuration
std::vector<ResolutionInfo> GetSortedOutputResolutions(int cam_id,
int32_t format);
// Get the stall duration for the format/size combination (in nanoseconds)
int64_t GetOutputStallDuration(int cam_id,
int32_t format,
const ResolutionInfo& resolution);
// Get the minimum frame duration
int64_t GetOutputMinFrameDuration(int cam_id,
int32_t format,
const ResolutionInfo& resolution);
private:
void GetStreamConfigEntry(int cam_id,
int32_t key,
camera_metadata_ro_entry_t* entry);
int64_t GetOutputKeyParameterI64(int cam_id,
int32_t format,
const ResolutionInfo& resolution,
int32_t key,
int32_t index);
std::unique_ptr<ModuleConnector> cam_module_connector_;
// Id of cameras to be tested exclusively. Empty vector for test all available
// cameras.
std::vector<int> test_camera_ids_;
};
class Camera3ModuleFixture : public testing::Test {
public:
Camera3ModuleFixture() {}
Camera3ModuleFixture(const Camera3ModuleFixture&) = delete;
Camera3ModuleFixture& operator=(const Camera3ModuleFixture&) = delete;
protected:
Camera3Module cam_module_;
};
} // namespace camera3_test
#endif // CAMERA_CAMERA3_TEST_CAMERA3_MODULE_FIXTURE_H_