AVFoundation: don't automatically rotate camera captures.

We shouldn't do this automatically, as different kind of orientations
might be wanted (sensor, device, UI). The default should be sensor
orientation (no rotation applied).

We should add an API to QCamera to enable automatic orientation of
captured images.

Change-Id: I56fff7f0c4aaaee37eb6ae2628e27073b4946b66
Reviewed-by: Christian Stromme <christian.stromme@theqtcompany.com>
This commit is contained in:
Yoann Lopes
2015-10-23 17:45:31 +02:00
parent 14adf0f24c
commit 9ebf1265da
2 changed files with 4 additions and 12 deletions

View File

@@ -39,7 +39,6 @@
#include <QtCore/qqueue.h> #include <QtCore/qqueue.h>
#include <QtCore/qsemaphore.h> #include <QtCore/qsemaphore.h>
#include <QtMultimedia/qcameraimagecapturecontrol.h> #include <QtMultimedia/qcameraimagecapturecontrol.h>
#include <private/qvideooutputorientationhandler_p.h>
#include "avfcamerasession.h" #include "avfcamerasession.h"
#include "avfstoragelocation.h" #include "avfstoragelocation.h"
@@ -72,7 +71,7 @@ private Q_SLOTS:
void onNewViewfinderFrame(const QVideoFrame &frame); void onNewViewfinderFrame(const QVideoFrame &frame);
private: private:
void makeCapturePreview(CaptureRequest request, const QVideoFrame &frame, AVFCameraInfo cameraInfo, int screenOrientation); void makeCapturePreview(CaptureRequest request, const QVideoFrame &frame, int rotation);
AVFCameraSession *m_session; AVFCameraSession *m_session;
AVFCameraControl *m_cameraControl; AVFCameraControl *m_cameraControl;
@@ -81,7 +80,6 @@ private:
AVCaptureStillImageOutput *m_stillImageOutput; AVCaptureStillImageOutput *m_stillImageOutput;
AVCaptureConnection *m_videoConnection; AVCaptureConnection *m_videoConnection;
AVFStorageLocation m_storageLocation; AVFStorageLocation m_storageLocation;
QVideoOutputOrientationHandler m_orientationHandler;
QMutex m_requestsMutex; QMutex m_requestsMutex;
QQueue<CaptureRequest> m_captureRequests; QQueue<CaptureRequest> m_captureRequests;

View File

@@ -180,21 +180,15 @@ void AVFImageCaptureControl::onNewViewfinderFrame(const QVideoFrame &frame)
QtConcurrent::run(this, &AVFImageCaptureControl::makeCapturePreview, QtConcurrent::run(this, &AVFImageCaptureControl::makeCapturePreview,
request, request,
frame, frame,
m_session->activeCameraInfo(), 0 /* rotation */);
m_orientationHandler.currentOrientation());
} }
void AVFImageCaptureControl::makeCapturePreview(CaptureRequest request, void AVFImageCaptureControl::makeCapturePreview(CaptureRequest request,
const QVideoFrame &frame, const QVideoFrame &frame,
AVFCameraInfo cameraInfo, int rotation)
int screenOrientation)
{ {
QTransform transform; QTransform transform;
screenOrientation = 360 - screenOrientation; transform.rotate(rotation);
if (cameraInfo.position == QCamera::FrontFace)
transform.rotate((screenOrientation + cameraInfo.orientation) % 360);
else
transform.rotate((screenOrientation + (360 - cameraInfo.orientation)) % 360);
Q_EMIT imageCaptured(request.captureId, qt_imageFromVideoFrame(frame).transformed(transform)); Q_EMIT imageCaptured(request.captureId, qt_imageFromVideoFrame(frame).transformed(transform));