| /* SPDX-License-Identifier: GPL-2.0-or-later */ |
| /* |
| * Copyright (C) 2019, Google Inc. |
| * |
| * viewfinder.h - qcam - Viewfinder |
| */ |
| #ifndef __QCAM_VIEWFINDER_H__ |
| #define __QCAM_VIEWFINDER_H__ |
| |
| #include <stddef.h> |
| |
| #include <QIcon> |
| #include <QList> |
| #include <QImage> |
| #include <QMutex> |
| #include <QSize> |
| #include <QWidget> |
| |
| #include <libcamera/buffer.h> |
| #include <libcamera/pixelformats.h> |
| |
| #include "format_converter.h" |
| |
| class QImage; |
| |
| struct MappedBuffer { |
| void *memory; |
| size_t size; |
| }; |
| |
| class ViewFinder : public QWidget |
| { |
| Q_OBJECT |
| |
| public: |
| ViewFinder(QWidget *parent); |
| ~ViewFinder(); |
| |
| const QList<libcamera::PixelFormat> &nativeFormats() const; |
| |
| int setFormat(const libcamera::PixelFormat &format, const QSize &size); |
| void render(libcamera::FrameBuffer *buffer, MappedBuffer *map); |
| void stop(); |
| |
| QImage getCurrentImage(); |
| |
| Q_SIGNALS: |
| void renderComplete(libcamera::FrameBuffer *buffer); |
| |
| protected: |
| void paintEvent(QPaintEvent *) override; |
| QSize sizeHint() const override; |
| |
| private: |
| FormatConverter converter_; |
| |
| libcamera::PixelFormat format_; |
| QSize size_; |
| |
| /* Camera stopped icon */ |
| QSize vfSize_; |
| QIcon icon_; |
| QPixmap pixmap_; |
| |
| /* Buffer and render image */ |
| libcamera::FrameBuffer *buffer_; |
| QImage image_; |
| QMutex mutex_; /* Prevent concurrent access to image_ */ |
| }; |
| |
| #endif /* __QCAM_VIEWFINDER__ */ |