summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Treehugger Robot <android-test-infra-autosubmit@system.gserviceaccount.com> 2024-04-16 18:07:13 +0000
committer Gerrit Code Review <noreply-gerritcodereview@google.com> 2024-04-16 18:07:13 +0000
commitd666832c39f1dc17718dc6687eafb221afbe2f4b (patch)
tree33bb80d4ec3fe661774abb48bcb069516aa0c19e
parentbd161c547e83d0bba8f2d8e0d588fb650e338a40 (diff)
parent5fb6f67e1989d122238893dd4cd4232ee03eaf90 (diff)
Merge "Enable reuse of LinearBlock for during secure playback" into main
-rw-r--r--media/jni/android_media_MediaCodec.cpp27
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(