Merge changes Ie3033144,Ib4008117 into nyc-dev
* changes:
WebmWriter: respect track add order
WebmWriter: do not crash on missing format keys
diff --git a/media/libstagefright/rtsp/MyHandler.h b/media/libstagefright/rtsp/MyHandler.h
index 6fa83fa..bef9c0a 100644
--- a/media/libstagefright/rtsp/MyHandler.h
+++ b/media/libstagefright/rtsp/MyHandler.h
@@ -1048,16 +1048,29 @@
break;
}
+ if (track->mNewSegment) {
+ // The sequence number from RTP packet has only 16 bits and is adjusted
+ // by the client. Only the low 16 bits of seq in RTP-Info of reply of
+ // RTSP "PLAY" command should be used to detect the first RTP patcket
+ // after seeking.
+ if ((((seqNum ^ track->mFirstSeqNumInSegment) & 0xffff) != 0)) {
+ // Not the first rtp packet of the stream after seeking, discarding.
+ ALOGV("discarding stale access unit (0x%x : 0x%x)",
+ seqNum, track->mFirstSeqNumInSegment);
+ break;
+ }
+
+ // Now found the first rtp packet of the stream after seeking.
+ track->mFirstSeqNumInSegment = seqNum;
+ track->mNewSegment = false;
+ }
+
if (seqNum < track->mFirstSeqNumInSegment) {
ALOGV("dropping stale access-unit (%d < %d)",
seqNum, track->mFirstSeqNumInSegment);
break;
}
- if (track->mNewSegment) {
- track->mNewSegment = false;
- }
-
onAccessUnitComplete(trackIndex, accessUnit);
break;
}
@@ -1336,6 +1349,12 @@
mPausing = false;
mSeekPending = false;
+ // Discard all stale access units.
+ for (size_t i = 0; i < mTracks.size(); ++i) {
+ TrackInfo *track = &mTracks.editItemAt(i);
+ track->mPackets.clear();
+ }
+
sp<AMessage> msg = mNotify->dup();
msg->setInt32("what", kWhatSeekDone);
msg->post();