RTSP now properly publishes its "seekable" flags after connection
has successfully completed and only then signals that preparation is
complete.
Change-Id: I1a60f718e673fe1462c69369c40eafbed6a14326
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp
index ab7b4e8..3c63e80 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp
+++ b/media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp
@@ -31,6 +31,7 @@
NuPlayerDriver::NuPlayerDriver()
: mState(STATE_IDLE),
+ mIsAsyncPrepare(false),
mAsyncResult(UNKNOWN_ERROR),
mSetSurfaceInProgress(false),
mDurationUs(-1),
@@ -160,6 +161,11 @@
switch (mState) {
case STATE_UNPREPARED:
mState = STATE_PREPARING;
+
+ // Make sure we're not posting any notifications, success or
+ // failure information is only communicated through our result
+ // code.
+ mIsAsyncPrepare = false;
mPlayer->prepareAsync();
while (mState == STATE_PREPARING) {
mCondition.wait(mLock);
@@ -176,6 +182,7 @@
switch (mState) {
case STATE_UNPREPARED:
mState = STATE_PREPARING;
+ mIsAsyncPrepare = true;
mPlayer->prepareAsync();
return OK;
default:
@@ -500,9 +507,14 @@
mAsyncResult = err;
if (err == OK) {
- notifyListener(MEDIA_PREPARED);
+ if (mIsAsyncPrepare) {
+ notifyListener(MEDIA_PREPARED);
+ }
mState = STATE_PREPARED;
} else {
+ if (mIsAsyncPrepare) {
+ notifyListener(MEDIA_ERROR, MEDIA_ERROR_UNKNOWN, err);
+ }
mState = STATE_UNPREPARED;
}