Bug 1419249 - Fix the wrong logic calculating starttime of the first sample. draft
authorJames Cheng <jacheng@mozilla.com>
Wed, 22 Nov 2017 17:47:03 +0800
changeset 702371 c79ba1dc9582c0f719b1f5e611bff6eccf0bcf53
parent 702370 e44c5bbd6fbdbfae0eb215a4157d42bb87ebc19f
child 702384 95ba3833f94299a1f8bce6a15cf049debdb1c9c1
push id90456
push userbmo:jacheng@mozilla.com
push dateThu, 23 Nov 2017 02:46:43 +0000
bugs1419249
milestone59.0a1
Bug 1419249 - Fix the wrong logic calculating starttime of the first sample. MozReview-Commit-ID: 3je7idVeYoZ
mobile/android/geckoview/src/main/java/org/mozilla/gecko/media/GeckoHlsPlayer.java
--- a/mobile/android/geckoview/src/main/java/org/mozilla/gecko/media/GeckoHlsPlayer.java
+++ b/mobile/android/geckoview/src/main/java/org/mozilla/gecko/media/GeckoHlsPlayer.java
@@ -709,27 +709,27 @@ public class GeckoHlsPlayer implements B
         //        2) positionUs is samples PTS from MFR, we need to re-adjust it
         //           for ExoPlayer by subtracting sample start time.
         //        3) Time unit for ExoPlayer.seek() is milliseconds.
         try {
             // TODO : Gather Timeline Period / Window information to develop
             //        complete timeline, and seekTime should be inside the duration.
             Long startTime = Long.MAX_VALUE;
             for (GeckoHlsRendererBase r : mRenderers) {
-                if (r == mVRenderer && mRendererController.isVideoRendererEnabled() ||
-                    r == mARenderer && mRendererController.isAudioRendererEnabled()) {
+                if (r == mVRenderer && mRendererController.isVideoRendererEnabled() && mTracksInfo.hasVideo() ||
+                    r == mARenderer && mRendererController.isAudioRendererEnabled() && mTracksInfo.hasAudio()) {
                 // Find the min value of the start time
                     startTime = Math.min(startTime, r.getFirstSamplePTS());
                 }
             }
             if (DEBUG) {
                 Log.d(LOGTAG, "seeking  : " + positionUs / 1000 +
                               " (ms); startTime : " + startTime / 1000 + " (ms)");
             }
-            assertTrue(startTime != Long.MAX_VALUE);
+            assertTrue(startTime != Long.MAX_VALUE && startTime != Long.MIN_VALUE);
             mPlayer.seekTo(positionUs / 1000 - startTime / 1000);
         } catch (Exception e) {
             if (mDemuxerCallbacks != null) {
                 mDemuxerCallbacks.onError(DemuxerError.UNKNOWN.code());
             }
             return false;
         }
         return true;