Home | History | Annotate | Download | only in dvr
      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_buffer.h>
     10 #include <dvr/dvr_buffer_queue.h>
     11 #include <dvr/dvr_display_types.h>
     12 
     13 __BEGIN_DECLS
     14 
     15 typedef struct DvrBuffer DvrBuffer;
     16 typedef struct DvrSurface DvrSurface;
     17 typedef struct DvrWriteBufferQueue DvrWriteBufferQueue;
     18 
     19 // Attribute types. The values are one-hot encoded to support singluar types or
     20 // masks of supported types.
     21 enum {
     22   DVR_SURFACE_ATTRIBUTE_TYPE_NONE = 0,
     23   DVR_SURFACE_ATTRIBUTE_TYPE_INT32 = (1 << 0),
     24   DVR_SURFACE_ATTRIBUTE_TYPE_INT64 = (1 << 1),
     25   DVR_SURFACE_ATTRIBUTE_TYPE_BOOL = (1 << 2),
     26   DVR_SURFACE_ATTRIBUTE_TYPE_FLOAT = (1 << 3),
     27   DVR_SURFACE_ATTRIBUTE_TYPE_FLOAT2 = (1 << 4),
     28   DVR_SURFACE_ATTRIBUTE_TYPE_FLOAT3 = (1 << 5),
     29   DVR_SURFACE_ATTRIBUTE_TYPE_FLOAT4 = (1 << 6),
     30   DVR_SURFACE_ATTRIBUTE_TYPE_FLOAT8 = (1 << 7),
     31   DVR_SURFACE_ATTRIBUTE_TYPE_FLOAT16 = (1 << 8),
     32 };
     33 
     34 typedef uint64_t DvrSurfaceAttributeType;
     35 typedef int32_t DvrSurfaceAttributeKey;
     36 
     37 typedef struct DvrSurfaceAttributeValue {
     38   DvrSurfaceAttributeType type;
     39   union {
     40     int32_t int32_value;
     41     int64_t int64_value;
     42     bool bool_value;
     43     float float_value;
     44     float float2_value[2];
     45     float float3_value[3];
     46     float float4_value[4];
     47     float float8_value[8];
     48     float float16_value[16];
     49   };
     50 } DvrSurfaceAttributeValue;
     51 
     52 typedef struct DvrSurfaceAttribute {
     53   DvrSurfaceAttributeKey key;
     54   DvrSurfaceAttributeValue value;
     55 } DvrSurfaceAttribute;
     56 
     57 // Creates a new display surface with the given attributes.
     58 // @return 0 on success. Otherwise returns a negative error value.
     59 int dvrSurfaceCreate(const DvrSurfaceAttribute* attributes,
     60                      size_t attribute_count, DvrSurface** surface_out);
     61 
     62 // Destroys the display surface.
     63 void dvrSurfaceDestroy(DvrSurface* surface);
     64 
     65 // Gets the DisplayService global id for this surface.
     66 int dvrSurfaceGetId(DvrSurface* surface);
     67 
     68 // Sets attributes on the given display surface.
     69 // @return 0 on success. Otherwise returns a negative error value.
     70 int dvrSurfaceSetAttributes(DvrSurface* surface,
     71                             const DvrSurfaceAttribute* attributes,
     72                             size_t attribute_count);
     73 
     74 // Creates a new write-side buffer queue on the given surface. Direct surfaces
     75 // may only have one queue, the latest call replacing any prior queue. Replaced
     76 // queues are still referenced and should be destryoed using the queue destroy
     77 // API.
     78 // @return 0 on success. Otherwise returns a negative error value.
     79 int dvrSurfaceCreateWriteBufferQueue(DvrSurface* surface, uint32_t width,
     80                                      uint32_t height, uint32_t format,
     81                                      uint32_t layer_count, uint64_t usage,
     82                                      size_t capacity,
     83                                      DvrWriteBufferQueue** queue_out);
     84 
     85 // Get a named buffer from the display service.
     86 // @return 0 on success. Otherwise returns a negative error value.
     87 int dvrGetNamedBuffer(const char* name, DvrBuffer** out_buffer);
     88 
     89 __END_DECLS
     90 
     91 #endif  // ANDROID_DVR_SURFACE_H_
     92