Merge "Starhub RTSP apparently does not establish time on all tracks"
This commit is contained in:
committed by
Android (Google) Code Review
commit
e8bb6fef58
@@ -122,6 +122,7 @@ struct MyHandler : public AHandler {
|
||||
mSetupTracksSuccessful(false),
|
||||
mSeekPending(false),
|
||||
mFirstAccessUnit(true),
|
||||
mAllTracksHaveTime(false),
|
||||
mNTPAnchorUs(-1),
|
||||
mMediaAnchorUs(-1),
|
||||
mLastMediaTimeUs(0),
|
||||
@@ -723,6 +724,7 @@ struct MyHandler : public AHandler {
|
||||
mSetupTracksSuccessful = false;
|
||||
mSeekPending = false;
|
||||
mFirstAccessUnit = true;
|
||||
mAllTracksHaveTime = false;
|
||||
mNTPAnchorUs = -1;
|
||||
mMediaAnchorUs = -1;
|
||||
mNumAccessUnitsReceived = 0;
|
||||
@@ -930,6 +932,7 @@ struct MyHandler : public AHandler {
|
||||
info->mNTPAnchorUs = -1;
|
||||
}
|
||||
|
||||
mAllTracksHaveTime = false;
|
||||
mNTPAnchorUs = -1;
|
||||
|
||||
int64_t timeUs;
|
||||
@@ -1037,6 +1040,14 @@ struct MyHandler : public AHandler {
|
||||
ALOGW("Never received any data, disconnecting.");
|
||||
(new AMessage('abor', id()))->post();
|
||||
}
|
||||
} else {
|
||||
if (!mAllTracksHaveTime) {
|
||||
ALOGW("We received some RTCP packets, but time "
|
||||
"could not be established on all tracks, now "
|
||||
"using fake timestamps");
|
||||
|
||||
fakeTimestamps();
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -1211,6 +1222,7 @@ private:
|
||||
bool mSeekPending;
|
||||
bool mFirstAccessUnit;
|
||||
|
||||
bool mAllTracksHaveTime;
|
||||
int64_t mNTPAnchorUs;
|
||||
int64_t mMediaAnchorUs;
|
||||
int64_t mLastMediaTimeUs;
|
||||
@@ -1357,6 +1369,7 @@ private:
|
||||
}
|
||||
|
||||
void fakeTimestamps() {
|
||||
mNTPAnchorUs = -1ll;
|
||||
for (size_t i = 0; i < mTracks.size(); ++i) {
|
||||
onTimeUpdate(i, 0, 0ll);
|
||||
}
|
||||
@@ -1377,6 +1390,21 @@ private:
|
||||
mNTPAnchorUs = ntpTimeUs;
|
||||
mMediaAnchorUs = mLastMediaTimeUs;
|
||||
}
|
||||
|
||||
if (!mAllTracksHaveTime) {
|
||||
bool allTracksHaveTime = true;
|
||||
for (size_t i = 0; i < mTracks.size(); ++i) {
|
||||
TrackInfo *track = &mTracks.editItemAt(i);
|
||||
if (track->mNTPAnchorUs < 0) {
|
||||
allTracksHaveTime = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (allTracksHaveTime) {
|
||||
mAllTracksHaveTime = true;
|
||||
ALOGI("Time now established for all tracks.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void onAccessUnitComplete(
|
||||
@@ -1403,7 +1431,7 @@ private:
|
||||
|
||||
TrackInfo *track = &mTracks.editItemAt(trackIndex);
|
||||
|
||||
if (mNTPAnchorUs < 0 || mMediaAnchorUs < 0 || track->mNTPAnchorUs < 0) {
|
||||
if (!mAllTracksHaveTime) {
|
||||
ALOGV("storing accessUnit, no time established yet");
|
||||
track->mPackets.push_back(accessUnit);
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user