summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/rtsp/MyHandler.h
diff options
context:
space:
mode:
authorYajun Zeng <beanz@marvell.com>2013-04-24 10:51:20 +0800
committerYajun Zeng <beanz@marvell.com>2013-05-13 15:36:31 +0800
commitbbbf9c4552402ab18b255f4058e9e6e506f3f106 (patch)
tree44f06d5ee45ca31c46b7de9d49ec7e7e8d583c0c /media/libstagefright/rtsp/MyHandler.h
parent0dbff625c3128962b48f3476ceacb3ac80a3f421 (diff)
downloadframeworks_av-bbbf9c4552402ab18b255f4058e9e6e506f3f106.zip
frameworks_av-bbbf9c4552402ab18b255f4058e9e6e506f3f106.tar.gz
frameworks_av-bbbf9c4552402ab18b255f4058e9e6e506f3f106.tar.bz2
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 <beanz@marvell.com>
Diffstat (limited to 'media/libstagefright/rtsp/MyHandler.h')
-rw-r--r--media/libstagefright/rtsp/MyHandler.h13
1 files changed, 12 insertions, 1 deletions
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<ARTSPResponse> &response) {
+ mPlayResponseParsed = true;
mSeekable = false;
if (mTracks.size() == 0) {
ALOGV("parsePlayResponse: late packets ignored.");
@@ -1244,6 +1246,8 @@ private:
Vector<TrackInfo> mTracks;
+ bool mPlayResponseParsed;
+
void setupTrack(size_t index) {
sp<APacketSource> source =
new APacketSource(mSessionDesc, index);
@@ -1415,6 +1419,13 @@ private:
int32_t trackIndex, const sp<ABuffer> &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<AMessage> msg = mNotify->dup();
msg->setInt32("what", kWhatConnected);