1aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara#include "aidl/android/dvr/parcelable_composer_layer.h"
2aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara
3aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara#include <binder/Parcel.h>
4aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara#include <ui/Fence.h>
5aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara#include <ui/GraphicBuffer.h>
6aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara#include <ui/GraphicBufferMapper.h>
7aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara
8aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoaranamespace android {
9aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoaranamespace dvr {
10aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara
11aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel NicoaraParcelableComposerLayer::ParcelableComposerLayer() {}
12aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara
13aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel NicoaraParcelableComposerLayer::ParcelableComposerLayer(
14aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara    const ComposerView::ComposerLayer& layer) : layer_(layer) {}
15aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara
16aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel NicoaraParcelableComposerLayer::~ParcelableComposerLayer() {}
17aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara
18aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoarastatus_t ParcelableComposerLayer::writeToParcel(Parcel* parcel) const {
19aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  status_t ret = parcel->writeUint64(layer_.id);
20aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  if (ret != OK) return ret;
21aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara
221f42e3a02c4f9a1ba1916a2f0e47082bedb73e41Daniel Nicoara  ret = parcel->write(*layer_.buffer);
23aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  if (ret != OK) return ret;
24aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara
25aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  ret = parcel->writeBool(layer_.fence->isValid());
26aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  if (ret != OK) return ret;
27aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara
28aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  if (layer_.fence->isValid()) {
29aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara    ret = parcel->writeFileDescriptor(layer_.fence->dup(), true);
30aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara    if (ret != OK) return ret;
31aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  }
32aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara
33aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  ret = parcel->writeInt32(layer_.display_frame.left);
34aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  if (ret != OK) return ret;
35aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara
36aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  ret = parcel->writeInt32(layer_.display_frame.top);
37aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  if (ret != OK) return ret;
38aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara
39aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  ret = parcel->writeInt32(layer_.display_frame.right);
40aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  if (ret != OK) return ret;
41aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara
42aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  ret = parcel->writeInt32(layer_.display_frame.bottom);
43aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  if (ret != OK) return ret;
44aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara
45aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  ret = parcel->writeFloat(layer_.crop.left);
46aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  if (ret != OK) return ret;
47aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara
48aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  ret = parcel->writeFloat(layer_.crop.top);
49aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  if (ret != OK) return ret;
50aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara
51aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  ret = parcel->writeFloat(layer_.crop.right);
52aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  if (ret != OK) return ret;
53aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara
54aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  ret = parcel->writeFloat(layer_.crop.bottom);
55aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  if (ret != OK) return ret;
56aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara
57aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  ret = parcel->writeInt32(static_cast<int32_t>(layer_.blend_mode));
58aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  if (ret != OK) return ret;
59aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara
60aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  ret = parcel->writeFloat(layer_.alpha);
61aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  if (ret != OK) return ret;
62aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara
63aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  ret = parcel->writeUint32(layer_.type);
64aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  if (ret != OK) return ret;
65aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara
66aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  ret = parcel->writeUint32(layer_.app_id);
67aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  if (ret != OK) return ret;
68aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara
69730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk  ret = parcel->writeUint32(layer_.z_order);
70730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk  if (ret != OK) return ret;
71730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk
72730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk  ret = parcel->writeInt32(layer_.cursor_x);
73730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk  if (ret != OK) return ret;
74730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk
75730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk  ret = parcel->writeInt32(layer_.cursor_y);
76730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk  if (ret != OK) return ret;
77730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk
78730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk  uint32_t color = layer_.color.r |
79730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk      (static_cast<uint32_t>(layer_.color.g) << 8) |
80730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk      (static_cast<uint32_t>(layer_.color.b) << 16) |
81730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk      (static_cast<uint32_t>(layer_.color.a) << 24);
82730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk  ret = parcel->writeUint32(color);
83730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk  if (ret != OK) return ret;
84730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk
85730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk  ret = parcel->writeInt32(layer_.dataspace);
86730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk  if (ret != OK) return ret;
87730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk
88730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk  ret = parcel->writeInt32(layer_.transform);
89730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk  if (ret != OK) return ret;
90730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk
91730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk  ret = parcel->writeUint32(static_cast<uint32_t>(layer_.visible_regions.size()));
92730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk  if (ret != OK) return ret;
93730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk
94730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk  for (auto& rect: layer_.visible_regions) {
95730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk    ret = parcel->writeInt32(rect.left);
96730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk    ret = parcel->writeInt32(rect.top);
97730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk    ret = parcel->writeInt32(rect.right);
98730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk    ret = parcel->writeInt32(rect.bottom);
99730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk    if (ret != OK) return ret;
100730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk  }
101730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk
102730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk  ret = parcel->writeUint32(static_cast<uint32_t>(layer_.damaged_regions.size()));
103730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk  if (ret != OK) return ret;
104730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk
105730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk  for (auto& rect: layer_.damaged_regions) {
106730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk    ret = parcel->writeInt32(rect.left);
107730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk    ret = parcel->writeInt32(rect.top);
108730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk    ret = parcel->writeInt32(rect.right);
109730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk    ret = parcel->writeInt32(rect.bottom);
110730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk    if (ret != OK) return ret;
111730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk  }
112730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk
113aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  return OK;
114aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara}
115aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara
116aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoarastatus_t ParcelableComposerLayer::readFromParcel(const Parcel* parcel) {
117aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  status_t ret = parcel->readUint64(&layer_.id);
118aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  if (ret != OK) return ret;
119aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara
1201f42e3a02c4f9a1ba1916a2f0e47082bedb73e41Daniel Nicoara  layer_.buffer = new GraphicBuffer();
1211f42e3a02c4f9a1ba1916a2f0e47082bedb73e41Daniel Nicoara  ret = parcel->read(*layer_.buffer);
1221f42e3a02c4f9a1ba1916a2f0e47082bedb73e41Daniel Nicoara  if (ret != OK) {
1231f42e3a02c4f9a1ba1916a2f0e47082bedb73e41Daniel Nicoara    layer_.buffer.clear();
1241f42e3a02c4f9a1ba1916a2f0e47082bedb73e41Daniel Nicoara    return ret;
1251f42e3a02c4f9a1ba1916a2f0e47082bedb73e41Daniel Nicoara  }
126aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara
127aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  bool has_fence = 0;
128aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  ret = parcel->readBool(&has_fence);
129aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  if (ret != OK) return ret;
130aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara
131aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  if (has_fence)
132aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara    layer_.fence = new Fence(dup(parcel->readFileDescriptor()));
133aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  else
134aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara    layer_.fence = new Fence();
135aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara
136aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  ret = parcel->readInt32(&layer_.display_frame.left);
137aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  if (ret != OK) return ret;
138aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara
139aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  ret = parcel->readInt32(&layer_.display_frame.top);
140aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  if (ret != OK) return ret;
141aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara
142aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  ret = parcel->readInt32(&layer_.display_frame.right);
143aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  if (ret != OK) return ret;
144aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara
145aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  ret = parcel->readInt32(&layer_.display_frame.bottom);
146aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  if (ret != OK) return ret;
147aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara
148aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  ret = parcel->readFloat(&layer_.crop.left);
149aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  if (ret != OK) return ret;
150aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara
151aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  ret = parcel->readFloat(&layer_.crop.top);
152aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  if (ret != OK) return ret;
153aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara
154aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  ret = parcel->readFloat(&layer_.crop.right);
155aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  if (ret != OK) return ret;
156aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara
157aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  ret = parcel->readFloat(&layer_.crop.bottom);
158aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  if (ret != OK) return ret;
159aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara
160aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  ret = parcel->readInt32(reinterpret_cast<int32_t*>(&layer_.blend_mode));
161aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  if (ret != OK) return ret;
162aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara
163aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  ret = parcel->readFloat(&layer_.alpha);
164aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  if (ret != OK) return ret;
165aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara
166aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  ret = parcel->readUint32(&layer_.type);
167aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  if (ret != OK) return ret;
168aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara
169aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  ret = parcel->readUint32(&layer_.app_id);
170aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  if (ret != OK) return ret;
171aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara
172730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk  ret = parcel->readUint32(&layer_.z_order);
173730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk  if (ret != OK) return ret;
174730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk
175730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk  ret = parcel->readInt32(&layer_.cursor_x);
176730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk  if (ret != OK) return ret;
177730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk
178730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk  ret = parcel->readInt32(&layer_.cursor_y);
179730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk  if (ret != OK) return ret;
180730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk
181730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk  uint32_t color;
182730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk  ret = parcel->readUint32(&color);
183730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk  if (ret != OK) return ret;
184730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk  layer_.color.r = color & 0xFF;
185730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk  layer_.color.g = (color >> 8) & 0xFF;
186730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk  layer_.color.b = (color >> 16) & 0xFF;
187730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk  layer_.color.a = (color >> 24) & 0xFF;
188730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk
189730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk  ret = parcel->readInt32(&layer_.dataspace);
190730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk  if (ret != OK) return ret;
191730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk
192730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk  ret = parcel->readInt32(&layer_.transform);
193730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk  if (ret != OK) return ret;
194730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk
195730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk  uint32_t size;
196730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk  ret = parcel->readUint32(&size);
197730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk  if (ret != OK) return ret;
198730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk
199730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk  for(size_t i = 0; i < size; i++) {
200730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk    hwc_rect_t rect;
201730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk    ret = parcel->readInt32(&rect.left);
202730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk    if (ret != OK) return ret;
203730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk
204730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk    ret = parcel->readInt32(&rect.top);
205730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk    if (ret != OK) return ret;
206730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk
207730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk    ret = parcel->readInt32(&rect.right);
208730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk    if (ret != OK) return ret;
209730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk
210730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk    ret = parcel->readInt32(&rect.bottom);
211730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk    if (ret != OK) return ret;
212730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk
213730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk    layer_.visible_regions.push_back(rect);
214730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk  }
215730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk
216730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk  ret = parcel->readUint32(&size);
217730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk  if (ret != OK) return ret;
218730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk
219730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk  for(size_t i = 0; i < size; i++) {
220730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk    hwc_rect_t rect;
221730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk    ret = parcel->readInt32(&rect.left);
222730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk    if (ret != OK) return ret;
223730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk
224730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk    ret = parcel->readInt32(&rect.top);
225730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk    if (ret != OK) return ret;
226730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk
227730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk    ret = parcel->readInt32(&rect.right);
228730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk    if (ret != OK) return ret;
229730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk
230730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk    ret = parcel->readInt32(&rect.bottom);
231730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk    if (ret != OK) return ret;
232730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk
233730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk    layer_.damaged_regions.push_back(rect);
234730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk  }
235730c89a8042e277304a90bff180348fcda75d5a7Albert Chaulk
236aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara  return OK;
237aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara}
238aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara
239aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara}  // namespace dvr
240aba4d01add2e961f8b24a6281f3c616f916eb92fDaniel Nicoara}  // namespace android
241