diff options
author | Paul Fariello <fariello@archos.com> | 2012-01-23 17:24:35 +0100 |
---|---|---|
committer | Martin Storsjo <martin@martin.st> | 2012-07-10 13:34:15 +0300 |
commit | d4e5af6bc0a012e8d43975ca8b5627631333920d (patch) | |
tree | 4fa273c0f4f7969c375f9ea0d9fe8b651a77cfd7 /media/libstagefright | |
parent | ffb829430ff20ccd6c13e6ed894f2373b2d93939 (diff) | |
download | frameworks_av-d4e5af6bc0a012e8d43975ca8b5627631333920d.zip frameworks_av-d4e5af6bc0a012e8d43975ca8b5627631333920d.tar.gz frameworks_av-d4e5af6bc0a012e8d43975ca8b5627631333920d.tar.bz2 |
MPEG2TSWriter: Write proper continuity counters for PAT and PMT
Change-Id: If94e31e51c563867db6d2376ad771f9751416084
Diffstat (limited to 'media/libstagefright')
-rw-r--r-- | media/libstagefright/MPEG2TSWriter.cpp | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/media/libstagefright/MPEG2TSWriter.cpp b/media/libstagefright/MPEG2TSWriter.cpp index f702376..62c8aab 100644 --- a/media/libstagefright/MPEG2TSWriter.cpp +++ b/media/libstagefright/MPEG2TSWriter.cpp @@ -471,7 +471,9 @@ MPEG2TSWriter::MPEG2TSWriter(int fd) mStarted(false), mNumSourcesDone(0), mNumTSPacketsWritten(0), - mNumTSPacketsBeforeMeta(0) { + mNumTSPacketsBeforeMeta(0), + mPATContinuityCounter(0), + mPMTContinuityCounter(0) { init(); } @@ -482,7 +484,9 @@ MPEG2TSWriter::MPEG2TSWriter(const char *filename) mStarted(false), mNumSourcesDone(0), mNumTSPacketsWritten(0), - mNumTSPacketsBeforeMeta(0) { + mNumTSPacketsBeforeMeta(0), + mPATContinuityCounter(0), + mPMTContinuityCounter(0) { init(); } @@ -495,7 +499,9 @@ MPEG2TSWriter::MPEG2TSWriter( mStarted(false), mNumSourcesDone(0), mNumTSPacketsWritten(0), - mNumTSPacketsBeforeMeta(0) { + mNumTSPacketsBeforeMeta(0), + mPATContinuityCounter(0), + mPMTContinuityCounter(0) { init(); } @@ -732,8 +738,10 @@ void MPEG2TSWriter::writeProgramAssociationTable() { memset(buffer->data(), 0, buffer->size()); memcpy(buffer->data(), kData, sizeof(kData)); - static const unsigned kContinuityCounter = 5; - buffer->data()[3] |= kContinuityCounter; + if (++mPATContinuityCounter == 16) { + mPATContinuityCounter = 0; + } + buffer->data()[3] |= mPATContinuityCounter; CHECK_EQ(internalWrite(buffer->data(), buffer->size()), buffer->size()); } @@ -784,8 +792,10 @@ void MPEG2TSWriter::writeProgramMap() { memset(buffer->data(), 0, buffer->size()); memcpy(buffer->data(), kData, sizeof(kData)); - static const unsigned kContinuityCounter = 5; - buffer->data()[3] |= kContinuityCounter; + if (++mPMTContinuityCounter == 16) { + mPMTContinuityCounter = 0; + } + buffer->data()[3] |= mPMTContinuityCounter; size_t section_length = 5 * mSources.size() + 4 + 9; buffer->data()[6] |= section_length >> 8; |