Commit 2a804547 authored by Matthew Cary's avatar Matthew Cary Committed by Commit Bot

media/gpu shared memory: Update android/ UnalignedSharedMemory.

Uses the new WritableUnalignedMapping class, which changes the ownership
semantics. See the bug for details on the overall plan.

Bug: 849207
Cq-Include-Trybots: luci.chromium.try:android_optional_gpu_tests_rel;luci.chromium.try:linux_optional_gpu_tests_rel;luci.chromium.try:mac_optional_gpu_tests_rel;luci.chromium.try:win_optional_gpu_tests_rel
Change-Id: Ie8da3246a5c7036322e72e120c4925cebc451f0e
Reviewed-on: https://chromium-review.googlesource.com/1117685Reviewed-by: default avatarFrank Liberato <liberato@chromium.org>
Commit-Queue: Matthew Cary <mattcary@chromium.org>
Cr-Commit-Position: refs/heads/master@{#571427}
parent 8bde95c5
......@@ -247,9 +247,12 @@ static AVDAManager* GetManager() {
AndroidVideoDecodeAccelerator::BitstreamRecord::BitstreamRecord(
const BitstreamBuffer& bitstream_buffer)
: buffer(bitstream_buffer) {
if (buffer.id() != -1)
memory.reset(
new UnalignedSharedMemory(buffer.handle(), buffer.size(), true));
if (buffer.id() != -1) {
memory.reset(new WritableUnalignedMapping(buffer.handle(), buffer.size(),
buffer.offset()));
// The handle is no longer needed and can be closed.
bitstream_buffer.handle().Close();
}
}
AndroidVideoDecodeAccelerator::BitstreamRecord::BitstreamRecord(
......@@ -656,16 +659,15 @@ bool AndroidVideoDecodeAccelerator::QueueInput() {
return true;
}
std::unique_ptr<UnalignedSharedMemory> shm;
std::unique_ptr<WritableUnalignedMapping> shm;
if (pending_input_buf_index_ == -1) {
// When |pending_input_buf_index_| is not -1, the buffer is already dequeued
// from MediaCodec, filled with data and bitstream_buffer.handle() is
// closed.
shm = std::move(pending_bitstream_records_.front().memory);
auto* buffer = &pending_bitstream_records_.front().buffer;
if (!shm->MapAt(buffer->offset(), buffer->size())) {
if (!shm->IsValid()) {
NOTIFY_ERROR(UNREADABLE_INPUT, "UnalignedSharedMemory::Map() failed");
return false;
}
......
......@@ -35,7 +35,6 @@
namespace media {
class AndroidVideoSurfaceChooser;
class UnalignedSharedMemory;
class PromotionHintAggregator;
// A VideoDecodeAccelerator implementation for Android. This class decodes the
......@@ -305,8 +304,8 @@ class MEDIA_GPU_EXPORT AndroidVideoDecodeAccelerator
BitstreamBuffer buffer;
// |memory| is not mapped, and may be null if buffer has no data.
std::unique_ptr<UnalignedSharedMemory> memory;
// |memory| may be null if buffer has no data.
std::unique_ptr<WritableUnalignedMapping> memory;
};
// Encoded bitstream buffers to be passed to media codec, queued until an
......
......@@ -429,11 +429,12 @@ void AndroidVideoEncodeAccelerator::DequeueOutput() {
BitstreamBuffer bitstream_buffer = available_bitstream_buffers_.back();
available_bitstream_buffers_.pop_back();
auto shm = std::make_unique<UnalignedSharedMemory>(
bitstream_buffer.handle(), bitstream_buffer.size(), false);
RETURN_ON_FAILURE(
shm->MapAt(bitstream_buffer.offset(), bitstream_buffer.size()),
"Failed to map SHM", kPlatformFailureError);
auto shm = std::make_unique<WritableUnalignedMapping>(
bitstream_buffer.handle(), bitstream_buffer.size(),
bitstream_buffer.offset());
// The handle is no longer needed and should be closed.
bitstream_buffer.handle().Close();
RETURN_ON_FAILURE(shm->IsValid(), "Failed to map SHM", kPlatformFailureError);
RETURN_ON_FAILURE(
size <= bitstream_buffer.size(),
"Encoded buffer too large: " << size << ">" << bitstream_buffer.size(),
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment