diff options
author | Andreas Huber <andih@google.com> | 2010-10-08 09:04:25 -0700 |
---|---|---|
committer | Andreas Huber <andih@google.com> | 2010-10-08 09:04:25 -0700 |
commit | a9d9dd2425c32f6868c35f49a3e8f29aafba931a (patch) | |
tree | 9afebd98b75d4fda40c7f79c7f6c7a81989d161d | |
parent | f4ea1f92bc56a8ffceddba0dbd3979fe0219b13c (diff) | |
download | frameworks_av-a9d9dd2425c32f6868c35f49a3e8f29aafba931a.zip frameworks_av-a9d9dd2425c32f6868c35f49a3e8f29aafba931a.tar.gz frameworks_av-a9d9dd2425c32f6868c35f49a3e8f29aafba931a.tar.bz2 |
Disable the access unit timeout temporarily while a seek operation is in progress.
Change-Id: I116cb76342aae4168f34ebae49ecb2301702a0ea
related-to-bug: 3073955
-rw-r--r-- | media/libstagefright/rtsp/MyHandler.h | 35 |
1 files changed, 29 insertions, 6 deletions
diff --git a/media/libstagefright/rtsp/MyHandler.h b/media/libstagefright/rtsp/MyHandler.h index a31b2b2..2c9cfd3 100644 --- a/media/libstagefright/rtsp/MyHandler.h +++ b/media/libstagefright/rtsp/MyHandler.h @@ -86,6 +86,7 @@ struct MyHandler : public AHandler { mFirstAccessUnitNTP(0), mNumAccessUnitsReceived(0), mCheckPending(false), + mCheckGeneration(0), mTryTCPInterleaving(false), mReceivedFirstRTCPPacket(false) { mNetLooper->setName("rtsp net"); @@ -434,6 +435,13 @@ struct MyHandler : public AHandler { case 'chek': { + int32_t generation; + CHECK(msg->findInt32("generation", &generation)); + if (generation != mCheckGeneration) { + // This is an outdated message. Ignore. + break; + } + if (mNumAccessUnitsReceived == 0) { LOGI("stream ended? aborting."); (new AMessage('abor', id()))->post(); @@ -454,12 +462,7 @@ struct MyHandler : public AHandler { } ++mNumAccessUnitsReceived; - - if (!mCheckPending) { - mCheckPending = true; - sp<AMessage> check = new AMessage('chek', id()); - check->post(kAccessUnitTimeoutUs); - } + postAccessUnitTimeoutCheck(); size_t trackIndex; CHECK(msg->findSize("track-index", &trackIndex)); @@ -557,6 +560,11 @@ struct MyHandler : public AHandler { mSeekPending = true; + // Disable the access unit timeout until we resumed + // playback again. + mCheckPending = true; + ++mCheckGeneration; + AString request = "PAUSE "; request.append(mSessionURL); request.append(" RTSP/1.0\r\n"); @@ -612,6 +620,9 @@ struct MyHandler : public AHandler { LOGI("PLAY completed with result %d (%s)", result, strerror(-result)); + mCheckPending = false; + postAccessUnitTimeoutCheck(); + if (result == OK) { sp<RefBase> obj; CHECK(msg->findObject("response", &obj)); @@ -674,6 +685,17 @@ struct MyHandler : public AHandler { } } + void postAccessUnitTimeoutCheck() { + if (mCheckPending) { + return; + } + + mCheckPending = true; + sp<AMessage> check = new AMessage('chek', id()); + check->setInt32("generation", mCheckGeneration); + check->post(kAccessUnitTimeoutUs); + } + static void SplitString( const AString &s, const char *separator, List<AString> *items) { items->clear(); @@ -783,6 +805,7 @@ private: uint64_t mFirstAccessUnitNTP; int64_t mNumAccessUnitsReceived; bool mCheckPending; + int32_t mCheckGeneration; bool mTryTCPInterleaving; bool mReceivedFirstRTCPPacket; |