diff options
author | Pekka Gehör <pekka.gehor@qt.io> | 2022-04-27 14:59:33 +0300 |
---|---|---|
committer | Pekka Gehör <pekka.gehor@qt.io> | 2022-04-27 16:06:25 +0300 |
commit | 19b84b2663bee0753ad96b1285437ad2623c5fdd (patch) | |
tree | f6f3d1c8f4154d26260ea9bf298d821e3b467283 | |
parent | adcf9f61288ba10c7f690b13ae91288ed3ffbeb9 (diff) |
Android: fix wrong source file issue
Return from the setSource if a source is video file or a source url is a invalid.
Task-number: QTBUG-100079
Change-Id: If862f95cdcc5d2821640c0c481496346adf10e2d
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
(cherry picked from commit a10fcc5e6a6978d82b97d202b3eb39d1a666f67f)
-rw-r--r-- | src/android/jar/src/org/qtproject/qt/android/multimedia/QtMultimediaUtils.java | 26 | ||||
-rw-r--r-- | src/multimedia/platform/android/audio/qandroidaudiodecoder.cpp | 15 |
2 files changed, 41 insertions, 0 deletions
diff --git a/src/android/jar/src/org/qtproject/qt/android/multimedia/QtMultimediaUtils.java b/src/android/jar/src/org/qtproject/qt/android/multimedia/QtMultimediaUtils.java index d5f205fe6..cae69e7e8 100644 --- a/src/android/jar/src/org/qtproject/qt/android/multimedia/QtMultimediaUtils.java +++ b/src/android/jar/src/org/qtproject/qt/android/multimedia/QtMultimediaUtils.java @@ -44,10 +44,14 @@ import android.content.Context; import android.media.MediaCodecInfo; import android.media.MediaCodecList; import android.view.OrientationEventListener; +import android.webkit.MimeTypeMap; +import android.net.Uri; +import android.content.ContentResolver; import android.os.Environment; import android.media.MediaScannerConnection; import java.lang.String; import java.io.File; +import android.util.Log; public class QtMultimediaUtils { @@ -72,6 +76,7 @@ public class QtMultimediaUtils static private Context m_context = null; static private OrientationListener m_orientationListener = null; + private static final String QtTAG = "Qt QtMultimediaUtils"; static public void setActivity(Activity qtMainActivity, Object qtActivityDelegate) { @@ -155,4 +160,25 @@ public class QtMultimediaUtils codecs[i] = codecInfoArray[i].getName(); return codecs; } + + public static String getMimeType(Context context, String url) + { + Uri parsedUri = Uri.parse(url); + String type = null; + + try { + String scheme = parsedUri.getScheme(); + if (scheme != null && scheme.contains("content")) { + ContentResolver cR = context.getContentResolver(); + type = cR.getType(parsedUri); + } else { + String extension = MimeTypeMap.getFileExtensionFromUrl(url); + if (extension != null) + type = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension); + } + } catch (Exception e) { + Log.e(QtTAG, "getMimeType(): " + e.toString()); + } + return type; + } } diff --git a/src/multimedia/platform/android/audio/qandroidaudiodecoder.cpp b/src/multimedia/platform/android/audio/qandroidaudiodecoder.cpp index 3013f6fa9..8179de809 100644 --- a/src/multimedia/platform/android/audio/qandroidaudiodecoder.cpp +++ b/src/multimedia/platform/android/audio/qandroidaudiodecoder.cpp @@ -92,6 +92,21 @@ void Decoder::stop() void Decoder::setSource(const QUrl &source) { + const QJniObject path = QJniObject::callStaticObjectMethod( + "org/qtproject/qt/android/multimedia/QtMultimediaUtils", + "getMimeType", + "(Landroid/content/Context;Ljava/lang/String;)Ljava/lang/String;", + QNativeInterface::QAndroidApplication::context(), + QJniObject::fromString(source.path()).object()); + + const QString mime = path.isValid() ? path.toString() : ""; + + if (!mime.isEmpty() && !mime.contains("audio", Qt::CaseInsensitive)) { + emit error(QAudioDecoder::FormatError, + tr("Cannot set source, invalid mime type for the provided source.")); + return; + } + if (!m_extractor) m_extractor = AMediaExtractor_new(); |