Merge "ATSParser now supports a mode in which PTS is considered to be absolute time"

This commit is contained in:
Andreas Huber
2011-08-31 09:44:57 -07:00
committed by Android (Google) Code Review
3 changed files with 24 additions and 11 deletions

View File

@@ -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();
}

View File

@@ -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() {

View File

@@ -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);