Android: Fix MetadataRetriver wrapper

The QJNIObject was never intended to be used as a base class.

Change-Id: Ic4effd5e1c89a08515c756bd5092fb1e1eead688
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
This commit is contained in:
Christian Strømme
2014-03-20 00:38:11 +01:00
committed by The Qt Project
parent cc41c7df3c
commit 4ba7b22390
3 changed files with 29 additions and 23 deletions

View File

@@ -74,13 +74,8 @@ static const char* qt_ID3GenreNames[] =
QAndroidMetaDataReaderControl::QAndroidMetaDataReaderControl(QObject *parent) QAndroidMetaDataReaderControl::QAndroidMetaDataReaderControl(QObject *parent)
: QMetaDataReaderControl(parent) : QMetaDataReaderControl(parent)
, m_available(false) , 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() QAndroidMetaDataReaderControl::~QAndroidMetaDataReaderControl()

View File

@@ -47,8 +47,8 @@
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
JMediaMetadataRetriever::JMediaMetadataRetriever() JMediaMetadataRetriever::JMediaMetadataRetriever()
: QJNIObjectPrivate("android/media/MediaMetadataRetriever")
{ {
m_metadataRetriever = QJNIObjectPrivate("android/media/MediaMetadataRetriever");
} }
JMediaMetadataRetriever::~JMediaMetadataRetriever() JMediaMetadataRetriever::~JMediaMetadataRetriever()
@@ -59,7 +59,7 @@ QString JMediaMetadataRetriever::extractMetadata(MetadataKey key)
{ {
QString value; QString value;
QJNIObjectPrivate metadata = callObjectMethod("extractMetadata", QJNIObjectPrivate metadata = m_metadataRetriever.callObjectMethod("extractMetadata",
"(I)Ljava/lang/String;", "(I)Ljava/lang/String;",
jint(key)); jint(key));
if (metadata.isValid()) if (metadata.isValid())
@@ -70,25 +70,31 @@ QString JMediaMetadataRetriever::extractMetadata(MetadataKey key)
void JMediaMetadataRetriever::release() void JMediaMetadataRetriever::release()
{ {
callMethod<void>("release"); if (!m_metadataRetriever.isValid())
return;
m_metadataRetriever.callMethod<void>("release");
} }
bool JMediaMetadataRetriever::setDataSource(const QUrl &url) bool JMediaMetadataRetriever::setDataSource(const QUrl &url)
{ {
if (!m_metadataRetriever.isValid())
return false;
QJNIEnvironmentPrivate env; QJNIEnvironmentPrivate env;
bool loaded = false; bool loaded = false;
QJNIObjectPrivate string = QJNIObjectPrivate::fromString(url.toString()); QJNIObjectPrivate string = QJNIObjectPrivate::fromString(url.toString());
QJNIObjectPrivate uri = callStaticObjectMethod("android/net/Uri", QJNIObjectPrivate uri = m_metadataRetriever.callStaticObjectMethod("android/net/Uri",
"parse", "parse",
"(Ljava/lang/String;)Landroid/net/Uri;", "(Ljava/lang/String;)Landroid/net/Uri;",
string.object()); string.object());
if (env->ExceptionCheck()) { if (env->ExceptionCheck()) {
env->ExceptionClear(); env->ExceptionClear();
} else { } else {
callMethod<void>("setDataSource", m_metadataRetriever.callMethod<void>("setDataSource",
"(Landroid/content/Context;Landroid/net/Uri;)V", "(Landroid/content/Context;Landroid/net/Uri;)V",
QtAndroidPrivate::activity(), QtAndroidPrivate::activity(),
uri.object()); uri.object());
@@ -103,11 +109,14 @@ bool JMediaMetadataRetriever::setDataSource(const QUrl &url)
bool JMediaMetadataRetriever::setDataSource(const QString &path) bool JMediaMetadataRetriever::setDataSource(const QString &path)
{ {
if (!m_metadataRetriever.isValid())
return false;
QJNIEnvironmentPrivate env; QJNIEnvironmentPrivate env;
bool loaded = false; bool loaded = false;
callMethod<void>("setDataSource", m_metadataRetriever.callMethod<void>("setDataSource",
"(Ljava/lang/String;)V", "(Ljava/lang/String;)V",
QJNIObjectPrivate::fromString(path).object()); QJNIObjectPrivate::fromString(path).object());
if (env->ExceptionCheck()) if (env->ExceptionCheck())

View File

@@ -47,7 +47,7 @@
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
class JMediaMetadataRetriever : public QJNIObjectPrivate class JMediaMetadataRetriever
{ {
public: public:
enum MetadataKey { enum MetadataKey {
@@ -84,6 +84,8 @@ public:
bool setDataSource(const QUrl &url); bool setDataSource(const QUrl &url);
bool setDataSource(const QString &path); bool setDataSource(const QString &path);
private:
QJNIObjectPrivate m_metadataRetriever;
}; };
QT_END_NAMESPACE QT_END_NAMESPACE