11 changed files with 298 additions and 5 deletions
-
29src/common/input.h
-
3src/common/settings.h
-
2src/input_common/CMakeLists.txt
-
82src/input_common/drivers/camera.cpp
-
29src/input_common/drivers/camera.h
-
38src/input_common/input_engine.cpp
-
19src/input_common/input_engine.h
-
60src/input_common/input_poller.cpp
-
11src/input_common/input_poller.h
-
21src/input_common/main.cpp
-
7src/input_common/main.h
@ -0,0 +1,82 @@ |
|||||
|
// SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project
|
||||
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
|
||||
|
#include <fmt/format.h>
|
||||
|
|
||||
|
#include "common/param_package.h"
|
||||
|
#include "input_common/drivers/camera.h"
|
||||
|
|
||||
|
namespace InputCommon { |
||||
|
constexpr PadIdentifier identifier = { |
||||
|
.guid = Common::UUID{}, |
||||
|
.port = 0, |
||||
|
.pad = 0, |
||||
|
}; |
||||
|
|
||||
|
Camera::Camera(std::string input_engine_) : InputEngine(std::move(input_engine_)) { |
||||
|
PreSetController(identifier); |
||||
|
} |
||||
|
|
||||
|
void Camera::SetCameraData(std::size_t width, std::size_t height, std::vector<u32> data) { |
||||
|
const std::size_t desired_width = getImageWidth(); |
||||
|
const std::size_t desired_height = getImageHeight(); |
||||
|
status.data.resize(desired_width * desired_height); |
||||
|
|
||||
|
// Resize image to desired format
|
||||
|
for (std::size_t y = 0; y < desired_height; y++) { |
||||
|
for (std::size_t x = 0; x < desired_width; x++) { |
||||
|
const std::size_t pixel_index = y * desired_width + x; |
||||
|
const std::size_t old_x = width * x / desired_width; |
||||
|
const std::size_t old_y = height * y / desired_height; |
||||
|
const std::size_t data_pixel_index = old_y * width + old_x; |
||||
|
status.data[pixel_index] = static_cast<u8>(data[data_pixel_index] & 0xFF); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
SetCamera(identifier, status); |
||||
|
} |
||||
|
|
||||
|
std::size_t Camera::getImageWidth() const { |
||||
|
switch (status.format) { |
||||
|
case Common::Input::CameraFormat::Size320x240: |
||||
|
return 320; |
||||
|
case Common::Input::CameraFormat::Size160x120: |
||||
|
return 160; |
||||
|
case Common::Input::CameraFormat::Size80x60: |
||||
|
return 80; |
||||
|
case Common::Input::CameraFormat::Size40x30: |
||||
|
return 40; |
||||
|
case Common::Input::CameraFormat::Size20x15: |
||||
|
return 20; |
||||
|
case Common::Input::CameraFormat::None: |
||||
|
default: |
||||
|
return 0; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
std::size_t Camera::getImageHeight() const { |
||||
|
switch (status.format) { |
||||
|
case Common::Input::CameraFormat::Size320x240: |
||||
|
return 240; |
||||
|
case Common::Input::CameraFormat::Size160x120: |
||||
|
return 120; |
||||
|
case Common::Input::CameraFormat::Size80x60: |
||||
|
return 60; |
||||
|
case Common::Input::CameraFormat::Size40x30: |
||||
|
return 30; |
||||
|
case Common::Input::CameraFormat::Size20x15: |
||||
|
return 15; |
||||
|
case Common::Input::CameraFormat::None: |
||||
|
default: |
||||
|
return 0; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
Common::Input::CameraError Camera::SetCameraFormat( |
||||
|
[[maybe_unused]] const PadIdentifier& identifier_, |
||||
|
const Common::Input::CameraFormat camera_format) { |
||||
|
status.format = camera_format; |
||||
|
return Common::Input::CameraError::None; |
||||
|
} |
||||
|
|
||||
|
} // namespace InputCommon
|
||||
@ -0,0 +1,29 @@ |
|||||
|
// SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project |
||||
|
// SPDX-License-Identifier: GPL-2.0-or-later |
||||
|
|
||||
|
#pragma once |
||||
|
|
||||
|
#include "input_common/input_engine.h" |
||||
|
|
||||
|
namespace InputCommon { |
||||
|
|
||||
|
/** |
||||
|
* A button device factory representing a keyboard. It receives keyboard events and forward them |
||||
|
* to all button devices it created. |
||||
|
*/ |
||||
|
class Camera final : public InputEngine { |
||||
|
public: |
||||
|
explicit Camera(std::string input_engine_); |
||||
|
|
||||
|
void SetCameraData(std::size_t width, std::size_t height, std::vector<u32> data); |
||||
|
|
||||
|
std::size_t getImageWidth() const; |
||||
|
std::size_t getImageHeight() const; |
||||
|
|
||||
|
Common::Input::CameraError SetCameraFormat(const PadIdentifier& identifier_, |
||||
|
Common::Input::CameraFormat camera_format) override; |
||||
|
|
||||
|
Common::Input::CameraStatus status{}; |
||||
|
}; |
||||
|
|
||||
|
} // namespace InputCommon |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue