diff options
author | Insun Kang <insun@google.com> | 2012-03-27 21:02:06 +0900 |
---|---|---|
committer | Insun Kang <insun@google.com> | 2012-04-04 14:34:21 +0900 |
commit | 4e1c91dd07fad96ee2387eda510c6da45e5dff0a (patch) | |
tree | 98ef2ac38bbde9363e0b5aec0526a34395feafdd /media/libstagefright/timedtext/TimedTextPlayer.cpp | |
parent | 73d227557ba5192735356bacab9f77b44980793b (diff) | |
download | frameworks_av-4e1c91dd07fad96ee2387eda510c6da45e5dff0a.zip frameworks_av-4e1c91dd07fad96ee2387eda510c6da45e5dff0a.tar.gz frameworks_av-4e1c91dd07fad96ee2387eda510c6da45e5dff0a.tar.bz2 |
Fix a bug: WOULD_BLOCK handling in TimedTextPlayer.
Bug: 6234756
Change-Id: I0fae6e5ad8607d472faad7dd680e020f20ac1669
Diffstat (limited to 'media/libstagefright/timedtext/TimedTextPlayer.cpp')
-rw-r--r-- | media/libstagefright/timedtext/TimedTextPlayer.cpp | 25 |
1 files changed, 24 insertions, 1 deletions
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 @@ void TimedTextPlayer::onMessageReceived(const sp<AMessage> &msg) { 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 @@ void TimedTextPlayer::doRead(MediaSource::ReadOptions* options) { 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); |