From 4ba7b223909d69fc443f1d536e0a884518227d0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Str=C3=B8mme?= Date: Thu, 20 Mar 2014 00:38:11 +0100 Subject: Android: Fix MetadataRetriver wrapper The QJNIObject was never intended to be used as a base class. Change-Id: Ic4effd5e1c89a08515c756bd5092fb1e1eead688 Reviewed-by: Yoann Lopes --- .../mediaplayer/qandroidmetadatareadercontrol.cpp | 7 +--- .../src/wrappers/jmediametadataretriever.cpp | 41 +++++++++++++--------- .../android/src/wrappers/jmediametadataretriever.h | 4 ++- 3 files changed, 29 insertions(+), 23 deletions(-) diff --git a/src/plugins/android/src/mediaplayer/qandroidmetadatareadercontrol.cpp b/src/plugins/android/src/mediaplayer/qandroidmetadatareadercontrol.cpp index b6ef6c4bc..dcc3dfbe0 100644 --- a/src/plugins/android/src/mediaplayer/qandroidmetadatareadercontrol.cpp +++ b/src/plugins/android/src/mediaplayer/qandroidmetadatareadercontrol.cpp @@ -74,13 +74,8 @@ static const char* qt_ID3GenreNames[] = QAndroidMetaDataReaderControl::QAndroidMetaDataReaderControl(QObject *parent) : QMetaDataReaderControl(parent) , m_available(false) - , m_retriever(0) + , m_retriever(new JMediaMetadataRetriever) { - m_retriever = new JMediaMetadataRetriever; - if (!m_retriever->isValid()) { - delete m_retriever; - m_retriever = 0; - } } QAndroidMetaDataReaderControl::~QAndroidMetaDataReaderControl() diff --git a/src/plugins/android/src/wrappers/jmediametadataretriever.cpp b/src/plugins/android/src/wrappers/jmediametadataretriever.cpp index 91c40905c..93b77ecb1 100644 --- a/src/plugins/android/src/wrappers/jmediametadataretriever.cpp +++ b/src/plugins/android/src/wrappers/jmediametadataretriever.cpp @@ -47,8 +47,8 @@ QT_BEGIN_NAMESPACE JMediaMetadataRetriever::JMediaMetadataRetriever() - : QJNIObjectPrivate("android/media/MediaMetadataRetriever") { + m_metadataRetriever = QJNIObjectPrivate("android/media/MediaMetadataRetriever"); } JMediaMetadataRetriever::~JMediaMetadataRetriever() @@ -59,9 +59,9 @@ QString JMediaMetadataRetriever::extractMetadata(MetadataKey key) { QString value; - QJNIObjectPrivate metadata = callObjectMethod("extractMetadata", - "(I)Ljava/lang/String;", - jint(key)); + QJNIObjectPrivate metadata = m_metadataRetriever.callObjectMethod("extractMetadata", + "(I)Ljava/lang/String;", + jint(key)); if (metadata.isValid()) value = metadata.toString(); @@ -70,28 +70,34 @@ QString JMediaMetadataRetriever::extractMetadata(MetadataKey key) void JMediaMetadataRetriever::release() { - callMethod("release"); + if (!m_metadataRetriever.isValid()) + return; + + m_metadataRetriever.callMethod("release"); } bool JMediaMetadataRetriever::setDataSource(const QUrl &url) { + if (!m_metadataRetriever.isValid()) + return false; + QJNIEnvironmentPrivate env; bool loaded = false; QJNIObjectPrivate string = QJNIObjectPrivate::fromString(url.toString()); - QJNIObjectPrivate uri = callStaticObjectMethod("android/net/Uri", - "parse", - "(Ljava/lang/String;)Landroid/net/Uri;", - string.object()); + QJNIObjectPrivate uri = m_metadataRetriever.callStaticObjectMethod("android/net/Uri", + "parse", + "(Ljava/lang/String;)Landroid/net/Uri;", + string.object()); if (env->ExceptionCheck()) { env->ExceptionClear(); } else { - callMethod("setDataSource", - "(Landroid/content/Context;Landroid/net/Uri;)V", - QtAndroidPrivate::activity(), - uri.object()); + m_metadataRetriever.callMethod("setDataSource", + "(Landroid/content/Context;Landroid/net/Uri;)V", + QtAndroidPrivate::activity(), + uri.object()); if (env->ExceptionCheck()) env->ExceptionClear(); else @@ -103,13 +109,16 @@ bool JMediaMetadataRetriever::setDataSource(const QUrl &url) bool JMediaMetadataRetriever::setDataSource(const QString &path) { + if (!m_metadataRetriever.isValid()) + return false; + QJNIEnvironmentPrivate env; bool loaded = false; - callMethod("setDataSource", - "(Ljava/lang/String;)V", - QJNIObjectPrivate::fromString(path).object()); + m_metadataRetriever.callMethod("setDataSource", + "(Ljava/lang/String;)V", + QJNIObjectPrivate::fromString(path).object()); if (env->ExceptionCheck()) env->ExceptionClear(); else diff --git a/src/plugins/android/src/wrappers/jmediametadataretriever.h b/src/plugins/android/src/wrappers/jmediametadataretriever.h index 7b22c955d..7b0340c0d 100644 --- a/src/plugins/android/src/wrappers/jmediametadataretriever.h +++ b/src/plugins/android/src/wrappers/jmediametadataretriever.h @@ -47,7 +47,7 @@ QT_BEGIN_NAMESPACE -class JMediaMetadataRetriever : public QJNIObjectPrivate +class JMediaMetadataRetriever { public: enum MetadataKey { @@ -84,6 +84,8 @@ public: bool setDataSource(const QUrl &url); bool setDataSource(const QString &path); +private: + QJNIObjectPrivate m_metadataRetriever; }; QT_END_NAMESPACE -- cgit v1.2.1