Merge "display: Fix dependency compile error"
diff --git a/gralloc/QtiGralloc.cpp b/gralloc/QtiGralloc.cpp
index 912d360..e999063 100644
--- a/gralloc/QtiGralloc.cpp
+++ b/gralloc/QtiGralloc.cpp
@@ -55,20 +55,43 @@
return Error::NONE;
}
+// decode the raw graphics metadata from bytestream and store it in 'data' member of
+// GraphicsMetadata struct during mapper->set call, 'size' member is unused.
Error decodeGraphicsMetadata(hidl_vec<uint8_t> &in, GraphicsMetadata *out) {
if (!in.size() || !out) {
return Error::BAD_VALUE;
}
- memcpy(out, in.data(), sizeof(GraphicsMetadata));
+ memcpy(&(out->data), in.data(), GRAPHICS_METADATA_SIZE_IN_BYTES);
return Error::NONE;
}
+// encode only 'data' member of GraphicsMetadata struct for retrieval of
+// graphics metadata during mapper->get call
Error encodeGraphicsMetadata(GraphicsMetadata &in, hidl_vec<uint8_t> *out) {
if (!out) {
return Error::BAD_VALUE;
}
- out->resize(sizeof(GraphicsMetadata));
- memcpy(out->data(), &in, sizeof(GraphicsMetadata));
+ out->resize(GRAPHICS_METADATA_SIZE_IN_BYTES);
+ memcpy(out->data(), &(in.data), GRAPHICS_METADATA_SIZE_IN_BYTES);
+ return Error::NONE;
+}
+
+// decode the raw graphics metadata from bytestream before presenting it to caller
+Error decodeGraphicsMetadataRaw(hidl_vec<uint8_t> &in, void *out) {
+ if (!in.size() || !out) {
+ return Error::BAD_VALUE;
+ }
+ memcpy(out, in.data(), GRAPHICS_METADATA_SIZE_IN_BYTES);
+ return Error::NONE;
+}
+
+// encode the raw graphics metadata in bytestream before calling mapper->set
+Error encodeGraphicsMetadataRaw(void *in, hidl_vec<uint8_t> *out) {
+ if (!in || !out) {
+ return Error::BAD_VALUE;
+ }
+ out->resize(GRAPHICS_METADATA_SIZE_IN_BYTES);
+ memcpy(out->data(), in, GRAPHICS_METADATA_SIZE_IN_BYTES);
return Error::NONE;
}
@@ -211,7 +234,7 @@
err = decodeColorMetadata(bytestream, (ColorMetaData *)param);
break;
case QTI_GRAPHICS_METADATA:
- err = decodeGraphicsMetadata(bytestream, (GraphicsMetadata *)param);
+ err = decodeGraphicsMetadataRaw(bytestream, param);
break;
case QTI_UBWC_CR_STATS_INFO:
err = decodeUBWCStats(bytestream, (UBWCStats *)param);
@@ -289,7 +312,7 @@
err = encodeColorMetadata(*(ColorMetaData *)param, &bytestream);
break;
case QTI_GRAPHICS_METADATA:
- err = encodeGraphicsMetadata(*(GraphicsMetadata *)param, &bytestream);
+ err = encodeGraphicsMetadataRaw(param, &bytestream);
break;
case QTI_UBWC_CR_STATS_INFO:
err = encodeUBWCStats((UBWCStats *)param, &bytestream);
diff --git a/gralloc/QtiGralloc.h b/gralloc/QtiGralloc.h
index 08053cc..f0392f9 100644
--- a/gralloc/QtiGralloc.h
+++ b/gralloc/QtiGralloc.h
@@ -119,6 +119,8 @@
Error encodeColorMetadata(ColorMetaData &in, hidl_vec<uint8_t> *out);
Error decodeGraphicsMetadata(hidl_vec<uint8_t> &in, GraphicsMetadata *out);
Error encodeGraphicsMetadata(GraphicsMetadata &in, hidl_vec<uint8_t> *out);
+Error decodeGraphicsMetadataRaw(hidl_vec<uint8_t> &in, void *out);
+Error encodeGraphicsMetadataRaw(void *in, hidl_vec<uint8_t> *out);
Error decodeUBWCStats(hidl_vec<uint8_t> &in, UBWCStats *out);
Error encodeUBWCStats(UBWCStats *in, hidl_vec<uint8_t> *out);
Error decodeCVPMetadata(hidl_vec<uint8_t> &in, CVPMetadata *out);
diff --git a/gralloc/QtiGrallocDefs.h b/gralloc/QtiGrallocDefs.h
index c61187e..93272dd 100644
--- a/gralloc/QtiGrallocDefs.h
+++ b/gralloc/QtiGrallocDefs.h
@@ -106,7 +106,7 @@
#define HAL_PIXEL_FORMAT_ABGR_2101010 0x11B
#define HAL_PIXEL_FORMAT_BGRX_1010102 0x11C
#define HAL_PIXEL_FORMAT_XBGR_2101010 0x11D
-#define HAL_PIXEL_FORMAT_YCbCr_420_P010 0x11F
+#define HAL_PIXEL_FORMAT_YCbCr_420_P010 0x36 // HAL_PIXEL_FORMAT_YCBCR_P010
#define HAL_PIXEL_FORMAT_YCbCr_420_P010_UBWC 0x124
#define HAL_PIXEL_FORMAT_YCbCr_420_P010_VENUS 0x7FA30C0A
diff --git a/gralloc/QtiGrallocMetadata.h b/gralloc/QtiGrallocMetadata.h
index 00b0503..b8e779b 100644
--- a/gralloc/QtiGrallocMetadata.h
+++ b/gralloc/QtiGrallocMetadata.h
@@ -64,9 +64,10 @@
// GRAPHICS_METADATA
#define GRAPHICS_METADATA_SIZE 4096
+#define GRAPHICS_METADATA_SIZE_IN_BYTES (GRAPHICS_METADATA_SIZE * sizeof(uint32_t))
typedef struct GraphicsMetadata {
- uint32_t size;
- uint32_t data[GRAPHICS_METADATA_SIZE];
+ uint32_t size; //unused in Gralloc4, in Gralloc3 it was never returned on Get()
+ uint32_t data[GRAPHICS_METADATA_SIZE]; //Clients must set only raw data with Gralloc4
} GraphicsMetadata;
// UBWC_CR_STATS_INFO
diff --git a/include/composer_extn_intf.h b/include/composer_extn_intf.h
index a6a4fba..9bc3f0d 100644
--- a/include/composer_extn_intf.h
+++ b/include/composer_extn_intf.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2019-2020, The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -32,6 +32,7 @@
#include <dlfcn.h>
#include "frame_scheduler_intf.h"
+#include "display_extn_intf.h"
#define COMPOSER_EXTN_REV_MAJOR (1)
#define COMPOSER_EXTN_REV_MINOR (0)
@@ -44,6 +45,8 @@
public:
virtual int CreateFrameScheduler(FrameSchedulerIntf **intf) = 0;
virtual void DestroyFrameScheduler(FrameSchedulerIntf *intf) = 0;
+ virtual int CreateDisplayExtn(DisplayExtnIntf **intf) = 0;
+ virtual void DestroyDisplayExtn(DisplayExtnIntf *intf) = 0;
protected:
virtual ~ComposerExtnIntf() { }
};
diff --git a/include/display_extn_intf.h b/include/display_extn_intf.h
new file mode 100644
index 0000000..84cd508
--- /dev/null
+++ b/include/display_extn_intf.h
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2020, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __DISP_EXTN_INTF_H__
+#define __DISP_EXTN_INTF_H__
+
+namespace composer {
+
+class DisplayExtnIntf {
+ public:
+ virtual int SetContentFps(uint32_t fps) = 0;
+ protected:
+ virtual ~DisplayExtnIntf() { }
+};
+
+} // namespace composer
+
+#endif // __DISP_EXTN_INTF_H__
diff --git a/services/config/config_defs.h b/services/config/config_defs.h
index 77eea44..7b4838a 100644
--- a/services/config/config_defs.h
+++ b/services/config/config_defs.h
@@ -265,14 +265,14 @@
virtual int IsHDRSupported(uint32_t disp_id, bool *supported) DEFAULT_RET
virtual int IsWCGSupported(uint32_t disp_id, bool *supported) DEFAULT_RET
virtual int SetLayerAsMask(uint32_t disp_id, uint64_t layer_id) DEFAULT_RET
- virtual int GetDebugProperty(const std::string prop_name, std::string value) DEFAULT_RET
+ virtual int GetDebugProperty(const std::string prop_name, std::string *value) DEFAULT_RET
virtual int GetActiveBuiltinDisplayAttributes(Attributes *attr) DEFAULT_RET
virtual int SetPanelLuminanceAttributes(uint32_t disp_id, float min_lum,
float max_lum) DEFAULT_RET
virtual int IsBuiltInDisplay(uint32_t disp_id, bool *is_builtin) DEFAULT_RET
virtual int IsAsyncVDSCreationSupported(bool *supported) DEFAULT_RET
virtual int CreateVirtualDisplay(uint32_t width, uint32_t height, int format) DEFAULT_RET
- virtual int GetSupportedDSIBitClks(uint32_t disp_id, std::vector<uint64_t> bit_clks) DEFAULT_RET
+ virtual int GetSupportedDSIBitClks(uint32_t disp_id, std::vector<uint64_t> *bit_clks) DEFAULT_RET
virtual int GetDSIClk(uint32_t disp_id, uint64_t *bit_clk) DEFAULT_RET
virtual int SetDSIClk(uint32_t disp_id, uint64_t bit_clk) DEFAULT_RET
virtual int SetCWBOutputBuffer(uint32_t disp_id, const Rect rect, bool post_processed,
@@ -282,6 +282,10 @@
virtual int IsRotatorSupportedFormat(int hal_format, bool ubwc, bool *supported) DEFAULT_RET
virtual int ControlQsyncCallback(bool enable) DEFAULT_RET
+ // deprecated APIs
+ virtual int GetDebugProperty(const std::string prop_name, std::string value) DEFAULT_RET
+ virtual int GetSupportedDSIBitClks(uint32_t disp_id, std::vector<uint64_t> bit_clks) DEFAULT_RET
+
protected:
virtual ~ConfigInterface() { }
};
diff --git a/services/config/src/client_impl.cpp b/services/config/src/client_impl.cpp
index b3dd3e8..c11fa3c 100644
--- a/services/config/src/client_impl.cpp
+++ b/services/config/src/client_impl.cpp
@@ -538,11 +538,13 @@
return error;
}
-int ClientImpl::GetDebugProperty(const std::string prop_name, std::string value) {
+int ClientImpl::GetDebugProperty(const std::string prop_name, std::string *value) {
ByteStream input_params;
- uint8_t *data_input = reinterpret_cast<uint8_t*>(const_cast<char*>(prop_name.data()));
+ std::string prop(prop_name);
+ prop += '\0';
+ uint8_t *data_input = reinterpret_cast<uint8_t*>(const_cast<char*>(prop.data()));
input_params.setToExternal(reinterpret_cast<uint8_t*>(data_input),
- prop_name.size() * sizeof(char));
+ prop.size() * sizeof(char));
ByteStream output_params;
int error = 0;
auto hidl_cb = [&error, &output_params] (int32_t err, ByteStream params, HandleStream handles) {
@@ -554,9 +556,9 @@
const uint8_t *data = output_params.data();
const char *name = reinterpret_cast<const char *>(data);
- std::string output(name);
if (!error) {
- value = output;
+ std::string output(name);
+ *value = output;
}
return error;
@@ -645,7 +647,7 @@
return error;
}
-int ClientImpl::GetSupportedDSIBitClks(uint32_t disp_id, std::vector<uint64_t> bit_clks) {
+int ClientImpl::GetSupportedDSIBitClks(uint32_t disp_id, std::vector<uint64_t> *bit_clks) {
ByteStream input_params;
input_params.setToExternal(reinterpret_cast<uint8_t*>(&disp_id), sizeof(uint32_t));
ByteStream output_params;
@@ -662,7 +664,7 @@
const uint64_t *bit_clks_data = reinterpret_cast<const uint64_t *>(data);
int num_bit_clks = static_cast<int>(output_params.size() / sizeof(uint64_t));
for (int i = 0; i < num_bit_clks; i++) {
- bit_clks.push_back(bit_clks_data[i]);
+ bit_clks->push_back(bit_clks_data[i]);
}
}
diff --git a/services/config/src/client_impl.h b/services/config/src/client_impl.h
index f90a4e0..085fc22 100644
--- a/services/config/src/client_impl.h
+++ b/services/config/src/client_impl.h
@@ -84,13 +84,13 @@
virtual int IsHDRSupported(uint32_t disp_id, bool *supported);
virtual int IsWCGSupported(uint32_t disp_id, bool *supported);
virtual int SetLayerAsMask(uint32_t disp_id, uint64_t layer_id);
- virtual int GetDebugProperty(const std::string prop_name, std::string value);
+ virtual int GetDebugProperty(const std::string prop_name, std::string *value);
virtual int GetActiveBuiltinDisplayAttributes(Attributes *attr);
virtual int SetPanelLuminanceAttributes(uint32_t disp_id, float min_lum, float max_lum);
virtual int IsBuiltInDisplay(uint32_t disp_id, bool *is_builtin);
virtual int IsAsyncVDSCreationSupported(bool *supported);
virtual int CreateVirtualDisplay(uint32_t width, uint32_t height, int format);
- virtual int GetSupportedDSIBitClks(uint32_t disp_id, std::vector<uint64_t> bit_clks);
+ virtual int GetSupportedDSIBitClks(uint32_t disp_id, std::vector<uint64_t> *bit_clks);
virtual int GetDSIClk(uint32_t disp_id, uint64_t *bit_clk);
virtual int SetDSIClk(uint32_t disp_id, uint64_t bit_clk);
virtual int SetCWBOutputBuffer(uint32_t disp_id, const Rect rect, bool post_processed,
diff --git a/services/config/src/device_impl.cpp b/services/config/src/device_impl.cpp
index c02de23..7c36729 100644
--- a/services/config/src/device_impl.cpp
+++ b/services/config/src/device_impl.cpp
@@ -501,9 +501,10 @@
const uint8_t *data = input_params.data();
const char *name = reinterpret_cast<const char *>(data);
std::string prop_name(name);
- int32_t error = intf_->GetDebugProperty(prop_name, value);
+ int32_t error = intf_->GetDebugProperty(prop_name, &value);
+ value += '\0';
uint8_t *data_output = reinterpret_cast<uint8_t*>(value.data());
- output_params.setToExternal(reinterpret_cast<uint8_t*>(&data_output),
+ output_params.setToExternal(reinterpret_cast<uint8_t*>(data_output),
value.size() * sizeof(char));
_hidl_cb(error, output_params, {});
@@ -578,7 +579,7 @@
const uint8_t *data = input_params.data();
disp_id = reinterpret_cast<const uint32_t*>(data);
- int32_t error = intf_->GetSupportedDSIBitClks(*disp_id, bit_clks);
+ int32_t error = intf_->GetSupportedDSIBitClks(*disp_id, &bit_clks);
bit_clks_data = reinterpret_cast<uint64_t *>(malloc(sizeof(uint64_t) * bit_clks.size()));
for (int i = 0; i < bit_clks.size(); i++) {