summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorInsun Kang <insun@google.com>2012-03-27 21:02:06 +0900
committerInsun Kang <insun@google.com>2012-04-04 14:34:21 +0900
commit4e1c91dd07fad96ee2387eda510c6da45e5dff0a (patch)
tree98ef2ac38bbde9363e0b5aec0526a34395feafdd
parent73d227557ba5192735356bacab9f77b44980793b (diff)
downloadframeworks_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
-rw-r--r--media/libstagefright/timedtext/TimedTextPlayer.cpp25
-rw-r--r--media/libstagefright/timedtext/TimedTextPlayer.h1
2 files changed, 25 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);
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 @@ private:
enum {
kWhatPause = 'paus',
kWhatSeek = 'seek',
+ kWhatRetryRead = 'read',
kWhatSendSubtitle = 'send',
kWhatSetSource = 'ssrc',
};