Skip to content

Commit 0ba9380

Browse files
theandi666Android (Google) Code Review
authored andcommitted
Merge "Fix Bitreader "putBits" implementation, make sure we emulate timestamps" into ics-mr1
2 parents 48b428f + f6ae711 commit 0ba9380

File tree

4 files changed

+37
-13
lines changed

4 files changed

+37
-13
lines changed

media/libmediaplayerservice/nuplayer/RTSPSource.cpp

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -208,21 +208,32 @@ void NuPlayer::RTSPSource::onMessageReceived(const sp<AMessage> &msg) {
208208
break;
209209
}
210210

211-
const TrackInfo &info = mTracks.editItemAt(trackIndex);
212-
sp<AnotherPacketSource> source = info.mSource;
211+
TrackInfo *info = &mTracks.editItemAt(trackIndex);
212+
213+
sp<AnotherPacketSource> source = info->mSource;
213214
if (source != NULL) {
214-
#if 1
215215
uint32_t rtpTime;
216216
CHECK(accessUnit->meta()->findInt32("rtp-time", (int32_t *)&rtpTime));
217217

218+
if (!info->mNPTMappingValid) {
219+
// This is a live stream, we didn't receive any normal
220+
// playtime mapping. Assume the first packets correspond
221+
// to time 0.
222+
223+
LOGV("This is a live stream, assuming time = 0");
224+
225+
info->mRTPTime = rtpTime;
226+
info->mNormalPlaytimeUs = 0ll;
227+
info->mNPTMappingValid = true;
228+
}
229+
218230
int64_t nptUs =
219-
((double)rtpTime - (double)info.mRTPTime)
220-
/ info.mTimeScale
231+
((double)rtpTime - (double)info->mRTPTime)
232+
/ info->mTimeScale
221233
* 1000000ll
222-
+ info.mNormalPlaytimeUs;
234+
+ info->mNormalPlaytimeUs;
223235

224236
accessUnit->meta()->setInt64("timeUs", nptUs);
225-
#endif
226237

227238
source->queueAccessUnit(accessUnit);
228239
}
@@ -278,6 +289,7 @@ void NuPlayer::RTSPSource::onMessageReceived(const sp<AMessage> &msg) {
278289
TrackInfo *info = &mTracks.editItemAt(trackIndex);
279290
info->mRTPTime = rtpTime;
280291
info->mNormalPlaytimeUs = nptUs;
292+
info->mNPTMappingValid = true;
281293
break;
282294
}
283295

@@ -305,6 +317,7 @@ void NuPlayer::RTSPSource::onConnected() {
305317
info.mTimeScale = timeScale;
306318
info.mRTPTime = 0;
307319
info.mNormalPlaytimeUs = 0ll;
320+
info.mNPTMappingValid = false;
308321

309322
if ((isAudio && mAudioTrack == NULL)
310323
|| (isVideo && mVideoTrack == NULL)) {

media/libmediaplayerservice/nuplayer/RTSPSource.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ struct NuPlayer::RTSPSource : public NuPlayer::Source {
7676
int32_t mTimeScale;
7777
uint32_t mRTPTime;
7878
int64_t mNormalPlaytimeUs;
79+
bool mNPTMappingValid;
7980
};
8081

8182
AString mURL;

media/libstagefright/foundation/ABitReader.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,13 @@ void ABitReader::skipBits(size_t n) {
7979
}
8080

8181
void ABitReader::putBits(uint32_t x, size_t n) {
82-
CHECK_LE(mNumBitsLeft + n, 32u);
82+
CHECK_LE(n, 32u);
83+
84+
while (mNumBitsLeft + n > 32) {
85+
mNumBitsLeft -= 8;
86+
--mData;
87+
++mSize;
88+
}
8389

8490
mReservoir = (mReservoir >> n) | (x << (32 - n));
8591
mNumBitsLeft += n;

media/libstagefright/rtsp/MyHandler.h

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1100,6 +1100,8 @@ struct MyHandler : public AHandler {
11001100
float npt1, npt2;
11011101
if (!ASessionDescription::parseNTPRange(val.c_str(), &npt1, &npt2)) {
11021102
// This is a live stream and therefore not seekable.
1103+
1104+
LOGI("This is a live stream");
11031105
return;
11041106
}
11051107

@@ -1386,12 +1388,14 @@ struct MyHandler : public AHandler {
13861388
msg->setInt32("what", kWhatConnected);
13871389
msg->post();
13881390

1389-
for (size_t i = 0; i < mTracks.size(); ++i) {
1390-
TrackInfo *info = &mTracks.editItemAt(i);
1391+
if (mSeekable) {
1392+
for (size_t i = 0; i < mTracks.size(); ++i) {
1393+
TrackInfo *info = &mTracks.editItemAt(i);
13911394

1392-
postNormalPlayTimeMapping(
1393-
i,
1394-
info->mNormalPlayTimeRTP, info->mNormalPlayTimeUs);
1395+
postNormalPlayTimeMapping(
1396+
i,
1397+
info->mNormalPlayTimeRTP, info->mNormalPlayTimeUs);
1398+
}
13951399
}
13961400

13971401
mFirstAccessUnit = false;

0 commit comments

Comments
 (0)