camera: Add camera flip config
This commit is contained in:
parent
8e02c70e82
commit
5ebd466869
16 changed files with 416 additions and 282 deletions
|
@ -7,9 +7,9 @@
|
|||
|
||||
namespace Camera {
|
||||
|
||||
std::unique_ptr<CameraInterface> QtCameraFactory::CreatePreview(const std::string& config,
|
||||
int width, int height) const {
|
||||
std::unique_ptr<CameraInterface> camera = Create(config);
|
||||
std::unique_ptr<CameraInterface> QtCameraFactory::CreatePreview(
|
||||
const std::string& config, int width, int height, const Service::CAM::Flip& flip) const {
|
||||
std::unique_ptr<CameraInterface> camera = Create(config, flip);
|
||||
|
||||
if (camera->IsPreviewAvailable()) {
|
||||
return camera;
|
||||
|
|
|
@ -11,8 +11,8 @@ namespace Camera {
|
|||
|
||||
// Base class for camera factories of citra_qt
|
||||
class QtCameraFactory : public CameraFactory {
|
||||
std::unique_ptr<CameraInterface> CreatePreview(const std::string& config, int width,
|
||||
int height) const override;
|
||||
std::unique_ptr<CameraInterface> CreatePreview(const std::string& config, int width, int height,
|
||||
const Service::CAM::Flip& flip) const override;
|
||||
};
|
||||
|
||||
} // namespace Camera
|
||||
|
|
|
@ -46,7 +46,8 @@ bool QtCameraSurface::present(const QVideoFrame& frame) {
|
|||
return true;
|
||||
}
|
||||
|
||||
QtMultimediaCamera::QtMultimediaCamera(const std::string& camera_name)
|
||||
QtMultimediaCamera::QtMultimediaCamera(const std::string& camera_name,
|
||||
const Service::CAM::Flip& flip)
|
||||
: handler(QtMultimediaCameraHandler::GetHandler()) {
|
||||
if (handler->thread() == QThread::currentThread()) {
|
||||
handler->CreateCamera(camera_name);
|
||||
|
@ -54,6 +55,9 @@ QtMultimediaCamera::QtMultimediaCamera(const std::string& camera_name)
|
|||
QMetaObject::invokeMethod(handler.get(), "CreateCamera", Qt::BlockingQueuedConnection,
|
||||
Q_ARG(const std::string&, camera_name));
|
||||
}
|
||||
using namespace Service::CAM;
|
||||
flip_horizontal = basic_flip_horizontal = (flip == Flip::Horizontal) || (flip == Flip::Reverse);
|
||||
flip_vertical = basic_flip_vertical = (flip == Flip::Vertical) || (flip == Flip::Reverse);
|
||||
}
|
||||
|
||||
QtMultimediaCamera::~QtMultimediaCamera() {
|
||||
|
@ -107,8 +111,8 @@ void QtMultimediaCamera::SetResolution(const Service::CAM::Resolution& resolutio
|
|||
|
||||
void QtMultimediaCamera::SetFlip(Service::CAM::Flip flip) {
|
||||
using namespace Service::CAM;
|
||||
flip_horizontal = (flip == Flip::Horizontal) || (flip == Flip::Reverse);
|
||||
flip_vertical = (flip == Flip::Vertical) || (flip == Flip::Reverse);
|
||||
flip_horizontal = basic_flip_horizontal ^ (flip == Flip::Horizontal || flip == Flip::Reverse);
|
||||
flip_vertical = basic_flip_vertical ^ (flip == Flip::Vertical || flip == Flip::Reverse);
|
||||
}
|
||||
|
||||
void QtMultimediaCamera::SetEffect(Service::CAM::Effect effect) {
|
||||
|
@ -128,8 +132,8 @@ bool QtMultimediaCamera::IsPreviewAvailable() {
|
|||
}
|
||||
|
||||
std::unique_ptr<CameraInterface> QtMultimediaCameraFactory::Create(
|
||||
const std::string& config) const {
|
||||
return std::make_unique<QtMultimediaCamera>(config);
|
||||
const std::string& config, const Service::CAM::Flip& flip) const {
|
||||
return std::make_unique<QtMultimediaCamera>(config, flip);
|
||||
}
|
||||
|
||||
std::array<std::shared_ptr<QtMultimediaCameraHandler>, 3> QtMultimediaCameraHandler::handlers;
|
||||
|
|
|
@ -38,7 +38,7 @@ class QtMultimediaCameraHandler;
|
|||
/// This class is only an interface. It just calls QtMultimediaCameraHandler.
|
||||
class QtMultimediaCamera final : public CameraInterface {
|
||||
public:
|
||||
QtMultimediaCamera(const std::string& camera_name);
|
||||
QtMultimediaCamera(const std::string& camera_name, const Service::CAM::Flip& flip);
|
||||
~QtMultimediaCamera();
|
||||
void StartCapture() override;
|
||||
void StopCapture() override;
|
||||
|
@ -55,11 +55,13 @@ private:
|
|||
int width, height;
|
||||
bool output_rgb;
|
||||
bool flip_horizontal, flip_vertical;
|
||||
bool basic_flip_horizontal, basic_flip_vertical;
|
||||
};
|
||||
|
||||
class QtMultimediaCameraFactory final : public QtCameraFactory {
|
||||
public:
|
||||
std::unique_ptr<CameraInterface> Create(const std::string& config) const override;
|
||||
std::unique_ptr<CameraInterface> Create(const std::string& config,
|
||||
const Service::CAM::Flip& flip) const override;
|
||||
};
|
||||
|
||||
class QtMultimediaCameraHandler final : public QObject {
|
||||
|
|
|
@ -9,7 +9,12 @@
|
|||
|
||||
namespace Camera {
|
||||
|
||||
StillImageCamera::StillImageCamera(QImage image_) : image(std::move(image_)) {}
|
||||
StillImageCamera::StillImageCamera(QImage image_, const Service::CAM::Flip& flip)
|
||||
: image(std::move(image_)) {
|
||||
using namespace Service::CAM;
|
||||
flip_horizontal = basic_flip_horizontal = (flip == Flip::Horizontal) || (flip == Flip::Reverse);
|
||||
flip_vertical = basic_flip_vertical = (flip == Flip::Vertical) || (flip == Flip::Reverse);
|
||||
}
|
||||
|
||||
void StillImageCamera::StartCapture() {}
|
||||
|
||||
|
@ -26,8 +31,8 @@ void StillImageCamera::SetResolution(const Service::CAM::Resolution& resolution)
|
|||
|
||||
void StillImageCamera::SetFlip(Service::CAM::Flip flip) {
|
||||
using namespace Service::CAM;
|
||||
flip_horizontal = (flip == Flip::Horizontal) || (flip == Flip::Reverse);
|
||||
flip_vertical = (flip == Flip::Vertical) || (flip == Flip::Reverse);
|
||||
flip_horizontal = basic_flip_horizontal ^ (flip == Flip::Horizontal || flip == Flip::Reverse);
|
||||
flip_vertical = basic_flip_vertical ^ (flip == Flip::Vertical || flip == Flip::Reverse);
|
||||
}
|
||||
|
||||
void StillImageCamera::SetEffect(Service::CAM::Effect effect) {
|
||||
|
@ -58,7 +63,8 @@ const std::string StillImageCameraFactory::getFilePath() {
|
|||
.toStdString();
|
||||
}
|
||||
|
||||
std::unique_ptr<CameraInterface> StillImageCameraFactory::Create(const std::string& config) const {
|
||||
std::unique_ptr<CameraInterface> StillImageCameraFactory::Create(
|
||||
const std::string& config, const Service::CAM::Flip& flip) const {
|
||||
std::string real_config = config;
|
||||
if (config.empty()) {
|
||||
real_config = getFilePath();
|
||||
|
@ -67,7 +73,7 @@ std::unique_ptr<CameraInterface> StillImageCameraFactory::Create(const std::stri
|
|||
if (image.isNull()) {
|
||||
NGLOG_ERROR(Service_CAM, "Couldn't load image \"{}\"", real_config.c_str());
|
||||
}
|
||||
return std::make_unique<StillImageCamera>(image);
|
||||
return std::make_unique<StillImageCamera>(image, flip);
|
||||
}
|
||||
|
||||
} // namespace Camera
|
||||
|
|
|
@ -14,7 +14,7 @@ namespace Camera {
|
|||
|
||||
class StillImageCamera final : public CameraInterface {
|
||||
public:
|
||||
StillImageCamera(QImage image);
|
||||
StillImageCamera(QImage image, const Service::CAM::Flip& flip);
|
||||
void StartCapture() override;
|
||||
void StopCapture() override;
|
||||
void SetResolution(const Service::CAM::Resolution&) override;
|
||||
|
@ -30,11 +30,13 @@ private:
|
|||
int width, height;
|
||||
bool output_rgb;
|
||||
bool flip_horizontal, flip_vertical;
|
||||
bool basic_flip_horizontal, basic_flip_vertical;
|
||||
};
|
||||
|
||||
class StillImageCameraFactory final : public QtCameraFactory {
|
||||
public:
|
||||
std::unique_ptr<CameraInterface> Create(const std::string& config) const override;
|
||||
std::unique_ptr<CameraInterface> Create(const std::string& config,
|
||||
const Service::CAM::Flip& flip) const override;
|
||||
|
||||
private:
|
||||
static const std::string getFilePath();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue