From e84c511702bb53517378fa451d40aa5b25217a2a Mon Sep 17 00:00:00 2001 From: Yoann Lopes Date: Thu, 14 Jul 2016 16:34:11 +0200 Subject: GStreamer: move suggestedFileExtension() out of camerabin plugin Now in QGstUtils, in order to be used from other places. Change-Id: Id8beae1b804fa22bd648e254a1ff2a1f1e455a02 Reviewed-by: Christian Stromme --- src/gsttools/qgstutils.cpp | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'src/gsttools/qgstutils.cpp') diff --git a/src/gsttools/qgstutils.cpp b/src/gsttools/qgstutils.cpp index a2b35073c..902c71013 100644 --- a/src/gsttools/qgstutils.cpp +++ b/src/gsttools/qgstutils.cpp @@ -1429,6 +1429,40 @@ QPair QGstUtils::structureFrameRateRange(const GstStructure *s) return rate; } +typedef QMap FileExtensionMap; +Q_GLOBAL_STATIC(FileExtensionMap, fileExtensionMap) + +QString QGstUtils::fileExtensionForMimeType(const QString &mimeType) +{ + if (fileExtensionMap->isEmpty()) { + //extension for containers hard to guess from mimetype + fileExtensionMap->insert("video/x-matroska", "mkv"); + fileExtensionMap->insert("video/quicktime", "mov"); + fileExtensionMap->insert("video/x-msvideo", "avi"); + fileExtensionMap->insert("video/msvideo", "avi"); + fileExtensionMap->insert("audio/mpeg", "mp3"); + fileExtensionMap->insert("application/x-shockwave-flash", "swf"); + fileExtensionMap->insert("application/x-pn-realmedia", "rm"); + } + + //for container names like avi instead of video/x-msvideo, use it as extension + if (!mimeType.contains('/')) + return mimeType; + + QString format = mimeType.left(mimeType.indexOf(',')); + QString extension = fileExtensionMap->value(format); + + if (!extension.isEmpty() || format.isEmpty()) + return extension; + + QRegExp rx("[-/]([\\w]+)$"); + + if (rx.indexIn(format) != -1) + extension = rx.cap(1); + + return extension; +} + void qt_gst_object_ref_sink(gpointer object) { #if GST_CHECK_VERSION(0,10,24) -- cgit v1.2.3