camera: Add camera flip config

This commit is contained in:
zhupengfei 2018-05-20 09:07:37 +08:00
parent 8e02c70e82
commit 5ebd466869
No known key found for this signature in database
GPG key ID: 85B82A3E62174206
16 changed files with 416 additions and 282 deletions

View file

@ -17,10 +17,11 @@ void RegisterFactory(const std::string& name, std::unique_ptr<CameraFactory> fac
factories[name] = std::move(factory);
}
std::unique_ptr<CameraInterface> CreateCamera(const std::string& name, const std::string& config) {
std::unique_ptr<CameraInterface> CreateCamera(const std::string& name, const std::string& config,
const Service::CAM::Flip& flip) {
auto pair = factories.find(name);
if (pair != factories.end()) {
return pair->second->Create(config);
return pair->second->Create(config, flip);
}
if (name != "blank") {
@ -31,10 +32,10 @@ std::unique_ptr<CameraInterface> CreateCamera(const std::string& name, const std
std::unique_ptr<CameraInterface> CreateCameraPreview(const std::string& name,
const std::string& config, int width,
int height) {
int height, const Service::CAM::Flip& flip) {
auto pair = factories.find(name);
if (pair != factories.end()) {
return pair->second->CreatePreview(config, width, height);
return pair->second->CreatePreview(config, width, height, flip);
}
if (name != "blank") {

View file

@ -18,22 +18,26 @@ public:
* Creates a camera object based on the configuration string.
* @param config Configuration string to create the camera. The implementation can decide the
* meaning of this string.
* @param flip The image flip to apply
* @returns a unique_ptr to the created camera object.
*/
virtual std::unique_ptr<CameraInterface> Create(const std::string& config) const = 0;
virtual std::unique_ptr<CameraInterface> Create(const std::string& config,
const Service::CAM::Flip& flip) const = 0;
/**
* Creates a camera object for preview based on the configuration string.
* @param config Configuration string to create the camera. The implementation can decide the
* meaning of this string.
* @param flip The image flip to apply
* @returns a unique_ptr to the created camera object.
* Note: The default implementation for this is to call Create(). Derived classes may have other
* Implementations. For example, A dialog may be used instead of LOG_ERROR when error
* occurs.
*/
virtual std::unique_ptr<CameraInterface> CreatePreview(const std::string& config, int width,
int height) const {
return Create(config);
int height,
const Service::CAM::Flip& flip) const {
return Create(config, flip);
}
};
@ -50,7 +54,8 @@ void RegisterFactory(const std::string& name, std::unique_ptr<CameraFactory> fac
* @param config Configuration string to create the camera. The meaning of this string is
* defined by the factory.
*/
std::unique_ptr<CameraInterface> CreateCamera(const std::string& name, const std::string& config);
std::unique_ptr<CameraInterface> CreateCamera(const std::string& name, const std::string& config,
const Service::CAM::Flip& flip);
/**
* Creates a camera from the factory for previewing.
@ -60,6 +65,6 @@ std::unique_ptr<CameraInterface> CreateCamera(const std::string& name, const std
*/
std::unique_ptr<CameraInterface> CreateCameraPreview(const std::string& name,
const std::string& config, int width,
int height);
int height, const Service::CAM::Flip& flip);
} // namespace Camera

View file

@ -1041,8 +1041,9 @@ void Module::ReloadCameraDevices() {
}
void Module::LoadCameraImplementation(CameraConfig& camera, int camera_id) {
camera.impl = Camera::CreateCamera(Settings::values.camera_name[camera_id],
Settings::values.camera_config[camera_id]);
camera.impl = Camera::CreateCamera(
Settings::values.camera_name[camera_id], Settings::values.camera_config[camera_id],
static_cast<Service::CAM::Flip>(Settings::values.camera_flip[camera_id]));
camera.impl->SetFlip(camera.contexts[0].flip);
camera.impl->SetEffect(camera.contexts[0].effect);
camera.impl->SetFormat(camera.contexts[0].format);

View file

@ -140,6 +140,7 @@ struct Values {
// Camera
std::array<std::string, Service::CAM::NumCameras> camera_name;
std::array<std::string, Service::CAM::NumCameras> camera_config;
std::array<int, Service::CAM::NumCameras> camera_flip;
// Debugging
bool use_gdbstub;