summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/rtsp/MyHandler.h
diff options
context:
space:
mode:
authorRobert Shih <robertshih@google.com>2015-07-13 17:59:36 -0700
committerRobert Shih <robertshih@google.com>2015-07-16 14:34:03 -0700
commit8d237a5ce1e3c1dbc1d538f47e68cff2cc52d799 (patch)
tree3e77dfb6324d3a7bf390d6c6e6c576b897ad8cd5 /media/libstagefright/rtsp/MyHandler.h
parent11addc1d922efa0bf12e261481bba11024c7c7ab (diff)
downloadframeworks_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.h28
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);