Skip to content

Commit 49fb943

Browse files
theandi666Android (Google) Code Review
authored andcommitted
Merge "ATSParser now supports a mode in which PTS is considered to be absolute time"
2 parents 83c8ad6 + ebd266c commit 49fb943

File tree

3 files changed

+24
-11
lines changed

3 files changed

+24
-11
lines changed

media/libmediaplayerservice/nuplayer/StreamingSource.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ NuPlayer::StreamingSource::~StreamingSource() {
4242

4343
void NuPlayer::StreamingSource::start() {
4444
mStreamListener = new NuPlayerStreamListener(mSource, 0);
45-
mTSParser = new ATSParser;
45+
mTSParser = new ATSParser(ATSParser::TS_TIMESTAMPS_ARE_ABSOLUTE);
4646

4747
mStreamListener->start();
4848
}

media/libstagefright/mpeg2ts/ATSParser.cpp

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -325,14 +325,16 @@ sp<MediaSource> ATSParser::Program::getSource(SourceType type) {
325325
}
326326

327327
int64_t ATSParser::Program::convertPTSToTimestamp(uint64_t PTS) {
328-
if (!mFirstPTSValid) {
329-
mFirstPTSValid = true;
330-
mFirstPTS = PTS;
331-
PTS = 0;
332-
} else if (PTS < mFirstPTS) {
333-
PTS = 0;
334-
} else {
335-
PTS -= mFirstPTS;
328+
if (!(mParser->mFlags & TS_TIMESTAMPS_ARE_ABSOLUTE)) {
329+
if (!mFirstPTSValid) {
330+
mFirstPTSValid = true;
331+
mFirstPTS = PTS;
332+
PTS = 0;
333+
} else if (PTS < mFirstPTS) {
334+
PTS = 0;
335+
} else {
336+
PTS -= mFirstPTS;
337+
}
336338
}
337339

338340
return (PTS * 100) / 9;
@@ -734,7 +736,8 @@ sp<MediaSource> ATSParser::Stream::getSource(SourceType type) {
734736

735737
////////////////////////////////////////////////////////////////////////////////
736738

737-
ATSParser::ATSParser() {
739+
ATSParser::ATSParser(uint32_t flags)
740+
: mFlags(flags) {
738741
}
739742

740743
ATSParser::~ATSParser() {

media/libstagefright/mpeg2ts/ATSParser.h

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,16 @@ struct ATSParser : public RefBase {
3838
DISCONTINUITY_FORMATCHANGE
3939
};
4040

41-
ATSParser();
41+
enum Flags {
42+
// The 90kHz clock (PTS/DTS) is absolute, i.e. PTS=0 corresponds to
43+
// a media time of 0.
44+
// If this flag is _not_ specified, the first PTS encountered in a
45+
// program of this stream will be assumed to correspond to media time 0
46+
// instead.
47+
TS_TIMESTAMPS_ARE_ABSOLUTE = 1
48+
};
49+
50+
ATSParser(uint32_t flags = 0);
4251

4352
void feedTSPacket(const void *data, size_t size);
4453

@@ -73,6 +82,7 @@ struct ATSParser : public RefBase {
7382
struct Program;
7483
struct Stream;
7584

85+
uint32_t mFlags;
7686
Vector<sp<Program> > mPrograms;
7787

7888
void parseProgramAssociationTable(ABitReader *br);

0 commit comments

Comments
 (0)