summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/plugins/gstreamer/camerabin/camerabinsession.cpp36
-rw-r--r--src/plugins/gstreamer/camerabin/camerabinviewfindersettings.cpp28
-rw-r--r--src/plugins/gstreamer/camerabin/camerabinviewfindersettings.h4
3 files changed, 63 insertions, 5 deletions
diff --git a/src/plugins/gstreamer/camerabin/camerabinsession.cpp b/src/plugins/gstreamer/camerabin/camerabinsession.cpp
index a4038c589..1ed663b9b 100644
--- a/src/plugins/gstreamer/camerabin/camerabinsession.cpp
+++ b/src/plugins/gstreamer/camerabin/camerabinsession.cpp
@@ -338,6 +338,17 @@ void CameraBinSession::setupCaptureResolution()
g_object_set(m_camerabin, VIDEO_CAPTURE_CAPS_PROPERTY, NULL, NULL);
}
+ GstElement *mfw_v4lsrc = 0;
+ if (g_object_class_find_property(G_OBJECT_GET_CLASS(m_videoSrc), "video-source")) {
+ GstElement *videoSrc = 0;
+ g_object_get(G_OBJECT(m_videoSrc), "video-source", &videoSrc, NULL);
+ if (videoSrc) {
+ const char *name = gst_plugin_feature_get_name(GST_PLUGIN_FEATURE(gst_element_get_factory(videoSrc)));
+ if (!qstrcmp(name, "mfw_v4lsrc"))
+ mfw_v4lsrc = videoSrc;
+ }
+ }
+
resolution = m_viewfinderSettingsControl->resolution();
if (!resolution.isEmpty()) {
GstCaps *caps = resolutionToCaps(resolution);
@@ -346,10 +357,35 @@ void CameraBinSession::setupCaptureResolution()
#endif
g_object_set(m_camerabin, VIEWFINDER_CAPS_PROPERTY, caps, NULL);
gst_caps_unref(caps);
+
+ if (mfw_v4lsrc) {
+ int capMode = 0;
+ if (resolution == QSize(320, 240))
+ capMode = 1;
+ else if (resolution == QSize(720, 480))
+ capMode = 2;
+ else if (resolution == QSize(720, 576))
+ capMode = 3;
+ else if (resolution == QSize(1280, 720))
+ capMode = 4;
+ else if (resolution == QSize(1920, 1080))
+ capMode = 5;
+ g_object_set(G_OBJECT(mfw_v4lsrc), "capture-mode", capMode, NULL);
+ }
} else {
g_object_set(m_camerabin, VIEWFINDER_CAPS_PROPERTY, NULL, NULL);
}
+ const qreal maxFps = m_viewfinderSettingsControl->maximumFrameRate();
+ if (!qFuzzyIsNull(maxFps)) {
+ if (mfw_v4lsrc) {
+ int n, d;
+ gst_util_double_to_fraction(maxFps, &n, &d);
+ g_object_set(G_OBJECT(mfw_v4lsrc), "fps-n", n, NULL);
+ g_object_set(G_OBJECT(mfw_v4lsrc), "fps-d", d, NULL);
+ }
+ }
+
if (m_videoEncoder)
m_videoEncodeControl->applySettings(m_videoEncoder);
}
diff --git a/src/plugins/gstreamer/camerabin/camerabinviewfindersettings.cpp b/src/plugins/gstreamer/camerabin/camerabinviewfindersettings.cpp
index 3f7d2f0cf..c5cdee40e 100644
--- a/src/plugins/gstreamer/camerabin/camerabinviewfindersettings.cpp
+++ b/src/plugins/gstreamer/camerabin/camerabinviewfindersettings.cpp
@@ -38,7 +38,9 @@
QT_BEGIN_NAMESPACE
CameraBinViewfinderSettings::CameraBinViewfinderSettings(QObject *parent)
- : QCameraViewfinderSettingsControl(parent)
+ : QCameraViewfinderSettingsControl(parent),
+ m_minimumFrameRate(0),
+ m_maximumFrameRate(0)
{
}
@@ -50,10 +52,10 @@ bool CameraBinViewfinderSettings::isViewfinderParameterSupported(ViewfinderParam
{
switch (parameter) {
case Resolution:
- return true;
- case PixelAspectRatio:
case MinimumFrameRate:
case MaximumFrameRate:
+ return true;
+ case PixelAspectRatio:
case PixelFormat:
case UserParameter:
return false;
@@ -66,9 +68,11 @@ QVariant CameraBinViewfinderSettings::viewfinderParameter(ViewfinderParameter pa
switch (parameter) {
case Resolution:
return m_resolution;
- case PixelAspectRatio:
case MinimumFrameRate:
+ return m_minimumFrameRate;
case MaximumFrameRate:
+ return m_maximumFrameRate;
+ case PixelAspectRatio:
case PixelFormat:
case UserParameter:
return QVariant();
@@ -82,9 +86,13 @@ void CameraBinViewfinderSettings::setViewfinderParameter(ViewfinderParameter par
case Resolution:
m_resolution = value.toSize();
break;
- case PixelAspectRatio:
case MinimumFrameRate:
+ m_minimumFrameRate = value.toFloat();
+ break;
case MaximumFrameRate:
+ m_maximumFrameRate = value.toFloat();
+ break;
+ case PixelAspectRatio:
case PixelFormat:
case UserParameter:
break;
@@ -96,4 +104,14 @@ QSize CameraBinViewfinderSettings::resolution() const
return m_resolution;
}
+qreal CameraBinViewfinderSettings::minimumFrameRate() const
+{
+ return m_minimumFrameRate;
+}
+
+qreal CameraBinViewfinderSettings::maximumFrameRate() const
+{
+ return m_maximumFrameRate;
+}
+
QT_END_NAMESPACE
diff --git a/src/plugins/gstreamer/camerabin/camerabinviewfindersettings.h b/src/plugins/gstreamer/camerabin/camerabinviewfindersettings.h
index a6d425338..c5030ffb4 100644
--- a/src/plugins/gstreamer/camerabin/camerabinviewfindersettings.h
+++ b/src/plugins/gstreamer/camerabin/camerabinviewfindersettings.h
@@ -52,9 +52,13 @@ public:
void setViewfinderParameter(ViewfinderParameter parameter, const QVariant &value);
QSize resolution() const;
+ qreal minimumFrameRate() const;
+ qreal maximumFrameRate() const;
private:
QSize m_resolution;
+ qreal m_minimumFrameRate;
+ qreal m_maximumFrameRate;
};
QT_END_NAMESPACE