30class AVFImageCapture final :
public QPlatformImageCapture
35 struct CaptureRequest {
37 std::shared_ptr<QSemaphore> previewReady;
40 AVFImageCapture(QImageCapture *parent =
nullptr);
41 ~AVFImageCapture() override;
43 bool isReadyForCapture()
const override;
45 AVCaptureStillImageOutput *stillImageOutput()
const {
return m_stillImageOutput;}
47 int doCapture(
const QString &fileName);
48 int capture(
const QString &fileName) override;
49 int captureToBuffer() override;
51 QImageEncoderSettings imageSettings()
const override;
52 void setImageSettings(
const QImageEncoderSettings &settings) override;
55 void setCaptureSession(QPlatformMediaCaptureSession *session);
58 void updateCaptureConnection();
59 void updateReadyStatus();
60 void onNewViewfinderFrame(
const QVideoFrame &frame);
61 void onCameraChanged();
64 bool videoCaptureDeviceIsValid()
const;
66 AVFCameraService *m_service =
nullptr;
67 AVFCameraSession *m_session =
nullptr;
68 AVFCamera *m_cameraControl =
nullptr;
70 int m_lastCaptureId = 0;
71 AVCaptureStillImageOutput *m_stillImageOutput;
72 AVCaptureConnection *m_videoConnection =
nullptr;
74 QMutex m_requestsMutex;
75 std::queue<CaptureRequest> m_captureRequests;
76 QImageEncoderSettings m_settings;