Merge "ATSParser now supports a mode in which PTS is considered to be absolute time"
This commit is contained in:
committed by
Android (Google) Code Review
commit
49fb943db8
@@ -42,7 +42,7 @@ NuPlayer::StreamingSource::~StreamingSource() {
|
||||
|
||||
void NuPlayer::StreamingSource::start() {
|
||||
mStreamListener = new NuPlayerStreamListener(mSource, 0);
|
||||
mTSParser = new ATSParser;
|
||||
mTSParser = new ATSParser(ATSParser::TS_TIMESTAMPS_ARE_ABSOLUTE);
|
||||
|
||||
mStreamListener->start();
|
||||
}
|
||||
|
||||
@@ -325,14 +325,16 @@ sp<MediaSource> ATSParser::Program::getSource(SourceType type) {
|
||||
}
|
||||
|
||||
int64_t ATSParser::Program::convertPTSToTimestamp(uint64_t PTS) {
|
||||
if (!mFirstPTSValid) {
|
||||
mFirstPTSValid = true;
|
||||
mFirstPTS = PTS;
|
||||
PTS = 0;
|
||||
} else if (PTS < mFirstPTS) {
|
||||
PTS = 0;
|
||||
} else {
|
||||
PTS -= mFirstPTS;
|
||||
if (!(mParser->mFlags & TS_TIMESTAMPS_ARE_ABSOLUTE)) {
|
||||
if (!mFirstPTSValid) {
|
||||
mFirstPTSValid = true;
|
||||
mFirstPTS = PTS;
|
||||
PTS = 0;
|
||||
} else if (PTS < mFirstPTS) {
|
||||
PTS = 0;
|
||||
} else {
|
||||
PTS -= mFirstPTS;
|
||||
}
|
||||
}
|
||||
|
||||
return (PTS * 100) / 9;
|
||||
@@ -734,7 +736,8 @@ sp<MediaSource> ATSParser::Stream::getSource(SourceType type) {
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
ATSParser::ATSParser() {
|
||||
ATSParser::ATSParser(uint32_t flags)
|
||||
: mFlags(flags) {
|
||||
}
|
||||
|
||||
ATSParser::~ATSParser() {
|
||||
|
||||
@@ -38,7 +38,16 @@ struct ATSParser : public RefBase {
|
||||
DISCONTINUITY_FORMATCHANGE
|
||||
};
|
||||
|
||||
ATSParser();
|
||||
enum Flags {
|
||||
// The 90kHz clock (PTS/DTS) is absolute, i.e. PTS=0 corresponds to
|
||||
// a media time of 0.
|
||||
// If this flag is _not_ specified, the first PTS encountered in a
|
||||
// program of this stream will be assumed to correspond to media time 0
|
||||
// instead.
|
||||
TS_TIMESTAMPS_ARE_ABSOLUTE = 1
|
||||
};
|
||||
|
||||
ATSParser(uint32_t flags = 0);
|
||||
|
||||
void feedTSPacket(const void *data, size_t size);
|
||||
|
||||
@@ -73,6 +82,7 @@ private:
|
||||
struct Program;
|
||||
struct Stream;
|
||||
|
||||
uint32_t mFlags;
|
||||
Vector<sp<Program> > mPrograms;
|
||||
|
||||
void parseProgramAssociationTable(ABitReader *br);
|
||||
|
||||
Reference in New Issue
Block a user