1bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai#ifndef ANDROID_DVR_SURFACE_H_ 2bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai#define ANDROID_DVR_SURFACE_H_ 3bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai 42251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka#include <stdbool.h> 52251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka#include <stddef.h> 62251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka#include <stdint.h> 72251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka#include <sys/cdefs.h> 82251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 936d23803882c64b1006cd3b8a47e00a4193a9b49Okan Arikan#include <dvr/dvr_api.h> 10bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai#include <dvr/dvr_buffer.h> 1174cf084cab653537e89f46b90344b3133a94b3a3Jiwen 'Steve' Cai#include <dvr/dvr_buffer_queue.h> 122251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka#include <dvr/dvr_display_types.h> 13bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai 142251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka__BEGIN_DECLS 15bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai 162251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka// Attribute types. The values are one-hot encoded to support singluar types or 172251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka// masks of supported types. 182251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakaenum { 192251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka DVR_SURFACE_ATTRIBUTE_TYPE_NONE = 0, 202251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka DVR_SURFACE_ATTRIBUTE_TYPE_INT32 = (1 << 0), 212251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka DVR_SURFACE_ATTRIBUTE_TYPE_INT64 = (1 << 1), 222251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka DVR_SURFACE_ATTRIBUTE_TYPE_BOOL = (1 << 2), 232251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka DVR_SURFACE_ATTRIBUTE_TYPE_FLOAT = (1 << 3), 242251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka DVR_SURFACE_ATTRIBUTE_TYPE_FLOAT2 = (1 << 4), 252251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka DVR_SURFACE_ATTRIBUTE_TYPE_FLOAT3 = (1 << 5), 262251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka DVR_SURFACE_ATTRIBUTE_TYPE_FLOAT4 = (1 << 6), 272251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka DVR_SURFACE_ATTRIBUTE_TYPE_FLOAT8 = (1 << 7), 282251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka DVR_SURFACE_ATTRIBUTE_TYPE_FLOAT16 = (1 << 8), 292251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka}; 302251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 312251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef uint64_t DvrSurfaceAttributeType; 322251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef int32_t DvrSurfaceAttributeKey; 332251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 342251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef struct DvrSurfaceAttributeValue { 352251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka DvrSurfaceAttributeType type; 362251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka union { 372251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka int32_t int32_value; 382251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka int64_t int64_value; 392251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka bool bool_value; 402251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka float float_value; 412251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka float float2_value[2]; 422251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka float float3_value[3]; 432251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka float float4_value[4]; 442251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka float float8_value[8]; 452251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka float float16_value[16]; 462251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka }; 472251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka} DvrSurfaceAttributeValue; 482251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 492251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakatypedef struct DvrSurfaceAttribute { 502251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka DvrSurfaceAttributeKey key; 512251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka DvrSurfaceAttributeValue value; 522251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka} DvrSurfaceAttribute; 53bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai 542251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka// Creates a new display surface with the given attributes. 552251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka// @return 0 on success. Otherwise returns a negative error value. 562251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakaint dvrSurfaceCreate(const DvrSurfaceAttribute* attributes, 572251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka size_t attribute_count, DvrSurface** surface_out); 5874cf084cab653537e89f46b90344b3133a94b3a3Jiwen 'Steve' Cai 592251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka// Destroys the display surface. 602251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakavoid dvrSurfaceDestroy(DvrSurface* surface); 612251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 622251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka// Gets the DisplayService global id for this surface. 632251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakaint dvrSurfaceGetId(DvrSurface* surface); 642251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 652251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka// Sets attributes on the given display surface. 662251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka// @return 0 on success. Otherwise returns a negative error value. 672251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakaint dvrSurfaceSetAttributes(DvrSurface* surface, 682251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka const DvrSurfaceAttribute* attributes, 692251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka size_t attribute_count); 702251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 712251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka// Creates a new write-side buffer queue on the given surface. Direct surfaces 722251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka// may only have one queue, the latest call replacing any prior queue. Replaced 732251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka// queues are still referenced and should be destryoed using the queue destroy 742251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka// API. 752251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka// @return 0 on success. Otherwise returns a negative error value. 762251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakaint dvrSurfaceCreateWriteBufferQueue(DvrSurface* surface, uint32_t width, 772251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka uint32_t height, uint32_t format, 78108e84f7e6a9117b66dba000dcf16c6d8c862e16Hendrik Wagenaar uint32_t layer_count, uint64_t usage, 79532e529ec8f87578d024da0c5b71d4b12da21862Jiwen 'Steve' Cai size_t capacity, size_t metadata_size, 802251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka DvrWriteBufferQueue** queue_out); 812251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 8299c2d73588dad4a4d12a17d37354237b8c11a16aCorey Tabaka// Sets up a named buffer for shared memory data transfer between display 8399c2d73588dad4a4d12a17d37354237b8c11a16aCorey Tabaka// clients and the system. Protected API that may only be called with sufficient 8499c2d73588dad4a4d12a17d37354237b8c11a16aCorey Tabaka// privilege. 8599c2d73588dad4a4d12a17d37354237b8c11a16aCorey Tabaka// @return 0 on success. Otherwise returns a negative error value. 8699c2d73588dad4a4d12a17d37354237b8c11a16aCorey Tabakaint dvrSetupGlobalBuffer(DvrGlobalBufferKey key, size_t size, uint64_t usage, 8799c2d73588dad4a4d12a17d37354237b8c11a16aCorey Tabaka DvrBuffer** buffer_out); 8899c2d73588dad4a4d12a17d37354237b8c11a16aCorey Tabaka 8999c2d73588dad4a4d12a17d37354237b8c11a16aCorey Tabaka// Deletes a named buffer. WARNING: This is dangerous because any existing 9099c2d73588dad4a4d12a17d37354237b8c11a16aCorey Tabaka// clients of this buffer will not be notified and will remain attached to 9199c2d73588dad4a4d12a17d37354237b8c11a16aCorey Tabaka// the old buffer. This is useful for tests, but probably not for production 9299c2d73588dad4a4d12a17d37354237b8c11a16aCorey Tabaka// code. 9399c2d73588dad4a4d12a17d37354237b8c11a16aCorey Tabaka// @return 0 on success. Otherwise returns a negative error value. 9499c2d73588dad4a4d12a17d37354237b8c11a16aCorey Tabakaint dvrDeleteGlobalBuffer(DvrGlobalBufferKey key); 9599c2d73588dad4a4d12a17d37354237b8c11a16aCorey Tabaka 9636d23803882c64b1006cd3b8a47e00a4193a9b49Okan Arikan// Get a global buffer from the display service. 972251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka// @return 0 on success. Otherwise returns a negative error value. 9836d23803882c64b1006cd3b8a47e00a4193a9b49Okan Arikanint dvrGetGlobalBuffer(DvrGlobalBufferKey key, DvrBuffer** out_buffer); 9974cf084cab653537e89f46b90344b3133a94b3a3Jiwen 'Steve' Cai 1006c5a92f142b5fa1907ff91a7dce4d09ddcb554c6Stephen Kiazyk// Read the native device display metrics as reported by the hardware composer. 1016c5a92f142b5fa1907ff91a7dce4d09ddcb554c6Stephen Kiazyk// This is useful as otherwise the device metrics are only reported as 1026c5a92f142b5fa1907ff91a7dce4d09ddcb554c6Stephen Kiazyk// relative to the current device orientation. 1036c5a92f142b5fa1907ff91a7dce4d09ddcb554c6Stephen Kiazyk// @param sizeof_metrics the size of the passed in metrics struct. This is used 1046c5a92f142b5fa1907ff91a7dce4d09ddcb554c6Stephen Kiazyk// to ensure we don't break each other during active development. 1056c5a92f142b5fa1907ff91a7dce4d09ddcb554c6Stephen Kiazyk// @param metrics on success holds the retrieved device metrics. 1066c5a92f142b5fa1907ff91a7dce4d09ddcb554c6Stephen Kiazyk// @return 0 on success. Otherwise returns a negative error value (typically 1076c5a92f142b5fa1907ff91a7dce4d09ddcb554c6Stephen Kiazyk// this means the display service is not available). 1086c5a92f142b5fa1907ff91a7dce4d09ddcb554c6Stephen Kiazykint dvrGetNativeDisplayMetrics(size_t metrics_struct_size, 1096c5a92f142b5fa1907ff91a7dce4d09ddcb554c6Stephen Kiazyk DvrNativeDisplayMetrics* metrics); 1106c5a92f142b5fa1907ff91a7dce4d09ddcb554c6Stephen Kiazyk 1112251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka__END_DECLS 112bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai 113bdcee79b0d7e87cb48049907a7ba8201d0288f75Jiwen 'Steve' Cai#endif // ANDROID_DVR_SURFACE_H_ 114