blob: 8aa220b98952e48c6d21e07345b30d0caf651f70 [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
10int SurfaceChannel::HandleMessage(Message& message) {
11 switch (message.GetOp()) {
12 case DisplayRPC::GetMetadataBuffer::Opcode:
13 DispatchRemoteMethod<DisplayRPC::GetMetadataBuffer>(
14 *this, &SurfaceChannel::OnGetMetadataBuffer, message);
15 break;
16 }
17
18 return 0;
19}
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