summaryrefslogtreecommitdiffstats
path: root/src/plugins/avfoundation/camera/avfimagecapturecontrol.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/avfoundation/camera/avfimagecapturecontrol.h')
-rw-r--r--src/plugins/avfoundation/camera/avfimagecapturecontrol.h20
1 files changed, 16 insertions, 4 deletions
diff --git a/src/plugins/avfoundation/camera/avfimagecapturecontrol.h b/src/plugins/avfoundation/camera/avfimagecapturecontrol.h
index 993725653..dd5e8e8bb 100644
--- a/src/plugins/avfoundation/camera/avfimagecapturecontrol.h
+++ b/src/plugins/avfoundation/camera/avfimagecapturecontrol.h
@@ -36,19 +36,23 @@
#import <AVFoundation/AVFoundation.h>
+#include <QtCore/qqueue.h>
+#include <QtCore/qsemaphore.h>
#include <QtMultimedia/qcameraimagecapturecontrol.h>
+#include "avfcamerasession.h"
#include "avfstoragelocation.h"
QT_BEGIN_NAMESPACE
-class AVFCameraSession;
-class AVFCameraService;
-class AVFCameraControl;
-
class AVFImageCaptureControl : public QCameraImageCaptureControl
{
Q_OBJECT
public:
+ struct CaptureRequest {
+ int captureId;
+ QSemaphore *previewReady;
+ };
+
AVFImageCaptureControl(AVFCameraService *service, QObject *parent = 0);
~AVFImageCaptureControl();
@@ -64,8 +68,11 @@ public:
private Q_SLOTS:
void updateCaptureConnection();
void updateReadyStatus();
+ void onNewViewfinderFrame(const QVideoFrame &frame);
private:
+ void makeCapturePreview(CaptureRequest request, const QVideoFrame &frame, int rotation);
+
AVFCameraSession *m_session;
AVFCameraControl *m_cameraControl;
bool m_ready;
@@ -73,8 +80,13 @@ private:
AVCaptureStillImageOutput *m_stillImageOutput;
AVCaptureConnection *m_videoConnection;
AVFStorageLocation m_storageLocation;
+
+ QMutex m_requestsMutex;
+ QQueue<CaptureRequest> m_captureRequests;
};
+Q_DECLARE_TYPEINFO(AVFImageCaptureControl::CaptureRequest, Q_PRIMITIVE_TYPE);
+
QT_END_NAMESPACE
#endif