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) {