blob: 263b382993c7beaf4c64aa96b3a0ce2edc47e3a8 [file] [log] [blame]
Alex Vakulenkoa8a92782017-01-27 14:41:57 -08001#include "surface_channel.h"
2
3using android::pdx::BorrowedChannelHandle;
4using android::pdx::Message;
5using android::pdx::rpc::DispatchRemoteMethod;
6
7namespace android {
8namespace dvr {
9
Alex Vakulenkof0a7bd02017-03-31 18:06:19 -070010pdx::Status<void> SurfaceChannel::HandleMessage(Message& message) {
Alex Vakulenkoa8a92782017-01-27 14:41:57 -080011 switch (message.GetOp()) {
12 case DisplayRPC::GetMetadataBuffer::Opcode:
13 DispatchRemoteMethod<DisplayRPC::GetMetadataBuffer>(
14 *this, &SurfaceChannel::OnGetMetadataBuffer, message);
15 break;
16 }
17
Alex Vakulenkof0a7bd02017-03-31 18:06:19 -070018 return {};
Alex Vakulenkoa8a92782017-01-27 14:41:57 -080019}
20
21BorrowedChannelHandle SurfaceChannel::OnGetMetadataBuffer(Message& message) {
22 if (EnsureMetadataBuffer()) {
23 return metadata_buffer_->GetChannelHandle().Borrow();
24 } else {
25 REPLY_ERROR_RETURN(message, -ENOMEM, {});
26 }
27}
28
29bool SurfaceChannel::EnsureMetadataBuffer() {
30 if (!metadata_buffer_) {
31 metadata_buffer_ =
32 BufferProducer::CreateUncachedBlob(metadata_size());
33 if (!metadata_buffer_) {
34 ALOGE(
35 "DisplaySurface::EnsureMetadataBuffer: could not allocate metadata "
36 "buffer");
37 return false;
38 }
39 }
40 return true;
41}
42
43} // namespace dvr
44} // namespace android