diff options
author | Andreas Huber <andih@google.com> | 2010-09-08 14:32:20 -0700 |
---|---|---|
committer | Andreas Huber <andih@google.com> | 2010-10-07 11:41:43 -0700 |
commit | 2a4d22d79e927f2245537921e10fc5fda1c47a29 (patch) | |
tree | 1452ec4c157a5f701d4aea84f2107477d5324d94 /media/libstagefright/mpeg2ts/MPEG2TSExtractor.cpp | |
parent | 2b82e9652ba049e754c2cc74e381282f231d5fbf (diff) | |
download | frameworks_av-2a4d22d79e927f2245537921e10fc5fda1c47a29.zip frameworks_av-2a4d22d79e927f2245537921e10fc5fda1c47a29.tar.gz frameworks_av-2a4d22d79e927f2245537921e10fc5fda1c47a29.tar.bz2 |
Work to support switching transport streams mid-stream and signalling discontinuities to the decoder.
Change-Id: I7150e5e7342e1117c524856b204aadcb763e06ed
related-to-bug: 2368598
Diffstat (limited to 'media/libstagefright/mpeg2ts/MPEG2TSExtractor.cpp')
-rw-r--r-- | media/libstagefright/mpeg2ts/MPEG2TSExtractor.cpp | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/media/libstagefright/mpeg2ts/MPEG2TSExtractor.cpp b/media/libstagefright/mpeg2ts/MPEG2TSExtractor.cpp index c5257bb..0d96bd1 100644 --- a/media/libstagefright/mpeg2ts/MPEG2TSExtractor.cpp +++ b/media/libstagefright/mpeg2ts/MPEG2TSExtractor.cpp @@ -165,18 +165,26 @@ void MPEG2TSExtractor::init() { LOGI("haveAudio=%d, haveVideo=%d", haveAudio, haveVideo); } +static bool isDiscontinuity(const uint8_t *data, ssize_t size) { + return size == 188 && data[0] == 0x00; +} + status_t MPEG2TSExtractor::feedMore() { Mutex::Autolock autoLock(mLock); uint8_t packet[kTSPacketSize]; ssize_t n = mDataSource->readAt(mOffset, packet, kTSPacketSize); - if (n < (ssize_t)kTSPacketSize) { + if (isDiscontinuity(packet, n)) { + LOGI("XXX discontinuity detected"); + mParser->signalDiscontinuity(); + } else if (n < (ssize_t)kTSPacketSize) { return (n < 0) ? (status_t)n : ERROR_END_OF_STREAM; + } else { + mParser->feedTSPacket(packet, kTSPacketSize); } - mOffset += kTSPacketSize; - mParser->feedTSPacket(packet, kTSPacketSize); + mOffset += n; return OK; } |