File tree Expand file tree Collapse file tree 3 files changed +24
-11
lines changed
libmediaplayerservice/nuplayer Expand file tree Collapse file tree 3 files changed +24
-11
lines changed Original file line number Diff line number Diff line change @@ -42,7 +42,7 @@ NuPlayer::StreamingSource::~StreamingSource() {
4242
4343void 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}
Original file line number Diff line number Diff line change @@ -325,14 +325,16 @@ sp<MediaSource> ATSParser::Program::getSource(SourceType type) {
325325}
326326
327327int64_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
740743ATSParser::~ATSParser () {
Original file line number Diff line number Diff 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);
You can’t perform that action at this time.
0 commit comments