Merge "Trust the Cues element"
diff --git a/media/libstagefright/timedtext/TimedTextPlayer.cpp b/media/libstagefright/timedtext/TimedTextPlayer.cpp
index 917c62a..dc5f6b8 100644
--- a/media/libstagefright/timedtext/TimedTextPlayer.cpp
+++ b/media/libstagefright/timedtext/TimedTextPlayer.cpp
@@ -75,6 +75,21 @@
             mSendSubtitleGeneration++;
             break;
         }
+        case kWhatRetryRead: {
+            int64_t seekTimeUs;
+            int seekMode;
+            if (msg->findInt64("seekTimeUs", &seekTimeUs) &&
+                msg->findInt32("seekMode", &seekMode)) {
+                MediaSource::ReadOptions options;
+                options.setSeekTo(
+                    seekTimeUs,
+                    static_cast<MediaSource::ReadOptions::SeekMode>(seekMode));
+                doRead(&options);
+            } else {
+                doRead();
+            }
+            break;
+        }
         case kWhatSeek: {
             int64_t seekTimeUs = 0;
             msg->findInt64("seekTimeUs", &seekTimeUs);
@@ -146,7 +161,15 @@
     status_t err = mSource->read(&startTimeUs, &endTimeUs,
                                  &(parcelEvent->parcel), options);
     if (err == WOULD_BLOCK) {
-        postTextEventDelayUs(NULL, kWaitTimeUsToRetryRead);
+        sp<AMessage> msg = new AMessage(kWhatRetryRead);
+        if (options != NULL) {
+            int64_t seekTimeUs;
+            MediaSource::ReadOptions::SeekMode seekMode;
+            CHECK(options->getSeekTo(&seekTimeUs, &seekMode));
+            msg->setInt64("seekTimeUs", seekTimeUs);
+            msg->setInt32("seekMode", seekMode);
+        }
+        msg->post(kWaitTimeUsToRetryRead);
         return;
     } else if (err != OK) {
         notifyError(err);
diff --git a/media/libstagefright/timedtext/TimedTextPlayer.h b/media/libstagefright/timedtext/TimedTextPlayer.h
index 47aff03..b7e15f8 100644
--- a/media/libstagefright/timedtext/TimedTextPlayer.h
+++ b/media/libstagefright/timedtext/TimedTextPlayer.h
@@ -50,6 +50,7 @@
     enum {
         kWhatPause = 'paus',
         kWhatSeek = 'seek',
+        kWhatRetryRead = 'read',
         kWhatSendSubtitle = 'send',
         kWhatSetSource = 'ssrc',
     };