1 #ifndef ANDROID_DVR_DISPLAY_CLIENT_H_ 2 #define ANDROID_DVR_DISPLAY_CLIENT_H_ 3 4 #include <hardware/hwcomposer.h> 5 #include <pdx/client.h> 6 #include <pdx/file_handle.h> 7 #include <private/dvr/buffer_hub_client.h> 8 #include <private/dvr/buffer_hub_queue_client.h> 9 #include <private/dvr/display_protocol.h> 10 11 namespace android { 12 namespace dvr { 13 namespace display { 14 15 class Surface : public pdx::ClientBase<Surface> { 16 public: 17 // Utility named constructor. This can be removed once ClientBase::Create is 18 // refactored to return Status<T> types. CreateSurface(const SurfaceAttributes & attributes)19 static pdx::Status<std::unique_ptr<Surface>> CreateSurface( 20 const SurfaceAttributes& attributes) { 21 int error; 22 pdx::Status<std::unique_ptr<Surface>> status; 23 if (auto surface = Create(attributes, &error)) 24 status.SetValue(std::move(surface)); 25 else 26 status.SetError(error); 27 return status; 28 } 29 surface_id()30 int surface_id() const { return surface_id_; } z_order()31 int z_order() const { return z_order_; } visible()32 bool visible() const { return visible_; } 33 34 pdx::Status<void> SetVisible(bool visible); 35 pdx::Status<void> SetZOrder(int z_order); 36 pdx::Status<void> SetAttributes(const SurfaceAttributes& attributes); 37 38 // Creates an empty queue. 39 pdx::Status<std::unique_ptr<ProducerQueue>> CreateQueue(); 40 41 // Creates a queue and populates it with |capacity| buffers of the specified 42 // parameters. 43 pdx::Status<std::unique_ptr<ProducerQueue>> CreateQueue(uint32_t width, 44 uint32_t height, 45 uint32_t layer_count, 46 uint32_t format, 47 uint64_t usage, 48 size_t capacity); 49 50 private: 51 friend BASE; 52 53 int surface_id_ = -1; 54 int z_order_ = 0; 55 bool visible_ = false; 56 57 // TODO(eieio,avakulenko): Remove error param once pdx::ClientBase::Create() 58 // returns Status<T>. 59 explicit Surface(const SurfaceAttributes& attributes, int* error = nullptr); 60 explicit Surface(pdx::LocalChannelHandle channel_handle, 61 int* error = nullptr); 62 63 Surface(const Surface&) = delete; 64 void operator=(const Surface&) = delete; 65 }; 66 67 class DisplayClient : public pdx::ClientBase<DisplayClient> { 68 public: 69 pdx::Status<Metrics> GetDisplayMetrics(); 70 pdx::Status<std::unique_ptr<IonBuffer>> GetNamedBuffer( 71 const std::string& name); 72 pdx::Status<std::unique_ptr<Surface>> CreateSurface( 73 const SurfaceAttributes& attributes); 74 75 // Temporary query for current VR status. Will be removed later. 76 pdx::Status<bool> IsVrAppRunning(); 77 78 private: 79 friend BASE; 80 81 explicit DisplayClient(int* error = nullptr); 82 83 DisplayClient(const DisplayClient&) = delete; 84 void operator=(const DisplayClient&) = delete; 85 }; 86 87 } // namespace display 88 } // namespace dvr 89 } // namespace android 90 91 #endif // ANDROID_DVR_DISPLAY_CLIENT_H_ 92