From bbbf9c4552402ab18b255f4058e9e6e506f3f106 Mon Sep 17 00:00:00 2001 From: Yajun Zeng Date: Wed, 24 Apr 2013 10:51:20 +0800 Subject: Store rtsp accessunit until PLAY response parsed If RTP accessunit comes earlier than play response, the normal play time mapping posted in func onAccessUnitComplete is wrong. This leads wrong timestamp of the first few frames. This issue is found in the 3 CtsVerifier RTSP streaming cases. Change-Id: I640eea375b1f3f4730238f9d561c3b40ec682395 Signed-off-by: Yajun Zeng --- media/libstagefright/rtsp/MyHandler.h | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/media/libstagefright/rtsp/MyHandler.h b/media/libstagefright/rtsp/MyHandler.h index b2f0e5e..88b3e82 100644 --- a/media/libstagefright/rtsp/MyHandler.h +++ b/media/libstagefright/rtsp/MyHandler.h @@ -135,7 +135,8 @@ struct MyHandler : public AHandler { mReceivedFirstRTPPacket(false), mSeekable(false), mKeepAliveTimeoutUs(kDefaultKeepAliveTimeoutUs), - mKeepAliveGeneration(0) { + mKeepAliveGeneration(0), + mPlayResponseParsed(false) { mNetLooper->setName("rtsp net"); mNetLooper->start(false /* runOnCallingThread */, false /* canCallJava */, @@ -1093,6 +1094,7 @@ struct MyHandler : public AHandler { } void parsePlayResponse(const sp &response) { + mPlayResponseParsed = true; mSeekable = false; if (mTracks.size() == 0) { ALOGV("parsePlayResponse: late packets ignored."); @@ -1244,6 +1246,8 @@ private: Vector mTracks; + bool mPlayResponseParsed; + void setupTrack(size_t index) { sp source = new APacketSource(mSessionDesc, index); @@ -1415,6 +1419,13 @@ private: int32_t trackIndex, const sp &accessUnit) { ALOGV("onAccessUnitComplete track %d", trackIndex); + if(!mPlayResponseParsed){ + ALOGI("play response is not parsed, storing accessunit"); + TrackInfo *track = &mTracks.editItemAt(trackIndex); + track->mPackets.push_back(accessUnit); + return; + } + if (mFirstAccessUnit) { sp msg = mNotify->dup(); msg->setInt32("what", kWhatConnected); -- cgit v1.1