From 95d3f86fed2cab71a446f2b9ab38458ee91e3b65 Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Tue, 10 Jun 2014 16:53:31 -0700 Subject: [PATCH] Switch to a type-safe album art interface. (Requires a matching change in frameworks/av.) Bug: 15514223 Change-Id: I4e494cc5d7a2eb82cd2b7ae3b829fc663136267a --- media/jni/android_media_MediaMetadataRetriever.cpp | 13 +++++-------- media/jni/android_media_MediaScanner.cpp | 11 +++++------ 2 files changed, 10 insertions(+), 14 deletions(-) diff --git a/media/jni/android_media_MediaMetadataRetriever.cpp b/media/jni/android_media_MediaMetadataRetriever.cpp index c2694f1fb9cb3..0e347899282bc 100644 --- a/media/jni/android_media_MediaMetadataRetriever.cpp +++ b/media/jni/android_media_MediaMetadataRetriever.cpp @@ -23,6 +23,7 @@ #include #include #include +#include #include #include "jni.h" @@ -326,17 +327,13 @@ static jbyteArray android_media_MediaMetadataRetriever_getEmbeddedPicture( return NULL; } - unsigned int len = mediaAlbumArt->mSize; - char* data = (char*) mediaAlbumArt + sizeof(MediaAlbumArt); - jbyteArray array = env->NewByteArray(len); + jbyteArray array = env->NewByteArray(mediaAlbumArt->size()); if (!array) { // OutOfMemoryError exception has already been thrown. ALOGE("getEmbeddedPicture: OutOfMemoryError is thrown."); } else { - jbyte* bytes = env->GetByteArrayElements(array, NULL); - if (bytes != NULL) { - memcpy(bytes, data, len); - env->ReleaseByteArrayElements(array, bytes, 0); - } + const jbyte* data = + reinterpret_cast(mediaAlbumArt->data()); + env->SetByteArrayRegion(array, 0, mediaAlbumArt->size(), data); } // No need to delete mediaAlbumArt here diff --git a/media/jni/android_media_MediaScanner.cpp b/media/jni/android_media_MediaScanner.cpp index b52044025ae3a..321c2e3dcc440 100644 --- a/media/jni/android_media_MediaScanner.cpp +++ b/media/jni/android_media_MediaScanner.cpp @@ -348,17 +348,16 @@ android_media_MediaScanner_extractAlbumArt( } int fd = jniGetFDFromFileDescriptor(env, fileDescriptor); - MediaAlbumArt* mediaAlbumArt = - reinterpret_cast(mp->extractAlbumArt(fd)); + MediaAlbumArt* mediaAlbumArt = mp->extractAlbumArt(fd); if (mediaAlbumArt == NULL) { return NULL; } - jbyteArray array = env->NewByteArray(mediaAlbumArt->mSize); + jbyteArray array = env->NewByteArray(mediaAlbumArt->size()); if (array != NULL) { - jbyte* bytes = env->GetByteArrayElements(array, NULL); - memcpy(bytes, &mediaAlbumArt->mData[0], mediaAlbumArt->mSize); - env->ReleaseByteArrayElements(array, bytes, 0); + const jbyte* data = + reinterpret_cast(mediaAlbumArt->data()); + env->SetByteArrayRegion(array, 0, mediaAlbumArt->size(), data); } done: