1#include "aidl/android/dvr/parcelable_composer_frame.h"
2
3#include <binder/Parcel.h>
4
5#include "aidl/android/dvr/parcelable_composer_layer.h"
6
7namespace android {
8namespace dvr {
9
10ParcelableComposerFrame::ParcelableComposerFrame() {}
11
12ParcelableComposerFrame::ParcelableComposerFrame(
13    const ComposerView::Frame& frame)
14    : frame_(frame) {}
15
16ParcelableComposerFrame::~ParcelableComposerFrame() {}
17
18status_t ParcelableComposerFrame::writeToParcel(Parcel* parcel) const {
19  status_t ret = parcel->writeUint64(frame_.display_id);
20  if (ret != OK) return ret;
21
22  ret = parcel->writeInt32(frame_.display_width);
23  if (ret != OK) return ret;
24
25  ret = parcel->writeInt32(frame_.display_height);
26  if (ret != OK) return ret;
27
28  ret = parcel->writeBool(frame_.removed);
29  if (ret != OK) return ret;
30
31  ret = parcel->writeUint32(static_cast<uint32_t>(frame_.active_config));
32  if (ret != OK) return ret;
33
34  ret = parcel->writeUint32(static_cast<uint32_t>(frame_.color_mode));
35  if (ret != OK) return ret;
36
37  ret = parcel->writeUint32(static_cast<uint32_t>(frame_.power_mode));
38  if (ret != OK) return ret;
39
40  ret = parcel->writeUint32(static_cast<uint32_t>(frame_.vsync_enabled));
41  if (ret != OK) return ret;
42
43  ret = parcel->writeInt32(frame_.color_transform_hint);
44  if (ret != OK) return ret;
45
46  for(size_t i = 0; i < 16; i++) {
47    ret = parcel->writeFloat(frame_.color_transform[i]);
48    if (ret != OK) return ret;
49  }
50
51  std::vector<ParcelableComposerLayer> layers;
52  for (size_t i = 0; i < frame_.layers.size(); ++i)
53    layers.push_back(ParcelableComposerLayer(frame_.layers[i]));
54
55  ret = parcel->writeParcelableVector(layers);
56
57  return ret;
58}
59
60status_t ParcelableComposerFrame::readFromParcel(const Parcel* parcel) {
61  status_t ret = parcel->readUint64(&frame_.display_id);
62  if (ret != OK) return ret;
63
64  ret = parcel->readInt32(&frame_.display_width);
65  if (ret != OK) return ret;
66
67  ret = parcel->readInt32(&frame_.display_height);
68  if (ret != OK) return ret;
69
70  ret = parcel->readBool(&frame_.removed);
71  if (ret != OK) return ret;
72
73  uint32_t value;
74  ret = parcel->readUint32(&value);
75  if (ret != OK) return ret;
76  frame_.active_config = static_cast<Config>(value);
77
78  ret = parcel->readUint32(&value);
79  if (ret != OK) return ret;
80  frame_.color_mode = static_cast<ColorMode>(value);
81
82  ret = parcel->readUint32(&value);
83  if (ret != OK) return ret;
84  frame_.power_mode = static_cast<IComposerClient::PowerMode>(value);
85
86  ret = parcel->readUint32(&value);
87  if (ret != OK) return ret;
88  frame_.vsync_enabled = static_cast<IComposerClient::Vsync>(value);
89
90  ret = parcel->readInt32(&frame_.color_transform_hint);
91  if (ret != OK) return ret;
92
93  for(size_t i = 0; i < 16; i++) {
94    ret = parcel->readFloat(&frame_.color_transform[i]);
95    if (ret != OK) return ret;
96  }
97
98  std::vector<ParcelableComposerLayer> layers;
99  ret = parcel->readParcelableVector(&layers);
100  if (ret != OK) return ret;
101
102  frame_.layers.clear();
103  for (size_t i = 0; i < layers.size(); ++i)
104    frame_.layers.push_back(layers[i].layer());
105
106  return ret;
107}
108
109}  // namespace dvr
110}  // namespace android
111