diff options
author | 2024-04-16 18:07:13 +0000 | |
---|---|---|
committer | 2024-04-16 18:07:13 +0000 | |
commit | d666832c39f1dc17718dc6687eafb221afbe2f4b (patch) | |
tree | 33bb80d4ec3fe661774abb48bcb069516aa0c19e | |
parent | bd161c547e83d0bba8f2d8e0d588fb650e338a40 (diff) | |
parent | 5fb6f67e1989d122238893dd4cd4232ee03eaf90 (diff) |
Merge "Enable reuse of LinearBlock for during secure playback" into main
-rw-r--r-- | media/jni/android_media_MediaCodec.cpp | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/media/jni/android_media_MediaCodec.cpp b/media/jni/android_media_MediaCodec.cpp index 82561f982a03..4f9917b19110 100644 --- a/media/jni/android_media_MediaCodec.cpp +++ b/media/jni/android_media_MediaCodec.cpp @@ -2886,6 +2886,10 @@ static void extractMemoryFromContext( jint offset, jint size, sp<hardware::HidlMemory> *memory) { + if ((offset + size) > context->capacity()) { + ALOGW("extractMemoryFromContext: offset + size provided exceed capacity"); + return; + } *memory = context->toHidlMemory(); if (*memory == nullptr) { if (!context->mBlock) { @@ -2893,23 +2897,26 @@ static void extractMemoryFromContext( return; } ALOGD("extractMemoryFromContext: realloc & copying from C2Block to IMemory (cap=%zu)", - context->capacity()); + context->capacity()); if (!obtain(context, context->capacity(), context->mCodecNames, true /* secure */)) { ALOGW("extractMemoryFromContext: failed to obtain secure block"); return; } - C2WriteView view = context->mBlock->map().get(); - if (view.error() != C2_OK) { - ALOGW("extractMemoryFromContext: failed to map C2Block (%d)", view.error()); - return; - } - uint8_t *memoryPtr = static_cast<uint8_t *>(context->mMemory->unsecurePointer()); - memcpy(memoryPtr + offset, view.base() + offset, size); - context->mBlock.reset(); - context->mReadWriteMapping.reset(); *memory = context->toHidlMemory(); } + if (context->mBlock == nullptr || context->mReadWriteMapping == nullptr) { + ALOGW("extractMemoryFromContext: Cannot extract memory as C2Block is not created/mapped"); + return; + } + if (context->mReadWriteMapping->error() != C2_OK) { + ALOGW("extractMemoryFromContext: failed to map C2Block (%d)", + context->mReadWriteMapping->error()); + return; + } + // We are proceeding to extract memory from C2Block + uint8_t *memoryPtr = static_cast<uint8_t *>(context->mMemory->unsecurePointer()); + memcpy(memoryPtr + offset, context->mReadWriteMapping->base() + offset, size); } static void extractBufferFromContext( |