diff options
author | Robert Shih <robertshih@google.com> | 2015-07-13 17:59:36 -0700 |
---|---|---|
committer | Robert Shih <robertshih@google.com> | 2015-07-16 14:34:03 -0700 |
commit | 8d237a5ce1e3c1dbc1d538f47e68cff2cc52d799 (patch) | |
tree | 3e77dfb6324d3a7bf390d6c6e6c576b897ad8cd5 /media/libstagefright/rtsp/MyHandler.h | |
parent | 11addc1d922efa0bf12e261481bba11024c7c7ab (diff) | |
download | frameworks_av-8d237a5ce1e3c1dbc1d538f47e68cff2cc52d799.zip frameworks_av-8d237a5ce1e3c1dbc1d538f47e68cff2cc52d799.tar.gz frameworks_av-8d237a5ce1e3c1dbc1d538f47e68cff2cc52d799.tar.bz2 |
RTSP: clear data/eos status before returning from seek
The original RTSP seek implementation involves pausing and restarting
a session. This change clears data/eos status after an rtsp session
is paused for a seek, and delays the seek to return after data/eos
status are cleared.
Bug: 22207372
Change-Id: I1bdf65653f90436f7ee5d7fe85eeadc1598a0d56
Diffstat (limited to 'media/libstagefright/rtsp/MyHandler.h')
-rw-r--r-- | media/libstagefright/rtsp/MyHandler.h | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/media/libstagefright/rtsp/MyHandler.h b/media/libstagefright/rtsp/MyHandler.h index e64a7a1..0d0baf3 100644 --- a/media/libstagefright/rtsp/MyHandler.h +++ b/media/libstagefright/rtsp/MyHandler.h @@ -98,6 +98,7 @@ struct MyHandler : public AHandler { enum { kWhatConnected = 'conn', kWhatDisconnected = 'disc', + kWhatSeekPaused = 'spau', kWhatSeekDone = 'sdon', kWhatAccessUnit = 'accU', @@ -220,6 +221,12 @@ struct MyHandler : public AHandler { msg->post(); } + void continueSeekAfterPause(int64_t timeUs) { + sp<AMessage> msg = new AMessage('see1', this); + msg->setInt64("time", timeUs); + msg->post(); + } + bool isSeekable() const { return mSeekable; } @@ -1180,7 +1187,7 @@ struct MyHandler : public AHandler { mCheckPending = true; ++mCheckGeneration; - sp<AMessage> reply = new AMessage('see1', this); + sp<AMessage> reply = new AMessage('see0', this); reply->setInt64("time", timeUs); if (mPausing) { @@ -1203,9 +1210,26 @@ struct MyHandler : public AHandler { break; } - case 'see1': + case 'see0': { // Session is paused now. + status_t err = OK; + msg->findInt32("result", &err); + + int64_t timeUs; + CHECK(msg->findInt64("time", &timeUs)); + + sp<AMessage> notify = mNotify->dup(); + notify->setInt32("what", kWhatSeekPaused); + notify->setInt32("err", err); + notify->setInt64("time", timeUs); + notify->post(); + break; + + } + + case 'see1': + { for (size_t i = 0; i < mTracks.size(); ++i) { TrackInfo *info = &mTracks.editItemAt(i); |