summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarissa Wall <marissaw@google.com>2017-03-02 22:09:55 +0000
committerandroid-build-merger <android-build-merger@google.com>2017-03-02 22:09:55 +0000
commit8fc1c9612cb1707cb5ab3c8e5802d1aba89d2ae0 (patch)
tree186fbfc6162b0ad65eeee56bdba54386304429b8
parent7638643b61d41f03220e7eed55667fc8b6331106 (diff)
parent543fd61fd913af1f3745d76c292f67b0fed212c5 (diff)
downloadflounder-8fc1c9612cb1707cb5ab3c8e5802d1aba89d2ae0.tar.gz
hwc2: set layer source crop
am: 543fd61fd9 Change-Id: I53a5592eaf2f6852cfced8d5ca8c5818644bb5c9
-rw-r--r--hwc2/hwc2.cpp8
-rw-r--r--hwc2/hwc2.h10
-rw-r--r--hwc2/hwc2_buffer.cpp8
-rw-r--r--hwc2/hwc2_dev.cpp7
-rw-r--r--hwc2/hwc2_display.cpp12
-rw-r--r--hwc2/hwc2_layer.cpp5
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);