DataSourceDesc: set max time in ms and us
Test: cts
Bug: 112549021
Change-Id: I3198cf221dc17b9c6504b3c160121a385a848487
diff --git a/media/libmedia/include/media/DataSourceDesc.h b/media/libmedia/include/media/DataSourceDesc.h
index c190261..4336767 100644
--- a/media/libmedia/include/media/DataSourceDesc.h
+++ b/media/libmedia/include/media/DataSourceDesc.h
@@ -30,6 +30,11 @@
// A binder interface for implementing a stagefright DataSource remotely.
struct DataSourceDesc : public RefBase {
public:
+ // intentionally less than INT64_MAX
+ // keep consistent with JAVA code
+ static const int64_t kMaxTimeMs = 0x7ffffffffffffffll / 1000;
+ static const int64_t kMaxTimeUs = kMaxTimeMs * 1000;
+
enum {
/* No data source has been set yet */
TYPE_NONE = 0,
diff --git a/media/libmediaplayer2/mediaplayer2.cpp b/media/libmediaplayer2/mediaplayer2.cpp
index 3b155c5..480a630 100644
--- a/media/libmediaplayer2/mediaplayer2.cpp
+++ b/media/libmediaplayer2/mediaplayer2.cpp
@@ -404,12 +404,12 @@
return BAD_VALUE;
}
// Microsecond is used in NuPlayer2.
- if (dsd->mStartPositionMs > INT64_MAX / 1000) {
- dsd->mStartPositionMs = INT64_MAX / 1000;
+ if (dsd->mStartPositionMs > DataSourceDesc::kMaxTimeMs) {
+ dsd->mStartPositionMs = DataSourceDesc::kMaxTimeMs;
ALOGW("setDataSource, start poistion clamped to %lld ms", (long long)dsd->mStartPositionMs);
}
- if (dsd->mEndPositionMs > INT64_MAX / 1000) {
- dsd->mEndPositionMs = INT64_MAX / 1000;
+ if (dsd->mEndPositionMs > DataSourceDesc::kMaxTimeMs) {
+ dsd->mEndPositionMs = DataSourceDesc::kMaxTimeMs;
ALOGW("setDataSource, end poistion clamped to %lld ms", (long long)dsd->mStartPositionMs);
}
ALOGV("setDataSource type(%d), srcId(%lld)", dsd->mType, (long long)dsd->mId);
diff --git a/media/libmediaplayer2/nuplayer2/NuPlayer2.cpp b/media/libmediaplayer2/nuplayer2/NuPlayer2.cpp
index 7b9ff30..bc17d13 100644
--- a/media/libmediaplayer2/nuplayer2/NuPlayer2.cpp
+++ b/media/libmediaplayer2/nuplayer2/NuPlayer2.cpp
@@ -1753,8 +1753,13 @@
}
void NuPlayer2::addEndTimeMonitor() {
- sp<AMessage> msg = new AMessage(kWhatEOSMonitor, this);
++mEOSMonitorGeneration;
+
+ if (mCurrentSourceInfo.mEndTimeUs == DataSourceDesc::kMaxTimeUs) {
+ return;
+ }
+
+ sp<AMessage> msg = new AMessage(kWhatEOSMonitor, this);
msg->setInt32("generation", mEOSMonitorGeneration);
mMediaClock->addTimer(msg, mCurrentSourceInfo.mEndTimeUs);
}
@@ -3216,7 +3221,7 @@
mSrcId(0),
mSourceFlags(0),
mStartTimeUs(0),
- mEndTimeUs(INT64_MAX) {
+ mEndTimeUs(DataSourceDesc::kMaxTimeUs) {
}
NuPlayer2::SourceInfo & NuPlayer2::SourceInfo::operator=(const NuPlayer2::SourceInfo &other) {