diff options
author | Dmytro Poplavskiy <dmytro.poplavskiy@nokia.com> | 2012-07-16 10:55:20 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-07-16 07:18:12 +0200 |
commit | b6a8c713bcc0b0cc032fdbf909143f3ba8ca15a6 (patch) | |
tree | 8538a615fa11b5119199fdd77e31296fcf466b25 /src/plugins/gstreamer/camerabin/camerabincontainer.cpp | |
parent | fdc197d61402837b23ce5c1cfe3a56cf0fa9aafe (diff) |
Updated the camerabin2 based camera with QtMultimedia changes
Moved it to the separate plugin as the rest of gstreamer based services;
Updated with libqgsttools_p changes;
Implemented QMediaRecorder::status property;
Made gst_photography dependency optional,
it's not always available on desktop;
Added video recording case to auto integration test;
Moved backend implementation into qt namespace
Task-number: QTBUG-26046
Change-Id: Iacfc1a6e263a4c0201d5eb28d04c960b87a230c0
Reviewed-by: Michael Goddard <michael.goddard@nokia.com>
Diffstat (limited to 'src/plugins/gstreamer/camerabin/camerabincontainer.cpp')
-rw-r--r-- | src/plugins/gstreamer/camerabin/camerabincontainer.cpp | 54 |
1 files changed, 33 insertions, 21 deletions
diff --git a/src/plugins/gstreamer/camerabin/camerabincontainer.cpp b/src/plugins/gstreamer/camerabin/camerabincontainer.cpp index 3ed6bcae7..c24e20a9d 100644 --- a/src/plugins/gstreamer/camerabin/camerabincontainer.cpp +++ b/src/plugins/gstreamer/camerabin/camerabincontainer.cpp @@ -44,6 +44,8 @@ #include <QtCore/qdebug.h> +QT_BEGIN_NAMESPACE + CameraBinContainer::CameraBinContainer(QObject *parent) :QMediaContainerControl(parent), m_supportedContainers(QGstCodecsInfo::Muxer) @@ -68,39 +70,43 @@ QString CameraBinContainer::containerDescription(const QString &formatMimeType) return m_supportedContainers.codecDescription(formatMimeType); } -QString CameraBinContainer::containerMimeType() const +QString CameraBinContainer::containerFormat() const { return m_format; } -void CameraBinContainer::setContainerMimeType(const QString &formatMimeType) +void CameraBinContainer::setContainerFormat(const QString &format) { - m_format = formatMimeType; - - if (m_userFormat != formatMimeType) { - m_userFormat = formatMimeType; + if (m_format != format) { + m_format = format; emit settingsChanged(); } } -void CameraBinContainer::setActualContainer(const QString &formatMimeType) -{ - m_format = formatMimeType; -} - -void CameraBinContainer::resetActualContainer() -{ - m_format = m_userFormat; -} - GstEncodingContainerProfile *CameraBinContainer::createProfile() { GstCaps *caps; - if (m_format.isEmpty()) + if (m_format.isEmpty()) { caps = gst_caps_new_any(); - else - caps = gst_caps_from_string(m_format.toLatin1()); + } else { + QString format = m_format; + QStringList supportedFormats = m_supportedContainers.supportedCodecs(); + + //if format is not in the list of supported gstreamer mime types, + //try to find the mime type with matching extension + if (!supportedFormats.contains(format)) { + QString extension = suggestedFileExtension(m_format); + foreach (const QString &formatCandidate, supportedFormats) { + if (suggestedFileExtension(formatCandidate) == extension) { + format = formatCandidate; + break; + } + } + } + + caps = gst_caps_from_string(format.toLatin1()); + } return (GstEncodingContainerProfile *)gst_encoding_container_profile_new( "camerabin2_profile", @@ -112,9 +118,13 @@ GstEncodingContainerProfile *CameraBinContainer::createProfile() /*! Suggest file extension for current container mimetype. */ -QString CameraBinContainer::suggestedFileExtension() const +QString CameraBinContainer::suggestedFileExtension(const QString &containerFormat) const { - QString format = m_format.left(m_format.indexOf(',')); + //for container names like avi instead of video/x-msvideo, use it as extension + if (!containerFormat.contains('/')) + return containerFormat; + + QString format = containerFormat.left(containerFormat.indexOf(',')); QString extension = m_fileExtensions.value(format); if (!extension.isEmpty() || format.isEmpty()) @@ -127,3 +137,5 @@ QString CameraBinContainer::suggestedFileExtension() const return extension; } + +QT_END_NAMESPACE |