blob: 263b382993c7beaf4c64aa96b3a0ce2edc47e3a8 [file] [log] [blame]
#include "surface_channel.h"
using android::pdx::BorrowedChannelHandle;
using android::pdx::Message;
using android::pdx::rpc::DispatchRemoteMethod;
namespace android {
namespace dvr {
pdx::Status<void> SurfaceChannel::HandleMessage(Message& message) {
switch (message.GetOp()) {
case DisplayRPC::GetMetadataBuffer::Opcode:
DispatchRemoteMethod<DisplayRPC::GetMetadataBuffer>(
*this, &SurfaceChannel::OnGetMetadataBuffer, message);
break;
}
return {};
}
BorrowedChannelHandle SurfaceChannel::OnGetMetadataBuffer(Message& message) {
if (EnsureMetadataBuffer()) {
return metadata_buffer_->GetChannelHandle().Borrow();
} else {
REPLY_ERROR_RETURN(message, -ENOMEM, {});
}
}
bool SurfaceChannel::EnsureMetadataBuffer() {
if (!metadata_buffer_) {
metadata_buffer_ =
BufferProducer::CreateUncachedBlob(metadata_size());
if (!metadata_buffer_) {
ALOGE(
"DisplaySurface::EnsureMetadataBuffer: could not allocate metadata "
"buffer");
return false;
}
}
return true;
}
} // namespace dvr
} // namespace android