BlackBerry: Fix the rotation of the viewfinder
This fixes the rotation of the viewfinder. We have to adjust the orientation depending on the primary screen orientation. On a keyboard device, the viewfinder would not rotate at all (same if auto orientation is turned off). Task-number: QTBUG-37894 Change-Id: I2bf955fb3303ed236d3234154ded94fe78607455 Reviewed-by: Yoann Lopes <yoann.lopes@digia.com> Reviewed-by: Bernd Weimer <bweimer@blackberry.com> Reviewed-by: Rafael Roquetto <rafael.roquetto@kdab.com>
This commit is contained in:
committed by
The Qt Project
parent
244c63f72a
commit
3a18ec30f0
@@ -41,7 +41,8 @@
|
|||||||
#include "bbcameraorientationhandler.h"
|
#include "bbcameraorientationhandler.h"
|
||||||
|
|
||||||
#include <QAbstractEventDispatcher>
|
#include <QAbstractEventDispatcher>
|
||||||
#include <QCoreApplication>
|
#include <QGuiApplication>
|
||||||
|
#include <QScreen>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
|
||||||
#include <bps/orientation.h>
|
#include <bps/orientation.h>
|
||||||
@@ -87,6 +88,10 @@ bool BbCameraOrientationHandler::nativeEventFilter(const QByteArray&, void *mess
|
|||||||
|
|
||||||
const int angle = orientation_event_get_angle(event);
|
const int angle = orientation_event_get_angle(event);
|
||||||
if (angle != m_orientation) {
|
if (angle != m_orientation) {
|
||||||
|
#ifndef Q_OS_BLACKBERRY_TABLET
|
||||||
|
if (angle == 180) // The screen does not rotate at 180 degrees
|
||||||
|
return false;
|
||||||
|
#endif
|
||||||
m_orientation = angle;
|
m_orientation = angle;
|
||||||
emit orientationChanged(m_orientation);
|
emit orientationChanged(m_orientation);
|
||||||
}
|
}
|
||||||
@@ -94,6 +99,17 @@ bool BbCameraOrientationHandler::nativeEventFilter(const QByteArray&, void *mess
|
|||||||
return false; // do not drop the event
|
return false; // do not drop the event
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int BbCameraOrientationHandler::viewfinderOrientation() const
|
||||||
|
{
|
||||||
|
// On a keyboard device we do not rotate the screen at all
|
||||||
|
if (qGuiApp->primaryScreen()->nativeOrientation()
|
||||||
|
!= qGuiApp->primaryScreen()->primaryOrientation()) {
|
||||||
|
return m_orientation;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int BbCameraOrientationHandler::orientation() const
|
int BbCameraOrientationHandler::orientation() const
|
||||||
{
|
{
|
||||||
return m_orientation;
|
return m_orientation;
|
||||||
|
|||||||
@@ -57,6 +57,8 @@ public:
|
|||||||
|
|
||||||
int orientation() const;
|
int orientation() const;
|
||||||
|
|
||||||
|
int viewfinderOrientation() const;
|
||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
void orientationChanged(int degree);
|
void orientationChanged(int degree);
|
||||||
|
|
||||||
|
|||||||
@@ -772,11 +772,16 @@ void BbCameraSession::viewfinderFrameGrabbed(const QImage &image)
|
|||||||
{
|
{
|
||||||
QTransform transform;
|
QTransform transform;
|
||||||
|
|
||||||
|
// subtract out the native rotation
|
||||||
transform.rotate(m_nativeCameraOrientation);
|
transform.rotate(m_nativeCameraOrientation);
|
||||||
|
|
||||||
|
// subtract out the current device orientation
|
||||||
|
if (m_device == cameraIdentifierRear())
|
||||||
|
transform.rotate(360 - m_orientationHandler->viewfinderOrientation());
|
||||||
|
else
|
||||||
|
transform.rotate(m_orientationHandler->viewfinderOrientation());
|
||||||
|
|
||||||
QImage frame = image.copy().transformed(transform);
|
QImage frame = image.copy().transformed(transform);
|
||||||
if (m_device == cameraIdentifierFront())
|
|
||||||
frame = frame.mirrored(true, false);
|
|
||||||
|
|
||||||
QMutexLocker locker(&m_surfaceMutex);
|
QMutexLocker locker(&m_surfaceMutex);
|
||||||
if (m_surface) {
|
if (m_surface) {
|
||||||
@@ -896,7 +901,7 @@ bool BbCameraSession::startViewFinder()
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
const int angle = m_orientationHandler->orientation();
|
const int angle = m_orientationHandler->viewfinderOrientation();
|
||||||
|
|
||||||
const QSize rotatedSize = ((angle == 0 || angle == 180) ? viewfinderResolution
|
const QSize rotatedSize = ((angle == 0 || angle == 180) ? viewfinderResolution
|
||||||
: viewfinderResolution.transposed());
|
: viewfinderResolution.transposed());
|
||||||
|
|||||||
Reference in New Issue
Block a user