#ifndef ANDROID_DVR_DISPLAY_MANAGER_H_ #define ANDROID_DVR_DISPLAY_MANAGER_H_ #include #include #include #include #include #include __BEGIN_DECLS typedef struct DvrBuffer DvrBuffer; typedef struct DvrDisplayManager DvrDisplayManager; typedef struct DvrSurfaceState DvrSurfaceState; typedef struct DvrReadBufferQueue DvrReadBufferQueue; typedef uint64_t DvrSurfaceUpdateFlags; // Attempts to connect to the display manager service. // @return 0 on success. Otherwise returns a negative error value. int dvrDisplayManagerCreate(DvrDisplayManager** client_out); // Destroys the display manager client object. void dvrDisplayManagerDestroy(DvrDisplayManager* client); // Returns an fd used to signal when surface updates occur. Note that depending // on the underlying transport, only a subset of the real event bits may be // supported. Use dvrDisplayManagerClientTranslateEpollEventMask to get the real // event flags. // @return the fd on success. Otherwise returns a negative error value. int dvrDisplayManagerGetEventFd(DvrDisplayManager* client); // @param in_events pass in the epoll revents that were initially returned by // poll/epoll. // @param on success, this value will be overwritten with the true poll/epoll // values. // @return 0 on success. Otherwise returns a negative error value. int dvrDisplayManagerTranslateEpollEventMask(DvrDisplayManager* client, int in_events, int* out_events); // Queries the display manager service for the current state of the display // surfaces and stores the results in the given surface state object. // @return 0 on success. Otherwise returns a negative error value. int dvrDisplayManagerGetSurfaceState(DvrDisplayManager* client, DvrSurfaceState* surface_state); // Gets a read buffer queue from the surface |surface_id| named |queue_id|. Each // call returns a different read buffer queue connected to the same write buffer // queue. Callers should cache these instead of requesting new ones when // possible. int dvrDisplayManagerGetReadBufferQueue(DvrDisplayManager* client, int surface_id, int queue_id, DvrReadBufferQueue** queue_out); // Creates a new surface state object. This object may be used to receive the // results of a surface state query. More than one state object may be created // to keep multiple snapshots, if desired. // @return 0 on success. Otherwise returns a negative error value. int dvrSurfaceStateCreate(DvrSurfaceState** surface_state); // Destorys the surface state object. void dvrSurfaceStateDestroy(DvrSurfaceState* surface_state); // Writes the number of surfaces described in the state object into |count_out|. // @return 0 on success. Otherwise returns a negative error value. int dvrSurfaceStateGetSurfaceCount(DvrSurfaceState* surface_state, size_t* count_out); // Returns the update flags for the surface at |surface_index| in the state // object. The flags may be used to determine what changes, if any, occurred to // the surface since the last state update. // @return 0 on success. Otherwise returns a negative error value. int dvrSurfaceStateGetUpdateFlags(DvrSurfaceState* surface_state, size_t surface_index, DvrSurfaceUpdateFlags* flags_out); // Returns the unique identifier of surface at |surface_index| in the state // object. The identifier may be used to distinguish between surfaces. // @return 0 on success. Otherwise returns a negative error value. int dvrSurfaceStateGetSurfaceId(DvrSurfaceState* surface_state, size_t surface_index, int* surface_id_out); // Returns the process id of surface at |surface_index| in the state object. // @return 0 on success. Otherwise returns a negative error value. int dvrSurfaceStateGetProcessId(DvrSurfaceState* surface_state, size_t surface_index, int* process_id_out); // Writes the number of queues in the surface at |surface_index| in the state // object into |count_out|. // @return 0 on success. Otherwise returns a negative error value. int dvrSurfaceStateGetQueueCount(DvrSurfaceState* surface_state, size_t surface_index, size_t* count_out); // Returns up to |max_count| queue ids for the queues belonging to the surface // at |surface_index| in the state object. // @return The number of queue ids written on success. Otherwise returns a // negative error value. ssize_t dvrSurfaceStateGetQueueIds(DvrSurfaceState* surface_state, size_t surface_index, int* queue_ids, size_t max_count); // Writes the z-order of the surface at |surface_index| in surface state object // into |z_order_out|. // @return 0 on success. Otherwise returns a negative error value. int dvrSurfaceStateGetZOrder(DvrSurfaceState* surface_state, size_t surface_index, int* z_order_out); // Writes the visible state of the surface at |surface_index| in the surface // state object into |visible_out|. // @return 0 on success. Otherwise it returns a negative error value. int dvrSurfaceStateGetVisible(DvrSurfaceState* surface_state, size_t surface_index, bool* visible_out); // Writes the number of attributes on the surface at |surface_index| in the // state object into |count_out|. // @return 0 on success. Otherwise it returns a negative error value. int dvrSurfaceStateGetAttributeCount(DvrSurfaceState* surface_state, size_t surface_index, size_t* count_out); // Writes the list of attribute key/value pairs for the surface at // |surface_index| in the surface state object into |attributes|. // @return The number of attributes written on success. Otherwise returns a // negative error value. ssize_t dvrSurfaceStateGetAttributes(DvrSurfaceState* surface_state, size_t surface_index, DvrSurfaceAttribute* attributes, size_t max_count); __END_DECLS #endif // ANDROID_DVR_DISPLAY_MANAGER_H_