diff options
author | Marissa Wall <marissaw@google.com> | 2017-03-02 22:09:55 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2017-03-02 22:09:55 +0000 |
commit | 8fc1c9612cb1707cb5ab3c8e5802d1aba89d2ae0 (patch) | |
tree | 186fbfc6162b0ad65eeee56bdba54386304429b8 | |
parent | 7638643b61d41f03220e7eed55667fc8b6331106 (diff) | |
parent | 543fd61fd913af1f3745d76c292f67b0fed212c5 (diff) | |
download | flounder-8fc1c9612cb1707cb5ab3c8e5802d1aba89d2ae0.tar.gz |
hwc2: set layer source crop
am: 543fd61fd9
Change-Id: I53a5592eaf2f6852cfced8d5ca8c5818644bb5c9
-rw-r--r-- | hwc2/hwc2.cpp | 8 | ||||
-rw-r--r-- | hwc2/hwc2.h | 10 | ||||
-rw-r--r-- | hwc2/hwc2_buffer.cpp | 8 | ||||
-rw-r--r-- | hwc2/hwc2_dev.cpp | 7 | ||||
-rw-r--r-- | hwc2/hwc2_display.cpp | 12 | ||||
-rw-r--r-- | hwc2/hwc2_layer.cpp | 5 |
6 files changed, 46 insertions, 4 deletions
diff --git a/hwc2/hwc2.cpp b/hwc2/hwc2.cpp index 0fb705c..ff1969e 100644 --- a/hwc2/hwc2.cpp +++ b/hwc2/hwc2.cpp @@ -308,11 +308,11 @@ hwc2_error_t set_layer_plane_alpha(hwc2_device_t *device, return dev->set_layer_plane_alpha(display, layer, alpha); } -hwc2_error_t set_layer_source_crop(hwc2_device_t* /*device*/, - hwc2_display_t /*display*/, hwc2_layer_t /*layer*/, - hwc_frect_t /*crop*/) +hwc2_error_t set_layer_source_crop(hwc2_device_t *device, + hwc2_display_t display, hwc2_layer_t layer, hwc_frect_t crop) { - return HWC2_ERROR_NONE; + hwc2_dev *dev = reinterpret_cast<hwc2_context *>(device)->hwc2_dev; + return dev->set_layer_source_crop(display, layer, crop); } hwc2_error_t set_layer_transform(hwc2_device_t *device, hwc2_display_t display, diff --git a/hwc2/hwc2.h b/hwc2/hwc2.h index fd8ce44..4b6bf16 100644 --- a/hwc2/hwc2.h +++ b/hwc2/hwc2.h @@ -34,6 +34,7 @@ public: /* Set properties */ hwc2_error_t set_dataspace(android_dataspace_t dataspace); hwc2_error_t set_display_frame(const hwc_rect_t &display_frame); + hwc2_error_t set_source_crop(const hwc_frect_t &source_crop); hwc2_error_t set_z_order(uint32_t z_order); hwc2_error_t set_blend_mode(hwc2_blend_mode_t blend_mode); hwc2_error_t set_plane_alpha(float plane_alpha); @@ -46,6 +47,10 @@ private: /* The portion of the display covered by the buffer */ hwc_rect_t display_frame; + + /* The portion of the source buffer which will fill the display frame */ + hwc_frect_t source_crop; + /* The height of a given buffer. A buffer with a greater Z value occludes * a buffer with a lesser Z value */ uint32_t z_order; @@ -122,6 +127,7 @@ public: hwc2_error_t set_comp_type(hwc2_composition_t comp_type); hwc2_error_t set_dataspace(android_dataspace_t dataspace); hwc2_error_t set_display_frame(const hwc_rect_t &display_frame); + hwc2_error_t set_source_crop(const hwc_frect_t &source_crop); hwc2_error_t set_z_order(uint32_t z_order); hwc2_error_t set_blend_mode(hwc2_blend_mode_t blend_mode); hwc2_error_t set_plane_alpha(float plane_alpha); @@ -186,6 +192,8 @@ public: android_dataspace_t dataspace); hwc2_error_t set_layer_display_frame(hwc2_layer_t lyr_id, const hwc_rect_t &display_frame); + hwc2_error_t set_layer_source_crop(hwc2_layer_t lyr_id, + const hwc_frect_t &source_crop); hwc2_error_t set_layer_z_order(hwc2_layer_t lyr_id, uint32_t z_order); hwc2_error_t set_layer_blend_mode(hwc2_layer_t lyr_id, hwc2_blend_mode_t blend_mode); @@ -273,6 +281,8 @@ public: android_dataspace_t dataspace); hwc2_error_t set_layer_display_frame(hwc2_display_t dpy_id, hwc2_layer_t lyr_id, const hwc_rect_t &display_frame); + hwc2_error_t set_layer_source_crop(hwc2_display_t dpy_id, + hwc2_layer_t lyr_id, const hwc_frect_t &source_crop); hwc2_error_t set_layer_z_order(hwc2_display_t dpy_id, hwc2_layer_t lyr_id, uint32_t z_order); hwc2_error_t set_layer_blend_mode(hwc2_display_t dpy_id, diff --git a/hwc2/hwc2_buffer.cpp b/hwc2/hwc2_buffer.cpp index 323b990..3c79d7a 100644 --- a/hwc2/hwc2_buffer.cpp +++ b/hwc2/hwc2_buffer.cpp @@ -21,6 +21,7 @@ hwc2_buffer::hwc2_buffer() : dataspace(), display_frame(), + source_crop(), z_order(0), blend_mode(HWC2_BLEND_MODE_NONE), plane_alpha(1.0), @@ -40,6 +41,13 @@ hwc2_error_t hwc2_buffer::set_display_frame(const hwc_rect_t &display_frame) return HWC2_ERROR_NONE; } +hwc2_error_t hwc2_buffer::set_source_crop(const hwc_frect_t &source_crop) +{ + this->source_crop = source_crop; + + return HWC2_ERROR_NONE; +} + hwc2_error_t hwc2_buffer::set_z_order(uint32_t z_order) { this->z_order = z_order; diff --git a/hwc2/hwc2_dev.cpp b/hwc2/hwc2_dev.cpp index e5bfa6d..959ffe7 100644 --- a/hwc2/hwc2_dev.cpp +++ b/hwc2/hwc2_dev.cpp @@ -200,6 +200,13 @@ hwc2_error_t hwc2_dev::set_layer_display_frame(hwc2_display_t dpy_id, display_frame); } +hwc2_error_t hwc2_dev::set_layer_source_crop(hwc2_display_t dpy_id, + hwc2_layer_t lyr_id, const hwc_frect_t &source_crop) +{ + return displays.find(dpy_id)->second.set_layer_source_crop(lyr_id, + source_crop); +} + hwc2_error_t hwc2_dev::set_layer_z_order(hwc2_display_t dpy_id, hwc2_layer_t lyr_id, uint32_t z_order) { diff --git a/hwc2/hwc2_display.cpp b/hwc2/hwc2_display.cpp index 172fb5e..6d99b8f 100644 --- a/hwc2/hwc2_display.cpp +++ b/hwc2/hwc2_display.cpp @@ -300,6 +300,18 @@ hwc2_error_t hwc2_display::set_layer_display_frame(hwc2_layer_t lyr_id, return it->second.set_display_frame(display_frame); } +hwc2_error_t hwc2_display::set_layer_source_crop(hwc2_layer_t lyr_id, + const hwc_frect_t &source_crop) +{ + auto it = layers.find(lyr_id); + if (it == layers.end()) { + ALOGE("dpy %" PRIu64 ": lyr %" PRIu64 ": bad layer handle", id, lyr_id); + return HWC2_ERROR_BAD_LAYER; + } + + return it->second.set_source_crop(source_crop); +} + hwc2_error_t hwc2_display::set_layer_z_order(hwc2_layer_t lyr_id, uint32_t z_order) { auto it = layers.find(lyr_id); diff --git a/hwc2/hwc2_layer.cpp b/hwc2/hwc2_layer.cpp index 699a2c0..c8f31be 100644 --- a/hwc2/hwc2_layer.cpp +++ b/hwc2/hwc2_layer.cpp @@ -61,6 +61,11 @@ hwc2_error_t hwc2_layer::set_display_frame(const hwc_rect_t &display_frame) return buffer.set_display_frame(display_frame); } +hwc2_error_t hwc2_layer::set_source_crop(const hwc_frect_t &source_crop) +{ + return buffer.set_source_crop(source_crop); +} + hwc2_error_t hwc2_layer::set_z_order(uint32_t z_order) { return buffer.set_z_order(z_order); |