summaryrefslogtreecommitdiff
path: root/src/plugins/gstreamer/camerabin/camerabinsession.cpp
diff options
context:
space:
mode:
authorYoann Lopes <yoann.lopes@theqtcompany.com>2015-01-19 14:35:33 +0100
committerYoann Lopes <yoann.lopes@theqtcompany.com>2015-01-19 14:45:09 +0100
commitaf2d5a181c3d48e04c2459d551f320cfd7186630 (patch)
treed7187e0c81d0c300cf4e645eedccd359e27124c3 /src/plugins/gstreamer/camerabin/camerabinsession.cpp
parent9a215d954b00b6d07568392a1894341027c1af5a (diff)
parent4ab105b89e13c746b08fb807e2104bfca05e88f1 (diff)
downloadqtmultimedia-af2d5a181c3d48e04c2459d551f320cfd7186630.tar.gz
Merge remote-tracking branch 'origin/5.4' into dev
Conflicts: .qmake.conf src/plugins/gstreamer/camerabin/camerabinsession.cpp Change-Id: I66a6f3efc5391013934b6b321073c31f25e1de26
Diffstat (limited to 'src/plugins/gstreamer/camerabin/camerabinsession.cpp')
-rw-r--r--src/plugins/gstreamer/camerabin/camerabinsession.cpp35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/plugins/gstreamer/camerabin/camerabinsession.cpp b/src/plugins/gstreamer/camerabin/camerabinsession.cpp
index f916b58c7..4517145ed 100644
--- a/src/plugins/gstreamer/camerabin/camerabinsession.cpp
+++ b/src/plugins/gstreamer/camerabin/camerabinsession.cpp
@@ -315,6 +315,7 @@ void CameraBinSession::setupCaptureResolution()
if (!viewfinderResolution.isEmpty())
resolution = viewfinderResolution;
+
{
GstCaps *caps = resolutionToCaps(resolution);
#if CAMERABIN_DEBUG
@@ -323,6 +324,40 @@ void CameraBinSession::setupCaptureResolution()
g_object_set(m_camerabin, VIEWFINDER_CAPS_PROPERTY, caps, NULL);
if (caps)
gst_caps_unref(caps);
+
+ 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;
+ }
+ }
+
+ 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);
+
+ const qreal maxFps = m_viewfinderSettingsControl->maximumFrameRate();
+ if (!qFuzzyIsNull(maxFps)) {
+ 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)