summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPekka Gehör <pekka.gehor@qt.io>2022-04-27 14:59:33 +0300
committerPekka Gehör <pekka.gehor@qt.io>2022-04-27 16:06:25 +0300
commit19b84b2663bee0753ad96b1285437ad2623c5fdd (patch)
treef6f3d1c8f4154d26260ea9bf298d821e3b467283
parentadcf9f61288ba10c7f690b13ae91288ed3ffbeb9 (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.java26
-rw-r--r--src/multimedia/platform/android/audio/qandroidaudiodecoder.cpp15
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();