[camerabin] Implement retrieval of supported camera features MER#1976
scene-modes flash-modes focus-modes effects white-balance-modes iso-values
This commit is contained in:
@@ -95,6 +95,10 @@ public:
|
|||||||
ExposureParty = 18,
|
ExposureParty = 18,
|
||||||
ExposureCandlelight = 19,
|
ExposureCandlelight = 19,
|
||||||
ExposureBarcode = 20,
|
ExposureBarcode = 20,
|
||||||
|
ExposureFlowers = 21,
|
||||||
|
ExposureAR = 22,
|
||||||
|
ExposureHDR = 23,
|
||||||
|
ExposureCloseup = 24,
|
||||||
ExposureModeVendor = 1000
|
ExposureModeVendor = 1000
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -66,6 +66,7 @@ public:
|
|||||||
WhiteBalanceFluorescent = 6,
|
WhiteBalanceFluorescent = 6,
|
||||||
WhiteBalanceFlash = 7,
|
WhiteBalanceFlash = 7,
|
||||||
WhiteBalanceSunset = 8,
|
WhiteBalanceSunset = 8,
|
||||||
|
WhiteBalanceWarmFluorescent = 9,
|
||||||
WhiteBalanceVendor = 1000
|
WhiteBalanceVendor = 1000
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -79,6 +80,9 @@ public:
|
|||||||
ColorFilterWhiteboard,
|
ColorFilterWhiteboard,
|
||||||
ColorFilterBlackboard,
|
ColorFilterBlackboard,
|
||||||
ColorFilterAqua,
|
ColorFilterAqua,
|
||||||
|
ColorFilterEmboss,
|
||||||
|
ColorFilterSketch,
|
||||||
|
ColorFilterNeon,
|
||||||
ColorFilterVendor = 1000
|
ColorFilterVendor = 1000
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -47,6 +47,32 @@ CameraBinExposure::CameraBinExposure(CameraBinSession *session)
|
|||||||
:QCameraExposureControl(session),
|
:QCameraExposureControl(session),
|
||||||
m_session(session)
|
m_session(session)
|
||||||
{
|
{
|
||||||
|
if (m_session->photography()) {
|
||||||
|
m_mappedExposureValues[GST_PHOTOGRAPHY_SCENE_MODE_MANUAL] = QCameraExposure::ExposureManual;
|
||||||
|
m_mappedExposureValues[GST_PHOTOGRAPHY_SCENE_MODE_AUTO] = QCameraExposure::ExposureAuto;
|
||||||
|
m_mappedExposureValues[GST_PHOTOGRAPHY_SCENE_MODE_CLOSEUP] = QCameraExposure::ExposureCloseup;
|
||||||
|
m_mappedExposureValues[GST_PHOTOGRAPHY_SCENE_MODE_PORTRAIT] = QCameraExposure::ExposurePortrait;
|
||||||
|
m_mappedExposureValues[GST_PHOTOGRAPHY_SCENE_MODE_LANDSCAPE] = QCameraExposure::ExposureLandscape;
|
||||||
|
m_mappedExposureValues[GST_PHOTOGRAPHY_SCENE_MODE_SPORT] = QCameraExposure::ExposureSports;
|
||||||
|
m_mappedExposureValues[GST_PHOTOGRAPHY_SCENE_MODE_NIGHT] = QCameraExposure::ExposureNight;
|
||||||
|
m_mappedExposureValues[GST_PHOTOGRAPHY_SCENE_MODE_ACTION] = QCameraExposure::ExposureAction;
|
||||||
|
m_mappedExposureValues[GST_PHOTOGRAPHY_SCENE_MODE_NIGHT_PORTRAIT] = QCameraExposure::ExposureNightPortrait;
|
||||||
|
m_mappedExposureValues[GST_PHOTOGRAPHY_SCENE_MODE_THEATRE] = QCameraExposure::ExposureTheatre;
|
||||||
|
m_mappedExposureValues[GST_PHOTOGRAPHY_SCENE_MODE_BEACH] = QCameraExposure::ExposureBeach;
|
||||||
|
m_mappedExposureValues[GST_PHOTOGRAPHY_SCENE_MODE_SNOW] = QCameraExposure::ExposureSnow;
|
||||||
|
m_mappedExposureValues[GST_PHOTOGRAPHY_SCENE_MODE_SUNSET] = QCameraExposure::ExposureSunset;
|
||||||
|
m_mappedExposureValues[GST_PHOTOGRAPHY_SCENE_MODE_STEADY_PHOTO] = QCameraExposure::ExposureSteadyPhoto;
|
||||||
|
m_mappedExposureValues[GST_PHOTOGRAPHY_SCENE_MODE_FIREWORKS] = QCameraExposure::ExposureFireworks;
|
||||||
|
m_mappedExposureValues[GST_PHOTOGRAPHY_SCENE_MODE_PARTY] = QCameraExposure::ExposureParty;
|
||||||
|
m_mappedExposureValues[GST_PHOTOGRAPHY_SCENE_MODE_CANDLELIGHT] = QCameraExposure::ExposureCandlelight;
|
||||||
|
m_mappedExposureValues[GST_PHOTOGRAPHY_SCENE_MODE_BARCODE] = QCameraExposure::ExposureBarcode;
|
||||||
|
#if GST_CHECK_VERSION(1, 14, 0)
|
||||||
|
m_mappedExposureValues[GST_PHOTOGRAPHY_SCENE_MODE_BACKLIGHT] = QCameraExposure::ExposureBacklight;
|
||||||
|
m_mappedExposureValues[GST_PHOTOGRAPHY_SCENE_MODE_FLOWERS] = QCameraExposure::ExposureFlowers;
|
||||||
|
m_mappedExposureValues[GST_PHOTOGRAPHY_SCENE_MODE_AR] = QCameraExposure::ExposureAR;
|
||||||
|
m_mappedExposureValues[GST_PHOTOGRAPHY_SCENE_MODE_HDR] = QCameraExposure::ExposureHDR;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
CameraBinExposure::~CameraBinExposure()
|
CameraBinExposure::~CameraBinExposure()
|
||||||
@@ -60,6 +86,9 @@ bool CameraBinExposure::isParameterSupported(ExposureParameter parameter) const
|
|||||||
case QCameraExposureControl::ISO:
|
case QCameraExposureControl::ISO:
|
||||||
case QCameraExposureControl::Aperture:
|
case QCameraExposureControl::Aperture:
|
||||||
case QCameraExposureControl::ShutterSpeed:
|
case QCameraExposureControl::ShutterSpeed:
|
||||||
|
#ifdef HAVE_GST_PHOTOGRAPHY
|
||||||
|
case QCameraExposureControl::ExposureMode:
|
||||||
|
#endif
|
||||||
return true;
|
return true;
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
@@ -73,6 +102,7 @@ QVariantList CameraBinExposure::supportedParameterRange(ExposureParameter parame
|
|||||||
*continuous = false;
|
*continuous = false;
|
||||||
|
|
||||||
QVariantList res;
|
QVariantList res;
|
||||||
|
|
||||||
switch (parameter) {
|
switch (parameter) {
|
||||||
case QCameraExposureControl::ExposureCompensation:
|
case QCameraExposureControl::ExposureCompensation:
|
||||||
if (continuous)
|
if (continuous)
|
||||||
@@ -80,11 +110,52 @@ QVariantList CameraBinExposure::supportedParameterRange(ExposureParameter parame
|
|||||||
res << -2.0 << 2.0;
|
res << -2.0 << 2.0;
|
||||||
break;
|
break;
|
||||||
case QCameraExposureControl::ISO:
|
case QCameraExposureControl::ISO:
|
||||||
|
#ifdef HAVE_GST_PHOTOGRAPHY
|
||||||
|
if (G_IS_OBJECT(m_session->cameraSource()) &&
|
||||||
|
G_IS_OBJECT_CLASS(G_OBJECT_GET_CLASS(G_OBJECT(m_session->cameraSource()))) &&
|
||||||
|
g_object_class_find_property(G_OBJECT_GET_CLASS(G_OBJECT(m_session->cameraSource())), "supported-iso-speeds")) {
|
||||||
|
GVariant *iso_modes;
|
||||||
|
g_object_get(G_OBJECT(m_session->cameraSource()), "supported-iso-speeds", &iso_modes, NULL);
|
||||||
|
|
||||||
|
if (iso_modes) {
|
||||||
|
int iso_mode_count = g_variant_n_children(iso_modes);
|
||||||
|
|
||||||
|
for (int i = 0; i < iso_mode_count; i++) {
|
||||||
|
GVariant *mode = g_variant_get_child_value(iso_modes, i);
|
||||||
|
res << g_variant_get_int32(mode);
|
||||||
|
g_variant_unref(mode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
res << 100 << 200 << 400;
|
||||||
|
}
|
||||||
|
#else
|
||||||
res << 100 << 200 << 400;
|
res << 100 << 200 << 400;
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
case QCameraExposureControl::Aperture:
|
case QCameraExposureControl::Aperture:
|
||||||
res << 2.8;
|
res << 2.8;
|
||||||
break;
|
break;
|
||||||
|
#ifdef HAVE_GST_PHOTOGRAPHY
|
||||||
|
case QCameraExposureControl::ExposureMode:
|
||||||
|
if (G_IS_OBJECT(m_session->cameraSource()) &&
|
||||||
|
G_IS_OBJECT_CLASS(G_OBJECT_GET_CLASS(G_OBJECT(m_session->cameraSource()))) &&
|
||||||
|
g_object_class_find_property(G_OBJECT_GET_CLASS(G_OBJECT(m_session->cameraSource())), "supported-scene-modes")) {
|
||||||
|
GVariant *exposure_modes;
|
||||||
|
g_object_get(G_OBJECT(m_session->cameraSource()), "supported-scene-modes", &exposure_modes, NULL);
|
||||||
|
|
||||||
|
if (exposure_modes) {
|
||||||
|
int exposure_mode_count = g_variant_n_children(exposure_modes);
|
||||||
|
|
||||||
|
for (int i = 0; i < exposure_mode_count; i++) {
|
||||||
|
GVariant *mode = g_variant_get_child_value(exposure_modes, i);
|
||||||
|
res << m_mappedExposureValues[static_cast<GstPhotographySceneMode>(g_variant_get_int32(mode))];
|
||||||
|
g_variant_unref(mode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -161,8 +232,18 @@ QVariant CameraBinExposure::actualValue(ExposureParameter parameter) const
|
|||||||
case GST_PHOTOGRAPHY_SCENE_MODE_BARCODE:
|
case GST_PHOTOGRAPHY_SCENE_MODE_BARCODE:
|
||||||
return QVariant::fromValue(QCameraExposure::ExposureBarcode);
|
return QVariant::fromValue(QCameraExposure::ExposureBarcode);
|
||||||
#endif
|
#endif
|
||||||
//no direct mapping available so mapping to auto mode
|
#if GST_CHECK_VERSION(1, 14, 0)
|
||||||
|
case GST_PHOTOGRAPHY_SCENE_MODE_BACKLIGHT:
|
||||||
|
return QVariant::fromValue(QCameraExposure::ExposureBacklight);
|
||||||
|
case GST_PHOTOGRAPHY_SCENE_MODE_FLOWERS:
|
||||||
|
return QVariant::fromValue(QCameraExposure::ExposureFlowers);
|
||||||
|
case GST_PHOTOGRAPHY_SCENE_MODE_AR:
|
||||||
|
return QVariant::fromValue(QCameraExposure::ExposureAR);
|
||||||
|
case GST_PHOTOGRAPHY_SCENE_MODE_HDR:
|
||||||
|
return QVariant::fromValue(QCameraExposure::ExposureHDR);
|
||||||
|
#endif
|
||||||
case GST_PHOTOGRAPHY_SCENE_MODE_CLOSEUP:
|
case GST_PHOTOGRAPHY_SCENE_MODE_CLOSEUP:
|
||||||
|
return QVariant::fromValue(QCameraExposure::ExposureCloseup);
|
||||||
case GST_PHOTOGRAPHY_SCENE_MODE_AUTO:
|
case GST_PHOTOGRAPHY_SCENE_MODE_AUTO:
|
||||||
default:
|
default:
|
||||||
return QVariant::fromValue(QCameraExposure::ExposureAuto);
|
return QVariant::fromValue(QCameraExposure::ExposureAuto);
|
||||||
@@ -252,8 +333,24 @@ bool CameraBinExposure::setValue(ExposureParameter parameter, const QVariant& va
|
|||||||
case QCameraExposure::ExposureBarcode:
|
case QCameraExposure::ExposureBarcode:
|
||||||
sceneMode = GST_PHOTOGRAPHY_SCENE_MODE_BARCODE;
|
sceneMode = GST_PHOTOGRAPHY_SCENE_MODE_BARCODE;
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
|
#if GST_CHECK_VERSION(1, 14, 0)
|
||||||
|
case QCameraExposure::ExposureFlowers:
|
||||||
|
sceneMode = GST_PHOTOGRAPHY_SCENE_MODE_FLOWERS;
|
||||||
|
break;
|
||||||
|
case QCameraExposure::ExposureBacklight:
|
||||||
|
sceneMode = GST_PHOTOGRAPHY_SCENE_MODE_BACKLIGHT;
|
||||||
|
break;
|
||||||
|
case QCameraExposure::ExposureAR:
|
||||||
|
sceneMode = GST_PHOTOGRAPHY_SCENE_MODE_AR;
|
||||||
|
break;
|
||||||
|
case QCameraExposure::ExposureHDR:
|
||||||
|
sceneMode = GST_PHOTOGRAPHY_SCENE_MODE_HDR;
|
||||||
|
break;
|
||||||
#endif
|
#endif
|
||||||
default:
|
default:
|
||||||
|
//Best option is probably to set auto mode for anything unknown
|
||||||
|
sceneMode = GST_PHOTOGRAPHY_SCENE_MODE_AUTO;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -40,6 +40,10 @@
|
|||||||
#include <gst/gst.h>
|
#include <gst/gst.h>
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
|
|
||||||
|
#ifdef HAVE_GST_PHOTOGRAPHY
|
||||||
|
# include <gst/interfaces/photography.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
class CameraBinSession;
|
class CameraBinSession;
|
||||||
@@ -62,6 +66,10 @@ public:
|
|||||||
private:
|
private:
|
||||||
CameraBinSession *m_session;
|
CameraBinSession *m_session;
|
||||||
QHash<ExposureParameter, QVariant> m_requestedValues;
|
QHash<ExposureParameter, QVariant> m_requestedValues;
|
||||||
|
|
||||||
|
#ifdef HAVE_GST_PHOTOGRAPHY
|
||||||
|
QMap<GstPhotographySceneMode, QCameraExposure::ExposureMode> m_mappedExposureValues;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|||||||
@@ -47,6 +47,13 @@ CameraBinFlash::CameraBinFlash(CameraBinSession *session)
|
|||||||
:QCameraFlashControl(session),
|
:QCameraFlashControl(session),
|
||||||
m_session(session)
|
m_session(session)
|
||||||
{
|
{
|
||||||
|
#ifdef HAVE_GST_PHOTOGRAPHY
|
||||||
|
m_flashMap[GST_PHOTOGRAPHY_FLASH_MODE_AUTO] = QCameraExposure::FlashAuto;
|
||||||
|
m_flashMap[GST_PHOTOGRAPHY_FLASH_MODE_OFF] = QCameraExposure::FlashOff;
|
||||||
|
m_flashMap[GST_PHOTOGRAPHY_FLASH_MODE_ON] = QCameraExposure::FlashOn;
|
||||||
|
m_flashMap[GST_PHOTOGRAPHY_FLASH_MODE_FILL_IN] = QCameraExposure::FlashFill;
|
||||||
|
m_flashMap[GST_PHOTOGRAPHY_FLASH_MODE_RED_EYE] = QCameraExposure::FlashRedEyeReduction;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
CameraBinFlash::~CameraBinFlash()
|
CameraBinFlash::~CameraBinFlash()
|
||||||
@@ -111,6 +118,30 @@ bool CameraBinFlash::isFlashModeSupported(QCameraExposure::FlashModes mode) cons
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef HAVE_GST_PHOTOGRAPHY
|
||||||
|
//QList<QCameraExposure::FlashMode> supportedFlash;
|
||||||
|
QCameraExposure::FlashModes supportedModes;
|
||||||
|
if (G_IS_OBJECT(m_session->cameraSource()) &&
|
||||||
|
G_IS_OBJECT_CLASS(G_OBJECT_GET_CLASS(G_OBJECT(m_session->cameraSource()))) &&
|
||||||
|
g_object_class_find_property(G_OBJECT_GET_CLASS(G_OBJECT(m_session->cameraSource())), "supported-flash-modes")) {
|
||||||
|
|
||||||
|
GVariant *flash_modes;
|
||||||
|
g_object_get(G_OBJECT(m_session->cameraSource()), "supported-flash-modes", &flash_modes, NULL);
|
||||||
|
|
||||||
|
if (flash_modes) {
|
||||||
|
int flash_count = g_variant_n_children(flash_modes);
|
||||||
|
|
||||||
|
for (int i = 0; i < flash_count; i++) {
|
||||||
|
GVariant *mode = g_variant_get_child_value(flash_modes, i);
|
||||||
|
supportedModes |= m_flashMap[static_cast<GstPhotographyFlashMode>(g_variant_get_int32(mode))];
|
||||||
|
g_variant_unref(mode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return mode & supportedModes;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
return mode == QCameraExposure::FlashOff ||
|
return mode == QCameraExposure::FlashOff ||
|
||||||
mode == QCameraExposure::FlashOn ||
|
mode == QCameraExposure::FlashOn ||
|
||||||
mode == QCameraExposure::FlashAuto ||
|
mode == QCameraExposure::FlashAuto ||
|
||||||
|
|||||||
@@ -39,6 +39,9 @@
|
|||||||
|
|
||||||
#include <gst/gst.h>
|
#include <gst/gst.h>
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
|
#ifdef HAVE_GST_PHOTOGRAPHY
|
||||||
|
# include <gst/interfaces/photography.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
@@ -59,6 +62,10 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
CameraBinSession *m_session;
|
CameraBinSession *m_session;
|
||||||
|
|
||||||
|
#ifdef HAVE_GST_PHOTOGRAPHY
|
||||||
|
QMap<GstPhotographyFlashMode, QCameraExposure::FlashMode> m_flashMap;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|||||||
@@ -70,6 +70,18 @@ CameraBinFocus::CameraBinFocus(CameraBinSession *session)
|
|||||||
|
|
||||||
connect(m_session, SIGNAL(statusChanged(QCamera::Status)),
|
connect(m_session, SIGNAL(statusChanged(QCamera::Status)),
|
||||||
this, SLOT(_q_handleCameraStatusChange(QCamera::Status)));
|
this, SLOT(_q_handleCameraStatusChange(QCamera::Status)));
|
||||||
|
|
||||||
|
#ifdef HAVE_GST_PHOTOGRAPHY
|
||||||
|
m_focusMap[GST_PHOTOGRAPHY_FOCUS_MODE_AUTO] = QCameraFocus::AutoFocus;
|
||||||
|
m_focusMap[GST_PHOTOGRAPHY_FOCUS_MODE_MACRO] = QCameraFocus::MacroFocus;
|
||||||
|
m_focusMap[GST_PHOTOGRAPHY_FOCUS_MODE_PORTRAIT] = QCameraFocus::AutoFocus; //No direct mappint
|
||||||
|
m_focusMap[GST_PHOTOGRAPHY_FOCUS_MODE_INFINITY] = QCameraFocus::InfinityFocus;
|
||||||
|
m_focusMap[GST_PHOTOGRAPHY_FOCUS_MODE_HYPERFOCAL] = QCameraFocus::HyperfocalFocus;
|
||||||
|
m_focusMap[GST_PHOTOGRAPHY_FOCUS_MODE_EXTENDED] = QCameraFocus::AutoFocus; //No direct mapping
|
||||||
|
m_focusMap[GST_PHOTOGRAPHY_FOCUS_MODE_CONTINUOUS_NORMAL] = QCameraFocus::ContinuousFocus;
|
||||||
|
m_focusMap[GST_PHOTOGRAPHY_FOCUS_MODE_CONTINUOUS_EXTENDED] = QCameraFocus::ContinuousFocus; //No direct mapping
|
||||||
|
m_focusMap[GST_PHOTOGRAPHY_FOCUS_MODE_MANUAL] = QCameraFocus::ManualFocus;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
CameraBinFocus::~CameraBinFocus()
|
CameraBinFocus::~CameraBinFocus()
|
||||||
@@ -116,6 +128,28 @@ void CameraBinFocus::setFocusMode(QCameraFocus::FocusModes mode)
|
|||||||
|
|
||||||
bool CameraBinFocus::isFocusModeSupported(QCameraFocus::FocusModes mode) const
|
bool CameraBinFocus::isFocusModeSupported(QCameraFocus::FocusModes mode) const
|
||||||
{
|
{
|
||||||
|
#ifdef HAVE_GST_PHOTOGRAPHY
|
||||||
|
QCameraFocus::FocusModes supportedFocusModes;
|
||||||
|
|
||||||
|
if (G_IS_OBJECT(m_session->cameraSource()) &&
|
||||||
|
G_IS_OBJECT_CLASS(G_OBJECT_GET_CLASS(G_OBJECT(m_session->cameraSource()))) &&
|
||||||
|
g_object_class_find_property(G_OBJECT_GET_CLASS(G_OBJECT(m_session->cameraSource())), "supported-focus-modes")) {
|
||||||
|
|
||||||
|
GVariant *focus_modes;
|
||||||
|
g_object_get(G_OBJECT(m_session->cameraSource()), "supported-focus-modes", &focus_modes, NULL);
|
||||||
|
|
||||||
|
if (focus_modes){
|
||||||
|
int focus_count = g_variant_n_children(focus_modes);
|
||||||
|
|
||||||
|
for (int i = 0; i < focus_count; i++) {
|
||||||
|
GVariant *mode = g_variant_get_child_value(focus_modes, i);
|
||||||
|
supportedFocusModes |= m_focusMap[static_cast<GstPhotographyFocusMode>(g_variant_get_int32(mode))];
|
||||||
|
g_variant_unref(mode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return mode & supportedFocusModes;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
switch (mode) {
|
switch (mode) {
|
||||||
case QCameraFocus::AutoFocus:
|
case QCameraFocus::AutoFocus:
|
||||||
case QCameraFocus::HyperfocalFocus:
|
case QCameraFocus::HyperfocalFocus:
|
||||||
|
|||||||
@@ -46,6 +46,10 @@
|
|||||||
#include <gst/gst.h>
|
#include <gst/gst.h>
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
|
|
||||||
|
#ifdef HAVE_GST_PHOTOGRAPHY
|
||||||
|
#include <gst/interfaces/photography.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
class CameraBinSession;
|
class CameraBinSession;
|
||||||
@@ -121,6 +125,9 @@ private:
|
|||||||
QVector<QRect> m_faceFocusRects;
|
QVector<QRect> m_faceFocusRects;
|
||||||
QBasicTimer m_faceResetTimer;
|
QBasicTimer m_faceResetTimer;
|
||||||
mutable QMutex m_mutex;
|
mutable QMutex m_mutex;
|
||||||
|
#ifdef HAVE_GST_PHOTOGRAPHY
|
||||||
|
QMap<GstPhotographyFocusMode, QCameraFocus::FocusMode> m_focusMap;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|||||||
@@ -62,6 +62,10 @@ CameraBinImageProcessing::CameraBinImageProcessing(CameraBinSession *session)
|
|||||||
m_mappedWbValues[GST_PHOTOGRAPHY_WB_MODE_SUNSET] = QCameraImageProcessing::WhiteBalanceSunset;
|
m_mappedWbValues[GST_PHOTOGRAPHY_WB_MODE_SUNSET] = QCameraImageProcessing::WhiteBalanceSunset;
|
||||||
m_mappedWbValues[GST_PHOTOGRAPHY_WB_MODE_TUNGSTEN] = QCameraImageProcessing::WhiteBalanceTungsten;
|
m_mappedWbValues[GST_PHOTOGRAPHY_WB_MODE_TUNGSTEN] = QCameraImageProcessing::WhiteBalanceTungsten;
|
||||||
m_mappedWbValues[GST_PHOTOGRAPHY_WB_MODE_FLUORESCENT] = QCameraImageProcessing::WhiteBalanceFluorescent;
|
m_mappedWbValues[GST_PHOTOGRAPHY_WB_MODE_FLUORESCENT] = QCameraImageProcessing::WhiteBalanceFluorescent;
|
||||||
|
#if GST_CHECK_VERSION(1, 14, 0)
|
||||||
|
m_mappedWbValues[GST_PHOTOGRAPHY_WB_MODE_WARM_FLUORESCENT] = QCameraImageProcessing::WhiteBalanceWarmFluorescent;
|
||||||
|
m_mappedWbValues[GST_PHOTOGRAPHY_WB_MODE_SHADE] = QCameraImageProcessing::WhiteBalanceShade;
|
||||||
|
#endif
|
||||||
unlockWhiteBalance();
|
unlockWhiteBalance();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -77,6 +81,11 @@ CameraBinImageProcessing::CameraBinImageProcessing(CameraBinSession *session)
|
|||||||
m_filterMap.insert(QCameraImageProcessing::ColorFilterWhiteboard, GST_PHOTOGRAPHY_COLOR_TONE_MODE_WHITEBOARD);
|
m_filterMap.insert(QCameraImageProcessing::ColorFilterWhiteboard, GST_PHOTOGRAPHY_COLOR_TONE_MODE_WHITEBOARD);
|
||||||
m_filterMap.insert(QCameraImageProcessing::ColorFilterBlackboard, GST_PHOTOGRAPHY_COLOR_TONE_MODE_BLACKBOARD);
|
m_filterMap.insert(QCameraImageProcessing::ColorFilterBlackboard, GST_PHOTOGRAPHY_COLOR_TONE_MODE_BLACKBOARD);
|
||||||
m_filterMap.insert(QCameraImageProcessing::ColorFilterAqua, GST_PHOTOGRAPHY_COLOR_TONE_MODE_AQUA);
|
m_filterMap.insert(QCameraImageProcessing::ColorFilterAqua, GST_PHOTOGRAPHY_COLOR_TONE_MODE_AQUA);
|
||||||
|
#endif
|
||||||
|
#if GST_CHECK_VERSION(1, 14, 0)
|
||||||
|
m_filterMap.insert(QCameraImageProcessing::ColorFilterEmboss, GST_PHOTOGRAPHY_COLOR_TONE_MODE_EMBOSS);
|
||||||
|
m_filterMap.insert(QCameraImageProcessing::ColorFilterSketch, GST_PHOTOGRAPHY_COLOR_TONE_MODE_SKETCH);
|
||||||
|
m_filterMap.insert(QCameraImageProcessing::ColorFilterNeon, GST_PHOTOGRAPHY_COLOR_TONE_MODE_NEON);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
@@ -197,6 +206,26 @@ bool CameraBinImageProcessing::setWhiteBalanceMode(QCameraImageProcessing::White
|
|||||||
bool CameraBinImageProcessing::isWhiteBalanceModeSupported(QCameraImageProcessing::WhiteBalanceMode mode) const
|
bool CameraBinImageProcessing::isWhiteBalanceModeSupported(QCameraImageProcessing::WhiteBalanceMode mode) const
|
||||||
{
|
{
|
||||||
#ifdef HAVE_GST_PHOTOGRAPHY
|
#ifdef HAVE_GST_PHOTOGRAPHY
|
||||||
|
// get supported modes from GStreamer
|
||||||
|
QList<QCameraImageProcessing::WhiteBalanceMode> supportedWbModes;
|
||||||
|
if (G_IS_OBJECT(m_session->cameraSource()) &&
|
||||||
|
G_IS_OBJECT_CLASS(G_OBJECT_GET_CLASS(G_OBJECT(m_session->cameraSource()))) &&
|
||||||
|
g_object_class_find_property(G_OBJECT_GET_CLASS(G_OBJECT(m_session->cameraSource())), "supported-wb-modes")) {
|
||||||
|
|
||||||
|
GVariant *supported_wb_modes;
|
||||||
|
g_object_get(G_OBJECT(m_session->cameraSource()), "supported-wb-modes", &supported_wb_modes, NULL);
|
||||||
|
|
||||||
|
if (supported_wb_modes) {
|
||||||
|
int wb_count = g_variant_n_children(supported_wb_modes);
|
||||||
|
|
||||||
|
for (int i = 0; i < wb_count; i++) {
|
||||||
|
GVariant *mode = g_variant_get_child_value(supported_wb_modes, i);
|
||||||
|
supportedWbModes << m_mappedWbValues[static_cast<GstPhotographyWhiteBalanceMode>(g_variant_get_int32(mode))];
|
||||||
|
g_variant_unref(mode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return supportedWbModes.contains(mode);
|
||||||
|
}
|
||||||
return m_mappedWbValues.values().contains(mode);
|
return m_mappedWbValues.values().contains(mode);
|
||||||
#else
|
#else
|
||||||
Q_UNUSED(mode);
|
Q_UNUSED(mode);
|
||||||
@@ -270,6 +299,25 @@ bool CameraBinImageProcessing::isParameterValueSupported(QCameraImageProcessingC
|
|||||||
case ColorFilter: {
|
case ColorFilter: {
|
||||||
const QCameraImageProcessing::ColorFilter filter = value.value<QCameraImageProcessing::ColorFilter>();
|
const QCameraImageProcessing::ColorFilter filter = value.value<QCameraImageProcessing::ColorFilter>();
|
||||||
#ifdef HAVE_GST_PHOTOGRAPHY
|
#ifdef HAVE_GST_PHOTOGRAPHY
|
||||||
|
// get supported effects from GStreamer
|
||||||
|
QList<QCameraImageProcessing::ColorFilter> supportedEffects;
|
||||||
|
if (G_IS_OBJECT(m_session->cameraSource()) &&
|
||||||
|
G_IS_OBJECT_CLASS(G_OBJECT_GET_CLASS(G_OBJECT(m_session->cameraSource()))) &&
|
||||||
|
g_object_class_find_property(G_OBJECT_GET_CLASS(G_OBJECT(m_session->cameraSource())), "supported-color-tones")) {
|
||||||
|
|
||||||
|
GVariant *supported_effects;
|
||||||
|
g_object_get(G_OBJECT(m_session->cameraSource()), "supported-color-tones", &supported_effects, NULL);
|
||||||
|
|
||||||
|
if (supported_effects) {
|
||||||
|
int effect_count = g_variant_n_children(supported_effects);
|
||||||
|
|
||||||
|
for (int i = 0; i < effect_count; i++) {
|
||||||
|
GVariant *mode = g_variant_get_child_value(supported_effects, i);
|
||||||
|
supportedEffects << m_filterMap.keys().at(m_filterMap.values().indexOf((GstPhotographyColorToneMode)g_variant_get_int32(mode)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return supportedEffects.contains(filter);
|
||||||
|
}
|
||||||
return m_filterMap.contains(filter);
|
return m_filterMap.contains(filter);
|
||||||
#else
|
#else
|
||||||
return filter == QCameraImageProcessing::ColorFilterNone;
|
return filter == QCameraImageProcessing::ColorFilterNone;
|
||||||
|
|||||||
Reference in New Issue
Block a user