MediaPlayer2: use long type for media time.
Test: MediaPlayer2 plays
Bug: 63934228
Change-Id: I85cca6c24c116b2f53079cd081a1f5172af3a099
diff --git a/media/libmediaplayer2/mediaplayer2.cpp b/media/libmediaplayer2/mediaplayer2.cpp
index b401ee8..c465caa 100644
--- a/media/libmediaplayer2/mediaplayer2.cpp
+++ b/media/libmediaplayer2/mediaplayer2.cpp
@@ -936,27 +936,27 @@
return NO_ERROR;
}
-status_t MediaPlayer2::getCurrentPosition(int *msec) {
+status_t MediaPlayer2::getCurrentPosition(int64_t *msec) {
ALOGV("getCurrentPosition");
Mutex::Autolock _l(mLock);
if (mPlayer == 0) {
return INVALID_OPERATION;
}
if (mCurrentPosition >= 0) {
- ALOGV("Using cached seek position: %d", mCurrentPosition);
+ ALOGV("Using cached seek position: %lld", (long long)mCurrentPosition);
*msec = mCurrentPosition;
return NO_ERROR;
}
status_t ret = mPlayer->getCurrentPosition(msec);
if (ret == NO_ERROR) {
- ALOGV("getCurrentPosition = %d", *msec);
+ ALOGV("getCurrentPosition = %lld", (long long)*msec);
} else {
ALOGE("getCurrentPosition returned %d", ret);
}
return ret;
}
-status_t MediaPlayer2::getDuration(int *msec) {
+status_t MediaPlayer2::getDuration(int64_t *msec) {
Mutex::Autolock _l(mLock);
ALOGV("getDuration_l");
bool isValidState = (mCurrentState & (MEDIA_PLAYER2_PREPARED | MEDIA_PLAYER2_STARTED |
@@ -966,11 +966,11 @@
mPlayer.get(), mCurrentState);
return INVALID_OPERATION;
}
- int durationMs;
+ int64_t durationMs;
status_t ret = mPlayer->getDuration(&durationMs);
if (ret == NO_ERROR) {
- ALOGV("getDuration = %d", durationMs);
+ ALOGV("getDuration = %lld", (long long)durationMs);
} else {
ALOGE("getDuration returned %d", ret);
// Do not enter error state just because no duration was available.
@@ -983,50 +983,47 @@
return OK;
}
-status_t MediaPlayer2::seekTo_l(int msec, MediaPlayer2SeekMode mode) {
- ALOGV("seekTo (%d, %d)", msec, mode);
- if ((mPlayer != 0) && ( mCurrentState & ( MEDIA_PLAYER2_STARTED | MEDIA_PLAYER2_PREPARED |
- MEDIA_PLAYER2_PAUSED | MEDIA_PLAYER2_PLAYBACK_COMPLETE) ) ) {
- if (msec < 0) {
- ALOGW("Attempt to seek to invalid position: %d", msec);
- msec = 0;
- }
-
- int durationMs;
- status_t err = mPlayer->getDuration(&durationMs);
-
- if (err != OK) {
- ALOGW("Stream has no duration and is therefore not seekable.");
- return err;
- }
-
- if (msec > durationMs) {
- ALOGW("Attempt to seek to past end of file: request = %d, "
- "durationMs = %d",
- msec,
- durationMs);
-
- msec = durationMs;
- }
-
- // cache duration
- mCurrentPosition = msec;
- mCurrentSeekMode = mode;
- if (mSeekPosition < 0) {
- mSeekPosition = msec;
- mSeekMode = mode;
- return mPlayer->seekTo(msec, mode);
- } else {
- ALOGV("Seek in progress - queue up seekTo[%d, %d]", msec, mode);
- return NO_ERROR;
- }
+status_t MediaPlayer2::seekTo_l(int64_t msec, MediaPlayer2SeekMode mode) {
+ ALOGV("seekTo (%lld, %d)", (long long)msec, mode);
+ if ((mPlayer == 0) || !(mCurrentState & (MEDIA_PLAYER2_STARTED | MEDIA_PLAYER2_PREPARED |
+ MEDIA_PLAYER2_PAUSED | MEDIA_PLAYER2_PLAYBACK_COMPLETE))) {
+ ALOGE("Attempt to perform seekTo in wrong state: mPlayer=%p, mCurrentState=%u",
+ mPlayer.get(), mCurrentState);
+ return INVALID_OPERATION;
}
- ALOGE("Attempt to perform seekTo in wrong state: mPlayer=%p, mCurrentState=%u", mPlayer.get(),
- mCurrentState);
- return INVALID_OPERATION;
+ if (msec < 0) {
+ ALOGW("Attempt to seek to invalid position: %lld", (long long)msec);
+ msec = 0;
+ }
+
+ int64_t durationMs;
+ status_t err = mPlayer->getDuration(&durationMs);
+
+ if (err != OK) {
+ ALOGW("Stream has no duration and is therefore not seekable.");
+ return err;
+ }
+
+ if (msec > durationMs) {
+ ALOGW("Attempt to seek to past end of file: request = %lld, durationMs = %lld",
+ (long long)msec, (long long)durationMs);
+
+ msec = durationMs;
+ }
+
+ // cache duration
+ mCurrentPosition = msec;
+ mCurrentSeekMode = mode;
+ if (mSeekPosition < 0) {
+ mSeekPosition = msec;
+ mSeekMode = mode;
+ return mPlayer->seekTo(msec, mode);
+ }
+ ALOGV("Seek in progress - queue up seekTo[%lld, %d]", (long long)msec, mode);
+ return NO_ERROR;
}
-status_t MediaPlayer2::seekTo(int msec, MediaPlayer2SeekMode mode) {
+status_t MediaPlayer2::seekTo(int64_t msec, MediaPlayer2SeekMode mode) {
mLockThreadId = getThreadId();
Mutex::Autolock _l(mLock);
status_t result = seekTo_l(msec, mode);
@@ -1228,6 +1225,16 @@
status_t MediaPlayer2::getParameter(int key, Parcel *reply) {
ALOGV("MediaPlayer2::getParameter(%d)", key);
Mutex::Autolock _l(mLock);
+ if (key == MEDIA2_KEY_PARAMETER_AUDIO_ATTRIBUTES) {
+ if (reply == NULL) {
+ return BAD_VALUE;
+ }
+ if (mAudioAttributesParcel != NULL) {
+ reply->appendFrom(mAudioAttributesParcel, 0, mAudioAttributesParcel->dataSize());
+ }
+ return OK;
+ }
+
if (mPlayer == NULL) {
ALOGV("getParameter: no active player");
return INVALID_OPERATION;
@@ -1339,7 +1346,8 @@
case MEDIA2_SEEK_COMPLETE:
ALOGV("Received seek complete");
if (mSeekPosition != mCurrentPosition || (mSeekMode != mCurrentSeekMode)) {
- ALOGV("Executing queued seekTo(%d, %d)", mCurrentPosition, mCurrentSeekMode);
+ ALOGV("Executing queued seekTo(%lld, %d)",
+ (long long)mCurrentPosition, mCurrentSeekMode);
mSeekPosition = -1;
mSeekMode = MediaPlayer2SeekMode::SEEK_PREVIOUS_SYNC;
seekTo_l(mCurrentPosition, mCurrentSeekMode);
@@ -1387,10 +1395,6 @@
}
}
-status_t MediaPlayer2::setNextMediaPlayer(const sp<MediaPlayer2>& /* next */) {
- return INVALID_OPERATION;
-}
-
// Modular DRM
status_t MediaPlayer2::prepareDrm(const uint8_t uuid[16], const Vector<uint8_t>& drmSessionId) {
// TODO change to ALOGV