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 
7 namespace android {
8 namespace dvr {
9 
ParcelableComposerFrame()10 ParcelableComposerFrame::ParcelableComposerFrame() {}
11 
ParcelableComposerFrame(const ComposerView::Frame & frame)12 ParcelableComposerFrame::ParcelableComposerFrame(
13     const ComposerView::Frame& frame)
14     : frame_(frame) {}
15 
~ParcelableComposerFrame()16 ParcelableComposerFrame::~ParcelableComposerFrame() {}
17 
writeToParcel(Parcel * parcel) const18 status_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 
readFromParcel(const Parcel * parcel)60 status_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