summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/MPEG4Extractor.cpp
diff options
context:
space:
mode:
authorJames Dong <jdong@google.com>2011-05-25 15:02:50 -0700
committerJames Dong <jdong@google.com>2011-05-26 11:31:16 -0700
commit515e855eae78aa495da58356486aaa666cb57fd1 (patch)
tree904870c8a34af1239be1118e10f0da1d9540261d /media/libstagefright/MPEG4Extractor.cpp
parent8d91237333c60c4a6839358109265e8847df23f3 (diff)
downloadframeworks_av-515e855eae78aa495da58356486aaa666cb57fd1.zip
frameworks_av-515e855eae78aa495da58356486aaa666cb57fd1.tar.gz
frameworks_av-515e855eae78aa495da58356486aaa666cb57fd1.tar.bz2
Extract embedded cover art (aka poster frame) in mp4 files
Change-Id: Ic9421ee27b9aa3b27df00878b887de20f25d232b
Diffstat (limited to 'media/libstagefright/MPEG4Extractor.cpp')
-rw-r--r--media/libstagefright/MPEG4Extractor.cpp24
1 files changed, 24 insertions, 0 deletions
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;