Loading libs/vr/libdvr/dvr_api.cpp +18 −0 Original line number Diff line number Diff line Loading @@ -109,6 +109,11 @@ DVR_EXPORT int dvrGetApi(void* api, size_t struct_size, int version) { dvr_api->hwc_frame_get_display_width = dvrHwcFrameGetDisplayWidth; dvr_api->hwc_frame_get_display_height = dvrHwcFrameGetDisplayHeight; dvr_api->hwc_frame_get_display_removed = dvrHwcFrameGetDisplayRemoved; dvr_api->hwc_frame_get_active_config = dvrHwcFrameGetActiveConfig; dvr_api->hwc_frame_get_color_mode = dvrHwcFrameGetColorMode; dvr_api->hwc_frame_get_color_transform = dvrHwcFrameGetColorTransform; dvr_api->hwc_frame_get_power_mode = dvrHwcFrameGetPowerMode; dvr_api->hwc_frame_get_vsync_enabled = dvrHwcFrameGetVsyncEnabled; dvr_api->hwc_frame_get_layer_count = dvrHwcFrameGetLayerCount; dvr_api->hwc_frame_get_layer_id = dvrHwcFrameGetLayerId; dvr_api->hwc_frame_get_layer_buffer = dvrHwcFrameGetLayerBuffer; Loading @@ -121,6 +126,19 @@ DVR_EXPORT int dvrGetApi(void* api, size_t struct_size, int version) { dvr_api->hwc_frame_get_layer_type = dvrHwcFrameGetLayerType; dvr_api->hwc_frame_get_layer_application_id = dvrHwcFrameGetLayerApplicationId; dvr_api->hwc_frame_get_layer_z_order = dvrHwcFrameGetLayerZOrder; dvr_api->hwc_frame_get_layer_cursor = dvrHwcFrameGetLayerCursor; dvr_api->hwc_frame_get_layer_transform = dvrHwcFrameGetLayerTransform; dvr_api->hwc_frame_get_layer_dataspace = dvrHwcFrameGetLayerDataspace; dvr_api->hwc_frame_get_layer_color = dvrHwcFrameGetLayerColor; dvr_api->hwc_frame_get_layer_num_visible_regions = dvrHwcFrameGetLayerNumVisibleRegions; dvr_api->hwc_frame_get_layer_visible_region = dvrHwcFrameGetLayerVisibleRegion; dvr_api->hwc_frame_get_layer_num_damaged_regions = dvrHwcFrameGetLayerNumDamagedRegions; dvr_api->hwc_frame_get_layer_damaged_region = dvrHwcFrameGetLayerDamagedRegion; return 0; } Loading libs/vr/libdvr/dvr_hardware_composer_client.cpp +78 −0 Original line number Diff line number Diff line Loading @@ -104,6 +104,29 @@ size_t dvrHwcFrameGetLayerCount(DvrHwcFrame* frame) { return frame->frame.layers.size(); } uint32_t dvrHwcFrameGetActiveConfig(DvrHwcFrame* frame) { return static_cast<uint32_t>(frame->frame.active_config); } uint32_t dvrHwcFrameGetColorMode(DvrHwcFrame* frame) { return static_cast<uint32_t>(frame->frame.color_mode); } void dvrHwcFrameGetColorTransform(DvrHwcFrame* frame, float* out_matrix, int32_t* out_hint) { *out_hint = frame->frame.color_transform_hint; memcpy(out_matrix, frame->frame.color_transform, sizeof(frame->frame.color_transform)); } uint32_t dvrHwcFrameGetPowerMode(DvrHwcFrame* frame) { return static_cast<uint32_t>(frame->frame.power_mode); } uint32_t dvrHwcFrameGetVsyncEnabled(DvrHwcFrame* frame) { return static_cast<uint32_t>(frame->frame.vsync_enabled); } DvrHwcLayer dvrHwcFrameGetLayerId(DvrHwcFrame* frame, size_t layer_index) { return frame->frame.layers[layer_index].id; } Loading Loading @@ -157,3 +180,58 @@ uint32_t dvrHwcFrameGetLayerApplicationId(DvrHwcFrame* frame, size_t layer_index) { return frame->frame.layers[layer_index].app_id; } uint32_t dvrHwcFrameGetLayerZOrder(DvrHwcFrame* frame, size_t layer_index) { return frame->frame.layers[layer_index].z_order; } void dvrHwcFrameGetLayerCursor(DvrHwcFrame* frame, size_t layer_index, int32_t* out_x, int32_t* out_y) { *out_x = frame->frame.layers[layer_index].cursor_x; *out_y = frame->frame.layers[layer_index].cursor_y; } uint32_t dvrHwcFrameGetLayerTransform(DvrHwcFrame* frame, size_t layer_index) { return frame->frame.layers[layer_index].transform; } uint32_t dvrHwcFrameGetLayerDataspace(DvrHwcFrame* frame, size_t layer_index) { return frame->frame.layers[layer_index].dataspace; } uint32_t dvrHwcFrameGetLayerColor(DvrHwcFrame* frame, size_t layer_index) { const auto& color = frame->frame.layers[layer_index].color; return color.r | (static_cast<uint32_t>(color.g) << 8) | (static_cast<uint32_t>(color.b) << 16) | (static_cast<uint32_t>(color.a) << 24); } uint32_t dvrHwcFrameGetLayerNumVisibleRegions(DvrHwcFrame* frame, size_t layer_index) { return frame->frame.layers[layer_index].visible_regions.size(); } DvrHwcRecti dvrHwcFrameGetLayerVisibleRegion(DvrHwcFrame* frame, size_t layer_index, size_t index) { return DvrHwcRecti{ frame->frame.layers[layer_index].visible_regions[index].left, frame->frame.layers[layer_index].visible_regions[index].top, frame->frame.layers[layer_index].visible_regions[index].right, frame->frame.layers[layer_index].visible_regions[index].bottom, }; } uint32_t dvrHwcFrameGetLayerNumDamagedRegions(DvrHwcFrame* frame, size_t layer_index) { return frame->frame.layers[layer_index].damaged_regions.size(); } DvrHwcRecti dvrHwcFrameGetLayerDamagedRegion(DvrHwcFrame* frame, size_t layer_index, size_t index) { return DvrHwcRecti{ frame->frame.layers[layer_index].damaged_regions[index].left, frame->frame.layers[layer_index].damaged_regions[index].top, frame->frame.layers[layer_index].damaged_regions[index].right, frame->frame.layers[layer_index].damaged_regions[index].bottom, }; } libs/vr/libdvr/include/dvr/dvr_api.h +50 −0 Original line number Diff line number Diff line Loading @@ -159,6 +159,13 @@ typedef bool (*DvrHwcFrameGetDisplayRemovedPtr)(DvrHwcFrame* frame); typedef size_t (*DvrHwcFrameGetLayerCountPtr)(DvrHwcFrame* frame); typedef DvrHwcLayer (*DvrHwcFrameGetLayerIdPtr)(DvrHwcFrame* frame, size_t layer_index); typedef uint32_t (*DvrHwcFrameGetActiveConfigPtr)(DvrHwcFrame* frame); typedef uint32_t (*DvrHwcFrameGetColorModePtr)(DvrHwcFrame* frame); typedef void (*DvrHwcFrameGetColorTransformPtr)(DvrHwcFrame* frame, float* out_matrix, int32_t* out_hint); typedef uint32_t (*DvrHwcFrameGetPowerModePtr)(DvrHwcFrame* frame); typedef uint32_t (*DvrHwcFrameGetVsyncEnabledPtr)(DvrHwcFrame* frame); typedef AHardwareBuffer* (*DvrHwcFrameGetLayerBufferPtr)(DvrHwcFrame* frame, size_t layer_index); typedef int (*DvrHwcFrameGetLayerFencePtr)(DvrHwcFrame* frame, Loading @@ -175,6 +182,33 @@ typedef uint32_t (*DvrHwcFrameGetLayerTypePtr)(DvrHwcFrame* frame, size_t layer_index); typedef uint32_t (*DvrHwcFrameGetLayerApplicationIdPtr)(DvrHwcFrame* frame, size_t layer_index); typedef uint32_t (*DvrHwcFrameGetLayerZOrderPtr)(DvrHwcFrame* frame, size_t layer_index); typedef void (*DvrHwcFrameGetLayerCursorPtr)(DvrHwcFrame* frame, size_t layer_index, int32_t* out_x, int32_t* out_y); typedef uint32_t (*DvrHwcFrameGetLayerTransformPtr)(DvrHwcFrame* frame, size_t layer_index); typedef uint32_t (*DvrHwcFrameGetLayerDataspacePtr)(DvrHwcFrame* frame, size_t layer_index); typedef uint32_t (*DvrHwcFrameGetLayerColorPtr)(DvrHwcFrame* frame, size_t layer_index); typedef uint32_t (*DvrHwcFrameGetLayerNumVisibleRegionsPtr)(DvrHwcFrame* frame, size_t layer_index); typedef DvrHwcRecti (*DvrHwcFrameGetLayerVisibleRegionPtr)(DvrHwcFrame* frame, size_t layer_index, size_t index); typedef uint32_t (*DvrHwcFrameGetLayerNumDamagedRegionsPtr)(DvrHwcFrame* frame, size_t layer_index); typedef DvrHwcRecti (*DvrHwcFrameGetLayerDamagedRegionPtr)(DvrHwcFrame* frame, size_t layer_index, size_t index); struct DvrApi_v1 { // Display manager client Loading Loading @@ -261,6 +295,11 @@ struct DvrApi_v1 { DvrHwcFrameGetDisplayWidthPtr hwc_frame_get_display_width; DvrHwcFrameGetDisplayHeightPtr hwc_frame_get_display_height; DvrHwcFrameGetDisplayRemovedPtr hwc_frame_get_display_removed; DvrHwcFrameGetActiveConfigPtr hwc_frame_get_active_config; DvrHwcFrameGetColorModePtr hwc_frame_get_color_mode; DvrHwcFrameGetColorTransformPtr hwc_frame_get_color_transform; DvrHwcFrameGetPowerModePtr hwc_frame_get_power_mode; DvrHwcFrameGetVsyncEnabledPtr hwc_frame_get_vsync_enabled; DvrHwcFrameGetLayerCountPtr hwc_frame_get_layer_count; DvrHwcFrameGetLayerIdPtr hwc_frame_get_layer_id; DvrHwcFrameGetLayerBufferPtr hwc_frame_get_layer_buffer; Loading @@ -271,6 +310,17 @@ struct DvrApi_v1 { DvrHwcFrameGetLayerAlphaPtr hwc_frame_get_layer_alpha; DvrHwcFrameGetLayerTypePtr hwc_frame_get_layer_type; DvrHwcFrameGetLayerApplicationIdPtr hwc_frame_get_layer_application_id; DvrHwcFrameGetLayerZOrderPtr hwc_frame_get_layer_z_order; DvrHwcFrameGetLayerCursorPtr hwc_frame_get_layer_cursor; DvrHwcFrameGetLayerTransformPtr hwc_frame_get_layer_transform; DvrHwcFrameGetLayerDataspacePtr hwc_frame_get_layer_dataspace; DvrHwcFrameGetLayerColorPtr hwc_frame_get_layer_color; DvrHwcFrameGetLayerNumVisibleRegionsPtr hwc_frame_get_layer_num_visible_regions; DvrHwcFrameGetLayerVisibleRegionPtr hwc_frame_get_layer_visible_region; DvrHwcFrameGetLayerNumDamagedRegionsPtr hwc_frame_get_layer_num_damaged_regions; DvrHwcFrameGetLayerDamagedRegionPtr hwc_frame_get_layer_damaged_region; }; int dvrGetApi(void* api, size_t struct_size, int version); Loading libs/vr/libdvr/include/dvr/dvr_hardware_composer_client.h +27 −0 Original line number Diff line number Diff line Loading @@ -43,6 +43,13 @@ bool dvrHwcFrameGetDisplayRemoved(DvrHwcFrame* frame); // @return Number of layers in the frame. size_t dvrHwcFrameGetLayerCount(DvrHwcFrame* frame); uint32_t dvrHwcFrameGetActiveConfig(DvrHwcFrame* frame); uint32_t dvrHwcFrameGetColorMode(DvrHwcFrame* frame); void dvrHwcFrameGetColorTransform(DvrHwcFrame* frame, float* out_matrix, int32_t* out_hint); uint32_t dvrHwcFrameGetPowerMode(DvrHwcFrame* frame); uint32_t dvrHwcFrameGetVsyncEnabled(DvrHwcFrame* frame); DvrHwcLayer dvrHwcFrameGetLayerId(DvrHwcFrame* frame, size_t layer_index); // Return the graphic buffer associated with the layer at |layer_index| in Loading Loading @@ -73,6 +80,26 @@ uint32_t dvrHwcFrameGetLayerType(DvrHwcFrame* frame, size_t layer_index); uint32_t dvrHwcFrameGetLayerApplicationId(DvrHwcFrame* frame, size_t layer_index); uint32_t dvrHwcFrameGetLayerZOrder(DvrHwcFrame* frame, size_t layer_index); void dvrHwcFrameGetLayerCursor(DvrHwcFrame* frame, size_t layer_index, int32_t* out_x, int32_t* out_y); uint32_t dvrHwcFrameGetLayerTransform(DvrHwcFrame* frame, size_t layer_index); uint32_t dvrHwcFrameGetLayerDataspace(DvrHwcFrame* frame, size_t layer_index); uint32_t dvrHwcFrameGetLayerColor(DvrHwcFrame* frame, size_t layer_index); uint32_t dvrHwcFrameGetLayerNumVisibleRegions(DvrHwcFrame* frame, size_t layer_index); DvrHwcRecti dvrHwcFrameGetLayerVisibleRegion(DvrHwcFrame* frame, size_t layer_index, size_t index); uint32_t dvrHwcFrameGetLayerNumDamagedRegions(DvrHwcFrame* frame, size_t layer_index); DvrHwcRecti dvrHwcFrameGetLayerDamagedRegion(DvrHwcFrame* frame, size_t layer_index, size_t index); #ifdef __cplusplus } // extern "C" #endif Loading services/vr/hardware_composer/aidl/android/dvr/parcelable_composer_frame.cpp +45 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,26 @@ status_t ParcelableComposerFrame::writeToParcel(Parcel* parcel) const { ret = parcel->writeBool(frame_.removed); if (ret != OK) return ret; ret = parcel->writeUint32(static_cast<uint32_t>(frame_.active_config)); if (ret != OK) return ret; ret = parcel->writeUint32(static_cast<uint32_t>(frame_.color_mode)); if (ret != OK) return ret; ret = parcel->writeUint32(static_cast<uint32_t>(frame_.power_mode)); if (ret != OK) return ret; ret = parcel->writeUint32(static_cast<uint32_t>(frame_.vsync_enabled)); if (ret != OK) return ret; ret = parcel->writeInt32(frame_.color_transform_hint); if (ret != OK) return ret; for(size_t i = 0; i < 16; i++) { ret = parcel->writeFloat(frame_.color_transform[i]); if (ret != OK) return ret; } std::vector<ParcelableComposerLayer> layers; for (size_t i = 0; i < frame_.layers.size(); ++i) layers.push_back(ParcelableComposerLayer(frame_.layers[i])); Loading @@ -50,6 +70,31 @@ status_t ParcelableComposerFrame::readFromParcel(const Parcel* parcel) { ret = parcel->readBool(&frame_.removed); if (ret != OK) return ret; uint32_t value; ret = parcel->readUint32(&value); if (ret != OK) return ret; frame_.active_config = static_cast<Config>(value); ret = parcel->readUint32(&value); if (ret != OK) return ret; frame_.color_mode = static_cast<ColorMode>(value); ret = parcel->readUint32(&value); if (ret != OK) return ret; frame_.power_mode = static_cast<IComposerClient::PowerMode>(value); ret = parcel->readUint32(&value); if (ret != OK) return ret; frame_.vsync_enabled = static_cast<IComposerClient::Vsync>(value); ret = parcel->readInt32(&frame_.color_transform_hint); if (ret != OK) return ret; for(size_t i = 0; i < 16; i++) { ret = parcel->readFloat(&frame_.color_transform[i]); if (ret != OK) return ret; } std::vector<ParcelableComposerLayer> layers; ret = parcel->readParcelableVector(&layers); if (ret != OK) return ret; Loading Loading
libs/vr/libdvr/dvr_api.cpp +18 −0 Original line number Diff line number Diff line Loading @@ -109,6 +109,11 @@ DVR_EXPORT int dvrGetApi(void* api, size_t struct_size, int version) { dvr_api->hwc_frame_get_display_width = dvrHwcFrameGetDisplayWidth; dvr_api->hwc_frame_get_display_height = dvrHwcFrameGetDisplayHeight; dvr_api->hwc_frame_get_display_removed = dvrHwcFrameGetDisplayRemoved; dvr_api->hwc_frame_get_active_config = dvrHwcFrameGetActiveConfig; dvr_api->hwc_frame_get_color_mode = dvrHwcFrameGetColorMode; dvr_api->hwc_frame_get_color_transform = dvrHwcFrameGetColorTransform; dvr_api->hwc_frame_get_power_mode = dvrHwcFrameGetPowerMode; dvr_api->hwc_frame_get_vsync_enabled = dvrHwcFrameGetVsyncEnabled; dvr_api->hwc_frame_get_layer_count = dvrHwcFrameGetLayerCount; dvr_api->hwc_frame_get_layer_id = dvrHwcFrameGetLayerId; dvr_api->hwc_frame_get_layer_buffer = dvrHwcFrameGetLayerBuffer; Loading @@ -121,6 +126,19 @@ DVR_EXPORT int dvrGetApi(void* api, size_t struct_size, int version) { dvr_api->hwc_frame_get_layer_type = dvrHwcFrameGetLayerType; dvr_api->hwc_frame_get_layer_application_id = dvrHwcFrameGetLayerApplicationId; dvr_api->hwc_frame_get_layer_z_order = dvrHwcFrameGetLayerZOrder; dvr_api->hwc_frame_get_layer_cursor = dvrHwcFrameGetLayerCursor; dvr_api->hwc_frame_get_layer_transform = dvrHwcFrameGetLayerTransform; dvr_api->hwc_frame_get_layer_dataspace = dvrHwcFrameGetLayerDataspace; dvr_api->hwc_frame_get_layer_color = dvrHwcFrameGetLayerColor; dvr_api->hwc_frame_get_layer_num_visible_regions = dvrHwcFrameGetLayerNumVisibleRegions; dvr_api->hwc_frame_get_layer_visible_region = dvrHwcFrameGetLayerVisibleRegion; dvr_api->hwc_frame_get_layer_num_damaged_regions = dvrHwcFrameGetLayerNumDamagedRegions; dvr_api->hwc_frame_get_layer_damaged_region = dvrHwcFrameGetLayerDamagedRegion; return 0; } Loading
libs/vr/libdvr/dvr_hardware_composer_client.cpp +78 −0 Original line number Diff line number Diff line Loading @@ -104,6 +104,29 @@ size_t dvrHwcFrameGetLayerCount(DvrHwcFrame* frame) { return frame->frame.layers.size(); } uint32_t dvrHwcFrameGetActiveConfig(DvrHwcFrame* frame) { return static_cast<uint32_t>(frame->frame.active_config); } uint32_t dvrHwcFrameGetColorMode(DvrHwcFrame* frame) { return static_cast<uint32_t>(frame->frame.color_mode); } void dvrHwcFrameGetColorTransform(DvrHwcFrame* frame, float* out_matrix, int32_t* out_hint) { *out_hint = frame->frame.color_transform_hint; memcpy(out_matrix, frame->frame.color_transform, sizeof(frame->frame.color_transform)); } uint32_t dvrHwcFrameGetPowerMode(DvrHwcFrame* frame) { return static_cast<uint32_t>(frame->frame.power_mode); } uint32_t dvrHwcFrameGetVsyncEnabled(DvrHwcFrame* frame) { return static_cast<uint32_t>(frame->frame.vsync_enabled); } DvrHwcLayer dvrHwcFrameGetLayerId(DvrHwcFrame* frame, size_t layer_index) { return frame->frame.layers[layer_index].id; } Loading Loading @@ -157,3 +180,58 @@ uint32_t dvrHwcFrameGetLayerApplicationId(DvrHwcFrame* frame, size_t layer_index) { return frame->frame.layers[layer_index].app_id; } uint32_t dvrHwcFrameGetLayerZOrder(DvrHwcFrame* frame, size_t layer_index) { return frame->frame.layers[layer_index].z_order; } void dvrHwcFrameGetLayerCursor(DvrHwcFrame* frame, size_t layer_index, int32_t* out_x, int32_t* out_y) { *out_x = frame->frame.layers[layer_index].cursor_x; *out_y = frame->frame.layers[layer_index].cursor_y; } uint32_t dvrHwcFrameGetLayerTransform(DvrHwcFrame* frame, size_t layer_index) { return frame->frame.layers[layer_index].transform; } uint32_t dvrHwcFrameGetLayerDataspace(DvrHwcFrame* frame, size_t layer_index) { return frame->frame.layers[layer_index].dataspace; } uint32_t dvrHwcFrameGetLayerColor(DvrHwcFrame* frame, size_t layer_index) { const auto& color = frame->frame.layers[layer_index].color; return color.r | (static_cast<uint32_t>(color.g) << 8) | (static_cast<uint32_t>(color.b) << 16) | (static_cast<uint32_t>(color.a) << 24); } uint32_t dvrHwcFrameGetLayerNumVisibleRegions(DvrHwcFrame* frame, size_t layer_index) { return frame->frame.layers[layer_index].visible_regions.size(); } DvrHwcRecti dvrHwcFrameGetLayerVisibleRegion(DvrHwcFrame* frame, size_t layer_index, size_t index) { return DvrHwcRecti{ frame->frame.layers[layer_index].visible_regions[index].left, frame->frame.layers[layer_index].visible_regions[index].top, frame->frame.layers[layer_index].visible_regions[index].right, frame->frame.layers[layer_index].visible_regions[index].bottom, }; } uint32_t dvrHwcFrameGetLayerNumDamagedRegions(DvrHwcFrame* frame, size_t layer_index) { return frame->frame.layers[layer_index].damaged_regions.size(); } DvrHwcRecti dvrHwcFrameGetLayerDamagedRegion(DvrHwcFrame* frame, size_t layer_index, size_t index) { return DvrHwcRecti{ frame->frame.layers[layer_index].damaged_regions[index].left, frame->frame.layers[layer_index].damaged_regions[index].top, frame->frame.layers[layer_index].damaged_regions[index].right, frame->frame.layers[layer_index].damaged_regions[index].bottom, }; }
libs/vr/libdvr/include/dvr/dvr_api.h +50 −0 Original line number Diff line number Diff line Loading @@ -159,6 +159,13 @@ typedef bool (*DvrHwcFrameGetDisplayRemovedPtr)(DvrHwcFrame* frame); typedef size_t (*DvrHwcFrameGetLayerCountPtr)(DvrHwcFrame* frame); typedef DvrHwcLayer (*DvrHwcFrameGetLayerIdPtr)(DvrHwcFrame* frame, size_t layer_index); typedef uint32_t (*DvrHwcFrameGetActiveConfigPtr)(DvrHwcFrame* frame); typedef uint32_t (*DvrHwcFrameGetColorModePtr)(DvrHwcFrame* frame); typedef void (*DvrHwcFrameGetColorTransformPtr)(DvrHwcFrame* frame, float* out_matrix, int32_t* out_hint); typedef uint32_t (*DvrHwcFrameGetPowerModePtr)(DvrHwcFrame* frame); typedef uint32_t (*DvrHwcFrameGetVsyncEnabledPtr)(DvrHwcFrame* frame); typedef AHardwareBuffer* (*DvrHwcFrameGetLayerBufferPtr)(DvrHwcFrame* frame, size_t layer_index); typedef int (*DvrHwcFrameGetLayerFencePtr)(DvrHwcFrame* frame, Loading @@ -175,6 +182,33 @@ typedef uint32_t (*DvrHwcFrameGetLayerTypePtr)(DvrHwcFrame* frame, size_t layer_index); typedef uint32_t (*DvrHwcFrameGetLayerApplicationIdPtr)(DvrHwcFrame* frame, size_t layer_index); typedef uint32_t (*DvrHwcFrameGetLayerZOrderPtr)(DvrHwcFrame* frame, size_t layer_index); typedef void (*DvrHwcFrameGetLayerCursorPtr)(DvrHwcFrame* frame, size_t layer_index, int32_t* out_x, int32_t* out_y); typedef uint32_t (*DvrHwcFrameGetLayerTransformPtr)(DvrHwcFrame* frame, size_t layer_index); typedef uint32_t (*DvrHwcFrameGetLayerDataspacePtr)(DvrHwcFrame* frame, size_t layer_index); typedef uint32_t (*DvrHwcFrameGetLayerColorPtr)(DvrHwcFrame* frame, size_t layer_index); typedef uint32_t (*DvrHwcFrameGetLayerNumVisibleRegionsPtr)(DvrHwcFrame* frame, size_t layer_index); typedef DvrHwcRecti (*DvrHwcFrameGetLayerVisibleRegionPtr)(DvrHwcFrame* frame, size_t layer_index, size_t index); typedef uint32_t (*DvrHwcFrameGetLayerNumDamagedRegionsPtr)(DvrHwcFrame* frame, size_t layer_index); typedef DvrHwcRecti (*DvrHwcFrameGetLayerDamagedRegionPtr)(DvrHwcFrame* frame, size_t layer_index, size_t index); struct DvrApi_v1 { // Display manager client Loading Loading @@ -261,6 +295,11 @@ struct DvrApi_v1 { DvrHwcFrameGetDisplayWidthPtr hwc_frame_get_display_width; DvrHwcFrameGetDisplayHeightPtr hwc_frame_get_display_height; DvrHwcFrameGetDisplayRemovedPtr hwc_frame_get_display_removed; DvrHwcFrameGetActiveConfigPtr hwc_frame_get_active_config; DvrHwcFrameGetColorModePtr hwc_frame_get_color_mode; DvrHwcFrameGetColorTransformPtr hwc_frame_get_color_transform; DvrHwcFrameGetPowerModePtr hwc_frame_get_power_mode; DvrHwcFrameGetVsyncEnabledPtr hwc_frame_get_vsync_enabled; DvrHwcFrameGetLayerCountPtr hwc_frame_get_layer_count; DvrHwcFrameGetLayerIdPtr hwc_frame_get_layer_id; DvrHwcFrameGetLayerBufferPtr hwc_frame_get_layer_buffer; Loading @@ -271,6 +310,17 @@ struct DvrApi_v1 { DvrHwcFrameGetLayerAlphaPtr hwc_frame_get_layer_alpha; DvrHwcFrameGetLayerTypePtr hwc_frame_get_layer_type; DvrHwcFrameGetLayerApplicationIdPtr hwc_frame_get_layer_application_id; DvrHwcFrameGetLayerZOrderPtr hwc_frame_get_layer_z_order; DvrHwcFrameGetLayerCursorPtr hwc_frame_get_layer_cursor; DvrHwcFrameGetLayerTransformPtr hwc_frame_get_layer_transform; DvrHwcFrameGetLayerDataspacePtr hwc_frame_get_layer_dataspace; DvrHwcFrameGetLayerColorPtr hwc_frame_get_layer_color; DvrHwcFrameGetLayerNumVisibleRegionsPtr hwc_frame_get_layer_num_visible_regions; DvrHwcFrameGetLayerVisibleRegionPtr hwc_frame_get_layer_visible_region; DvrHwcFrameGetLayerNumDamagedRegionsPtr hwc_frame_get_layer_num_damaged_regions; DvrHwcFrameGetLayerDamagedRegionPtr hwc_frame_get_layer_damaged_region; }; int dvrGetApi(void* api, size_t struct_size, int version); Loading
libs/vr/libdvr/include/dvr/dvr_hardware_composer_client.h +27 −0 Original line number Diff line number Diff line Loading @@ -43,6 +43,13 @@ bool dvrHwcFrameGetDisplayRemoved(DvrHwcFrame* frame); // @return Number of layers in the frame. size_t dvrHwcFrameGetLayerCount(DvrHwcFrame* frame); uint32_t dvrHwcFrameGetActiveConfig(DvrHwcFrame* frame); uint32_t dvrHwcFrameGetColorMode(DvrHwcFrame* frame); void dvrHwcFrameGetColorTransform(DvrHwcFrame* frame, float* out_matrix, int32_t* out_hint); uint32_t dvrHwcFrameGetPowerMode(DvrHwcFrame* frame); uint32_t dvrHwcFrameGetVsyncEnabled(DvrHwcFrame* frame); DvrHwcLayer dvrHwcFrameGetLayerId(DvrHwcFrame* frame, size_t layer_index); // Return the graphic buffer associated with the layer at |layer_index| in Loading Loading @@ -73,6 +80,26 @@ uint32_t dvrHwcFrameGetLayerType(DvrHwcFrame* frame, size_t layer_index); uint32_t dvrHwcFrameGetLayerApplicationId(DvrHwcFrame* frame, size_t layer_index); uint32_t dvrHwcFrameGetLayerZOrder(DvrHwcFrame* frame, size_t layer_index); void dvrHwcFrameGetLayerCursor(DvrHwcFrame* frame, size_t layer_index, int32_t* out_x, int32_t* out_y); uint32_t dvrHwcFrameGetLayerTransform(DvrHwcFrame* frame, size_t layer_index); uint32_t dvrHwcFrameGetLayerDataspace(DvrHwcFrame* frame, size_t layer_index); uint32_t dvrHwcFrameGetLayerColor(DvrHwcFrame* frame, size_t layer_index); uint32_t dvrHwcFrameGetLayerNumVisibleRegions(DvrHwcFrame* frame, size_t layer_index); DvrHwcRecti dvrHwcFrameGetLayerVisibleRegion(DvrHwcFrame* frame, size_t layer_index, size_t index); uint32_t dvrHwcFrameGetLayerNumDamagedRegions(DvrHwcFrame* frame, size_t layer_index); DvrHwcRecti dvrHwcFrameGetLayerDamagedRegion(DvrHwcFrame* frame, size_t layer_index, size_t index); #ifdef __cplusplus } // extern "C" #endif Loading
services/vr/hardware_composer/aidl/android/dvr/parcelable_composer_frame.cpp +45 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,26 @@ status_t ParcelableComposerFrame::writeToParcel(Parcel* parcel) const { ret = parcel->writeBool(frame_.removed); if (ret != OK) return ret; ret = parcel->writeUint32(static_cast<uint32_t>(frame_.active_config)); if (ret != OK) return ret; ret = parcel->writeUint32(static_cast<uint32_t>(frame_.color_mode)); if (ret != OK) return ret; ret = parcel->writeUint32(static_cast<uint32_t>(frame_.power_mode)); if (ret != OK) return ret; ret = parcel->writeUint32(static_cast<uint32_t>(frame_.vsync_enabled)); if (ret != OK) return ret; ret = parcel->writeInt32(frame_.color_transform_hint); if (ret != OK) return ret; for(size_t i = 0; i < 16; i++) { ret = parcel->writeFloat(frame_.color_transform[i]); if (ret != OK) return ret; } std::vector<ParcelableComposerLayer> layers; for (size_t i = 0; i < frame_.layers.size(); ++i) layers.push_back(ParcelableComposerLayer(frame_.layers[i])); Loading @@ -50,6 +70,31 @@ status_t ParcelableComposerFrame::readFromParcel(const Parcel* parcel) { ret = parcel->readBool(&frame_.removed); if (ret != OK) return ret; uint32_t value; ret = parcel->readUint32(&value); if (ret != OK) return ret; frame_.active_config = static_cast<Config>(value); ret = parcel->readUint32(&value); if (ret != OK) return ret; frame_.color_mode = static_cast<ColorMode>(value); ret = parcel->readUint32(&value); if (ret != OK) return ret; frame_.power_mode = static_cast<IComposerClient::PowerMode>(value); ret = parcel->readUint32(&value); if (ret != OK) return ret; frame_.vsync_enabled = static_cast<IComposerClient::Vsync>(value); ret = parcel->readInt32(&frame_.color_transform_hint); if (ret != OK) return ret; for(size_t i = 0; i < 16; i++) { ret = parcel->readFloat(&frame_.color_transform[i]); if (ret != OK) return ret; } std::vector<ParcelableComposerLayer> layers; ret = parcel->readParcelableVector(&layers); if (ret != OK) return ret; Loading