summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/mpeg2ts
diff options
context:
space:
mode:
authorAndreas Huber <andih@google.com>2011-03-02 16:18:33 -0800
committerAndreas Huber <andih@google.com>2011-03-02 16:18:33 -0800
commit3e57322b332214e3cb1874e67a5704c9b2b5f6ec (patch)
treed459fd8434a1357d0041dfbca03f6b16ffff387b /media/libstagefright/mpeg2ts
parent32f3cefa373cd55e63deda36ca9d07c7fe22eaaf (diff)
downloadframeworks_av-3e57322b332214e3cb1874e67a5704c9b2b5f6ec.zip
frameworks_av-3e57322b332214e3cb1874e67a5704c9b2b5f6ec.tar.gz
frameworks_av-3e57322b332214e3cb1874e67a5704c9b2b5f6ec.tar.bz2
Resize internal PES buffers dynamically instead of relying on a fixed maximum size.
Change-Id: Ibe720e6148799e32d039ccdb4b269659bc779952
Diffstat (limited to 'media/libstagefright/mpeg2ts')
-rw-r--r--media/libstagefright/mpeg2ts/ATSParser.cpp13
1 files changed, 12 insertions, 1 deletions
diff --git a/media/libstagefright/mpeg2ts/ATSParser.cpp b/media/libstagefright/mpeg2ts/ATSParser.cpp
index 5ba4a4f..7d4bc6e 100644
--- a/media/libstagefright/mpeg2ts/ATSParser.cpp
+++ b/media/libstagefright/mpeg2ts/ATSParser.cpp
@@ -369,7 +369,18 @@ void ATSParser::Stream::parse(
size_t payloadSizeBits = br->numBitsLeft();
CHECK_EQ(payloadSizeBits % 8, 0u);
- CHECK_LE(mBuffer->size() + payloadSizeBits / 8, mBuffer->capacity());
+ size_t neededSize = mBuffer->size() + payloadSizeBits / 8;
+ if (mBuffer->capacity() < neededSize) {
+ // Increment in multiples of 64K.
+ neededSize = (neededSize + 65535) & ~65535;
+
+ LOGI("resizing buffer to %d bytes", neededSize);
+
+ sp<ABuffer> newBuffer = new ABuffer(neededSize);
+ memcpy(newBuffer->data(), mBuffer->data(), mBuffer->size());
+ newBuffer->setRange(0, mBuffer->size());
+ mBuffer = newBuffer;
+ }
memcpy(mBuffer->data() + mBuffer->size(), br->data(), payloadSizeBits / 8);
mBuffer->setRange(0, mBuffer->size() + payloadSizeBits / 8);