mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 22:00:05 +00:00 
			
		
		
		
	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