1#ifndef ANDROID_DVR_HARDWARE_COMPOSER_CLIENT_H
2#define ANDROID_DVR_HARDWARE_COMPOSER_CLIENT_H
3
4#include <dvr/dvr_hardware_composer_defs.h>
5#include <stdbool.h>
6
7#ifdef __cplusplus
8extern "C" {
9#endif
10
11typedef struct AHardwareBuffer AHardwareBuffer;
12typedef struct DvrHwcClient DvrHwcClient;
13typedef struct DvrHwcFrame DvrHwcFrame;
14
15// Called when a new frame has arrived.
16//
17// @param client_state Pointer to client state passed in |dvrHwcCreateClient()|.
18// @param frame New frame. Owned by the client.
19// @return fence FD for the release of the last frame.
20typedef int(*DvrHwcOnFrameCallback)(void* client_state, DvrHwcFrame* frame);
21
22// @param callback Called when a new frame is available.
23// @param client_state Pointer to client state passed back in the callback.
24DvrHwcClient* dvrHwcClientCreate(DvrHwcOnFrameCallback callback,
25                                 void* client_state);
26
27void dvrHwcClientDestroy(DvrHwcClient* client);
28
29// Called to free the frame information.
30void dvrHwcFrameDestroy(DvrHwcFrame* frame);
31
32DvrHwcDisplay dvrHwcFrameGetDisplayId(DvrHwcFrame* frame);
33
34int32_t dvrHwcFrameGetDisplayWidth(DvrHwcFrame* frame);
35
36int32_t dvrHwcFrameGetDisplayHeight(DvrHwcFrame* frame);
37
38// @return True if the display has been removed. In this case the current frame
39// does not contain any valid layers to display. It is a signal to clean up any
40// display related state.
41bool dvrHwcFrameGetDisplayRemoved(DvrHwcFrame* frame);
42
43// @return Number of layers in the frame.
44size_t dvrHwcFrameGetLayerCount(DvrHwcFrame* frame);
45
46uint32_t dvrHwcFrameGetActiveConfig(DvrHwcFrame* frame);
47uint32_t dvrHwcFrameGetColorMode(DvrHwcFrame* frame);
48void dvrHwcFrameGetColorTransform(DvrHwcFrame* frame, float* out_matrix,
49                                  int32_t* out_hint);
50uint32_t dvrHwcFrameGetPowerMode(DvrHwcFrame* frame);
51uint32_t dvrHwcFrameGetVsyncEnabled(DvrHwcFrame* frame);
52
53DvrHwcLayer dvrHwcFrameGetLayerId(DvrHwcFrame* frame, size_t layer_index);
54
55// Return the graphic buffer associated with the layer at |layer_index| in
56// |frame|.
57//
58// @return Graphic buffer. Caller owns the buffer and is responsible for freeing
59// it. (see AHardwareBuffer_release())
60AHardwareBuffer* dvrHwcFrameGetLayerBuffer(DvrHwcFrame* frame,
61                                           size_t layer_index);
62
63// Returns the fence FD for the layer at index |layer_index| in |frame|.
64//
65// @return Fence FD. Caller owns the FD and is responsible for closing it.
66int dvrHwcFrameGetLayerFence(DvrHwcFrame* frame, size_t layer_index);
67
68DvrHwcRecti dvrHwcFrameGetLayerDisplayFrame(DvrHwcFrame* frame,
69                                            size_t layer_index);
70
71DvrHwcRectf dvrHwcFrameGetLayerCrop(DvrHwcFrame* frame, size_t layer_index);
72
73DvrHwcBlendMode dvrHwcFrameGetLayerBlendMode(DvrHwcFrame* frame,
74                                             size_t layer_index);
75
76float dvrHwcFrameGetLayerAlpha(DvrHwcFrame* frame, size_t layer_index);
77
78uint32_t dvrHwcFrameGetLayerType(DvrHwcFrame* frame, size_t layer_index);
79
80uint32_t dvrHwcFrameGetLayerApplicationId(DvrHwcFrame* frame,
81                                          size_t layer_index);
82
83uint32_t dvrHwcFrameGetLayerZOrder(DvrHwcFrame* frame, size_t layer_index);
84
85void dvrHwcFrameGetLayerCursor(DvrHwcFrame* frame, size_t layer_index,
86                               int32_t* out_x, int32_t* out_y);
87
88uint32_t dvrHwcFrameGetLayerTransform(DvrHwcFrame* frame, size_t layer_index);
89
90uint32_t dvrHwcFrameGetLayerDataspace(DvrHwcFrame* frame, size_t layer_index);
91
92uint32_t dvrHwcFrameGetLayerColor(DvrHwcFrame* frame, size_t layer_index);
93
94uint32_t dvrHwcFrameGetLayerNumVisibleRegions(DvrHwcFrame* frame,
95                                              size_t layer_index);
96DvrHwcRecti dvrHwcFrameGetLayerVisibleRegion(DvrHwcFrame* frame,
97                                             size_t layer_index, size_t index);
98
99uint32_t dvrHwcFrameGetLayerNumDamagedRegions(DvrHwcFrame* frame,
100                                              size_t layer_index);
101DvrHwcRecti dvrHwcFrameGetLayerDamagedRegion(DvrHwcFrame* frame,
102                                             size_t layer_index, size_t index);
103#ifdef __cplusplus
104}  // extern "C"
105#endif
106
107#endif  // ANDROID_DVR_HARDWARE_COMPOSER_CLIENT_H
108