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 | 935456794a8d572368ebe942d13451f7d71a9f4e (patch) | |
| tree | 28f8cdfb4d2a1be1086d9b13adc4970128625ede | |
| parent | c3d8f74cda26197ec9066374fe31abe9ee77c1b1 (diff) | |
| parent | c4c17d47b674b425fb6c399822c0ab3258543c0a (diff) | |
| download | frameworks_av-935456794a8d572368ebe942d13451f7d71a9f4e.zip frameworks_av-935456794a8d572368ebe942d13451f7d71a9f4e.tar.gz frameworks_av-935456794a8d572368ebe942d13451f7d71a9f4e.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);  | 
