diff options
author | Andreas Huber <andih@google.com> | 2011-08-31 09:44:57 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2011-08-31 09:44:57 -0700 |
commit | 49fb943db85c748fc7dd4f5ee4a461d7489fb1b0 (patch) | |
tree | 9b780471b27dfbee9374ea737af9fbf425c3f957 | |
parent | 83c8ad6de581ad3a68421587e0fe8145c5f335af (diff) | |
parent | ebd266c0340583438886530e2d6f23717bbbf0d2 (diff) | |
download | frameworks_base-49fb943db85c748fc7dd4f5ee4a461d7489fb1b0.zip frameworks_base-49fb943db85c748fc7dd4f5ee4a461d7489fb1b0.tar.gz frameworks_base-49fb943db85c748fc7dd4f5ee4a461d7489fb1b0.tar.bz2 |
Merge "ATSParser now supports a mode in which PTS is considered to be absolute time"
-rw-r--r-- | media/libmediaplayerservice/nuplayer/StreamingSource.cpp | 2 | ||||
-rw-r--r-- | media/libstagefright/mpeg2ts/ATSParser.cpp | 21 | ||||
-rw-r--r-- | media/libstagefright/mpeg2ts/ATSParser.h | 12 |
3 files changed, 24 insertions, 11 deletions
diff --git a/media/libmediaplayerservice/nuplayer/StreamingSource.cpp b/media/libmediaplayerservice/nuplayer/StreamingSource.cpp index a6a3a18..f41e9d2 100644 --- a/media/libmediaplayerservice/nuplayer/StreamingSource.cpp +++ b/media/libmediaplayerservice/nuplayer/StreamingSource.cpp @@ -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(); } diff --git a/media/libstagefright/mpeg2ts/ATSParser.cpp b/media/libstagefright/mpeg2ts/ATSParser.cpp index 5bbc2b4..74a3b32 100644 --- a/media/libstagefright/mpeg2ts/ATSParser.cpp +++ b/media/libstagefright/mpeg2ts/ATSParser.cpp @@ -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() { diff --git a/media/libstagefright/mpeg2ts/ATSParser.h b/media/libstagefright/mpeg2ts/ATSParser.h index 1e6451d..d12d998 100644 --- a/media/libstagefright/mpeg2ts/ATSParser.h +++ b/media/libstagefright/mpeg2ts/ATSParser.h @@ -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); |