From 515e855eae78aa495da58356486aaa666cb57fd1 Mon Sep 17 00:00:00 2001 From: James Dong Date: Wed, 25 May 2011 15:02:50 -0700 Subject: Extract embedded cover art (aka poster frame) in mp4 files Change-Id: Ic9421ee27b9aa3b27df00878b887de20f25d232b --- media/libstagefright/MPEG4Extractor.cpp | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'media/libstagefright/MPEG4Extractor.cpp') diff --git a/media/libstagefright/MPEG4Extractor.cpp b/media/libstagefright/MPEG4Extractor.cpp index 98ac044..5fe511f 100644 --- a/media/libstagefright/MPEG4Extractor.cpp +++ b/media/libstagefright/MPEG4Extractor.cpp @@ -653,6 +653,7 @@ status_t MPEG4Extractor::parseChunk(off64_t *offset, int depth) { off64_t chunk_data_size = *offset + chunk_size - data_offset; if (chunk_type != FOURCC('c', 'p', 'r', 't') + && chunk_type != FOURCC('c', 'o', 'v', 'r') && mPath.size() == 5 && underMetaDataPath(mPath)) { off64_t stop_offset = *offset + chunk_size; *offset = data_offset; @@ -1331,6 +1332,29 @@ status_t MPEG4Extractor::parseChunk(off64_t *offset, int depth) { break; } + case FOURCC('c', 'o', 'v', 'r'): + { + if (mFileMetaData != NULL) { + LOGV("chunk_data_size = %lld and data_offset = %lld", + chunk_data_size, data_offset); + uint8_t *buffer = new uint8_t[chunk_data_size + 1]; + if (mDataSource->readAt( + data_offset, buffer, chunk_data_size) != (ssize_t)chunk_data_size) { + delete[] buffer; + buffer = NULL; + + return ERROR_IO; + } + const int kSkipBytesOfDataBox = 16; + mFileMetaData->setData( + kKeyAlbumArt, MetaData::TYPE_NONE, + buffer + kSkipBytesOfDataBox, chunk_data_size - kSkipBytesOfDataBox); + } + + *offset += chunk_size; + break; + } + default: { *offset += chunk_size; -- cgit v1.1