Skip to content

Commit 475334f

Browse files
committed
Starhub RTSP apparently does not establish time on all tracks
i.e. the "SR" RTCP packet is sent for only one of the two tracks. fake timestamps if that's the case, previously we'd only fake timestamps if we didn't receive _any_ "SR" packets. Change-Id: Id63d4940d453ba6c04c62e02ab9a0ad843936bc1 related-to-bug: 5669027
1 parent f17e7c2 commit 475334f

File tree

1 file changed

+29
-1
lines changed

1 file changed

+29
-1
lines changed

media/libstagefright/rtsp/MyHandler.h

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@ struct MyHandler : public AHandler {
122122
mSetupTracksSuccessful(false),
123123
mSeekPending(false),
124124
mFirstAccessUnit(true),
125+
mAllTracksHaveTime(false),
125126
mNTPAnchorUs(-1),
126127
mMediaAnchorUs(-1),
127128
mLastMediaTimeUs(0),
@@ -723,6 +724,7 @@ struct MyHandler : public AHandler {
723724
mSetupTracksSuccessful = false;
724725
mSeekPending = false;
725726
mFirstAccessUnit = true;
727+
mAllTracksHaveTime = false;
726728
mNTPAnchorUs = -1;
727729
mMediaAnchorUs = -1;
728730
mNumAccessUnitsReceived = 0;
@@ -930,6 +932,7 @@ struct MyHandler : public AHandler {
930932
info->mNTPAnchorUs = -1;
931933
}
932934

935+
mAllTracksHaveTime = false;
933936
mNTPAnchorUs = -1;
934937

935938
int64_t timeUs;
@@ -1037,6 +1040,14 @@ struct MyHandler : public AHandler {
10371040
ALOGW("Never received any data, disconnecting.");
10381041
(new AMessage('abor', id()))->post();
10391042
}
1043+
} else {
1044+
if (!mAllTracksHaveTime) {
1045+
ALOGW("We received some RTCP packets, but time "
1046+
"could not be established on all tracks, now "
1047+
"using fake timestamps");
1048+
1049+
fakeTimestamps();
1050+
}
10401051
}
10411052
break;
10421053
}
@@ -1211,6 +1222,7 @@ struct MyHandler : public AHandler {
12111222
bool mSeekPending;
12121223
bool mFirstAccessUnit;
12131224

1225+
bool mAllTracksHaveTime;
12141226
int64_t mNTPAnchorUs;
12151227
int64_t mMediaAnchorUs;
12161228
int64_t mLastMediaTimeUs;
@@ -1357,6 +1369,7 @@ struct MyHandler : public AHandler {
13571369
}
13581370

13591371
void fakeTimestamps() {
1372+
mNTPAnchorUs = -1ll;
13601373
for (size_t i = 0; i < mTracks.size(); ++i) {
13611374
onTimeUpdate(i, 0, 0ll);
13621375
}
@@ -1377,6 +1390,21 @@ struct MyHandler : public AHandler {
13771390
mNTPAnchorUs = ntpTimeUs;
13781391
mMediaAnchorUs = mLastMediaTimeUs;
13791392
}
1393+
1394+
if (!mAllTracksHaveTime) {
1395+
bool allTracksHaveTime = true;
1396+
for (size_t i = 0; i < mTracks.size(); ++i) {
1397+
TrackInfo *track = &mTracks.editItemAt(i);
1398+
if (track->mNTPAnchorUs < 0) {
1399+
allTracksHaveTime = false;
1400+
break;
1401+
}
1402+
}
1403+
if (allTracksHaveTime) {
1404+
mAllTracksHaveTime = true;
1405+
ALOGI("Time now established for all tracks.");
1406+
}
1407+
}
13801408
}
13811409

13821410
void onAccessUnitComplete(
@@ -1403,7 +1431,7 @@ struct MyHandler : public AHandler {
14031431

14041432
TrackInfo *track = &mTracks.editItemAt(trackIndex);
14051433

1406-
if (mNTPAnchorUs < 0 || mMediaAnchorUs < 0 || track->mNTPAnchorUs < 0) {
1434+
if (!mAllTracksHaveTime) {
14071435
ALOGV("storing accessUnit, no time established yet");
14081436
track->mPackets.push_back(accessUnit);
14091437
return;

0 commit comments

Comments
 (0)