diff --git a/media/libstagefright/OMXCodec.cpp b/media/libstagefright/OMXCodec.cpp index 873c2aa575b48..2c94965c24299 100644 --- a/media/libstagefright/OMXCodec.cpp +++ b/media/libstagefright/OMXCodec.cpp @@ -2004,9 +2004,12 @@ void OMXCodec::drainInputBuffer(BufferInfo *info) { (const uint8_t *)srcBuffer->data() + srcBuffer->range_offset(), srcBuffer->range_length()); + int64_t lastBufferTimeUs; + CHECK(srcBuffer->meta_data()->findInt64(kKeyTime, &lastBufferTimeUs)); + CHECK(timestampUs >= 0); + if (offset == 0) { - CHECK(srcBuffer->meta_data()->findInt64(kKeyTime, ×tampUs)); - CHECK(timestampUs >= 0); + timestampUs = lastBufferTimeUs; } offset += srcBuffer->range_length(); @@ -2019,6 +2022,13 @@ void OMXCodec::drainInputBuffer(BufferInfo *info) { if (!(mQuirks & kSupportsMultipleFramesPerInputBuffer)) { break; } + + int64_t coalescedDurationUs = lastBufferTimeUs - timestampUs; + + if (coalescedDurationUs > 250000ll) { + // Don't coalesce more than 250ms worth of encoded data at once. + break; + } } if (n > 1) {