12251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka#include "include/dvr/dvr_display_manager.h" 22251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 32251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka#include <dvr/dvr_buffer.h> 42251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka#include <pdx/rpc/variant.h> 52251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka#include <private/dvr/buffer_hub_client.h> 62251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka#include <private/dvr/buffer_hub_queue_client.h> 7bcb03d005a4ccca20a0723f087e90e8b503b4848Hendrik Wagenaar#include <private/dvr/display_client.h> 82251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka#include <private/dvr/display_manager_client.h> 92251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 102251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka#include "dvr_internal.h" 11656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Cai#include "dvr_buffer_queue_internal.h" 122251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 132251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakausing android::dvr::BufferConsumer; 142251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakausing android::dvr::display::DisplayManagerClient; 152251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakausing android::dvr::display::SurfaceAttributes; 162251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakausing android::dvr::display::SurfaceAttribute; 172251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakausing android::dvr::display::SurfaceState; 182251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakausing android::pdx::rpc::EmptyVariant; 192251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 202251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakanamespace { 212251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 222251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka// Extracts type and value from the attribute Variant and writes them into the 232251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka// respective fields of DvrSurfaceAttribute. 242251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakastruct AttributeVisitor { 252251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka DvrSurfaceAttribute* attribute; 262251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 272251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka void operator()(int32_t value) { 282251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka attribute->value.int32_value = value; 292251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka attribute->value.type = DVR_SURFACE_ATTRIBUTE_TYPE_INT32; 302251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka } 312251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka void operator()(int64_t value) { 322251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka attribute->value.int64_value = value; 332251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka attribute->value.type = DVR_SURFACE_ATTRIBUTE_TYPE_INT64; 342251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka } 352251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka void operator()(bool value) { 362251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka attribute->value.bool_value = value; 372251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka attribute->value.type = DVR_SURFACE_ATTRIBUTE_TYPE_BOOL; 382251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka } 392251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka void operator()(float value) { 402251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka attribute->value.float_value = value; 412251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka attribute->value.type = DVR_SURFACE_ATTRIBUTE_TYPE_FLOAT; 422251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka } 432251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka void operator()(const std::array<float, 2>& value) { 442251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka std::copy(value.cbegin(), value.cend(), attribute->value.float2_value); 452251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka attribute->value.type = DVR_SURFACE_ATTRIBUTE_TYPE_FLOAT2; 462251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka } 472251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka void operator()(const std::array<float, 3>& value) { 482251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka std::copy(value.cbegin(), value.cend(), attribute->value.float3_value); 492251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka attribute->value.type = DVR_SURFACE_ATTRIBUTE_TYPE_FLOAT3; 502251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka } 512251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka void operator()(const std::array<float, 4>& value) { 522251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka std::copy(value.cbegin(), value.cend(), attribute->value.float4_value); 532251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka attribute->value.type = DVR_SURFACE_ATTRIBUTE_TYPE_FLOAT4; 542251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka } 552251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka void operator()(const std::array<float, 8>& value) { 562251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka std::copy(value.cbegin(), value.cend(), attribute->value.float8_value); 572251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka attribute->value.type = DVR_SURFACE_ATTRIBUTE_TYPE_FLOAT8; 582251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka } 592251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka void operator()(const std::array<float, 16>& value) { 602251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka std::copy(value.cbegin(), value.cend(), attribute->value.float16_value); 612251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka attribute->value.type = DVR_SURFACE_ATTRIBUTE_TYPE_FLOAT16; 622251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka } 632251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka void operator()(EmptyVariant) { 642251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka attribute->value.type = DVR_SURFACE_ATTRIBUTE_TYPE_NONE; 652251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka } 662251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka}; 672251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 682251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakasize_t ConvertSurfaceAttributes(const SurfaceAttributes& surface_attributes, 692251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka DvrSurfaceAttribute* attributes, 702251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka size_t max_count) { 712251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka size_t count = 0; 722251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka for (const auto& attribute : surface_attributes) { 732251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka if (count >= max_count) 742251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka break; 752251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 762251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka // Copy the key and extract the Variant value using a visitor. 772251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka attributes[count].key = attribute.first; 782251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka attribute.second.Visit(AttributeVisitor{&attributes[count]}); 792251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka count++; 802251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka } 812251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 822251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka return count; 832251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka} 842251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 852251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka} // anonymous namespace 862251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 872251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakaextern "C" { 882251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 892251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakastruct DvrDisplayManager { 902251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka std::unique_ptr<DisplayManagerClient> client; 912251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka}; 922251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 932251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakastruct DvrSurfaceState { 942251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka std::vector<SurfaceState> state; 952251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka}; 962251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 972251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakaint dvrDisplayManagerCreate(DvrDisplayManager** client_out) { 982251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka if (!client_out) 992251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka return -EINVAL; 1002251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 1012251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka auto client = DisplayManagerClient::Create(); 1022251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka if (!client) { 1032251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka ALOGE("dvrDisplayManagerCreate: Failed to create display manager client!"); 1042251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka return -EIO; 1052251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka } 1062251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 1072251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka *client_out = new DvrDisplayManager{std::move(client)}; 1082251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka return 0; 1092251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka} 1102251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 1112251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakavoid dvrDisplayManagerDestroy(DvrDisplayManager* client) { delete client; } 1122251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 1132251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakaint dvrDisplayManagerGetEventFd(DvrDisplayManager* client) { 1142251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka if (!client) 1152251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka return -EINVAL; 1162251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 1172251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka return client->client->event_fd(); 1182251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka} 1192251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 1202251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakaint dvrDisplayManagerTranslateEpollEventMask(DvrDisplayManager* client, 1212251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka int in_events, int* out_events) { 1222251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka if (!client || !out_events) 1232251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka return -EINVAL; 1242251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 1252251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka auto status = client->client->GetEventMask(in_events); 1262251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka if (!status) 1272251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka return -status.error(); 1282251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 1292251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka *out_events = status.get(); 1302251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka return 0; 1312251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka} 1322251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 1332251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakaint dvrDisplayManagerGetSurfaceState(DvrDisplayManager* client, 1342251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka DvrSurfaceState* state) { 1352251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka if (!client || !state) 1362251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka return -EINVAL; 1372251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 1382251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka auto status = client->client->GetSurfaceState(); 1392251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka if (!status) 1402251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka return -status.error(); 1412251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 1422251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka state->state = status.take(); 1432251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka return 0; 1442251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka} 1452251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 1462251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakaint dvrDisplayManagerGetReadBufferQueue(DvrDisplayManager* client, 1472251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka int surface_id, int queue_id, 1482251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka DvrReadBufferQueue** queue_out) { 1492251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka if (!client || !queue_out) 1502251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka return -EINVAL; 1512251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 1522251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka auto status = client->client->GetSurfaceQueue(surface_id, queue_id); 1532251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka if (!status) { 1542251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka ALOGE("dvrDisplayManagerGetReadBufferQueue: Failed to get queue: %s", 1552251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka status.GetErrorMessage().c_str()); 1562251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka return -status.error(); 1572251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka } 1582251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 159656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Cai *queue_out = new DvrReadBufferQueue(status.take()); 1602251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka return 0; 1612251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka} 1622251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 1632251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakaint dvrSurfaceStateCreate(DvrSurfaceState** surface_state_out) { 1642251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka if (!surface_state_out) 1652251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka return -EINVAL; 1662251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 1672251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka *surface_state_out = new DvrSurfaceState{}; 1682251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka return 0; 1692251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka} 1702251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 1712251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakavoid dvrSurfaceStateDestroy(DvrSurfaceState* surface_state) { 1722251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka delete surface_state; 1732251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka} 1742251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 1752251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakaint dvrSurfaceStateGetSurfaceCount(DvrSurfaceState* surface_state, 1762251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka size_t* count_out) { 1772251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka if (!surface_state) 1782251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka return -EINVAL; 1792251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 1802251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka *count_out = surface_state->state.size(); 1812251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka return 0; 1822251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka} 1832251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 1842251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakaint dvrSurfaceStateGetUpdateFlags(DvrSurfaceState* surface_state, 1852251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka size_t surface_index, 1862251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka DvrSurfaceUpdateFlags* flags_out) { 1872251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka if (!surface_state || surface_index >= surface_state->state.size()) 1882251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka return -EINVAL; 1892251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 1902251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka *flags_out = surface_state->state[surface_index].update_flags; 1912251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka return 0; 1922251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka} 1932251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 1942251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakaint dvrSurfaceStateGetSurfaceId(DvrSurfaceState* surface_state, 1952251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka size_t surface_index, int* surface_id_out) { 1962251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka if (!surface_state || surface_index >= surface_state->state.size()) 1972251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka return -EINVAL; 1982251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 1992251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka *surface_id_out = surface_state->state[surface_index].surface_id; 2002251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka return 0; 2012251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka} 2022251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 2032251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakaint dvrSurfaceStateGetProcessId(DvrSurfaceState* surface_state, 2042251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka size_t surface_index, int* process_id_out) { 2052251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka if (!surface_state || surface_index >= surface_state->state.size()) 2062251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka return -EINVAL; 2072251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 2082251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka *process_id_out = surface_state->state[surface_index].process_id; 2092251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka return 0; 2102251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka} 2112251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 2122251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakaint dvrSurfaceStateGetQueueCount(DvrSurfaceState* surface_state, 2132251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka size_t surface_index, size_t* count_out) { 2142251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka if (!surface_state || surface_index >= surface_state->state.size()) 2152251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka return -EINVAL; 2162251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 2172251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka *count_out = surface_state->state[surface_index].queue_ids.size(); 2182251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka return 0; 2192251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka} 2202251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 2212251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakassize_t dvrSurfaceStateGetQueueIds(DvrSurfaceState* surface_state, 2222251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka size_t surface_index, int* queue_ids, 2232251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka size_t max_count) { 2242251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka if (!surface_state || surface_index >= surface_state->state.size()) 2252251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka return -EINVAL; 2262251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 2272251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka size_t i; 2282251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka const auto& state = surface_state->state[surface_index]; 2292251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka for (i = 0; i < std::min(max_count, state.queue_ids.size()); i++) { 2302251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka queue_ids[i] = state.queue_ids[i]; 2312251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka } 2322251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 2332251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka return i; 2342251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka} 2352251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 2362251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakaint dvrSurfaceStateGetZOrder(DvrSurfaceState* surface_state, 2372251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka size_t surface_index, int* z_order_out) { 2382251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka if (!surface_state || surface_index >= surface_state->state.size() || 2392251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka !z_order_out) { 2402251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka return -EINVAL; 2412251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka } 2422251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 2432251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka *z_order_out = surface_state->state[surface_index].GetZOrder(); 2442251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka return 0; 2452251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka} 2462251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 2472251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakaint dvrSurfaceStateGetVisible(DvrSurfaceState* surface_state, 2482251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka size_t surface_index, bool* visible_out) { 2492251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka if (!surface_state || surface_index >= surface_state->state.size() || 2502251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka !visible_out) { 2512251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka return -EINVAL; 2522251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka } 2532251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 2542251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka *visible_out = surface_state->state[surface_index].GetVisible(); 2552251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka return 0; 2562251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka} 2572251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 2582251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakaint dvrSurfaceStateGetAttributeCount(DvrSurfaceState* surface_state, 2592251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka size_t surface_index, size_t* count_out) { 2602251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka if (!surface_state || surface_index >= surface_state->state.size() || 2612251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka !count_out) { 2622251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka return -EINVAL; 2632251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka } 2642251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 2652251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka *count_out = surface_state->state[surface_index].surface_attributes.size(); 2662251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka return 0; 2672251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka} 2682251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 2692251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakassize_t dvrSurfaceStateGetAttributes(DvrSurfaceState* surface_state, 2702251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka size_t surface_index, 2712251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka DvrSurfaceAttribute* attributes, 2722251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka size_t max_count) { 2732251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka if (!surface_state || surface_index >= surface_state->state.size() || 2742251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka !attributes) { 2752251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka return -EINVAL; 2762251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka } 2772251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 2782251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka return ConvertSurfaceAttributes( 2792251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka surface_state->state[surface_index].surface_attributes, attributes, 2802251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka max_count); 2812251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka} 2822251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka 2832251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka} // extern "C" 284