mirror of
https://github.com/Divested-Mobile/DivestOS-Build.git
synced 2024-08-30 14:11:54 +00:00
50 lines
2.6 KiB
Diff
50 lines
2.6 KiB
Diff
![]() |
From f06d23d824f60e98299d03f21c0715477666936d Mon Sep 17 00:00:00 2001
|
||
|
From: Jeffrey Kardatzke <jkardatzke@google.com>
|
||
|
Date: Tue, 21 Mar 2023 11:38:33 -0700
|
||
|
Subject: [PATCH] Fix incorrect buffer size in NuPlayer
|
||
|
|
||
|
This was discovered from running GTS tests that were failing because the
|
||
|
DRM implementation was receiving media packets of incorrect sizes for
|
||
|
decryption. The problem is that it was copying content using the size of
|
||
|
the underlying MediaBuffer object rather than the range that was set in
|
||
|
it. That was leading to lots of trailing garbage in media packets.
|
||
|
Generally this was fine and decoders would ignore them, but recent
|
||
|
changes in decryption handling for AMD platforms exposed this problem.
|
||
|
|
||
|
The fix is very straightforward in that we should be using the
|
||
|
range_length rather than the size when copying them. This doesn't impact
|
||
|
non-DRM content as those buffer sizes appear to be correct already based
|
||
|
on testing.
|
||
|
|
||
|
Bug: b:268158584
|
||
|
Test: gts.MediaPlayerTest#testLLAMA_H264_BASELINE_240P_800_DOWNLOADED_V1_ASYNC
|
||
|
no longer shows corruption on guybrush and packet sizes now match
|
||
|
up as expected
|
||
|
Change-Id: I14eda495fa76621436b212f2bd3ae9f7093137fe
|
||
|
---
|
||
|
media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp | 6 +++---
|
||
|
1 file changed, 3 insertions(+), 3 deletions(-)
|
||
|
|
||
|
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp
|
||
|
index 52b2041ea8..8da09c434a 100644
|
||
|
--- a/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp
|
||
|
+++ b/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp
|
||
|
@@ -1104,14 +1104,14 @@ bool NuPlayer::Decoder::onInputBufferFetched(const sp<AMessage> &msg) {
|
||
|
static_cast<MediaBufferHolder*>(holder.get())->mediaBuffer() : nullptr;
|
||
|
}
|
||
|
if (mediaBuf != NULL) {
|
||
|
- if (mediaBuf->size() > codecBuffer->capacity()) {
|
||
|
+ if (mediaBuf->range_length() > codecBuffer->capacity()) {
|
||
|
handleError(ERROR_BUFFER_TOO_SMALL);
|
||
|
mDequeuedInputBuffers.push_back(bufferIx);
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
- codecBuffer->setRange(0, mediaBuf->size());
|
||
|
- memcpy(codecBuffer->data(), mediaBuf->data(), mediaBuf->size());
|
||
|
+ codecBuffer->setRange(0, mediaBuf->range_length());
|
||
|
+ memcpy(codecBuffer->data(), mediaBuf->data(), mediaBuf->range_length());
|
||
|
|
||
|
MetaDataBase &meta_data = mediaBuf->meta_data();
|
||
|
cryptInfo = NuPlayerDrm::getSampleCryptoInfo(meta_data);
|