1 #ifndef ANDROID_DVR_SURFACE_H_ 2 #define ANDROID_DVR_SURFACE_H_ 3 4 #include <stdbool.h> 5 #include <stddef.h> 6 #include <stdint.h> 7 #include <sys/cdefs.h> 8 9 #include <dvr/dvr_api.h> 10 #include <dvr/dvr_buffer.h> 11 #include <dvr/dvr_buffer_queue.h> 12 #include <dvr/dvr_display_types.h> 13 14 __BEGIN_DECLS 15 16 // Attribute types. The values are one-hot encoded to support singluar types or 17 // masks of supported types. 18 enum { 19 DVR_SURFACE_ATTRIBUTE_TYPE_NONE = 0, 20 DVR_SURFACE_ATTRIBUTE_TYPE_INT32 = (1 << 0), 21 DVR_SURFACE_ATTRIBUTE_TYPE_INT64 = (1 << 1), 22 DVR_SURFACE_ATTRIBUTE_TYPE_BOOL = (1 << 2), 23 DVR_SURFACE_ATTRIBUTE_TYPE_FLOAT = (1 << 3), 24 DVR_SURFACE_ATTRIBUTE_TYPE_FLOAT2 = (1 << 4), 25 DVR_SURFACE_ATTRIBUTE_TYPE_FLOAT3 = (1 << 5), 26 DVR_SURFACE_ATTRIBUTE_TYPE_FLOAT4 = (1 << 6), 27 DVR_SURFACE_ATTRIBUTE_TYPE_FLOAT8 = (1 << 7), 28 DVR_SURFACE_ATTRIBUTE_TYPE_FLOAT16 = (1 << 8), 29 }; 30 31 typedef uint64_t DvrSurfaceAttributeType; 32 typedef int32_t DvrSurfaceAttributeKey; 33 34 typedef struct DvrSurfaceAttributeValue { 35 DvrSurfaceAttributeType type; 36 union { 37 int32_t int32_value; 38 int64_t int64_value; 39 bool bool_value; 40 float float_value; 41 float float2_value[2]; 42 float float3_value[3]; 43 float float4_value[4]; 44 float float8_value[8]; 45 float float16_value[16]; 46 }; 47 } DvrSurfaceAttributeValue; 48 49 typedef struct DvrSurfaceAttribute { 50 DvrSurfaceAttributeKey key; 51 DvrSurfaceAttributeValue value; 52 } DvrSurfaceAttribute; 53 54 // Creates a new display surface with the given attributes. 55 // @return 0 on success. Otherwise returns a negative error value. 56 int dvrSurfaceCreate(const DvrSurfaceAttribute* attributes, 57 size_t attribute_count, DvrSurface** surface_out); 58 59 // Destroys the display surface. 60 void dvrSurfaceDestroy(DvrSurface* surface); 61 62 // Gets the DisplayService global id for this surface. 63 int dvrSurfaceGetId(DvrSurface* surface); 64 65 // Sets attributes on the given display surface. 66 // @return 0 on success. Otherwise returns a negative error value. 67 int dvrSurfaceSetAttributes(DvrSurface* surface, 68 const DvrSurfaceAttribute* attributes, 69 size_t attribute_count); 70 71 // Creates a new write-side buffer queue on the given surface. Direct surfaces 72 // may only have one queue, the latest call replacing any prior queue. Replaced 73 // queues are still referenced and should be destryoed using the queue destroy 74 // API. 75 // @return 0 on success. Otherwise returns a negative error value. 76 int dvrSurfaceCreateWriteBufferQueue(DvrSurface* surface, uint32_t width, 77 uint32_t height, uint32_t format, 78 uint32_t layer_count, uint64_t usage, 79 size_t capacity, size_t metadata_size, 80 DvrWriteBufferQueue** queue_out); 81 82 // Sets up a named buffer for shared memory data transfer between display 83 // clients and the system. Protected API that may only be called with sufficient 84 // privilege. 85 // @return 0 on success. Otherwise returns a negative error value. 86 int dvrSetupGlobalBuffer(DvrGlobalBufferKey key, size_t size, uint64_t usage, 87 DvrBuffer** buffer_out); 88 89 // Deletes a named buffer. WARNING: This is dangerous because any existing 90 // clients of this buffer will not be notified and will remain attached to 91 // the old buffer. This is useful for tests, but probably not for production 92 // code. 93 // @return 0 on success. Otherwise returns a negative error value. 94 int dvrDeleteGlobalBuffer(DvrGlobalBufferKey key); 95 96 // Get a global buffer from the display service. 97 // @return 0 on success. Otherwise returns a negative error value. 98 int dvrGetGlobalBuffer(DvrGlobalBufferKey key, DvrBuffer** out_buffer); 99 100 // Read the native device display metrics as reported by the hardware composer. 101 // This is useful as otherwise the device metrics are only reported as 102 // relative to the current device orientation. 103 // @param sizeof_metrics the size of the passed in metrics struct. This is used 104 // to ensure we don't break each other during active development. 105 // @param metrics on success holds the retrieved device metrics. 106 // @return 0 on success. Otherwise returns a negative error value (typically 107 // this means the display service is not available). 108 int dvrGetNativeDisplayMetrics(size_t metrics_struct_size, 109 DvrNativeDisplayMetrics* metrics); 110 111 __END_DECLS 112 113 #endif // ANDROID_DVR_SURFACE_H_ 114