summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/rtsp/MyHandler.h
diff options
context:
space:
mode:
Diffstat (limited to 'media/libstagefright/rtsp/MyHandler.h')
-rw-r--r--media/libstagefright/rtsp/MyHandler.h19
1 files changed, 17 insertions, 2 deletions
diff --git a/media/libstagefright/rtsp/MyHandler.h b/media/libstagefright/rtsp/MyHandler.h
index 8f86f3b..5d760d3 100644
--- a/media/libstagefright/rtsp/MyHandler.h
+++ b/media/libstagefright/rtsp/MyHandler.h
@@ -52,6 +52,8 @@ static int64_t kStartupTimeoutUs = 10000000ll;
static int64_t kDefaultKeepAliveTimeoutUs = 60000000ll;
+static int64_t kPauseDelayUs = 3000000ll;
+
namespace android {
static void MakeUserAgentString(AString *s) {
@@ -137,7 +139,8 @@ struct MyHandler : public AHandler {
mSeekable(true),
mKeepAliveTimeoutUs(kDefaultKeepAliveTimeoutUs),
mKeepAliveGeneration(0),
- mPausing(false) {
+ mPausing(false),
+ mPauseGeneration(0) {
mNetLooper->setName("rtsp net");
mNetLooper->start(false /* runOnCallingThread */,
false /* canCallJava */,
@@ -215,6 +218,7 @@ struct MyHandler : public AHandler {
void seek(int64_t timeUs) {
sp<AMessage> msg = new AMessage('seek', id());
msg->setInt64("time", timeUs);
+ mPauseGeneration++;
msg->post();
}
@@ -224,11 +228,14 @@ struct MyHandler : public AHandler {
void pause() {
sp<AMessage> msg = new AMessage('paus', id());
- msg->post();
+ mPauseGeneration++;
+ msg->setInt32("pausecheck", mPauseGeneration);
+ msg->post(kPauseDelayUs);
}
void resume() {
sp<AMessage> msg = new AMessage('resu', id());
+ mPauseGeneration++;
msg->post();
}
@@ -1024,6 +1031,13 @@ struct MyHandler : public AHandler {
case 'paus':
{
+ int32_t generation;
+ CHECK(msg->findInt32("pausecheck", &generation));
+ if (generation != mPauseGeneration) {
+ ALOGV("Ignoring outdated pause message.");
+ break;
+ }
+
if (!mSeekable) {
ALOGW("This is a live stream, ignoring pause request.");
break;
@@ -1517,6 +1531,7 @@ private:
int64_t mKeepAliveTimeoutUs;
int32_t mKeepAliveGeneration;
bool mPausing;
+ int32_t mPauseGeneration;
Vector<TrackInfo> mTracks;