From 0fd2883dbe2841b7b35f1e7581e5d9d59e58ad97 Mon Sep 17 00:00:00 2001 From: Jan Olof Svensson Date: Wed, 26 Sep 2012 09:08:11 +0200 Subject: Handle large AVCC chunks If enabling seq_scaling_matrix_present_flag = 1 the AVCC chunk can be larger than the original buffer size. Changed to using ABuffer instead. Change-Id: Idacc14b45ea2634c5e608919f3ce567f23363135 --- media/libstagefright/MPEG4Extractor.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) (limited to 'media/libstagefright/MPEG4Extractor.cpp') diff --git a/media/libstagefright/MPEG4Extractor.cpp b/media/libstagefright/MPEG4Extractor.cpp index dc8e4a3..07b5405 100644 --- a/media/libstagefright/MPEG4Extractor.cpp +++ b/media/libstagefright/MPEG4Extractor.cpp @@ -30,6 +30,7 @@ #include #include +#include #include #include #include @@ -1221,18 +1222,15 @@ status_t MPEG4Extractor::parseChunk(off64_t *offset, int depth) { case FOURCC('a', 'v', 'c', 'C'): { - char buffer[256]; - if (chunk_data_size > (off64_t)sizeof(buffer)) { - return ERROR_BUFFER_TOO_SMALL; - } + sp buffer = new ABuffer(chunk_data_size); if (mDataSource->readAt( - data_offset, buffer, chunk_data_size) < chunk_data_size) { + data_offset, buffer->data(), chunk_data_size) < chunk_data_size) { return ERROR_IO; } mLastTrack->meta->setData( - kKeyAVCC, kTypeAVCC, buffer, chunk_data_size); + kKeyAVCC, kTypeAVCC, buffer->data(), chunk_data_size); *offset += chunk_size; break; -- cgit v1.1