Loading libs/vr/libdisplay/display_manager_client.cpp +14 −0 Original line number Diff line number Diff line Loading @@ -58,6 +58,20 @@ pdx::Status<std::unique_ptr<IonBuffer>> DisplayManagerClient::SetupNamedBuffer( return {std::move(ion_buffer)}; } pdx::Status<std::string> DisplayManagerClient::GetConfigurationData( ConfigFileType config_type) { auto status = InvokeRemoteMethod<DisplayManagerProtocol::GetConfigurationData>( config_type); if (!status && status.error() != ENOENT) { ALOGE( "DisplayManagerClient::GetConfigurationData: Unable to get " "configuration data. Error: %s", status.GetErrorMessage().c_str()); } return status; } pdx::Status<std::unique_ptr<ConsumerQueue>> DisplayManagerClient::GetSurfaceQueue(int surface_id, int queue_id) { auto status = InvokeRemoteMethod<DisplayManagerProtocol::GetSurfaceQueue>( Loading libs/vr/libdisplay/include/private/dvr/display_manager_client.h +1 −0 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ class DisplayManagerClient : public pdx::ClientBase<DisplayManagerClient> { pdx::Status<std::unique_ptr<ConsumerQueue>> GetSurfaceQueue(int surface_id, int queue_id); pdx::Status<std::string> GetConfigurationData(ConfigFileType config_type); using Client::event_fd; pdx::Status<int> GetEventMask(int events) { Loading libs/vr/libdisplay/include/private/dvr/display_protocol.h +10 −0 Original line number Diff line number Diff line Loading @@ -8,6 +8,7 @@ #include <dvr/dvr_display_types.h> #include <pdx/rpc/buffer_wrapper.h> #include <pdx/rpc/remote_method.h> #include <pdx/rpc/serializable.h> #include <pdx/rpc/variant.h> Loading Loading @@ -217,6 +218,12 @@ struct DisplayProtocol { void(const SurfaceAttributes& attributes)); }; enum class ConfigFileType : uint32_t { kLensMetrics, kDeviceMetrics, kDeviceConfiguration }; struct DisplayManagerProtocol { // Service path. static constexpr char kClientPath[] = "system/vr/display/manager"; Loading @@ -226,6 +233,7 @@ struct DisplayManagerProtocol { kOpGetSurfaceState = 0, kOpGetSurfaceQueue, kOpSetupNamedBuffer, kOpGetConfigurationData, }; // Aliases. Loading @@ -240,6 +248,8 @@ struct DisplayManagerProtocol { PDX_REMOTE_METHOD(SetupNamedBuffer, kOpSetupNamedBuffer, LocalNativeBufferHandle(const std::string& name, size_t size, uint64_t usage)); PDX_REMOTE_METHOD(GetConfigurationData, kOpGetConfigurationData, std::string(ConfigFileType config_type)); }; struct VSyncSchedInfo { Loading libs/vr/libdvr/dvr_display_manager.cpp +25 −0 Original line number Diff line number Diff line Loading @@ -11,6 +11,7 @@ using android::AHardwareBuffer_convertToGrallocUsageBits; using android::dvr::BufferConsumer; using android::dvr::display::ConfigFileType; using android::dvr::display::DisplayManagerClient; using android::dvr::display::SurfaceAttributes; using android::dvr::display::SurfaceAttribute; Loading Loading @@ -131,6 +132,30 @@ int dvrDisplayManagerSetupNamedBuffer(DvrDisplayManager* client, return 0; } int dvrConfigurationDataGet(DvrDisplayManager* client, int config_type, uint8_t** data, size_t* data_size) { if (!client || !data || !data_size) { return -EINVAL; } ConfigFileType config_file_type = static_cast<ConfigFileType>(config_type); auto config_data_status = client->client->GetConfigurationData(config_file_type); if (!config_data_status) { return -config_data_status.error(); } *data_size = config_data_status.get().size(); *data = new uint8_t[*data_size]; std::copy_n(config_data_status.get().begin(), *data_size, *data); return 0; } void dvrConfigurationDataDestroy(DvrDisplayManager*, uint8_t* data) { delete[] data; } int dvrDisplayManagerGetEventFd(DvrDisplayManager* client) { if (!client) return -EINVAL; Loading libs/vr/libdvr/include/dvr/dvr_api.h +5 −0 Original line number Diff line number Diff line Loading @@ -54,6 +54,11 @@ typedef int (*DvrDisplayManagerGetSurfaceStatePtr)( typedef int (*DvrDisplayManagerGetReadBufferQueuePtr)( DvrDisplayManager* client, int surface_id, int queue_id, DvrReadBufferQueue** queue_out); typedef int (*DvrConfigurationDataGetPtr)(DvrDisplayManager* client, int config_type, uint8_t** data, size_t* data_size); typedef void (*DvrConfigurationDataDestroyPtr)(DvrDisplayManager* client, uint8_t* data); typedef int (*DvrSurfaceStateCreatePtr)(DvrSurfaceState** surface_state); typedef void (*DvrSurfaceStateDestroyPtr)(DvrSurfaceState* surface_state); typedef int (*DvrSurfaceStateGetSurfaceCountPtr)(DvrSurfaceState* surface_state, Loading Loading
libs/vr/libdisplay/display_manager_client.cpp +14 −0 Original line number Diff line number Diff line Loading @@ -58,6 +58,20 @@ pdx::Status<std::unique_ptr<IonBuffer>> DisplayManagerClient::SetupNamedBuffer( return {std::move(ion_buffer)}; } pdx::Status<std::string> DisplayManagerClient::GetConfigurationData( ConfigFileType config_type) { auto status = InvokeRemoteMethod<DisplayManagerProtocol::GetConfigurationData>( config_type); if (!status && status.error() != ENOENT) { ALOGE( "DisplayManagerClient::GetConfigurationData: Unable to get " "configuration data. Error: %s", status.GetErrorMessage().c_str()); } return status; } pdx::Status<std::unique_ptr<ConsumerQueue>> DisplayManagerClient::GetSurfaceQueue(int surface_id, int queue_id) { auto status = InvokeRemoteMethod<DisplayManagerProtocol::GetSurfaceQueue>( Loading
libs/vr/libdisplay/include/private/dvr/display_manager_client.h +1 −0 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ class DisplayManagerClient : public pdx::ClientBase<DisplayManagerClient> { pdx::Status<std::unique_ptr<ConsumerQueue>> GetSurfaceQueue(int surface_id, int queue_id); pdx::Status<std::string> GetConfigurationData(ConfigFileType config_type); using Client::event_fd; pdx::Status<int> GetEventMask(int events) { Loading
libs/vr/libdisplay/include/private/dvr/display_protocol.h +10 −0 Original line number Diff line number Diff line Loading @@ -8,6 +8,7 @@ #include <dvr/dvr_display_types.h> #include <pdx/rpc/buffer_wrapper.h> #include <pdx/rpc/remote_method.h> #include <pdx/rpc/serializable.h> #include <pdx/rpc/variant.h> Loading Loading @@ -217,6 +218,12 @@ struct DisplayProtocol { void(const SurfaceAttributes& attributes)); }; enum class ConfigFileType : uint32_t { kLensMetrics, kDeviceMetrics, kDeviceConfiguration }; struct DisplayManagerProtocol { // Service path. static constexpr char kClientPath[] = "system/vr/display/manager"; Loading @@ -226,6 +233,7 @@ struct DisplayManagerProtocol { kOpGetSurfaceState = 0, kOpGetSurfaceQueue, kOpSetupNamedBuffer, kOpGetConfigurationData, }; // Aliases. Loading @@ -240,6 +248,8 @@ struct DisplayManagerProtocol { PDX_REMOTE_METHOD(SetupNamedBuffer, kOpSetupNamedBuffer, LocalNativeBufferHandle(const std::string& name, size_t size, uint64_t usage)); PDX_REMOTE_METHOD(GetConfigurationData, kOpGetConfigurationData, std::string(ConfigFileType config_type)); }; struct VSyncSchedInfo { Loading
libs/vr/libdvr/dvr_display_manager.cpp +25 −0 Original line number Diff line number Diff line Loading @@ -11,6 +11,7 @@ using android::AHardwareBuffer_convertToGrallocUsageBits; using android::dvr::BufferConsumer; using android::dvr::display::ConfigFileType; using android::dvr::display::DisplayManagerClient; using android::dvr::display::SurfaceAttributes; using android::dvr::display::SurfaceAttribute; Loading Loading @@ -131,6 +132,30 @@ int dvrDisplayManagerSetupNamedBuffer(DvrDisplayManager* client, return 0; } int dvrConfigurationDataGet(DvrDisplayManager* client, int config_type, uint8_t** data, size_t* data_size) { if (!client || !data || !data_size) { return -EINVAL; } ConfigFileType config_file_type = static_cast<ConfigFileType>(config_type); auto config_data_status = client->client->GetConfigurationData(config_file_type); if (!config_data_status) { return -config_data_status.error(); } *data_size = config_data_status.get().size(); *data = new uint8_t[*data_size]; std::copy_n(config_data_status.get().begin(), *data_size, *data); return 0; } void dvrConfigurationDataDestroy(DvrDisplayManager*, uint8_t* data) { delete[] data; } int dvrDisplayManagerGetEventFd(DvrDisplayManager* client) { if (!client) return -EINVAL; Loading
libs/vr/libdvr/include/dvr/dvr_api.h +5 −0 Original line number Diff line number Diff line Loading @@ -54,6 +54,11 @@ typedef int (*DvrDisplayManagerGetSurfaceStatePtr)( typedef int (*DvrDisplayManagerGetReadBufferQueuePtr)( DvrDisplayManager* client, int surface_id, int queue_id, DvrReadBufferQueue** queue_out); typedef int (*DvrConfigurationDataGetPtr)(DvrDisplayManager* client, int config_type, uint8_t** data, size_t* data_size); typedef void (*DvrConfigurationDataDestroyPtr)(DvrDisplayManager* client, uint8_t* data); typedef int (*DvrSurfaceStateCreatePtr)(DvrSurfaceState** surface_state); typedef void (*DvrSurfaceStateDestroyPtr)(DvrSurfaceState* surface_state); typedef int (*DvrSurfaceStateGetSurfaceCountPtr)(DvrSurfaceState* surface_state, Loading