Skip to content

Commit e8bb6fe

Browse files
theandi666Android (Google) Code Review
authored andcommitted
Merge "Starhub RTSP apparently does not establish time on all tracks"
2 parents c79e413 + 475334f commit e8bb6fe

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)