diff options
author | Christian Strømme <christian.stromme@digia.com> | 2014-02-20 14:25:35 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-03-21 00:31:17 +0100 |
commit | dcf11bba3ccfd2a2a44556b1947406947aaa2be1 (patch) | |
tree | a138cb2ba0c668b56df82e9e93e7a99d61771bf2 /src/plugins/android/src/wrappers/jmediaplayer.h | |
parent | ddd22fab2bb26cd452edc1b8fc0c0750a7c52ae5 (diff) | |
download | qtmultimedia-dcf11bba3ccfd2a2a44556b1947406947aaa2be1.tar.gz |
Android: Make the Mediaplayer more robust
In some cases the the Android media player would get into a unexpected
state and we where then not able to recover.
With this patch we monitor the state changes more closely and recover
when possible.
Task-number: QTBUG-35651
Change-Id: I142c63fbbf716d3f94ebdcf016a7cadad7b13207
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
Diffstat (limited to 'src/plugins/android/src/wrappers/jmediaplayer.h')
-rw-r--r-- | src/plugins/android/src/wrappers/jmediaplayer.h | 46 |
1 files changed, 23 insertions, 23 deletions
diff --git a/src/plugins/android/src/wrappers/jmediaplayer.h b/src/plugins/android/src/wrappers/jmediaplayer.h index c737cfa26..cd469e677 100644 --- a/src/plugins/android/src/wrappers/jmediaplayer.h +++ b/src/plugins/android/src/wrappers/jmediaplayer.h @@ -47,7 +47,7 @@ QT_BEGIN_NAMESPACE -class JMediaPlayer : public QObject, public QJNIObjectPrivate +class JMediaPlayer : public QObject { Q_OBJECT public: @@ -59,12 +59,14 @@ public: // What MEDIA_ERROR_UNKNOWN = 1, MEDIA_ERROR_SERVER_DIED = 100, + MEDIA_ERROR_INVALID_STATE = -38, // Undocumented // Extra MEDIA_ERROR_IO = -1004, MEDIA_ERROR_MALFORMED = -1007, MEDIA_ERROR_UNSUPPORTED = -1010, MEDIA_ERROR_TIMED_OUT = -110, - MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK = 200 + MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK = 200, + MEDIA_ERROR_BAD_THINGS_ARE_GOING_TO_HAPPEN = -2147483648 // Undocumented }; enum MediaInfo @@ -79,24 +81,29 @@ public: MEDIA_INFO_METADATA_UPDATE = 802 }; - enum MediaPlayerInfo + enum MediaPlayerState { - MEDIA_PLAYER_INVALID_STATE = 1, - MEDIA_PLAYER_PREPARING = 2, - MEDIA_PLAYER_READY = 3, - MEDIA_PLAYER_DURATION = 4, - MEDIA_PLAYER_PROGRESS = 5, - MEDIA_PLAYER_FINISHED = 6 + Uninitialized = 0x1, /* End */ + Idle = 0x2, + Preparing = 0x4, + Prepared = 0x8, + Initialized = 0x10, + Started = 0x20, + Stopped = 0x40, + Paused = 0x80, + PlaybackCompleted = 0x100, + Error = 0x200 }; void release(); + void reset(); int getCurrentPosition(); int getDuration(); bool isPlaying(); int volume(); bool isMuted(); - jobject display() { return mDisplay; } + jobject display(); void play(); void pause(); @@ -104,30 +111,23 @@ public: void seekTo(qint32 msec); void setMuted(bool mute); void setDataSource(const QString &path); + void prepareAsync(); void setVolume(int volume); void setDisplay(jobject surfaceHolder); - void onError(qint32 what, qint32 extra); - void onBufferingUpdate(qint32 percent); - void onInfo(qint32 what, qint32 extra); - void onMediaPlayerInfo(qint32 what, qint32 extra); - void onVideoSizeChanged(qint32 width, qint32 height); - static bool initJNI(JNIEnv *env); Q_SIGNALS: void error(qint32 what, qint32 extra); - void bufferingUpdate(qint32 percent); - void completion(); + void bufferingChanged(qint32 percent); + void durationChanged(qint64 duration); + void progressChanged(qint64 progress); + void stateChanged(qint32 state); void info(qint32 what, qint32 extra); - void mediaPlayerInfo(qint32 what, qint32 extra); void videoSizeChanged(qint32 width, qint32 height); private: - jlong mId; - jobject mDisplay; - - static bool mActivitySet; + QJNIObjectPrivate mMediaPlayer; }; QT_END_NAMESPACE |