mediaplayer2: fix state during data source switching
Test: cts
Bug: 130126316
Change-Id: Ic2022435954521a113082a13b05947abbe84ba2f
diff --git a/media/libmediaplayer2/mediaplayer2.cpp b/media/libmediaplayer2/mediaplayer2.cpp
index ae7ac59..c34f1c9 100644
--- a/media/libmediaplayer2/mediaplayer2.cpp
+++ b/media/libmediaplayer2/mediaplayer2.cpp
@@ -1026,8 +1026,16 @@
case MEDIA2_NOP: // interface test message
break;
case MEDIA2_PREPARED:
- ALOGV("MediaPlayer2::notify() prepared");
- mCurrentState = MEDIA_PLAYER2_PREPARED;
+ ALOGV("MediaPlayer2::notify() prepared, srcId=%lld", (long long)srcId);
+ if (srcId == mSrcId) {
+ mCurrentState = MEDIA_PLAYER2_PREPARED;
+ }
+ break;
+ case MEDIA2_STARTED:
+ ALOGV("MediaPlayer2::notify() started, srcId=%lld", (long long)srcId);
+ if (srcId == mSrcId) {
+ mCurrentState = MEDIA_PLAYER2_STARTED;
+ }
break;
case MEDIA2_DRM_INFO:
ALOGV("MediaPlayer2::notify() MEDIA2_DRM_INFO(%lld, %d, %d, %d, %p)",
@@ -1038,7 +1046,7 @@
if (mCurrentState == MEDIA_PLAYER2_IDLE) {
ALOGE("playback complete in idle state");
}
- if (!mLoop) {
+ if (!mLoop && srcId == mSrcId) {
mCurrentState = MEDIA_PLAYER2_PLAYBACK_COMPLETE;
}
break;
@@ -1054,6 +1062,10 @@
// ext2: Implementation dependant error code.
if (ext1 != MEDIA2_INFO_VIDEO_TRACK_LAGGING) {
ALOGW("info/warning (%d, %d)", ext1, ext2);
+
+ if (ext1 == MEDIA2_INFO_DATA_SOURCE_START && srcId == mSrcId) {
+ mCurrentState = MEDIA_PLAYER2_STARTED;
+ }
}
break;
case MEDIA2_SEEK_COMPLETE: