Merge "Revert "Replacing LOCAL_COPY_HEADERS with LOCAL_EXPORT_C_INCLUDE_DIRS, for VNDK"" am: 95fb9b8c60 am: b791175501
am: b0726a71b0
Change-Id: Ia31a26a99cd4c1aff544805a0f79e60c03e14e7f
diff --git a/Android.mk b/Android.mk
index d9aa722..9829818 100644
--- a/Android.mk
+++ b/Android.mk
@@ -19,8 +19,8 @@
ifneq ($(filter msm8996,$(TARGET_BOARD_PLATFORM)),)
include $(call all-named-subdir-makefiles,msm8996)
else
- ifneq ($(filter msmcobalt,$(TARGET_BOARD_PLATFORM)),)
- include $(call all-named-subdir-makefiles,msmcobalt)
+ ifneq ($(filter msm8998,$(TARGET_BOARD_PLATFORM)),)
+ include $(call all-named-subdir-makefiles,msm8998)
endif
endif
endif
diff --git a/msm8996/sdm/libs/core/display_base.cpp b/msm8996/sdm/libs/core/display_base.cpp
index 2f6e577..adab52b 100644
--- a/msm8996/sdm/libs/core/display_base.cpp
+++ b/msm8996/sdm/libs/core/display_base.cpp
@@ -757,7 +757,7 @@
SDEDisplayMode *sde_display_mode = it->second;
- DLOGD("Color Mode Name = %s corresponding mode_id = %d", sde_display_mode->name,
+ DLOGV_IF(kTagQDCM, "Color Mode Name = %s corresponding mode_id = %d", sde_display_mode->name,
sde_display_mode->id);
DisplayError error = kErrorNone;
error = color_mgr_->ColorMgrSetMode(sde_display_mode->id);
diff --git a/msm8996/sdm/libs/hwc2/hwc_display.cpp b/msm8996/sdm/libs/hwc2/hwc_display.cpp
index 3287a7f..fe140fe 100644
--- a/msm8996/sdm/libs/hwc2/hwc_display.cpp
+++ b/msm8996/sdm/libs/hwc2/hwc_display.cpp
@@ -154,7 +154,7 @@
current_color_mode_ = mode;
current_color_transform_ = hint;
CopyColorTransformMatrix(matrix, color_matrix_);
- DLOGI("Setting Color Mode = %d Transform Hint = %d Success", mode, hint);
+ DLOGV_IF(kTagQDCM, "Setting Color Mode = %d Transform Hint = %d Success", mode, hint);
return HWC2::Error::None;
}
diff --git a/msmcobalt/Android.mk b/msm8998/Android.mk
similarity index 86%
rename from msmcobalt/Android.mk
rename to msm8998/Android.mk
index b8b893c..60a48f5 100644
--- a/msmcobalt/Android.mk
+++ b/msm8998/Android.mk
@@ -1,5 +1,5 @@
sdm-libs := sdm/libs
-display-hals := libqservice libqdutils $(sdm-libs)/utils $(sdm-libs)/core
+display-hals := include libqservice libqdutils $(sdm-libs)/utils $(sdm-libs)/core
ifneq ($(TARGET_IS_HEADLESS), true)
display-hals += libcopybit liblight libmemtrack hdmi_cec \
diff --git a/msmcobalt/Makefile.am b/msm8998/Makefile.am
similarity index 100%
rename from msmcobalt/Makefile.am
rename to msm8998/Makefile.am
diff --git a/msmcobalt/common.mk b/msm8998/common.mk
similarity index 93%
rename from msmcobalt/common.mk
rename to msm8998/common.mk
index d7370ed..063dd4b 100644
--- a/msmcobalt/common.mk
+++ b/msm8998/common.mk
@@ -5,6 +5,10 @@
common_flags := -DDEBUG_CALC_FPS -Wno-missing-field-initializers
common_flags += -Wconversion -Wall -Werror -std=c++11
+ifeq ($(call is-board-platform-in-list, msmcobalt msm8998), true)
+common_flags += -DUSE_COLOR_METADATA
+endif
+
use_hwc2 := false
ifeq ($(TARGET_USES_HWC2), true)
use_hwc2 := true
@@ -17,6 +21,7 @@
common_includes += $(display_top)/libcopybit
endif
+common_includes += $(display_top)/include
common_includes += $(display_top)/sdm/include
common_header_export_path := qcom/display
diff --git a/msmcobalt/configure.ac b/msm8998/configure.ac
similarity index 100%
rename from msmcobalt/configure.ac
rename to msm8998/configure.ac
diff --git a/msmcobalt/hdmi_cec/Android.mk b/msm8998/hdmi_cec/Android.mk
similarity index 100%
rename from msmcobalt/hdmi_cec/Android.mk
rename to msm8998/hdmi_cec/Android.mk
diff --git a/msmcobalt/hdmi_cec/QHDMIClient.cpp b/msm8998/hdmi_cec/QHDMIClient.cpp
similarity index 100%
rename from msmcobalt/hdmi_cec/QHDMIClient.cpp
rename to msm8998/hdmi_cec/QHDMIClient.cpp
diff --git a/msmcobalt/hdmi_cec/QHDMIClient.h b/msm8998/hdmi_cec/QHDMIClient.h
similarity index 100%
rename from msmcobalt/hdmi_cec/QHDMIClient.h
rename to msm8998/hdmi_cec/QHDMIClient.h
diff --git a/msmcobalt/hdmi_cec/qhdmi_cec.cpp b/msm8998/hdmi_cec/qhdmi_cec.cpp
similarity index 100%
rename from msmcobalt/hdmi_cec/qhdmi_cec.cpp
rename to msm8998/hdmi_cec/qhdmi_cec.cpp
diff --git a/msmcobalt/hdmi_cec/qhdmi_cec.h b/msm8998/hdmi_cec/qhdmi_cec.h
similarity index 100%
rename from msmcobalt/hdmi_cec/qhdmi_cec.h
rename to msm8998/hdmi_cec/qhdmi_cec.h
diff --git a/msm8998/include/Android.mk b/msm8998/include/Android.mk
new file mode 100644
index 0000000..4d0d9f7
--- /dev/null
+++ b/msm8998/include/Android.mk
@@ -0,0 +1,9 @@
+LOCAL_PATH:= $(call my-dir)
+include $(LOCAL_PATH)/../common.mk
+include $(CLEAR_VARS)
+
+LOCAL_COPY_HEADERS_TO := $(common_header_export_path)
+LOCAL_COPY_HEADERS := color_metadata.h
+
+include $(BUILD_COPY_HEADERS)
+
diff --git a/msm8998/include/color_metadata.h b/msm8998/include/color_metadata.h
new file mode 100644
index 0000000..328cb0e
--- /dev/null
+++ b/msm8998/include/color_metadata.h
@@ -0,0 +1,180 @@
+/*
+* Copyright (c) 2016, 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 __COLOR_METADATA_H__
+#define __COLOR_METADATA_H__
+
+#ifdef __cplusplus
+extern "C" {
+#else
+#include <stdbool.h>
+#endif
+
+typedef enum ColorRange {
+ Range_Limited = 0,
+ Range_Full = 1,
+ Range_Max = 0xff,
+} ColorRange;
+
+// The following values matches the HEVC spec
+typedef enum ColorPrimaries {
+ // Unused = 0;
+ ColorPrimaries_BT709_5 = 1, // ITU-R BT.709-5 or equivalent
+ /* Unspecified = 2, Reserved = 3*/
+ ColorPrimaries_BT470_6M = 4, // ITU-R BT.470-6 System M or equivalent
+ ColorPrimaries_BT601_6_625 = 5, // ITU-R BT.601-6 625 or equivalent
+ ColorPrimaries_BT601_6_525 = 6, // ITU-R BT.601-6 525 or equivalent
+ ColorPrimaries_SMPTE_240M = 7, // SMPTE_240M
+ ColorPrimaries_GenericFilm = 8, // Generic Film
+ ColorPrimaries_BT2020 = 9, // ITU-R BT.2020 or equivalent
+ ColorPrimaries_SMPTE_ST428 = 10, // SMPTE_240M
+ ColorPrimaries_AdobeRGB = 11,
+ ColorPrimaries_DCIP3 = 12,
+ ColorPrimaries_Max = 0xff,
+} ColorPrimaries;
+
+typedef enum GammaTransfer {
+ // Unused = 0;
+ Transfer_sRGB = 1, // ITR-BT.709-5
+ /* Unspecified = 2, Reserved = 3 */
+ Transfer_Gamma2_2 = 4,
+ Transfer_Gamma2_8 = 5,
+ Transfer_SMPTE_170M = 6, // BT.601-6 525 or 625
+ Transfer_SMPTE_240M = 7, // SMPTE_240M
+ Transfer_Linear = 8,
+ Transfer_HLG = 9,
+ Transfer_XvYCC = 11, // IEC 61966-2-4
+ Transfer_BT1361 = 12, // Rec.ITU-R BT.1361 extended gamut
+ Transfer_SMPTE_ST2084 = 16, // 2084
+ // transfers unlikely to be required by Android
+ Transfer_ST_428 = 17, // SMPTE ST 428-1
+ Transfer_Max = 0xff,
+} GammaTransfer;
+
+typedef enum MatrixCoEfficients {
+ MatrixCoEff_Identity = 0,
+ MatrixCoEff_BT709_5 = 1,
+ /* Unspecified = 2, Reserved = 3 */
+ MatrixCoEff_BT601_6_625 = 5,
+ MatrixCoEff_BT601_6_525 = 6,
+ MatrixCoEff_SMPTE240M = 7, // used with 601_525_Unadjusted
+ MatrixCoEff_BT2020 = 9,
+ MatrixCoEff_BT2020Constant = 10,
+ MatrixCoEff_BT601_6_Unadjusted = 11, // Used with BT601_625(KR=0.222, KB=0.071)
+ MatrixCoEff_DCIP3 = 12,
+ MatrixCoEff_Max = 0xff,
+} MatrixCoEfficients;
+
+typedef struct Primaries {
+ uint32_t rgbPrimaries[3][2]; // unit 1/50000;
+ uint32_t whitePoint[2]; // unit 1/50000;
+} Primaries;
+
+typedef struct MasteringDisplay {
+ bool colorVolumeSEIEnabled;
+ Primaries primaries;
+ uint32_t maxDisplayLuminance; // unit: cd/m^2.
+ uint32_t minDisplayLuminance; // unit: 1/10000 cd/m^2.
+} MasteringDisplay;
+
+typedef struct ContentLightLevel {
+ bool lightLevelSEIEnabled;
+ uint32_t maxContentLightLevel; // unit: cd/m^2.
+ uint32_t minPicAverageLightLevel; // unit: 1/10000 cd/m^2.
+} ContentLightLevel;
+
+typedef struct ColorRemappingInfo {
+ bool criEnabled;
+ uint32_t crId;
+ uint32_t crCancelFlag;
+ uint32_t crPersistenceFlag;
+ uint32_t crVideoSignalInfoPresentFlag;
+ uint32_t crRange;
+ ColorPrimaries crPrimaries;
+ GammaTransfer crTransferFunction;
+ MatrixCoEfficients crMatrixCoefficients;
+ uint32_t crInputBitDepth;
+ uint32_t crOutputBitDepth;
+ uint32_t crPreLutNumValMinusOne[3];
+ uint32_t crPreLutCodedValue[3*33];
+ uint32_t crPreLutTargetValue[3*33];
+ uint32_t crMatrixPresentFlag;
+ uint32_t crLog2MatrixDenom;
+ int32_t crCoefficients[3*3];
+ uint32_t crPostLutNumValMinusOne[3];
+ uint32_t crPostLutCodedValue[3*33];
+ uint32_t crPostLutTargetValue[3*33];
+} ColorRemappingInfo;
+
+typedef struct ColorMetaData {
+ // Default values based on sRGB, needs to be overridden in gralloc
+ // based on the format and size.
+ ColorPrimaries colorPrimaries;
+ ColorRange range;
+ GammaTransfer transfer;
+ MatrixCoEfficients matrixCoefficients;
+
+ MasteringDisplay masteringDisplayInfo;
+ ContentLightLevel contentLightLevel;
+ ColorRemappingInfo cRI;
+} ColorMetaData;
+
+typedef struct Color10Bit {
+ uint32_t R: 10;
+ uint32_t G: 10;
+ uint32_t B: 10;
+ uint32_t A: 2;
+} Color10Bit;
+
+typedef struct Lut3d {
+ uint16_t dim; // dimension of each side of LUT cube (ex: 13, 17)in lutEntries
+ uint16_t gridSize; // number of elements in the gridEntries
+ /* Matrix ordering convension
+ for (b = 0; b < dim; b++) {
+ for (g = 0; g < dim; g++) {
+ for (r = 0; r < dim; r++) {
+ read/write [mR mG mB] associated w/ 3DLUT[r][g][b] to/from file
+ }
+ }
+ } */
+ Color10Bit *lutEntries;
+ bool validLutEntries; // Indicates if entries are valid and can be used.
+ /*
+ The grid is a 1D LUT for each of the R,G,B channels that can be
+ used to apply an independent nonlinear transformation to each
+ channel before it is used as a coordinate for addressing
+ the uniform 3D LUT. This effectively creates a non-uniformly
+ sampled 3D LUT. This is useful for having independent control
+ of the sampling grid density along each dimension for greater
+ precision in spite of having a relatively small number of samples.i
+ */
+ Color10Bit *gridEntries;
+ bool validGridEntries; // Indicates if entries are valid and can be used.
+} Lut3d;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // __COLOR_METADATA_H__
diff --git a/msmcobalt/libcopybit/Android.mk b/msm8998/libcopybit/Android.mk
similarity index 100%
rename from msmcobalt/libcopybit/Android.mk
rename to msm8998/libcopybit/Android.mk
diff --git a/msmcobalt/libcopybit/MODULE_LICENSE_APACHE2 b/msm8998/libcopybit/MODULE_LICENSE_APACHE2
similarity index 100%
rename from msmcobalt/libcopybit/MODULE_LICENSE_APACHE2
rename to msm8998/libcopybit/MODULE_LICENSE_APACHE2
diff --git a/msmcobalt/libcopybit/NOTICE b/msm8998/libcopybit/NOTICE
similarity index 100%
rename from msmcobalt/libcopybit/NOTICE
rename to msm8998/libcopybit/NOTICE
diff --git a/msmcobalt/libcopybit/c2d2.h b/msm8998/libcopybit/c2d2.h
similarity index 100%
rename from msmcobalt/libcopybit/c2d2.h
rename to msm8998/libcopybit/c2d2.h
diff --git a/msmcobalt/libcopybit/copybit.cpp b/msm8998/libcopybit/copybit.cpp
similarity index 100%
rename from msmcobalt/libcopybit/copybit.cpp
rename to msm8998/libcopybit/copybit.cpp
diff --git a/msmcobalt/libcopybit/copybit.h b/msm8998/libcopybit/copybit.h
similarity index 100%
rename from msmcobalt/libcopybit/copybit.h
rename to msm8998/libcopybit/copybit.h
diff --git a/msmcobalt/libcopybit/copybit_c2d.cpp b/msm8998/libcopybit/copybit_c2d.cpp
similarity index 100%
rename from msmcobalt/libcopybit/copybit_c2d.cpp
rename to msm8998/libcopybit/copybit_c2d.cpp
diff --git a/msmcobalt/libcopybit/copybit_priv.h b/msm8998/libcopybit/copybit_priv.h
similarity index 100%
rename from msmcobalt/libcopybit/copybit_priv.h
rename to msm8998/libcopybit/copybit_priv.h
diff --git a/msmcobalt/libcopybit/software_converter.cpp b/msm8998/libcopybit/software_converter.cpp
similarity index 100%
rename from msmcobalt/libcopybit/software_converter.cpp
rename to msm8998/libcopybit/software_converter.cpp
diff --git a/msmcobalt/libcopybit/software_converter.h b/msm8998/libcopybit/software_converter.h
similarity index 100%
rename from msmcobalt/libcopybit/software_converter.h
rename to msm8998/libcopybit/software_converter.h
diff --git a/msmcobalt/libgralloc/Android.mk b/msm8998/libgralloc/Android.mk
similarity index 100%
rename from msmcobalt/libgralloc/Android.mk
rename to msm8998/libgralloc/Android.mk
diff --git a/msmcobalt/libgralloc/MODULE_LICENSE_APACHE2 b/msm8998/libgralloc/MODULE_LICENSE_APACHE2
similarity index 100%
rename from msmcobalt/libgralloc/MODULE_LICENSE_APACHE2
rename to msm8998/libgralloc/MODULE_LICENSE_APACHE2
diff --git a/msmcobalt/libgralloc/Makefile.am b/msm8998/libgralloc/Makefile.am
similarity index 82%
rename from msmcobalt/libgralloc/Makefile.am
rename to msm8998/libgralloc/Makefile.am
index 2698df3..d57ad32 100644
--- a/msmcobalt/libgralloc/Makefile.am
+++ b/msm8998/libgralloc/Makefile.am
@@ -12,8 +12,9 @@
libmemalloc_la_SOURCES = $(cpp_sources)
libmemalloc_la_CFLAGS = $(COMMON_CFLAGS) -DLOG_TAG=\"qdmemalloc\"
libmemalloc_la_CPPFLAGS = $(AM_CPPFLAGS)
-libmemalloc_LDADD = -lhardware -lcutils -llog -lutils -ldl
libmemalloc_la_LIBADD = ../libqdutils/libqdutils.la
+libmemalloc_la_LIBADD += -lhardware -lcutils -llog -lutils -ldl
+libmemalloc_la_LDFLAGS = -shared -avoid-version
header_sources = gralloc_priv.h \
gr.h
@@ -31,7 +32,8 @@
libgralloc_la_SOURCES = $(c_sources)
libgralloc_la_CFLAGS = $(COMMON_CFLAGS) -DLOG_TAG=\"qdgralloc\"
libgralloc_la_CPPFLAGS = $(AM_CPPFLAGS)
-libgralloc_LDADD = -lhardware -lcutils -llog -lutils
libgralloc_la_LIBADD = ../libqdutils/libqdutils.la
libgralloc_la_LIBADD += ../libqdutils/libqdMetaData.la
-libgralloc_la_LIBADD += libmemalloc.la
\ No newline at end of file
+libgralloc_la_LIBADD += -lhardware -lcutils -llog -lutils -lbinder
+libgralloc_la_LIBADD += libmemalloc.la
+libgralloc_la_LDFLAGS = -shared -avoid-version
\ No newline at end of file
diff --git a/msmcobalt/libgralloc/NOTICE b/msm8998/libgralloc/NOTICE
similarity index 100%
rename from msmcobalt/libgralloc/NOTICE
rename to msm8998/libgralloc/NOTICE
diff --git a/msmcobalt/libgralloc/adreno_utils.h b/msm8998/libgralloc/adreno_utils.h
similarity index 100%
rename from msmcobalt/libgralloc/adreno_utils.h
rename to msm8998/libgralloc/adreno_utils.h
diff --git a/msmcobalt/libgralloc/alloc_controller.cpp b/msm8998/libgralloc/alloc_controller.cpp
similarity index 98%
rename from msmcobalt/libgralloc/alloc_controller.cpp
rename to msm8998/libgralloc/alloc_controller.cpp
index 3ecc9fa..ae167ba 100644
--- a/msmcobalt/libgralloc/alloc_controller.cpp
+++ b/msm8998/libgralloc/alloc_controller.cpp
@@ -59,16 +59,24 @@
#define ION_FLAG_ALLOW_NON_CONTIG 0
#endif
+#ifndef ION_FLAG_CP_CAMERA_PREVIEW
+#define ION_FLAG_CP_CAMERA_PREVIEW 0
+#endif
+
#ifdef MASTER_SIDE_CP
#define CP_HEAP_ID ION_SECURE_HEAP_ID
#define SD_HEAP_ID ION_SECURE_DISPLAY_HEAP_ID
#define ION_CP_FLAGS (ION_SECURE | ION_FLAG_CP_PIXEL)
#define ION_SD_FLAGS (ION_SECURE | ION_FLAG_CP_SEC_DISPLAY)
+#define ION_SC_FLAGS (ION_SECURE | ION_FLAG_CP_CAMERA)
+#define ION_SC_PREVIEW_FLAGS (ION_SECURE | ION_FLAG_CP_CAMERA_PREVIEW)
#else // SLAVE_SIDE_CP
#define CP_HEAP_ID ION_CP_MM_HEAP_ID
#define SD_HEAP_ID CP_HEAP_ID
#define ION_CP_FLAGS (ION_SECURE | ION_FLAG_ALLOW_NON_CONTIG)
#define ION_SD_FLAGS ION_SECURE
+#define ION_SC_FLAGS ION_SECURE
+#define ION_SC_PREVIEW_FLAGS ION_SECURE
#endif
using namespace gralloc;
@@ -473,6 +481,9 @@
* VM. Please add it to the define once available.
*/
ionFlags |= ION_SD_FLAGS;
+ } else if (usage & GRALLOC_USAGE_HW_CAMERA_MASK) {
+ ionHeapId = ION_HEAP(SD_HEAP_ID);
+ ionFlags |= (usage & GRALLOC_USAGE_HW_COMPOSER) ? ION_SC_PREVIEW_FLAGS : ION_SC_FLAGS;
} else {
ionHeapId = ION_HEAP(CP_HEAP_ID);
ionFlags |= ION_CP_FLAGS;
@@ -1108,6 +1119,7 @@
return err;
}
+ // Ubwc buffers
unsigned int meta_size = 0;
switch (hnd->format) {
case HAL_PIXEL_FORMAT_BGR_565:
@@ -1115,6 +1127,8 @@
break;
case HAL_PIXEL_FORMAT_RGBA_8888:
case HAL_PIXEL_FORMAT_RGBX_8888:
+ case HAL_PIXEL_FORMAT_RGBA_1010102:
+ case HAL_PIXEL_FORMAT_RGBX_1010102:
meta_size = getRgbUBwcMetaBufferSize(hnd->width, hnd->height, 4);
break;
default:
diff --git a/msmcobalt/libgralloc/alloc_controller.h b/msm8998/libgralloc/alloc_controller.h
similarity index 100%
rename from msmcobalt/libgralloc/alloc_controller.h
rename to msm8998/libgralloc/alloc_controller.h
diff --git a/msmcobalt/libgralloc/fb_priv.h b/msm8998/libgralloc/fb_priv.h
similarity index 100%
rename from msmcobalt/libgralloc/fb_priv.h
rename to msm8998/libgralloc/fb_priv.h
diff --git a/msmcobalt/libgralloc/framebuffer.cpp b/msm8998/libgralloc/framebuffer.cpp
similarity index 100%
rename from msmcobalt/libgralloc/framebuffer.cpp
rename to msm8998/libgralloc/framebuffer.cpp
diff --git a/msmcobalt/libgralloc/gpu.cpp b/msm8998/libgralloc/gpu.cpp
similarity index 98%
rename from msmcobalt/libgralloc/gpu.cpp
rename to msm8998/libgralloc/gpu.cpp
index 8bae926..545903a 100644
--- a/msmcobalt/libgralloc/gpu.cpp
+++ b/msm8998/libgralloc/gpu.cpp
@@ -74,7 +74,8 @@
data.align = getpagesize();
if (usage & GRALLOC_USAGE_PROTECTED) {
- if (usage & GRALLOC_USAGE_PRIVATE_SECURE_DISPLAY) {
+ if ((usage & GRALLOC_USAGE_PRIVATE_SECURE_DISPLAY) ||
+ (usage & GRALLOC_USAGE_HW_CAMERA_MASK)) {
/* The alignment here reflects qsee mmu V7L/V8L requirement */
data.align = SZ_2M;
} else {
diff --git a/msmcobalt/libgralloc/gpu.h b/msm8998/libgralloc/gpu.h
similarity index 100%
rename from msmcobalt/libgralloc/gpu.h
rename to msm8998/libgralloc/gpu.h
diff --git a/msmcobalt/libgralloc/gr.h b/msm8998/libgralloc/gr.h
similarity index 100%
rename from msmcobalt/libgralloc/gr.h
rename to msm8998/libgralloc/gr.h
diff --git a/msmcobalt/libgralloc/gralloc.cpp b/msm8998/libgralloc/gralloc.cpp
similarity index 100%
rename from msmcobalt/libgralloc/gralloc.cpp
rename to msm8998/libgralloc/gralloc.cpp
diff --git a/msmcobalt/libgralloc/gralloc_priv.h b/msm8998/libgralloc/gralloc_priv.h
similarity index 100%
rename from msmcobalt/libgralloc/gralloc_priv.h
rename to msm8998/libgralloc/gralloc_priv.h
diff --git a/msmcobalt/libgralloc/ionalloc.cpp b/msm8998/libgralloc/ionalloc.cpp
similarity index 100%
rename from msmcobalt/libgralloc/ionalloc.cpp
rename to msm8998/libgralloc/ionalloc.cpp
diff --git a/msmcobalt/libgralloc/ionalloc.h b/msm8998/libgralloc/ionalloc.h
similarity index 100%
rename from msmcobalt/libgralloc/ionalloc.h
rename to msm8998/libgralloc/ionalloc.h
diff --git a/msmcobalt/libgralloc/mapper.cpp b/msm8998/libgralloc/mapper.cpp
similarity index 88%
rename from msmcobalt/libgralloc/mapper.cpp
rename to msm8998/libgralloc/mapper.cpp
index d8880ef..132c768 100644
--- a/msmcobalt/libgralloc/mapper.cpp
+++ b/msm8998/libgralloc/mapper.cpp
@@ -1,6 +1,6 @@
/*
* Copyright (C) 2008 The Android Open Source Project
- * Copyright (c) 2011-2015, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2011-2016, The Linux Foundation. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -55,6 +55,27 @@
return memalloc;
}
+static int gralloc_map_metadata(buffer_handle_t handle) {
+ private_handle_t* hnd = (private_handle_t*)handle;
+ hnd->base_metadata = 0;
+ IMemAlloc* memalloc = getAllocator(hnd->flags) ;
+ void *mappedAddress = MAP_FAILED;
+ unsigned int size = 0;
+ if (!(hnd->flags & private_handle_t::PRIV_FLAGS_FRAMEBUFFER)) {
+ mappedAddress = MAP_FAILED;
+ size = ROUND_UP_PAGESIZE(sizeof(MetaData_t));
+ int ret = memalloc->map_buffer(&mappedAddress, size,
+ hnd->offset_metadata, hnd->fd_metadata);
+ if(ret || mappedAddress == MAP_FAILED) {
+ ALOGE("Could not mmap metadata for handle %p, fd=%d (%s)",
+ hnd, hnd->fd_metadata, strerror(errno));
+ return -errno;
+ }
+ hnd->base_metadata = uint64_t(mappedAddress) + hnd->offset_metadata;
+ }
+ return 0;
+}
+
static int gralloc_map(gralloc_module_t const* module,
buffer_handle_t handle)
{
@@ -68,7 +89,6 @@
IMemAlloc* memalloc = getAllocator(hnd->flags) ;
void *mappedAddress = MAP_FAILED;
hnd->base = 0;
- hnd->base_metadata = 0;
// Dont map framebuffer and secure buffers
if (!(hnd->flags & private_handle_t::PRIV_FLAGS_FRAMEBUFFER) &&
@@ -83,23 +103,21 @@
}
hnd->base = uint64_t(mappedAddress) + hnd->offset;
+ } else {
+ // Cannot map secure buffers or framebuffers, but still need to map
+ // metadata for secure buffers.
+ // If mapping a secure buffers fails, the framework needs to get
+ // an error code.
+ err = -EACCES;
}
//Allow mapping of metadata for all buffers including secure ones, but not
//of framebuffer
- if (!(hnd->flags & private_handle_t::PRIV_FLAGS_FRAMEBUFFER)) {
- mappedAddress = MAP_FAILED;
- size = ROUND_UP_PAGESIZE(sizeof(MetaData_t));
- err = memalloc->map_buffer(&mappedAddress, size,
- hnd->offset_metadata, hnd->fd_metadata);
- if(err || mappedAddress == MAP_FAILED) {
- ALOGE("Could not mmap handle %p, fd=%d (%s)",
- handle, hnd->fd_metadata, strerror(errno));
- return -errno;
- }
- hnd->base_metadata = uint64_t(mappedAddress) + hnd->offset_metadata;
+ int metadata_err = gralloc_map_metadata(handle);
+ if (!err) {
+ err = metadata_err;
}
- return 0;
+ return err;
}
static int gralloc_unmap(gralloc_module_t const* module,
@@ -153,20 +171,11 @@
if (!module || private_handle_t::validate(handle) < 0)
return -EINVAL;
- /* NOTE: we need to initialize the buffer as not mapped/not locked
- * because it shouldn't when this function is called the first time
- * in a new process. Ideally these flags shouldn't be part of the
- * handle, but instead maintained in the kernel or at least
- * out-of-line
- */
-
- int err = gralloc_map(module, handle);
- if (err) {
- ALOGE("%s: gralloc_map failed", __FUNCTION__);
- return err;
- }
-
- return 0;
+ int err = gralloc_map(module, handle);
+ /* Do not fail register_buffer for secure buffers*/
+ if (err == -EACCES)
+ err = 0;
+ return err;
}
int gralloc_unregister_buffer(gralloc_module_t const* module,
@@ -403,7 +412,30 @@
return res;
}
MetaData_t *metadata = (MetaData_t *)hnd->base_metadata;
- if(metadata && metadata->operation & UPDATE_COLOR_SPACE) {
+ if (!metadata) {
+ break;
+#ifdef USE_COLOR_METADATA
+ } else if (metadata->operation & COLOR_METADATA) {
+ ColorMetaData *colorMetadata = &metadata->color;
+ res = 0;
+ switch (colorMetadata->colorPrimaries) {
+ case ColorPrimaries_BT709_5:
+ *color_space = HAL_CSC_ITU_R_709;
+ break;
+ case ColorPrimaries_BT601_6_525:
+ *color_space = ((colorMetadata->range) ?
+ HAL_CSC_ITU_R_601_FR : HAL_CSC_ITU_R_601);
+ break;
+ case ColorPrimaries_BT2020:
+ *color_space = (colorMetadata->range) ?
+ HAL_CSC_ITU_R_2020_FR : HAL_CSC_ITU_R_2020;
+ break;
+ default:
+ res = -EINVAL;
+ break;
+ }
+#endif
+ } else if(metadata->operation & UPDATE_COLOR_SPACE) {
*color_space = metadata->colorSpace;
res = 0;
}
diff --git a/msmcobalt/libgralloc/memalloc.h b/msm8998/libgralloc/memalloc.h
similarity index 100%
rename from msmcobalt/libgralloc/memalloc.h
rename to msm8998/libgralloc/memalloc.h
diff --git a/msmcobalt/libgralloc1/Android.mk b/msm8998/libgralloc1/Android.mk
similarity index 100%
rename from msmcobalt/libgralloc1/Android.mk
rename to msm8998/libgralloc1/Android.mk
diff --git a/msmcobalt/libgralloc1/gr_adreno_info.cpp b/msm8998/libgralloc1/gr_adreno_info.cpp
similarity index 100%
rename from msmcobalt/libgralloc1/gr_adreno_info.cpp
rename to msm8998/libgralloc1/gr_adreno_info.cpp
diff --git a/msmcobalt/libgralloc1/gr_adreno_info.h b/msm8998/libgralloc1/gr_adreno_info.h
similarity index 100%
rename from msmcobalt/libgralloc1/gr_adreno_info.h
rename to msm8998/libgralloc1/gr_adreno_info.h
diff --git a/msmcobalt/libgralloc1/gr_allocator.cpp b/msm8998/libgralloc1/gr_allocator.cpp
similarity index 97%
rename from msmcobalt/libgralloc1/gr_allocator.cpp
rename to msm8998/libgralloc1/gr_allocator.cpp
index 1a269be..32bc4ef 100644
--- a/msmcobalt/libgralloc1/gr_allocator.cpp
+++ b/msm8998/libgralloc1/gr_allocator.cpp
@@ -48,16 +48,24 @@
#define ION_FLAG_ALLOW_NON_CONTIG 0
#endif
+#ifndef ION_FLAG_CP_CAMERA_PREVIEW
+#define ION_FLAG_CP_CAMERA_PREVIEW 0
+#endif
+
#ifdef MASTER_SIDE_CP
#define CP_HEAP_ID ION_SECURE_HEAP_ID
#define SD_HEAP_ID ION_SECURE_DISPLAY_HEAP_ID
#define ION_CP_FLAGS (ION_SECURE | ION_FLAG_CP_PIXEL)
#define ION_SD_FLAGS (ION_SECURE | ION_FLAG_CP_SEC_DISPLAY)
+#define ION_SC_FLAGS (ION_SECURE | ION_FLAG_CP_CAMERA)
+#define ION_SC_PREVIEW_FLAGS (ION_SECURE | ION_FLAG_CP_CAMERA_PREVIEW)
#else // SLAVE_SIDE_CP
#define CP_HEAP_ID ION_CP_MM_HEAP_ID
#define SD_HEAP_ID CP_HEAP_ID
#define ION_CP_FLAGS (ION_SECURE | ION_FLAG_ALLOW_NON_CONTIG)
#define ION_SD_FLAGS ION_SECURE
+#define ION_SC_FLAGS ION_SECURE
+#define ION_SC_PREVIEW_FLAGS ION_SECURE
#endif
namespace gralloc1 {
@@ -599,6 +607,13 @@
* VM. Please add it to the define once available.
*/
flags |= ION_SD_FLAGS;
+ } else if (prod_usage & GRALLOC1_PRODUCER_USAGE_CAMERA) {
+ heap_id = ION_HEAP(SD_HEAP_ID);
+ if (cons_usage & GRALLOC1_CONSUMER_USAGE_HWCOMPOSER) {
+ flags |= ION_SC_PREVIEW_FLAGS;
+ } else {
+ flags |= ION_SC_FLAGS;
+ }
} else {
heap_id = ION_HEAP(CP_HEAP_ID);
flags |= ION_CP_FLAGS;
diff --git a/msmcobalt/libgralloc1/gr_allocator.h b/msm8998/libgralloc1/gr_allocator.h
similarity index 100%
rename from msmcobalt/libgralloc1/gr_allocator.h
rename to msm8998/libgralloc1/gr_allocator.h
diff --git a/msmcobalt/libgralloc1/gr_buf_descriptor.h b/msm8998/libgralloc1/gr_buf_descriptor.h
similarity index 100%
rename from msmcobalt/libgralloc1/gr_buf_descriptor.h
rename to msm8998/libgralloc1/gr_buf_descriptor.h
diff --git a/msmcobalt/libgralloc1/gr_buf_mgr.cpp b/msm8998/libgralloc1/gr_buf_mgr.cpp
similarity index 95%
rename from msmcobalt/libgralloc1/gr_buf_mgr.cpp
rename to msm8998/libgralloc1/gr_buf_mgr.cpp
index 9bba82b..9650583 100644
--- a/msmcobalt/libgralloc1/gr_buf_mgr.cpp
+++ b/msm8998/libgralloc1/gr_buf_mgr.cpp
@@ -285,7 +285,8 @@
}
if (prod_usage & GRALLOC1_PRODUCER_USAGE_PROTECTED) {
- if (cons_usage & GRALLOC1_CONSUMER_USAGE_PRIVATE_SECURE_DISPLAY) {
+ if ((prod_usage & GRALLOC1_PRODUCER_USAGE_CAMERA) ||
+ (cons_usage & GRALLOC1_CONSUMER_USAGE_PRIVATE_SECURE_DISPLAY)) {
// The alignment here reflects qsee mmu V7L/V8L requirement
align = SZ_2M;
} else {
@@ -587,7 +588,27 @@
return GRALLOC1_ERROR_BAD_HANDLE;
}
MetaData_t *metadata = reinterpret_cast<MetaData_t *>(hnd->base_metadata);
- if (metadata && metadata->operation & UPDATE_COLOR_SPACE) {
+ if (!metadata) {
+ return GRALLOC1_ERROR_BAD_HANDLE;
+#ifdef USE_COLOR_METADATA
+ } else if (metadata->operation & COLOR_METADATA) {
+ ColorMetaData *colorMetadata = &metadata->color;
+ switch (colorMetadata->colorPrimaries) {
+ case ColorPrimaries_BT709_5:
+ *color_space = HAL_CSC_ITU_R_709;
+ break;
+ case ColorPrimaries_BT601_6_525:
+ *color_space = ((colorMetadata->range) ? HAL_CSC_ITU_R_601_FR : HAL_CSC_ITU_R_601);
+ break;
+ case ColorPrimaries_BT2020:
+ *color_space = (colorMetadata->range) ? HAL_CSC_ITU_R_2020_FR : HAL_CSC_ITU_R_2020;
+ break;
+ default:
+ ALOGE("Unknown Color Space = %d", colorMetadata->colorPrimaries);
+ break;
+ }
+#endif
+ } else if (metadata->operation & UPDATE_COLOR_SPACE) {
*color_space = metadata->colorSpace;
}
} break;
diff --git a/msmcobalt/libgralloc1/gr_buf_mgr.h b/msm8998/libgralloc1/gr_buf_mgr.h
similarity index 100%
rename from msmcobalt/libgralloc1/gr_buf_mgr.h
rename to msm8998/libgralloc1/gr_buf_mgr.h
diff --git a/msmcobalt/libgralloc1/gr_device_impl.cpp b/msm8998/libgralloc1/gr_device_impl.cpp
similarity index 100%
rename from msmcobalt/libgralloc1/gr_device_impl.cpp
rename to msm8998/libgralloc1/gr_device_impl.cpp
diff --git a/msmcobalt/libgralloc1/gr_device_impl.h b/msm8998/libgralloc1/gr_device_impl.h
similarity index 100%
rename from msmcobalt/libgralloc1/gr_device_impl.h
rename to msm8998/libgralloc1/gr_device_impl.h
diff --git a/msmcobalt/libgralloc1/gr_ion_alloc.cpp b/msm8998/libgralloc1/gr_ion_alloc.cpp
similarity index 100%
rename from msmcobalt/libgralloc1/gr_ion_alloc.cpp
rename to msm8998/libgralloc1/gr_ion_alloc.cpp
diff --git a/msmcobalt/libgralloc1/gr_ion_alloc.h b/msm8998/libgralloc1/gr_ion_alloc.h
similarity index 100%
rename from msmcobalt/libgralloc1/gr_ion_alloc.h
rename to msm8998/libgralloc1/gr_ion_alloc.h
diff --git a/msmcobalt/libgralloc1/gr_priv_handle.h b/msm8998/libgralloc1/gr_priv_handle.h
similarity index 100%
rename from msmcobalt/libgralloc1/gr_priv_handle.h
rename to msm8998/libgralloc1/gr_priv_handle.h
diff --git a/msmcobalt/libgralloc1/gr_utils.cpp b/msm8998/libgralloc1/gr_utils.cpp
similarity index 100%
rename from msmcobalt/libgralloc1/gr_utils.cpp
rename to msm8998/libgralloc1/gr_utils.cpp
diff --git a/msmcobalt/libgralloc1/gr_utils.h b/msm8998/libgralloc1/gr_utils.h
similarity index 100%
rename from msmcobalt/libgralloc1/gr_utils.h
rename to msm8998/libgralloc1/gr_utils.h
diff --git a/msmcobalt/libgralloc1/gralloc_priv.h b/msm8998/libgralloc1/gralloc_priv.h
similarity index 100%
rename from msmcobalt/libgralloc1/gralloc_priv.h
rename to msm8998/libgralloc1/gralloc_priv.h
diff --git a/msmcobalt/liblight/Android.mk b/msm8998/liblight/Android.mk
similarity index 100%
rename from msmcobalt/liblight/Android.mk
rename to msm8998/liblight/Android.mk
diff --git a/msmcobalt/liblight/NOTICE b/msm8998/liblight/NOTICE
similarity index 100%
rename from msmcobalt/liblight/NOTICE
rename to msm8998/liblight/NOTICE
diff --git a/msmcobalt/liblight/lights.c b/msm8998/liblight/lights.c
similarity index 100%
rename from msmcobalt/liblight/lights.c
rename to msm8998/liblight/lights.c
diff --git a/msmcobalt/libmemtrack/Android.mk b/msm8998/libmemtrack/Android.mk
similarity index 100%
rename from msmcobalt/libmemtrack/Android.mk
rename to msm8998/libmemtrack/Android.mk
diff --git a/msmcobalt/libmemtrack/kgsl.c b/msm8998/libmemtrack/kgsl.c
similarity index 100%
rename from msmcobalt/libmemtrack/kgsl.c
rename to msm8998/libmemtrack/kgsl.c
diff --git a/msmcobalt/libmemtrack/memtrack_msm.c b/msm8998/libmemtrack/memtrack_msm.c
similarity index 100%
rename from msmcobalt/libmemtrack/memtrack_msm.c
rename to msm8998/libmemtrack/memtrack_msm.c
diff --git a/msmcobalt/libmemtrack/memtrack_msm.h b/msm8998/libmemtrack/memtrack_msm.h
similarity index 100%
rename from msmcobalt/libmemtrack/memtrack_msm.h
rename to msm8998/libmemtrack/memtrack_msm.h
diff --git a/msmcobalt/libqdutils/Android.mk b/msm8998/libqdutils/Android.mk
similarity index 100%
rename from msmcobalt/libqdutils/Android.mk
rename to msm8998/libqdutils/Android.mk
diff --git a/msmcobalt/libqdutils/Makefile.am b/msm8998/libqdutils/Makefile.am
similarity index 89%
rename from msmcobalt/libqdutils/Makefile.am
rename to msm8998/libqdutils/Makefile.am
index ef2108d..01fbf19 100644
--- a/msmcobalt/libqdutils/Makefile.am
+++ b/msm8998/libqdutils/Makefile.am
@@ -11,6 +11,7 @@
libqdMetaData_la_CFLAGS = $(AM_CFLAGS) -DLOG_TAG=\"DisplayMetaData\"
libqdMetaData_la_CPPFLAGS = $(AM_CPPFLAGS)
libqdMetaData_LDADD = -lcutils -llog
+libqdMetaData_la_LDFLAGS = -shared -avoid-version
header_sources = display_config.h
@@ -27,4 +28,5 @@
libqdutils_la_CFLAGS = $(COMMON_CFLAGS) -DLOG_TAG=\"qdutils\"
libqdutils_la_CPPFLAGS = $(AM_CPPFLAGS)
libqdutils_LDADD = -lhardware -lcutils -llog -lbinder
-libqdutils_la_LIBADD = ../libqservice/libqservice.la
\ No newline at end of file
+libqdutils_la_LIBADD = ../libqservice/libqservice.la
+libqdutils_la_LDFLAGS = -shared -avoid-version
\ No newline at end of file
diff --git a/msmcobalt/libqdutils/display_config.cpp b/msm8998/libqdutils/display_config.cpp
similarity index 100%
rename from msmcobalt/libqdutils/display_config.cpp
rename to msm8998/libqdutils/display_config.cpp
diff --git a/msmcobalt/libqdutils/display_config.h b/msm8998/libqdutils/display_config.h
similarity index 100%
rename from msmcobalt/libqdutils/display_config.h
rename to msm8998/libqdutils/display_config.h
diff --git a/msmcobalt/libqdutils/profiler.cpp b/msm8998/libqdutils/profiler.cpp
similarity index 100%
rename from msmcobalt/libqdutils/profiler.cpp
rename to msm8998/libqdutils/profiler.cpp
diff --git a/msmcobalt/libqdutils/profiler.h b/msm8998/libqdutils/profiler.h
similarity index 100%
rename from msmcobalt/libqdutils/profiler.h
rename to msm8998/libqdutils/profiler.h
diff --git a/msmcobalt/libqdutils/qdMetaData.cpp b/msm8998/libqdutils/qdMetaData.cpp
similarity index 95%
rename from msmcobalt/libqdutils/qdMetaData.cpp
rename to msm8998/libqdutils/qdMetaData.cpp
index 0f3b5e5..f6f57cb 100644
--- a/msmcobalt/libqdutils/qdMetaData.cpp
+++ b/msm8998/libqdutils/qdMetaData.cpp
@@ -94,6 +94,11 @@
case SET_VT_TIMESTAMP:
data->vtTimeStamp = *((uint64_t *)param);
break;
+#ifdef USE_COLOR_METADATA
+ case COLOR_METADATA:
+ data->color = *((ColorMetaData *)param);
+#endif
+ break;
default:
ALOGE("Unknown paramType %d", paramType);
break;
@@ -195,6 +200,11 @@
case GET_VT_TIMESTAMP:
*((uint64_t *)param) = data->vtTimeStamp;
break;
+#ifdef USE_COLOR_METADATA
+ case GET_COLOR_METADATA:
+ *((ColorMetaData *)param) = data->color;
+#endif
+ break;
default:
ALOGE("Unknown paramType %d", paramType);
break;
@@ -232,6 +242,9 @@
dst->fd_metadata, 0);
if (base_dst == reinterpret_cast<void*>(MAP_FAILED)) {
ALOGE("%s: dst mmap() failed: error is %s!", __func__, strerror(errno));
+ if(munmap(base_src, size))
+ ALOGE("%s: failed to unmap src ptr %p, err %d", __func__,
+ (void*)base_src, errno);
return -1;
}
diff --git a/msmcobalt/libqdutils/qdMetaData.h b/msm8998/libqdutils/qdMetaData.h
similarity index 95%
rename from msmcobalt/libqdutils/qdMetaData.h
rename to msm8998/libqdutils/qdMetaData.h
index 2b0b8c6..a0ac324 100644
--- a/msmcobalt/libqdutils/qdMetaData.h
+++ b/msm8998/libqdutils/qdMetaData.h
@@ -30,6 +30,10 @@
#ifndef _QDMETADATA_H
#define _QDMETADATA_H
+#ifdef USE_COLOR_METADATA
+#include <color_metadata.h>
+#endif
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -91,11 +95,15 @@
/* Set by camera to program the VT Timestamp */
uint64_t vtTimeStamp;
+#ifdef USE_COLOR_METADATA
+ /* Color Aspects + HDR info */
+ ColorMetaData color;
+#endif
};
enum DispParamType {
SET_VT_TIMESTAMP = 0x0001,
- UNUSED1 = 0x0002,
+ COLOR_METADATA = 0x0002,
PP_PARAM_INTERLACED = 0x0004,
UNUSED2 = 0x0008,
UNUSED3 = 0x0010,
@@ -114,6 +122,7 @@
enum DispFetchParamType {
GET_VT_TIMESTAMP = 0x0001,
+ GET_COLOR_METADATA = 0x0002,
GET_PP_PARAM_INTERLACED = 0x0004,
GET_BUFFER_GEOMETRY = 0x0080,
GET_REFRESH_RATE = 0x0100,
diff --git a/msmcobalt/libqdutils/qd_utils.cpp b/msm8998/libqdutils/qd_utils.cpp
similarity index 100%
rename from msmcobalt/libqdutils/qd_utils.cpp
rename to msm8998/libqdutils/qd_utils.cpp
diff --git a/msmcobalt/libqdutils/qd_utils.h b/msm8998/libqdutils/qd_utils.h
similarity index 100%
rename from msmcobalt/libqdutils/qd_utils.h
rename to msm8998/libqdutils/qd_utils.h
diff --git a/msmcobalt/libqservice/Android.mk b/msm8998/libqservice/Android.mk
similarity index 100%
rename from msmcobalt/libqservice/Android.mk
rename to msm8998/libqservice/Android.mk
diff --git a/msmcobalt/libqservice/IQClient.cpp b/msm8998/libqservice/IQClient.cpp
similarity index 100%
rename from msmcobalt/libqservice/IQClient.cpp
rename to msm8998/libqservice/IQClient.cpp
diff --git a/msmcobalt/libqservice/IQClient.h b/msm8998/libqservice/IQClient.h
similarity index 100%
rename from msmcobalt/libqservice/IQClient.h
rename to msm8998/libqservice/IQClient.h
diff --git a/msmcobalt/libqservice/IQHDMIClient.cpp b/msm8998/libqservice/IQHDMIClient.cpp
similarity index 100%
rename from msmcobalt/libqservice/IQHDMIClient.cpp
rename to msm8998/libqservice/IQHDMIClient.cpp
diff --git a/msmcobalt/libqservice/IQHDMIClient.h b/msm8998/libqservice/IQHDMIClient.h
similarity index 100%
rename from msmcobalt/libqservice/IQHDMIClient.h
rename to msm8998/libqservice/IQHDMIClient.h
diff --git a/msmcobalt/libqservice/IQService.cpp b/msm8998/libqservice/IQService.cpp
similarity index 100%
rename from msmcobalt/libqservice/IQService.cpp
rename to msm8998/libqservice/IQService.cpp
diff --git a/msmcobalt/libqservice/IQService.h b/msm8998/libqservice/IQService.h
similarity index 98%
rename from msmcobalt/libqservice/IQService.h
rename to msm8998/libqservice/IQService.h
index d25a06d..bf4343a 100644
--- a/msmcobalt/libqservice/IQService.h
+++ b/msm8998/libqservice/IQService.h
@@ -74,6 +74,7 @@
GET_BW_TRANSACTION_STATUS = 32, //Client can query BW transaction status.
SET_LAYER_MIXER_RESOLUTION = 33, // Enables client to set layer mixer resolution.
SET_COLOR_MODE = 34, // Overrides the QDCM mode on the display
+ GET_HDR_CAPABILITIES = 35, // Get HDR capabilities for legacy HWC interface
COMMAND_LIST_END = 400,
};
diff --git a/msmcobalt/libqservice/Makefile.am b/msm8998/libqservice/Makefile.am
similarity index 91%
rename from msmcobalt/libqservice/Makefile.am
rename to msm8998/libqservice/Makefile.am
index 155060d..79935b8 100644
--- a/msmcobalt/libqservice/Makefile.am
+++ b/msm8998/libqservice/Makefile.am
@@ -14,4 +14,5 @@
libqservice_la_SOURCES = $(cpp_sources)
libqservice_la_CFLAGS = $(COMMON_CFLAGS) -DLOG_TAG=\"qdqservice\"
libqservice_la_CPPFLAGS = $(AM_CPPFLAGS)
-libqservice_LDADD = -lhardware -lcutils -llog -lbinder
\ No newline at end of file
+libqservice_LDADD = -lhardware -lcutils -llog -lbinder
+libqservice_la_LDFLAGS = -shared -avoid-version
\ No newline at end of file
diff --git a/msmcobalt/libqservice/QService.cpp b/msm8998/libqservice/QService.cpp
similarity index 100%
rename from msmcobalt/libqservice/QService.cpp
rename to msm8998/libqservice/QService.cpp
diff --git a/msmcobalt/libqservice/QService.h b/msm8998/libqservice/QService.h
similarity index 100%
rename from msmcobalt/libqservice/QService.h
rename to msm8998/libqservice/QService.h
diff --git a/msmcobalt/libqservice/QServiceUtils.h b/msm8998/libqservice/QServiceUtils.h
similarity index 100%
rename from msmcobalt/libqservice/QServiceUtils.h
rename to msm8998/libqservice/QServiceUtils.h
diff --git a/msmcobalt/sdm/.clang-format b/msm8998/sdm/.clang-format
similarity index 100%
rename from msmcobalt/sdm/.clang-format
rename to msm8998/sdm/.clang-format
diff --git a/msmcobalt/sdm/include/core/buffer_allocator.h b/msm8998/sdm/include/core/buffer_allocator.h
similarity index 94%
rename from msmcobalt/sdm/include/core/buffer_allocator.h
rename to msm8998/sdm/include/core/buffer_allocator.h
index 1b47f79..86cc02a 100644
--- a/msmcobalt/sdm/include/core/buffer_allocator.h
+++ b/msm8998/sdm/include/core/buffer_allocator.h
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2015, The Linux Foundation. All rights reserved.
+* Copyright (c) 2015 - 2016, 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
@@ -52,6 +52,8 @@
bool secure = false; //!< Specifies buffer to be allocated from
//!< secure region.
bool cache = false; //!< Specifies whether the buffer needs to be cache.
+ bool secure_camera = false; //!< Specifies buffer to be allocated from specific
+ //!< secure heap and with a specific alignment.
};
/*! @brief Holds the information about the allocated buffer.
diff --git a/msmcobalt/sdm/include/core/buffer_sync_handler.h b/msm8998/sdm/include/core/buffer_sync_handler.h
similarity index 100%
rename from msmcobalt/sdm/include/core/buffer_sync_handler.h
rename to msm8998/sdm/include/core/buffer_sync_handler.h
diff --git a/msmcobalt/sdm/include/core/core_interface.h b/msm8998/sdm/include/core/core_interface.h
similarity index 100%
rename from msmcobalt/sdm/include/core/core_interface.h
rename to msm8998/sdm/include/core/core_interface.h
diff --git a/msmcobalt/sdm/include/core/debug_interface.h b/msm8998/sdm/include/core/debug_interface.h
similarity index 100%
rename from msmcobalt/sdm/include/core/debug_interface.h
rename to msm8998/sdm/include/core/debug_interface.h
diff --git a/msmcobalt/sdm/include/core/display_interface.h b/msm8998/sdm/include/core/display_interface.h
similarity index 95%
rename from msmcobalt/sdm/include/core/display_interface.h
rename to msm8998/sdm/include/core/display_interface.h
index ccaa0b5..416e01a 100644
--- a/msmcobalt/sdm/include/core/display_interface.h
+++ b/msm8998/sdm/include/core/display_interface.h
@@ -140,6 +140,7 @@
struct DisplayConfigFixedInfo {
bool underscan = false; //!< If display support CE underscan.
bool secure = false; //!< If this display is capable of handling secure content.
+ bool is_cmdmode = false; //!< If panel is command mode panel.
};
/*! @brief This structure defines configuration for variable properties of a display device.
@@ -597,10 +598,30 @@
/*! @brief Method to query whether it is Primrary device.
- @return \link Bool \endlink
+ @return true if this interface is primary.
*/
virtual bool IsPrimaryDisplay() = 0;
+ /*! @brief Method to toggle composition types handling by SDM.
+
+ @details Client shall call this method to request SDM to enable/disable a specific type of
+ layer composition. If client disables a composition type, SDM will not handle any of the layer
+ composition using the disabled method in a draw cycle. On lack of resources to handle all
+ layers using other enabled composition methods, Prepare() will return an error.
+
+ Request to toggle composition type is applied from subsequent draw cycles.
+
+ Default state of all defined composition types is enabled.
+
+ @param[in] composition_type \link LayerComposition \endlink
+ @param[in] enable \link enable composition type \endlink
+
+ @return \link DisplayError \endlink
+
+ @sa Prepare
+ */
+ virtual DisplayError SetCompositionState(LayerComposition composition_type, bool enable) = 0;
+
protected:
virtual ~DisplayInterface() { }
};
diff --git a/msmcobalt/sdm/include/core/dump_interface.h b/msm8998/sdm/include/core/dump_interface.h
similarity index 100%
rename from msmcobalt/sdm/include/core/dump_interface.h
rename to msm8998/sdm/include/core/dump_interface.h
diff --git a/msmcobalt/sdm/include/core/layer_buffer.h b/msm8998/sdm/include/core/layer_buffer.h
similarity index 97%
rename from msmcobalt/sdm/include/core/layer_buffer.h
rename to msm8998/sdm/include/core/layer_buffer.h
index 55318eb..4f80f86 100644
--- a/msmcobalt/sdm/include/core/layer_buffer.h
+++ b/msm8998/sdm/include/core/layer_buffer.h
@@ -208,6 +208,10 @@
uint32_t secure_display : 1; //!< This flag shall be set by the client to indicate that the
//!< secure display session is in progress. Secure display
//!< session can not coexist with non-secure session.
+
+ uint32_t secure_camera : 1; //!< This flag shall be set by the client to indicate that the
+ //!< buffer is associated with secure camera session. A secure
+ //!< camera layer can co-exist with non-secure layer(s).
};
uint32_t flags = 0; //!< For initialization purpose only.
diff --git a/msmcobalt/sdm/include/core/layer_stack.h b/msm8998/sdm/include/core/layer_stack.h
similarity index 97%
rename from msmcobalt/sdm/include/core/layer_stack.h
rename to msm8998/sdm/include/core/layer_stack.h
index 0fcab25..2741f71 100644
--- a/msmcobalt/sdm/include/core/layer_stack.h
+++ b/msm8998/sdm/include/core/layer_stack.h
@@ -102,10 +102,10 @@
/* === List of composition types set by Client === */
/* These composition types represent target buffer layers onto which GPU or Blit will draw if SDM
decide to have some or all layers drawn by respective composition engine.
- If client does not provide a target buffer layer, SDM will assume that respective composition
- engine is not available and will not mark any layer for such a composition. If SDM is unable
- to handle layers without support of such a composition engine, Prepare() call will return
- failure.
+ Client must provide a target buffer layer, if respective composition type is not disabled by
+ an explicit call to SetCompositionState() method. If a composition type is not disabled,
+ providing a target buffer layer is optional. If SDM is unable to handle layers without support
+ of such a composition engine, Prepare() call will return failure.
*/
kCompositionGPUTarget, //!< This layer will hold result of composition for layers marked for
//!< GPU composition.
diff --git a/msmcobalt/sdm/include/core/sdm_types.h b/msm8998/sdm/include/core/sdm_types.h
similarity index 100%
rename from msmcobalt/sdm/include/core/sdm_types.h
rename to msm8998/sdm/include/core/sdm_types.h
diff --git a/msmcobalt/sdm/include/private/color_interface.h b/msm8998/sdm/include/private/color_interface.h
similarity index 100%
rename from msmcobalt/sdm/include/private/color_interface.h
rename to msm8998/sdm/include/private/color_interface.h
diff --git a/msmcobalt/sdm/include/private/color_params.h b/msm8998/sdm/include/private/color_params.h
similarity index 99%
rename from msmcobalt/sdm/include/private/color_params.h
rename to msm8998/sdm/include/private/color_params.h
index fdd0c9e..d2f8094 100644
--- a/msmcobalt/sdm/include/private/color_params.h
+++ b/msm8998/sdm/include/private/color_params.h
@@ -238,6 +238,7 @@
struct PPDETuningCfgData {
uint32_t cfg_en = 0;
PPDETuningCfg params;
+ bool cfg_pending = false;
};
struct SDEGamutCfg {
diff --git a/msmcobalt/sdm/include/private/extension_interface.h b/msm8998/sdm/include/private/extension_interface.h
similarity index 87%
rename from msmcobalt/sdm/include/private/extension_interface.h
rename to msm8998/sdm/include/private/extension_interface.h
index dea127e..baf18a1 100644
--- a/msmcobalt/sdm/include/private/extension_interface.h
+++ b/msm8998/sdm/include/private/extension_interface.h
@@ -31,7 +31,6 @@
#include "partial_update_interface.h"
#include "strategy_interface.h"
#include "resource_interface.h"
-#include "rotator_interface.h"
namespace sdm {
@@ -59,8 +58,8 @@
PartialUpdateInterface **interface) = 0;
virtual DisplayError DestroyPartialUpdate(PartialUpdateInterface *interface) = 0;
- virtual DisplayError CreateStrategyExtn(DisplayType type, HWDisplayMode mode,
- HWS3DMode s3d_mode,
+ virtual DisplayError CreateStrategyExtn(DisplayType type, const HWResourceInfo &hw_resource_info,
+ const HWPanelInfo &hw_panel_info,
const HWMixerAttributes &mixer_attributes,
const DisplayConfigVariableInfo &fb_config,
StrategyInterface **interface) = 0;
@@ -68,15 +67,10 @@
virtual DisplayError CreateResourceExtn(const HWResourceInfo &hw_resource_info,
ResourceInterface **interface,
+ BufferAllocator *buffer_allocator,
BufferSyncHandler *buffer_sync_handler) = 0;
virtual DisplayError DestroyResourceExtn(ResourceInterface *interface) = 0;
- virtual DisplayError CreateRotator(const HWRotatorInfo &hw_rot_info,
- BufferAllocator *buffer_allocator,
- BufferSyncHandler *buffer_sync_handler,
- RotatorInterface **intf) = 0;
- virtual DisplayError DestroyRotator(RotatorInterface *intf) = 0;
-
protected:
virtual ~ExtensionInterface() { }
};
diff --git a/msmcobalt/sdm/include/private/hw_info_types.h b/msm8998/sdm/include/private/hw_info_types.h
similarity index 95%
rename from msmcobalt/sdm/include/private/hw_info_types.h
rename to msm8998/sdm/include/private/hw_info_types.h
index e3bd579..b960955 100644
--- a/msmcobalt/sdm/include/private/hw_info_types.h
+++ b/msm8998/sdm/include/private/hw_info_types.h
@@ -236,6 +236,8 @@
char panel_name[256] = {0}; // Panel name
HWS3DMode s3d_mode = kS3DModeNone; // Panel's current s3d mode.
int panel_max_brightness = 0; // Max panel brightness
+ uint32_t left_roi_count = 1; // Number if ROI supported on left panel
+ uint32_t right_roi_count = 1; // Number if ROI supported on right panel
bool operator !=(const HWPanelInfo &panel_info) {
return ((port != panel_info.port) || (mode != panel_info.mode) ||
@@ -249,8 +251,9 @@
(dfps_porch_mode != panel_info.dfps_porch_mode) ||
(ping_pong_split != panel_info.ping_pong_split) ||
(max_fps != panel_info.max_fps) || (is_primary_panel != panel_info.is_primary_panel) ||
- (split_info != panel_info.split_info) ||
- (s3d_mode != panel_info.s3d_mode));
+ (split_info != panel_info.split_info) || (s3d_mode != panel_info.s3d_mode) ||
+ (left_roi_count != panel_info.left_roi_count) ||
+ (right_roi_count != panel_info.right_roi_count));
}
bool operator ==(const HWPanelInfo &panel_info) {
@@ -265,6 +268,7 @@
bool secure = false;
uint32_t frame_rate = 0;
LayerTransform transform;
+ bool secure_camera = false;
bool operator==(const HWSessionConfig& config) const {
return (src_rect == config.src_rect &&
@@ -272,7 +276,8 @@
buffer_count == config.buffer_count &&
secure == config.secure &&
frame_rate == config.frame_rate &&
- transform == config.transform);
+ transform == config.transform &&
+ secure_camera == config.secure_camera);
}
bool operator!=(const HWSessionConfig& config) const {
@@ -429,13 +434,16 @@
LayerRect updated_src_rect[kMaxSDELayers]; // Updated layer src rects in s3d mode
LayerRect updated_dst_rect[kMaxSDELayers]; // Updated layer dst rects in s3d mode
bool updating[kMaxSDELayers] = {0}; // Updated by strategy, considering plane_alpha+updating
+ uint32_t roi_index[kMaxSDELayers] = {0}; // Stores the ROI index where the layers are visible.
uint32_t count = 0; // Total number of layers which need to be set on hardware.
int sync_handle = -1;
- LayerRect left_partial_update; // Left ROI.
- LayerRect right_partial_update; // Right ROI.
+ std::vector<LayerRect> left_frame_roi; // Left ROI.
+ std::vector<LayerRect> right_frame_roi; // Right ROI.
+
+ bool roi_split = false; // Indicates separated left and right ROI
bool use_hw_cursor = false; // Indicates that HWCursor pipe needs to be used for cursor layer
DestScaleInfoMap dest_scale_info_map = {};
diff --git a/msmcobalt/sdm/include/private/partial_update_interface.h b/msm8998/sdm/include/private/partial_update_interface.h
similarity index 83%
rename from msmcobalt/sdm/include/private/partial_update_interface.h
rename to msm8998/sdm/include/private/partial_update_interface.h
index 3159b56..b753587 100644
--- a/msmcobalt/sdm/include/private/partial_update_interface.h
+++ b/msm8998/sdm/include/private/partial_update_interface.h
@@ -33,10 +33,17 @@
namespace sdm {
+struct PUConstraints {
+ bool enable = true; //!< If this is set, PU will be enabled or it will be disabled
+ bool enable_cursor_pu = false; //!< If this is set, PU will consider cursor layer in the layer
+ //!< stack for cursor partial update
+};
+
class PartialUpdateInterface {
public:
+ virtual DisplayError Start(const PUConstraints &pu_constraints) = 0;
virtual DisplayError GenerateROI(HWLayersInfo *hw_layers_info) = 0;
- virtual void ControlPartialUpdate(bool enable) = 0;
+ virtual DisplayError Stop() = 0;
protected:
virtual ~PartialUpdateInterface() { }
diff --git a/msmcobalt/sdm/include/private/resource_interface.h b/msm8998/sdm/include/private/resource_interface.h
similarity index 96%
rename from msmcobalt/sdm/include/private/resource_interface.h
rename to msm8998/sdm/include/private/resource_interface.h
index 6115112..3f34e91 100644
--- a/msmcobalt/sdm/include/private/resource_interface.h
+++ b/msm8998/sdm/include/private/resource_interface.h
@@ -44,8 +44,9 @@
const HWMixerAttributes &mixer_attributes) = 0;
virtual DisplayError Start(Handle display_ctx) = 0;
virtual DisplayError Stop(Handle display_ctx) = 0;
- virtual DisplayError Acquire(Handle display_ctx, HWLayers *hw_layers) = 0;
+ virtual DisplayError Prepare(Handle display_ctx, HWLayers *hw_layers) = 0;
virtual DisplayError PostPrepare(Handle display_ctx, HWLayers *hw_layers) = 0;
+ virtual DisplayError Commit(Handle display_ctx, HWLayers *hw_layers) = 0;
virtual DisplayError PostCommit(Handle display_ctx, HWLayers *hw_layers) = 0;
virtual void Purge(Handle display_ctx) = 0;
virtual DisplayError SetMaxMixerStages(Handle display_ctx, uint32_t max_mixer_stages) = 0;
diff --git a/msmcobalt/sdm/include/private/rotator_interface.h b/msm8998/sdm/include/private/rotator_interface.h
similarity index 100%
rename from msmcobalt/sdm/include/private/rotator_interface.h
rename to msm8998/sdm/include/private/rotator_interface.h
diff --git a/msmcobalt/sdm/include/private/strategy_interface.h b/msm8998/sdm/include/private/strategy_interface.h
similarity index 92%
rename from msmcobalt/sdm/include/private/strategy_interface.h
rename to msm8998/sdm/include/private/strategy_interface.h
index f2bfe23..122a3c6 100644
--- a/msmcobalt/sdm/include/private/strategy_interface.h
+++ b/msm8998/sdm/include/private/strategy_interface.h
@@ -48,9 +48,11 @@
virtual DisplayError Start(HWLayersInfo *hw_layers_info, uint32_t *max_attempts) = 0;
virtual DisplayError GetNextStrategy(StrategyConstraints *constraints) = 0;
virtual DisplayError Stop() = 0;
- virtual DisplayError Reconfigure(HWDisplayMode mode, HWS3DMode s3d_mode,
+ virtual DisplayError Reconfigure(const HWPanelInfo &hw_panel_info,
+ const HWResourceInfo &hw_res_info,
const HWMixerAttributes &mixer_attributes,
const DisplayConfigVariableInfo &fb_config) = 0;
+ virtual DisplayError SetCompositionState(LayerComposition composition_type, bool enable) = 0;
protected:
virtual ~StrategyInterface() { }
diff --git a/msmcobalt/sdm/include/utils/constants.h b/msm8998/sdm/include/utils/constants.h
similarity index 100%
rename from msmcobalt/sdm/include/utils/constants.h
rename to msm8998/sdm/include/utils/constants.h
diff --git a/msmcobalt/sdm/include/utils/debug.h b/msm8998/sdm/include/utils/debug.h
similarity index 99%
rename from msmcobalt/sdm/include/utils/debug.h
rename to msm8998/sdm/include/utils/debug.h
index 99254ad..540a25e 100644
--- a/msmcobalt/sdm/include/utils/debug.h
+++ b/msm8998/sdm/include/utils/debug.h
@@ -78,6 +78,7 @@
static bool IsAVRDisabled();
static bool IsExtAnimDisabled();
static DisplayError GetMixerResolution(uint32_t *width, uint32_t *height);
+ static int GetExtMaxlayers();
static bool GetProperty(const char *property_name, char *value);
static bool SetProperty(const char *property_name, const char *value);
diff --git a/msmcobalt/sdm/include/utils/formats.h b/msm8998/sdm/include/utils/formats.h
similarity index 100%
rename from msmcobalt/sdm/include/utils/formats.h
rename to msm8998/sdm/include/utils/formats.h
diff --git a/msmcobalt/sdm/include/utils/locker.h b/msm8998/sdm/include/utils/locker.h
similarity index 100%
rename from msmcobalt/sdm/include/utils/locker.h
rename to msm8998/sdm/include/utils/locker.h
diff --git a/msmcobalt/sdm/include/utils/rect.h b/msm8998/sdm/include/utils/rect.h
similarity index 100%
rename from msmcobalt/sdm/include/utils/rect.h
rename to msm8998/sdm/include/utils/rect.h
diff --git a/msmcobalt/sdm/include/utils/sys.h b/msm8998/sdm/include/utils/sys.h
similarity index 100%
rename from msmcobalt/sdm/include/utils/sys.h
rename to msm8998/sdm/include/utils/sys.h
diff --git a/msmcobalt/sdm/libs/core/Android.mk b/msm8998/sdm/libs/core/Android.mk
similarity index 97%
rename from msmcobalt/sdm/libs/core/Android.mk
rename to msm8998/sdm/libs/core/Android.mk
index de314ba..f97ff33 100644
--- a/msmcobalt/sdm/libs/core/Android.mk
+++ b/msm8998/sdm/libs/core/Android.mk
@@ -53,6 +53,5 @@
$(SDM_HEADER_PATH)/private/hw_info_types.h \
$(SDM_HEADER_PATH)/private/partial_update_interface.h \
$(SDM_HEADER_PATH)/private/resource_interface.h \
- $(SDM_HEADER_PATH)/private/rotator_interface.h \
$(SDM_HEADER_PATH)/private/strategy_interface.h
include $(BUILD_COPY_HEADERS)
diff --git a/msmcobalt/sdm/libs/core/Makefile.am b/msm8998/sdm/libs/core/Makefile.am
similarity index 96%
rename from msmcobalt/sdm/libs/core/Makefile.am
rename to msm8998/sdm/libs/core/Makefile.am
index 8dbbe2f..9041394 100644
--- a/msmcobalt/sdm/libs/core/Makefile.am
+++ b/msm8998/sdm/libs/core/Makefile.am
@@ -40,4 +40,5 @@
libsdmcore_la_SOURCES = $(c_sources)
libsdmcore_la_CFLAGS = $(COMMON_CFLAGS) -DLOG_TAG=\"SDM\"
libsdmcore_la_CPPFLAGS = $(AM_CPPFLAGS)
-libsdmcore_la_LIBADD = ../utils/libsdmutils.la
\ No newline at end of file
+libsdmcore_la_LIBADD = ../utils/libsdmutils.la
+libsdmcore_la_LDFLAGS = -shared -avoid-version
\ No newline at end of file
diff --git a/msmcobalt/sdm/libs/core/color_manager.cpp b/msm8998/sdm/libs/core/color_manager.cpp
similarity index 100%
rename from msmcobalt/sdm/libs/core/color_manager.cpp
rename to msm8998/sdm/libs/core/color_manager.cpp
diff --git a/msmcobalt/sdm/libs/core/color_manager.h b/msm8998/sdm/libs/core/color_manager.h
similarity index 100%
rename from msmcobalt/sdm/libs/core/color_manager.h
rename to msm8998/sdm/libs/core/color_manager.h
diff --git a/msmcobalt/sdm/libs/core/comp_manager.cpp b/msm8998/sdm/libs/core/comp_manager.cpp
similarity index 89%
rename from msmcobalt/sdm/libs/core/comp_manager.cpp
rename to msm8998/sdm/libs/core/comp_manager.cpp
index 0b66320..d1530dc 100644
--- a/msmcobalt/sdm/libs/core/comp_manager.cpp
+++ b/msm8998/sdm/libs/core/comp_manager.cpp
@@ -35,16 +35,17 @@
DisplayError CompManager::Init(const HWResourceInfo &hw_res_info,
ExtensionInterface *extension_intf,
+ BufferAllocator *buffer_allocator,
BufferSyncHandler *buffer_sync_handler) {
SCOPE_LOCK(locker_);
DisplayError error = kErrorNone;
if (extension_intf) {
- error = extension_intf->CreateResourceExtn(hw_res_info, &resource_intf_, buffer_sync_handler);
+ error = extension_intf->CreateResourceExtn(hw_res_info, &resource_intf_, buffer_allocator,
+ buffer_sync_handler);
} else {
- resource_intf_ = &resource_default_;
- error = resource_default_.Init(hw_res_info);
+ error = ResourceDefault::CreateResourceDefault(hw_res_info, &resource_intf_);
}
if (error != kErrorNone) {
@@ -63,7 +64,7 @@
if (extension_intf_) {
extension_intf_->DestroyResourceExtn(resource_intf_);
} else {
- resource_default_.Deinit();
+ ResourceDefault::DestroyResourceDefault(resource_intf_);
}
return kErrorNone;
@@ -118,6 +119,7 @@
// resources for the added display is configured properly.
if (!display_comp_ctx->is_primary_panel) {
safe_mode_ = true;
+ max_sde_ext_layers_ = UINT32(Debug::GetExtMaxlayers());
}
DLOGV_IF(kTagCompManager, "registered display bit mask 0x%x, configured display bit mask 0x%x, " \
@@ -127,11 +129,11 @@
return kErrorNone;
}
-DisplayError CompManager::UnregisterDisplay(Handle comp_handle) {
+DisplayError CompManager::UnregisterDisplay(Handle display_ctx) {
SCOPE_LOCK(locker_);
DisplayCompositionContext *display_comp_ctx =
- reinterpret_cast<DisplayCompositionContext *>(comp_handle);
+ reinterpret_cast<DisplayCompositionContext *>(display_ctx);
if (!display_comp_ctx) {
return kErrorParameters;
@@ -212,7 +214,7 @@
// Limit 2 layer SDE Comp if its not a Primary Display
if (!display_comp_ctx->is_primary_panel) {
- constraints->max_layers = 2;
+ constraints->max_layers = max_sde_ext_layers_;
}
// If a strategy fails after successfully allocating resources, then set safe mode
@@ -220,6 +222,9 @@
constraints->safe_mode = true;
}
+ // Set use_cursor constraint to Strategy
+ constraints->use_cursor = display_comp_ctx->valid_cursor;
+
// Avoid idle fallback, if there is only one app layer.
// TODO(user): App layer count will change for hybrid composition
uint32_t app_layer_count = UINT32(hw_layers->info.stack->layers.size()) - 1;
@@ -227,18 +232,19 @@
// Handle the idle timeout by falling back
constraints->safe_mode = true;
}
-
- if (SupportLayerAsCursor(comp_handle, hw_layers)) {
- constraints->use_cursor = true;
- }
}
void CompManager::PrePrepare(Handle display_ctx, HWLayers *hw_layers) {
SCOPE_LOCK(locker_);
DisplayCompositionContext *display_comp_ctx =
reinterpret_cast<DisplayCompositionContext *>(display_ctx);
+ display_comp_ctx->valid_cursor = SupportLayerAsCursor(display_comp_ctx, hw_layers);
+
+ // pu constraints
+ display_comp_ctx->pu_constraints.enable_cursor_pu = display_comp_ctx->valid_cursor;
+
display_comp_ctx->strategy->Start(&hw_layers->info, &display_comp_ctx->max_strategies,
- display_comp_ctx->partial_update_enable);
+ display_comp_ctx->pu_constraints);
display_comp_ctx->remaining_strategies = display_comp_ctx->max_strategies;
}
@@ -267,8 +273,8 @@
}
if (!exit) {
- error = resource_intf_->Acquire(display_resource_ctx, hw_layers);
- // Exit if successfully allocated resource, else try next strategy.
+ error = resource_intf_->Prepare(display_resource_ctx, hw_layers);
+ // Exit if successfully prepared resource, else try next strategy.
exit = (error == kErrorNone);
}
}
@@ -299,6 +305,15 @@
return kErrorNone;
}
+DisplayError CompManager::Commit(Handle display_ctx, HWLayers *hw_layers) {
+ SCOPE_LOCK(locker_);
+
+ DisplayCompositionContext *display_comp_ctx =
+ reinterpret_cast<DisplayCompositionContext *>(display_ctx);
+
+ return resource_intf_->Commit(display_comp_ctx->display_resource_ctx, hw_layers);
+}
+
DisplayError CompManager::ReConfigure(Handle display_ctx, HWLayers *hw_layers) {
SCOPE_LOCK(locker_);
@@ -308,7 +323,7 @@
DisplayError error = kErrorUndefined;
resource_intf_->Start(display_resource_ctx);
- error = resource_intf_->Acquire(display_resource_ctx, hw_layers);
+ error = resource_intf_->Prepare(display_resource_ctx, hw_layers);
if (error != kErrorNone) {
DLOGE("Reconfigure failed for display = %d", display_comp_ctx->display_type);
@@ -402,7 +417,7 @@
DisplayCompositionContext *display_comp_ctx =
reinterpret_cast<DisplayCompositionContext *>(display_ctx);
- display_comp_ctx->partial_update_enable = enable;
+ display_comp_ctx->pu_constraints.enable = enable;
}
void CompManager::AppendDump(char *buffer, uint32_t length) {
@@ -492,5 +507,14 @@
return resource_intf_->SetDetailEnhancerData(display_comp_ctx->display_resource_ctx, de_data);
}
-} // namespace sdm
+DisplayError CompManager::SetCompositionState(Handle display_ctx,
+ LayerComposition composition_type, bool enable) {
+ SCOPE_LOCK(locker_);
+ DisplayCompositionContext *display_comp_ctx =
+ reinterpret_cast<DisplayCompositionContext *>(display_ctx);
+
+ return display_comp_ctx->strategy->SetCompositionState(composition_type, enable);
+}
+
+} // namespace sdm
diff --git a/msmcobalt/sdm/libs/core/comp_manager.h b/msm8998/sdm/libs/core/comp_manager.h
similarity index 91%
rename from msmcobalt/sdm/libs/core/comp_manager.h
rename to msm8998/sdm/libs/core/comp_manager.h
index 688010c..ebb257b 100644
--- a/msmcobalt/sdm/libs/core/comp_manager.h
+++ b/msm8998/sdm/libs/core/comp_manager.h
@@ -40,19 +40,20 @@
class CompManager : public DumpImpl {
public:
DisplayError Init(const HWResourceInfo &hw_res_info_, ExtensionInterface *extension_intf,
- BufferSyncHandler *buffer_sync_handler);
+ BufferAllocator *buffer_allocator, BufferSyncHandler *buffer_sync_handler);
DisplayError Deinit();
DisplayError RegisterDisplay(DisplayType type, const HWDisplayAttributes &display_attributes,
const HWPanelInfo &hw_panel_info,
const HWMixerAttributes &mixer_attributes,
- const DisplayConfigVariableInfo &fb_config, Handle *res_mgr_hnd);
- DisplayError UnregisterDisplay(Handle res_mgr_hnd);
+ const DisplayConfigVariableInfo &fb_config, Handle *display_ctx);
+ DisplayError UnregisterDisplay(Handle display_ctx);
DisplayError ReconfigureDisplay(Handle display_ctx, const HWDisplayAttributes &display_attributes,
const HWPanelInfo &hw_panel_info,
const HWMixerAttributes &mixer_attributes,
const DisplayConfigVariableInfo &fb_config);
void PrePrepare(Handle display_ctx, HWLayers *hw_layers);
DisplayError Prepare(Handle display_ctx, HWLayers *hw_layers);
+ DisplayError Commit(Handle display_ctx, HWLayers *hw_layers);
DisplayError PostPrepare(Handle display_ctx, HWLayers *hw_layers);
DisplayError ReConfigure(Handle display_ctx, HWLayers *hw_layers);
DisplayError PostCommit(Handle display_ctx, HWLayers *hw_layers);
@@ -68,6 +69,8 @@
DisplayError SetMaxBandwidthMode(HWBwModes mode);
DisplayError GetScaleLutConfig(HWScaleLutInfo *lut_info);
DisplayError SetDetailEnhancerData(Handle display_ctx, const DisplayDetailEnhancerData &de_data);
+ DisplayError SetCompositionState(Handle display_ctx, LayerComposition composition_type,
+ bool enable);
// DumpImpl method
virtual void AppendDump(char *buffer, uint32_t length);
@@ -86,15 +89,15 @@
uint32_t remaining_strategies = 0;
bool idle_fallback = false;
bool fallback_ = false;
- uint32_t partial_update_enable = true;
// Using primary panel flag of hw panel to configure Constraints. We do not need other hw
// panel parameters for now.
bool is_primary_panel = false;
+ bool valid_cursor = false;
+ PUConstraints pu_constraints = {};
};
Locker locker_;
ResourceInterface *resource_intf_ = NULL;
- ResourceDefault resource_default_;
std::bitset<kDisplayMax> registered_displays_; // Bit mask of registered displays
std::bitset<kDisplayMax> configured_displays_; // Bit mask of sucessfully configured displays
bool safe_mode_ = false; // Flag to notify all displays to be in resource crunch
@@ -103,6 +106,7 @@
HWResourceInfo hw_res_info_;
ExtensionInterface *extension_intf_ = NULL;
uint32_t max_layers_ = kMaxSDELayers;
+ uint32_t max_sde_ext_layers_ = 0;
};
} // namespace sdm
diff --git a/msmcobalt/sdm/libs/core/core_impl.cpp b/msm8998/sdm/libs/core/core_impl.cpp
similarity index 87%
rename from msmcobalt/sdm/libs/core/core_impl.cpp
rename to msm8998/sdm/libs/core/core_impl.cpp
index 66eb846..5976176 100644
--- a/msmcobalt/sdm/libs/core/core_impl.cpp
+++ b/msm8998/sdm/libs/core/core_impl.cpp
@@ -76,19 +76,11 @@
goto CleanupOnError;
}
- error = comp_mgr_.Init(hw_resource_, extension_intf_, buffer_sync_handler_);
+ error = comp_mgr_.Init(hw_resource_, extension_intf_, buffer_allocator_, buffer_sync_handler_);
if (error != kErrorNone) {
goto CleanupOnError;
}
- if (extension_intf_ && hw_resource_.hw_rot_info.num_rotator) {
- error = extension_intf_->CreateRotator(hw_resource_.hw_rot_info, buffer_allocator_,
- buffer_sync_handler_, &rotator_intf_);
- if (error != kErrorNone) {
- DLOGW("rotation is not supported");
- }
- }
-
error = ColorManagerProxy::Init(hw_resource_);
// if failed, doesn't affect display core functionalities.
if (error != kErrorNone) {
@@ -108,10 +100,6 @@
DisplayError CoreImpl::Deinit() {
SCOPE_LOCK(locker_);
- if (extension_intf_ && hw_resource_.hw_rot_info.num_rotator) {
- extension_intf_->DestroyRotator(rotator_intf_);
- }
-
ColorManagerProxy::Deinit();
comp_mgr_.Deinit();
@@ -133,15 +121,15 @@
switch (type) {
case kPrimary:
display_base = new DisplayPrimary(event_handler, hw_info_intf_, buffer_sync_handler_,
- &comp_mgr_, rotator_intf_);
+ &comp_mgr_);
break;
case kHDMI:
display_base = new DisplayHDMI(event_handler, hw_info_intf_, buffer_sync_handler_,
- &comp_mgr_, rotator_intf_);
+ &comp_mgr_);
break;
case kVirtual:
display_base = new DisplayVirtual(event_handler, hw_info_intf_, buffer_sync_handler_,
- &comp_mgr_, rotator_intf_);
+ &comp_mgr_);
break;
default:
DLOGE("Spurious display type %d", type);
diff --git a/msmcobalt/sdm/libs/core/core_impl.h b/msm8998/sdm/libs/core/core_impl.h
similarity index 94%
rename from msmcobalt/sdm/libs/core/core_impl.h
rename to msm8998/sdm/libs/core/core_impl.h
index c2e98c3..459495d 100644
--- a/msmcobalt/sdm/libs/core/core_impl.h
+++ b/msm8998/sdm/libs/core/core_impl.h
@@ -38,9 +38,6 @@
namespace sdm {
-class HWInfoInterface;
-class RotatorCtrl;
-
class CoreImpl : public CoreInterface {
public:
// This class implements display core interface revision 1.0.
@@ -63,12 +60,11 @@
protected:
Locker locker_;
- BufferAllocator *buffer_allocator_;
- BufferSyncHandler *buffer_sync_handler_;
+ BufferAllocator *buffer_allocator_ = NULL;
+ BufferSyncHandler *buffer_sync_handler_ = NULL;
HWResourceInfo hw_resource_;
CompManager comp_mgr_;
HWInfoInterface *hw_info_intf_ = NULL;
- RotatorInterface *rotator_intf_ = NULL;
DynLib extension_lib_;
ExtensionInterface *extension_intf_ = NULL;
CreateExtensionInterface create_extension_intf_ = NULL;
diff --git a/msmcobalt/sdm/libs/core/core_interface.cpp b/msm8998/sdm/libs/core/core_interface.cpp
similarity index 100%
rename from msmcobalt/sdm/libs/core/core_interface.cpp
rename to msm8998/sdm/libs/core/core_interface.cpp
diff --git a/msmcobalt/sdm/libs/core/display_base.cpp b/msm8998/sdm/libs/core/display_base.cpp
similarity index 92%
rename from msmcobalt/sdm/libs/core/display_base.cpp
rename to msm8998/sdm/libs/core/display_base.cpp
index d7036e3..843ed6e 100644
--- a/msmcobalt/sdm/libs/core/display_base.cpp
+++ b/msm8998/sdm/libs/core/display_base.cpp
@@ -41,11 +41,10 @@
// TODO(user): Have a single structure handle carries all the interface pointers and variables.
DisplayBase::DisplayBase(DisplayType display_type, DisplayEventHandler *event_handler,
HWDeviceType hw_device_type, BufferSyncHandler *buffer_sync_handler,
- CompManager *comp_manager, RotatorInterface *rotator_intf,
- HWInfoInterface *hw_info_intf)
+ CompManager *comp_manager, HWInfoInterface *hw_info_intf)
: display_type_(display_type), event_handler_(event_handler), hw_device_type_(hw_device_type),
buffer_sync_handler_(buffer_sync_handler), comp_manager_(comp_manager),
- rotator_intf_(rotator_intf), hw_info_intf_(hw_info_intf) {
+ hw_info_intf_(hw_info_intf) {
}
DisplayError DisplayBase::Init() {
@@ -90,13 +89,6 @@
goto CleanupOnError;
}
- if (rotator_intf_) {
- error = rotator_intf_->RegisterDisplay(display_type_, &display_rotator_ctx_);
- if (error != kErrorNone) {
- goto CleanupOnError;
- }
- }
-
if (hw_info_intf_) {
HWResourceInfo hw_resource_info = HWResourceInfo();
hw_info_intf_->GetHWResourceInfo(&hw_resource_info);
@@ -126,9 +118,6 @@
DisplayError DisplayBase::Deinit() {
lock_guard<recursive_mutex> obj(recursive_mutex_);
- if (rotator_intf_) {
- rotator_intf_->UnregisterDisplay(display_rotator_ctx_);
- }
if (color_mgr_) {
delete color_mgr_;
@@ -243,29 +232,15 @@
break;
}
- if (IsRotationRequired(&hw_layers_)) {
- if (!rotator_intf_) {
- continue;
- }
- error = rotator_intf_->Prepare(display_rotator_ctx_, &hw_layers_);
- } else {
- // Release all the previous rotator sessions.
- if (rotator_intf_) {
- error = rotator_intf_->Purge(display_rotator_ctx_);
- }
- }
-
+ error = hw_intf_->Validate(&hw_layers_);
if (error == kErrorNone) {
- error = hw_intf_->Validate(&hw_layers_);
- if (error == kErrorNone) {
- // Strategy is successful now, wait for Commit().
- pending_commit_ = true;
- break;
- }
- if (error == kErrorShutDown) {
- comp_manager_->PostPrepare(display_comp_ctx_, &hw_layers_);
- return error;
- }
+ // Strategy is successful now, wait for Commit().
+ pending_commit_ = true;
+ break;
+ }
+ if (error == kErrorShutDown) {
+ comp_manager_->PostPrepare(display_comp_ctx_, &hw_layers_);
+ return error;
}
}
@@ -307,8 +282,7 @@
}
}
- if (rotator_intf_ && IsRotationRequired(&hw_layers_)) {
- error = rotator_intf_->Commit(display_rotator_ctx_, &hw_layers_);
+ if (comp_manager_->Commit(display_comp_ctx_, &hw_layers_)) {
if (error != kErrorNone) {
return error;
}
@@ -327,13 +301,6 @@
return error;
}
- if (rotator_intf_ && IsRotationRequired(&hw_layers_)) {
- error = rotator_intf_->PostCommit(display_rotator_ctx_, &hw_layers_);
- if (error != kErrorNone) {
- return error;
- }
- }
-
if (partial_update_control_) {
comp_manager_->ControlPartialUpdate(display_comp_ctx_, true /* enable */);
}
@@ -357,17 +324,7 @@
hw_layers_.info.count = 0;
error = hw_intf_->Flush();
if (error == kErrorNone) {
- // Release all the rotator sessions.
- if (rotator_intf_) {
- error = rotator_intf_->Purge(display_rotator_ctx_);
- if (error != kErrorNone) {
- DLOGE("Rotator purge failed for display %d", display_type_);
- return error;
- }
- }
-
comp_manager_->Purge(display_comp_ctx_);
-
pending_commit_ = false;
} else {
DLOGW("Unable to flush display = %d", display_type_);
@@ -402,6 +359,13 @@
return kErrorNotSupported;
}
+DisplayError DisplayBase::GetConfig(DisplayConfigFixedInfo *variable_info) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ variable_info->is_cmdmode = (hw_panel_info_.mode == kModeCommand);
+
+ return kErrorNone;
+}
+
DisplayError DisplayBase::GetActiveConfig(uint32_t *index) {
lock_guard<recursive_mutex> obj(recursive_mutex_);
return hw_intf_->GetActiveConfig(index);
@@ -435,17 +399,7 @@
hw_layers_.info.count = 0;
error = hw_intf_->Flush();
if (error == kErrorNone) {
- // Release all the rotator sessions.
- if (rotator_intf_) {
- error = rotator_intf_->Purge(display_rotator_ctx_);
- if (error != kErrorNone) {
- DLOGE("Rotator purge failed for display %d", display_type_);
- return error;
- }
- }
-
comp_manager_->Purge(display_comp_ctx_);
-
error = hw_intf_->PowerOff();
}
break;
@@ -564,14 +518,17 @@
DumpImpl::AppendString(buffer, length, "\n");
HWLayersInfo &layer_info = hw_layers_.info;
- LayerRect &l_roi = layer_info.left_partial_update;
- LayerRect &r_roi = layer_info.right_partial_update;
- DumpImpl::AppendString(buffer, length, "\nROI(L T R B) : LEFT(%d %d %d %d)", INT(l_roi.left),
- INT(l_roi.top), INT(l_roi.right), INT(l_roi.bottom));
- if (IsValid(r_roi)) {
- DumpImpl::AppendString(buffer, length, ", RIGHT(%d %d %d %d)", INT(r_roi.left),
- INT(r_roi.top), INT(r_roi.right), INT(r_roi.bottom));
+ for (uint32_t i = 0; i < layer_info.left_frame_roi.size(); i++) {
+ LayerRect &l_roi = layer_info.left_frame_roi.at(i);
+ LayerRect &r_roi = layer_info.right_frame_roi.at(i);
+
+ DumpImpl::AppendString(buffer, length, "\nROI%d(L T R B) : LEFT(%d %d %d %d)", i,
+ INT(l_roi.left), INT(l_roi.top), INT(l_roi.right), INT(l_roi.bottom));
+ if (IsValid(r_roi)) {
+ DumpImpl::AppendString(buffer, length, ", RIGHT(%d %d %d %d)", INT(r_roi.left),
+ INT(r_roi.top), INT(r_roi.right), INT(r_roi.bottom));
+ }
}
const char *header = "\n| Idx | Comp Type | Split | WB | Pipe | W x H | Format | Src Rect (L T R B) | Dst Rect (L T R B) | Z | Flags | Deci(HxV) | CS |"; //NOLINT
@@ -660,21 +617,6 @@
}
}
-bool DisplayBase::IsRotationRequired(HWLayers *hw_layers) {
- lock_guard<recursive_mutex> obj(recursive_mutex_);
- HWLayersInfo &layer_info = hw_layers->info;
-
- for (uint32_t i = 0; i < layer_info.count; i++) {
- HWRotatorSession *hw_rotator_session = &hw_layers->config[i].hw_rotator_session;
-
- if (hw_rotator_session->hw_block_count) {
- return true;
- }
- }
-
- return false;
-}
-
const char * DisplayBase::GetName(const LayerComposition &composition) {
switch (composition) {
case kCompositionGPU: return "GPU";
@@ -1126,4 +1068,10 @@
return hw_panel_info_.is_primary_panel;
}
+DisplayError DisplayBase::SetCompositionState(LayerComposition composition_type, bool enable) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+
+ return comp_manager_->SetCompositionState(display_comp_ctx_, composition_type, enable);
+}
+
} // namespace sdm
diff --git a/msmcobalt/sdm/libs/core/display_base.h b/msm8998/sdm/libs/core/display_base.h
similarity index 94%
rename from msmcobalt/sdm/libs/core/display_base.h
rename to msm8998/sdm/libs/core/display_base.h
index 43c5280..ae1171d 100644
--- a/msmcobalt/sdm/libs/core/display_base.h
+++ b/msm8998/sdm/libs/core/display_base.h
@@ -27,7 +27,6 @@
#include <core/display_interface.h>
#include <private/strategy_interface.h>
-#include <private/rotator_interface.h>
#include <private/color_interface.h>
#include <map>
@@ -45,15 +44,11 @@
using std::recursive_mutex;
using std::lock_guard;
-class RotatorCtrl;
-class HWInfoInterface;
-
class DisplayBase : public DisplayInterface, DumpImpl {
public:
DisplayBase(DisplayType display_type, DisplayEventHandler *event_handler,
HWDeviceType hw_device_type, BufferSyncHandler *buffer_sync_handler,
- CompManager *comp_manager, RotatorInterface *rotator_intf,
- HWInfoInterface *hw_info_intf);
+ CompManager *comp_manager, HWInfoInterface *hw_info_intf);
virtual ~DisplayBase() { }
virtual DisplayError Init();
virtual DisplayError Deinit();
@@ -63,6 +58,7 @@
virtual DisplayError GetDisplayState(DisplayState *state);
virtual DisplayError GetNumVariableInfoConfigs(uint32_t *count);
virtual DisplayError GetConfig(uint32_t index, DisplayConfigVariableInfo *variable_info);
+ virtual DisplayError GetConfig(DisplayConfigFixedInfo *variable_info);
virtual DisplayError GetActiveConfig(uint32_t *index);
virtual DisplayError GetVSyncState(bool *enabled);
virtual DisplayError SetDisplayState(DisplayState state);
@@ -111,6 +107,7 @@
virtual DisplayError SetDetailEnhancerData(const DisplayDetailEnhancerData &de_data);
virtual DisplayError GetDisplayPort(DisplayPort *port);
virtual bool IsPrimaryDisplay();
+ virtual DisplayError SetCompositionState(LayerComposition composition_type, bool enable);
protected:
DisplayError BuildLayerStackStats(LayerStack *layer_stack);
@@ -119,7 +116,6 @@
// DumpImpl method
void AppendDump(char *buffer, uint32_t length);
- bool IsRotationRequired(HWLayers *hw_layers);
const char *GetName(const LayerComposition &composition);
DisplayError ReconfigureDisplay();
bool NeedsMixerReconfiguration(LayerStack *layer_stack, uint32_t *new_mixer_width,
@@ -135,12 +131,10 @@
HWPanelInfo hw_panel_info_;
BufferSyncHandler *buffer_sync_handler_ = NULL;
CompManager *comp_manager_ = NULL;
- RotatorInterface *rotator_intf_ = NULL;
DisplayState state_ = kStateOff;
bool active_ = false;
Handle hw_device_ = 0;
Handle display_comp_ctx_ = 0;
- Handle display_rotator_ctx_ = 0;
HWLayers hw_layers_;
bool pending_commit_ = false;
bool vsync_enable_ = false;
@@ -159,12 +153,6 @@
DisplayConfigVariableInfo fb_config_ = {};
uint32_t req_mixer_width_ = 0;
uint32_t req_mixer_height_ = 0;
-
- private:
- // Unused
- virtual DisplayError GetConfig(DisplayConfigFixedInfo *variable_info) {
- return kErrorNone;
- }
};
} // namespace sdm
diff --git a/msmcobalt/sdm/libs/core/display_hdmi.cpp b/msm8998/sdm/libs/core/display_hdmi.cpp
similarity index 98%
rename from msmcobalt/sdm/libs/core/display_hdmi.cpp
rename to msm8998/sdm/libs/core/display_hdmi.cpp
index 3c3d9f4..a577348 100644
--- a/msmcobalt/sdm/libs/core/display_hdmi.cpp
+++ b/msm8998/sdm/libs/core/display_hdmi.cpp
@@ -37,10 +37,9 @@
namespace sdm {
DisplayHDMI::DisplayHDMI(DisplayEventHandler *event_handler, HWInfoInterface *hw_info_intf,
- BufferSyncHandler *buffer_sync_handler, CompManager *comp_manager,
- RotatorInterface *rotator_intf)
+ BufferSyncHandler *buffer_sync_handler, CompManager *comp_manager)
: DisplayBase(kHDMI, event_handler, kDeviceHDMI, buffer_sync_handler, comp_manager,
- rotator_intf, hw_info_intf) {
+ hw_info_intf) {
}
DisplayError DisplayHDMI::Init() {
diff --git a/msmcobalt/sdm/libs/core/display_hdmi.h b/msm8998/sdm/libs/core/display_hdmi.h
similarity index 97%
rename from msmcobalt/sdm/libs/core/display_hdmi.h
rename to msm8998/sdm/libs/core/display_hdmi.h
index 091cdc3..868b141 100644
--- a/msmcobalt/sdm/libs/core/display_hdmi.h
+++ b/msm8998/sdm/libs/core/display_hdmi.h
@@ -38,8 +38,7 @@
class DisplayHDMI : public DisplayBase, HWEventHandler {
public:
DisplayHDMI(DisplayEventHandler *event_handler, HWInfoInterface *hw_info_intf,
- BufferSyncHandler *buffer_sync_handler, CompManager *comp_manager,
- RotatorInterface *rotator_intf);
+ BufferSyncHandler *buffer_sync_handler, CompManager *comp_manager);
virtual DisplayError Init();
virtual DisplayError Prepare(LayerStack *layer_stack);
virtual DisplayError GetRefreshRateRange(uint32_t *min_refresh_rate, uint32_t *max_refresh_rate);
diff --git a/msmcobalt/sdm/libs/core/display_primary.cpp b/msm8998/sdm/libs/core/display_primary.cpp
similarity index 94%
rename from msmcobalt/sdm/libs/core/display_primary.cpp
rename to msm8998/sdm/libs/core/display_primary.cpp
index e8689ea..9f6c917 100644
--- a/msmcobalt/sdm/libs/core/display_primary.cpp
+++ b/msm8998/sdm/libs/core/display_primary.cpp
@@ -39,10 +39,9 @@
namespace sdm {
DisplayPrimary::DisplayPrimary(DisplayEventHandler *event_handler, HWInfoInterface *hw_info_intf,
- BufferSyncHandler *buffer_sync_handler, CompManager *comp_manager,
- RotatorInterface *rotator_intf)
+ BufferSyncHandler *buffer_sync_handler, CompManager *comp_manager)
: DisplayBase(kPrimary, event_handler, kDevicePrimary, buffer_sync_handler, comp_manager,
- rotator_intf, hw_info_intf) {
+ hw_info_intf) {
}
DisplayError DisplayPrimary::Init() {
@@ -107,10 +106,17 @@
DisplayError DisplayPrimary::Commit(LayerStack *layer_stack) {
lock_guard<recursive_mutex> obj(recursive_mutex_);
DisplayError error = kErrorNone;
+ uint32_t app_layer_count = hw_layers_.info.app_layer_count;
// Enabling auto refresh is async and needs to happen before commit ioctl
if (hw_panel_info_.mode == kModeCommand) {
- hw_intf_->SetAutoRefresh(layer_stack->flags.single_buffered_layer_present);
+ bool enable = (app_layer_count == 1) && layer_stack->flags.single_buffered_layer_present;
+ bool need_refresh = layer_stack->flags.single_buffered_layer_present && (app_layer_count > 1);
+
+ hw_intf_->SetAutoRefresh(enable);
+ if (need_refresh) {
+ event_handler_->Refresh();
+ }
}
bool set_idle_timeout = comp_manager_->CanSetIdleTimeout(display_comp_ctx_);
@@ -128,6 +134,10 @@
} else {
hw_intf_->SetIdleTimeoutMs(0);
}
+ } else if (switch_to_cmd_) {
+ uint32_t pending;
+ switch_to_cmd_ = false;
+ ControlPartialUpdate(true /* enable */, &pending);
}
return error;
@@ -192,7 +202,7 @@
ControlPartialUpdate(false /* enable */, &pending);
hw_intf_->SetIdleTimeoutMs(idle_timeout_ms_);
} else if (mode == kModeCommand) {
- ControlPartialUpdate(true /* enable */, &pending);
+ switch_to_cmd_ = true;
hw_intf_->SetIdleTimeoutMs(0);
}
diff --git a/msmcobalt/sdm/libs/core/display_primary.h b/msm8998/sdm/libs/core/display_primary.h
similarity index 97%
rename from msmcobalt/sdm/libs/core/display_primary.h
rename to msm8998/sdm/libs/core/display_primary.h
index 7a03005..7471899 100644
--- a/msmcobalt/sdm/libs/core/display_primary.h
+++ b/msm8998/sdm/libs/core/display_primary.h
@@ -37,8 +37,7 @@
class DisplayPrimary : public DisplayBase, HWEventHandler {
public:
DisplayPrimary(DisplayEventHandler *event_handler, HWInfoInterface *hw_info_intf,
- BufferSyncHandler *buffer_sync_handler, CompManager *comp_manager,
- RotatorInterface *rotator_intf);
+ BufferSyncHandler *buffer_sync_handler, CompManager *comp_manager);
virtual DisplayError Init();
virtual DisplayError Prepare(LayerStack *layer_stack);
virtual DisplayError Commit(LayerStack *layer_stack);
@@ -66,6 +65,7 @@
std::vector<const char *> event_list_ = {"vsync_event", "show_blank_event", "idle_notify",
"msm_fb_thermal_level", "thread_exit"};
bool avr_prop_disabled_ = false;
+ bool switch_to_cmd_ = false;
};
} // namespace sdm
diff --git a/msmcobalt/sdm/libs/core/display_virtual.cpp b/msm8998/sdm/libs/core/display_virtual.cpp
similarity index 96%
rename from msmcobalt/sdm/libs/core/display_virtual.cpp
rename to msm8998/sdm/libs/core/display_virtual.cpp
index 6beea5c..04922c4 100644
--- a/msmcobalt/sdm/libs/core/display_virtual.cpp
+++ b/msm8998/sdm/libs/core/display_virtual.cpp
@@ -34,10 +34,9 @@
namespace sdm {
DisplayVirtual::DisplayVirtual(DisplayEventHandler *event_handler, HWInfoInterface *hw_info_intf,
- BufferSyncHandler *buffer_sync_handler, CompManager *comp_manager,
- RotatorInterface *rotator_intf)
+ BufferSyncHandler *buffer_sync_handler, CompManager *comp_manager)
: DisplayBase(kVirtual, event_handler, kDeviceVirtual, buffer_sync_handler, comp_manager,
- rotator_intf, hw_info_intf) {
+ hw_info_intf) {
}
DisplayError DisplayVirtual::Init() {
diff --git a/msmcobalt/sdm/libs/core/display_virtual.h b/msm8998/sdm/libs/core/display_virtual.h
similarity index 97%
rename from msmcobalt/sdm/libs/core/display_virtual.h
rename to msm8998/sdm/libs/core/display_virtual.h
index d6ce915..3cc2e24 100644
--- a/msmcobalt/sdm/libs/core/display_virtual.h
+++ b/msm8998/sdm/libs/core/display_virtual.h
@@ -36,8 +36,7 @@
class DisplayVirtual : public DisplayBase {
public:
DisplayVirtual(DisplayEventHandler *event_handler, HWInfoInterface *hw_info_intf,
- BufferSyncHandler *buffer_sync_handler, CompManager *comp_manager,
- RotatorInterface *rotator_intf);
+ BufferSyncHandler *buffer_sync_handler, CompManager *comp_manager);
virtual DisplayError Init();
virtual DisplayError Prepare(LayerStack *layer_stack);
virtual DisplayError GetNumVariableInfoConfigs(uint32_t *count);
diff --git a/msmcobalt/sdm/libs/core/dump_impl.cpp b/msm8998/sdm/libs/core/dump_impl.cpp
similarity index 100%
rename from msmcobalt/sdm/libs/core/dump_impl.cpp
rename to msm8998/sdm/libs/core/dump_impl.cpp
diff --git a/msmcobalt/sdm/libs/core/dump_impl.h b/msm8998/sdm/libs/core/dump_impl.h
similarity index 100%
rename from msmcobalt/sdm/libs/core/dump_impl.h
rename to msm8998/sdm/libs/core/dump_impl.h
diff --git a/msmcobalt/sdm/libs/core/fb/hw_color_manager.cpp b/msm8998/sdm/libs/core/fb/hw_color_manager.cpp
similarity index 100%
rename from msmcobalt/sdm/libs/core/fb/hw_color_manager.cpp
rename to msm8998/sdm/libs/core/fb/hw_color_manager.cpp
diff --git a/msmcobalt/sdm/libs/core/fb/hw_color_manager.h b/msm8998/sdm/libs/core/fb/hw_color_manager.h
similarity index 100%
rename from msmcobalt/sdm/libs/core/fb/hw_color_manager.h
rename to msm8998/sdm/libs/core/fb/hw_color_manager.h
diff --git a/msmcobalt/sdm/libs/core/fb/hw_device.cpp b/msm8998/sdm/libs/core/fb/hw_device.cpp
similarity index 98%
rename from msmcobalt/sdm/libs/core/fb/hw_device.cpp
rename to msm8998/sdm/libs/core/fb/hw_device.cpp
index e74b35f..31d4b81 100644
--- a/msmcobalt/sdm/libs/core/fb/hw_device.cpp
+++ b/msm8998/sdm/libs/core/fb/hw_device.cpp
@@ -742,7 +742,9 @@
}
}
- if (input_buffer->flags.secure) {
+ if (input_buffer->flags.secure_camera) {
+ *mdp_flags |= MDP_LAYER_SECURE_CAMERA_SESSION;
+ } else if (input_buffer->flags.secure) {
*mdp_flags |= MDP_LAYER_SECURE_SESSION;
}
@@ -795,8 +797,8 @@
DLOGI("Device type = %d, Display Port = %d, Display Mode = %d, Device Node = %d, Is Primary = %d",
device_type_, hw_panel_info_.port, hw_panel_info_.mode, fb_node_index_,
hw_panel_info_.is_primary_panel);
- DLOGI("Partial Update = %d, Dynamic FPS = %d",
- hw_panel_info_.partial_update, hw_panel_info_.dynamic_fps);
+ DLOGI("Partial Update = %d, supported roi_count =%d, Dynamic FPS = %d",
+ hw_panel_info_.partial_update, hw_panel_info_.left_roi_count, hw_panel_info_.dynamic_fps);
DLOGI("Align: left = %d, width = %d, top = %d, height = %d",
hw_panel_info_.left_align, hw_panel_info_.width_align,
hw_panel_info_.top_align, hw_panel_info_.height_align);
@@ -877,6 +879,9 @@
panel_info->is_primary_panel = atoi(tokens[1]);
} else if (!strncmp(tokens[0], "is_pluggable", strlen("is_pluggable"))) {
panel_info->is_pluggable = atoi(tokens[1]);
+ } else if (!strncmp(tokens[0], "pu_roi_cnt", strlen("pu_roi_cnt"))) {
+ panel_info->left_roi_count = UINT32(atoi(tokens[1]));
+ panel_info->right_roi_count = UINT32(atoi(tokens[1]));
}
}
}
diff --git a/msmcobalt/sdm/libs/core/fb/hw_device.h b/msm8998/sdm/libs/core/fb/hw_device.h
similarity index 98%
rename from msmcobalt/sdm/libs/core/fb/hw_device.h
rename to msm8998/sdm/libs/core/fb/hw_device.h
index dce7648..72c7a13 100644
--- a/msmcobalt/sdm/libs/core/fb/hw_device.h
+++ b/msm8998/sdm/libs/core/fb/hw_device.h
@@ -45,6 +45,10 @@
#define MDP_LAYER_MULTIRECT_PARALLEL_MODE 0
#endif
+#ifndef MDP_LAYER_SECURE_CAMERA_SESSION
+#define MDP_LAYER_SECURE_CAMERA_SESSION 0
+#endif
+
namespace sdm {
class HWInfoInterface;
diff --git a/msmcobalt/sdm/libs/core/fb/hw_events.cpp b/msm8998/sdm/libs/core/fb/hw_events.cpp
similarity index 100%
rename from msmcobalt/sdm/libs/core/fb/hw_events.cpp
rename to msm8998/sdm/libs/core/fb/hw_events.cpp
diff --git a/msmcobalt/sdm/libs/core/fb/hw_events.h b/msm8998/sdm/libs/core/fb/hw_events.h
similarity index 100%
rename from msmcobalt/sdm/libs/core/fb/hw_events.h
rename to msm8998/sdm/libs/core/fb/hw_events.h
diff --git a/msmcobalt/sdm/libs/core/fb/hw_hdmi.cpp b/msm8998/sdm/libs/core/fb/hw_hdmi.cpp
similarity index 100%
rename from msmcobalt/sdm/libs/core/fb/hw_hdmi.cpp
rename to msm8998/sdm/libs/core/fb/hw_hdmi.cpp
diff --git a/msmcobalt/sdm/libs/core/fb/hw_hdmi.h b/msm8998/sdm/libs/core/fb/hw_hdmi.h
similarity index 100%
rename from msmcobalt/sdm/libs/core/fb/hw_hdmi.h
rename to msm8998/sdm/libs/core/fb/hw_hdmi.h
diff --git a/msmcobalt/sdm/libs/core/fb/hw_info.cpp b/msm8998/sdm/libs/core/fb/hw_info.cpp
similarity index 100%
rename from msmcobalt/sdm/libs/core/fb/hw_info.cpp
rename to msm8998/sdm/libs/core/fb/hw_info.cpp
diff --git a/msmcobalt/sdm/libs/core/fb/hw_info.h b/msm8998/sdm/libs/core/fb/hw_info.h
similarity index 100%
rename from msmcobalt/sdm/libs/core/fb/hw_info.h
rename to msm8998/sdm/libs/core/fb/hw_info.h
diff --git a/msmcobalt/sdm/libs/core/fb/hw_primary.cpp b/msm8998/sdm/libs/core/fb/hw_primary.cpp
similarity index 97%
rename from msmcobalt/sdm/libs/core/fb/hw_primary.cpp
rename to msm8998/sdm/libs/core/fb/hw_primary.cpp
index f3c7639..6f62143 100644
--- a/msmcobalt/sdm/libs/core/fb/hw_primary.cpp
+++ b/msm8998/sdm/libs/core/fb/hw_primary.cpp
@@ -332,6 +332,8 @@
return kErrorHardware;
}
+ auto_refresh_ = false;
+
return kErrorNone;
}
@@ -361,18 +363,27 @@
mdp_layer_commit_v1 &mdp_commit = mdp_disp_commit_.commit_v1;
- LayerRect left_roi = hw_layer_info.left_partial_update;
- LayerRect right_roi = hw_layer_info.right_partial_update;
+ LayerRect left_roi = hw_layer_info.left_frame_roi.at(0);
+ LayerRect right_roi = hw_layer_info.right_frame_roi.at(0);
+
mdp_commit.left_roi.x = UINT32(left_roi.left);
mdp_commit.left_roi.y = UINT32(left_roi.top);
mdp_commit.left_roi.w = UINT32(left_roi.right - left_roi.left);
mdp_commit.left_roi.h = UINT32(left_roi.bottom - left_roi.top);
+ // Update second roi information in right_roi
+ if (hw_layer_info.left_frame_roi.size() == 2) {
+ right_roi = hw_layer_info.left_frame_roi.at(1);
+ }
+
// SDM treats ROI as one full coordinate system.
// In case source split is disabled, However, Driver assumes Mixer to operate in
// different co-ordinate system.
- if (!hw_resource_.is_src_split && IsValid(right_roi)) {
- mdp_commit.right_roi.x = UINT32(right_roi.left) - mixer_attributes_.split_left;
+ if (IsValid(right_roi)) {
+ mdp_commit.right_roi.x = UINT32(right_roi.left);
+ if (!hw_resource_.is_src_split) {
+ mdp_commit.right_roi.x = UINT32(right_roi.left) - mixer_attributes_.split_left;
+ }
mdp_commit.right_roi.y = UINT32(right_roi.top);
mdp_commit.right_roi.w = UINT32(right_roi.right - right_roi.left);
mdp_commit.right_roi.h = UINT32(right_roi.bottom - right_roi.top);
diff --git a/msmcobalt/sdm/libs/core/fb/hw_primary.h b/msm8998/sdm/libs/core/fb/hw_primary.h
similarity index 100%
rename from msmcobalt/sdm/libs/core/fb/hw_primary.h
rename to msm8998/sdm/libs/core/fb/hw_primary.h
diff --git a/msmcobalt/sdm/libs/core/fb/hw_scale.cpp b/msm8998/sdm/libs/core/fb/hw_scale.cpp
similarity index 100%
rename from msmcobalt/sdm/libs/core/fb/hw_scale.cpp
rename to msm8998/sdm/libs/core/fb/hw_scale.cpp
diff --git a/msmcobalt/sdm/libs/core/fb/hw_scale.h b/msm8998/sdm/libs/core/fb/hw_scale.h
similarity index 100%
rename from msmcobalt/sdm/libs/core/fb/hw_scale.h
rename to msm8998/sdm/libs/core/fb/hw_scale.h
diff --git a/msmcobalt/sdm/libs/core/fb/hw_virtual.cpp b/msm8998/sdm/libs/core/fb/hw_virtual.cpp
similarity index 100%
rename from msmcobalt/sdm/libs/core/fb/hw_virtual.cpp
rename to msm8998/sdm/libs/core/fb/hw_virtual.cpp
diff --git a/msmcobalt/sdm/libs/core/fb/hw_virtual.h b/msm8998/sdm/libs/core/fb/hw_virtual.h
similarity index 100%
rename from msmcobalt/sdm/libs/core/fb/hw_virtual.h
rename to msm8998/sdm/libs/core/fb/hw_virtual.h
diff --git a/msmcobalt/sdm/libs/core/hw_events_interface.h b/msm8998/sdm/libs/core/hw_events_interface.h
similarity index 100%
rename from msmcobalt/sdm/libs/core/hw_events_interface.h
rename to msm8998/sdm/libs/core/hw_events_interface.h
diff --git a/msmcobalt/sdm/libs/core/hw_info_interface.h b/msm8998/sdm/libs/core/hw_info_interface.h
similarity index 100%
rename from msmcobalt/sdm/libs/core/hw_info_interface.h
rename to msm8998/sdm/libs/core/hw_info_interface.h
diff --git a/msmcobalt/sdm/libs/core/hw_interface.h b/msm8998/sdm/libs/core/hw_interface.h
similarity index 100%
rename from msmcobalt/sdm/libs/core/hw_interface.h
rename to msm8998/sdm/libs/core/hw_interface.h
diff --git a/msmcobalt/sdm/libs/core/resource_default.cpp b/msm8998/sdm/libs/core/resource_default.cpp
similarity index 95%
rename from msmcobalt/sdm/libs/core/resource_default.cpp
rename to msm8998/sdm/libs/core/resource_default.cpp
index 4fc3ce4..54a6658 100644
--- a/msmcobalt/sdm/libs/core/resource_default.cpp
+++ b/msm8998/sdm/libs/core/resource_default.cpp
@@ -37,10 +37,42 @@
namespace sdm {
-DisplayError ResourceDefault::Init(const HWResourceInfo &hw_res_info) {
+DisplayError ResourceDefault::CreateResourceDefault(const HWResourceInfo &hw_resource_info,
+ ResourceInterface **resource_intf) {
DisplayError error = kErrorNone;
- num_pipe_ = hw_res_info.num_vig_pipe + hw_res_info.num_rgb_pipe + hw_res_info.num_dma_pipe;
+ ResourceDefault *resource_default = new ResourceDefault(hw_resource_info);
+ if (!resource_default) {
+ return kErrorNone;
+ }
+
+ error = resource_default->Init();
+ if (error != kErrorNone) {
+ delete resource_default;
+ }
+
+ *resource_intf = resource_default;
+
+ return kErrorNone;
+}
+
+DisplayError ResourceDefault::DestroyResourceDefault(ResourceInterface *resource_intf) {
+ ResourceDefault *resource_default = static_cast<ResourceDefault *>(resource_intf);
+
+ resource_default->Deinit();
+ delete resource_default;
+
+ return kErrorNone;
+}
+
+ResourceDefault::ResourceDefault(const HWResourceInfo &hw_res_info)
+ : hw_res_info_(hw_res_info) {
+}
+
+DisplayError ResourceDefault::Init() {
+ DisplayError error = kErrorNone;
+
+ num_pipe_ = hw_res_info_.num_vig_pipe + hw_res_info_.num_rgb_pipe + hw_res_info_.num_dma_pipe;
if (!num_pipe_) {
DLOGE("Number of H/W pipes is Zero!");
@@ -48,7 +80,6 @@
}
src_pipes_.resize(num_pipe_);
- hw_res_info_ = hw_res_info;
// Priority order of pipes: VIG, RGB, DMA
uint32_t vig_index = 0;
@@ -187,7 +218,7 @@
return kErrorNone;
}
-DisplayError ResourceDefault::Acquire(Handle display_ctx, HWLayers *hw_layers) {
+DisplayError ResourceDefault::Prepare(Handle display_ctx, HWLayers *hw_layers) {
DisplayResourceContext *display_resource_ctx =
reinterpret_cast<DisplayResourceContext *>(display_ctx);
@@ -297,6 +328,12 @@
return kErrorNone;
}
+DisplayError ResourceDefault::Commit(Handle display_ctx, HWLayers *hw_layers) {
+ SCOPE_LOCK(locker_);
+
+ return kErrorNone;
+}
+
DisplayError ResourceDefault::PostCommit(Handle display_ctx, HWLayers *hw_layers) {
SCOPE_LOCK(locker_);
DisplayResourceContext *display_resource_ctx =
diff --git a/msmcobalt/sdm/libs/core/resource_default.h b/msm8998/sdm/libs/core/resource_default.h
similarity index 93%
rename from msmcobalt/sdm/libs/core/resource_default.h
rename to msm8998/sdm/libs/core/resource_default.h
index 79e7dcd..9f08155 100644
--- a/msmcobalt/sdm/libs/core/resource_default.h
+++ b/msm8998/sdm/libs/core/resource_default.h
@@ -36,8 +36,9 @@
class ResourceDefault : public ResourceInterface {
public:
- DisplayError Init(const HWResourceInfo &hw_resource_info);
- DisplayError Deinit();
+ static DisplayError CreateResourceDefault(const HWResourceInfo &hw_resource_info,
+ ResourceInterface **resource_intf);
+ static DisplayError DestroyResourceDefault(ResourceInterface *resource_intf);
virtual DisplayError RegisterDisplay(DisplayType type,
const HWDisplayAttributes &display_attributes,
const HWPanelInfo &hw_panel_info,
@@ -50,8 +51,9 @@
const HWMixerAttributes &mixer_attributes);
virtual DisplayError Start(Handle display_ctx);
virtual DisplayError Stop(Handle display_ctx);
- virtual DisplayError Acquire(Handle display_ctx, HWLayers *hw_layers);
+ virtual DisplayError Prepare(Handle display_ctx, HWLayers *hw_layers);
virtual DisplayError PostPrepare(Handle display_ctx, HWLayers *hw_layers);
+ virtual DisplayError Commit(Handle display_ctx, HWLayers *hw_layers);
virtual DisplayError PostCommit(Handle display_ctx, HWLayers *hw_layers);
virtual void Purge(Handle display_ctx);
virtual DisplayError SetMaxMixerStages(Handle display_ctx, uint32_t max_mixer_stages);
@@ -102,6 +104,9 @@
HWBlockContext() : is_in_use(false) { }
};
+ explicit ResourceDefault(const HWResourceInfo &hw_res_info);
+ DisplayError Init();
+ DisplayError Deinit();
uint32_t NextPipe(PipeType pipe_type, HWBlockType hw_block_id);
uint32_t SearchPipe(HWBlockType hw_block_id, SourcePipe *src_pipes, uint32_t num_pipe);
uint32_t GetPipe(HWBlockType hw_block_id, bool need_scale);
diff --git a/msmcobalt/sdm/libs/core/strategy.cpp b/msm8998/sdm/libs/core/strategy.cpp
similarity index 81%
rename from msmcobalt/sdm/libs/core/strategy.cpp
rename to msm8998/sdm/libs/core/strategy.cpp
index 1734b9c..106e9e1 100644
--- a/msmcobalt/sdm/libs/core/strategy.cpp
+++ b/msm8998/sdm/libs/core/strategy.cpp
@@ -46,9 +46,8 @@
DisplayError error = kErrorNone;
if (extension_intf_) {
- error = extension_intf_->CreateStrategyExtn(display_type_, hw_panel_info_.mode,
- hw_panel_info_.s3d_mode, mixer_attributes_,
- fb_config_, &strategy_intf_);
+ error = extension_intf_->CreateStrategyExtn(display_type_, hw_resource_info_, hw_panel_info_,
+ mixer_attributes_, fb_config_, &strategy_intf_);
if (error != kErrorNone) {
DLOGE("Failed to create strategy");
return error;
@@ -75,15 +74,20 @@
}
DisplayError Strategy::Start(HWLayersInfo *hw_layers_info, uint32_t *max_attempts,
- bool partial_update_enable) {
+ const PUConstraints &pu_constraints) {
DisplayError error = kErrorNone;
hw_layers_info_ = hw_layers_info;
extn_start_success_ = false;
tried_default_ = false;
+ if (!disable_gpu_comp_ && !hw_layers_info_->gpu_target_index) {
+ DLOGE("GPU composition is enabled and GPU target buffer not provided.");
+ return kErrorNotSupported;
+ }
+
if (partial_update_intf_) {
- partial_update_intf_->ControlPartialUpdate(partial_update_enable);
+ partial_update_intf_->Start(pu_constraints);
}
GenerateROI();
@@ -118,8 +122,8 @@
}
}
- // Default composition is not possible if GPU composition is not supported.
- if (!hw_layers_info_->gpu_target_index) {
+ // Do not fallback to GPU if GPU comp is disabled.
+ if (disable_gpu_comp_) {
return kErrorNotSupported;
}
@@ -177,15 +181,19 @@
split_display = true;
}
+ hw_layers_info_->left_frame_roi = {};
+ hw_layers_info_->right_frame_roi = {};
+
if (split_display) {
float left_split = FLOAT(mixer_attributes_.split_left);
- hw_layers_info_->left_partial_update = (LayerRect) {0.0f, 0.0f, left_split, layer_mixer_height};
- hw_layers_info_->right_partial_update = (LayerRect) {left_split, 0.0f, layer_mixer_width,
- layer_mixer_height};
+ hw_layers_info_->left_frame_roi.push_back(LayerRect(0.0f, 0.0f,
+ left_split, layer_mixer_height));
+ hw_layers_info_->right_frame_roi.push_back(LayerRect(left_split,
+ 0.0f, layer_mixer_width, layer_mixer_height));
} else {
- hw_layers_info_->left_partial_update = (LayerRect) {0.0f, 0.0f, layer_mixer_width,
- layer_mixer_height};
- hw_layers_info_->right_partial_update = (LayerRect) {0.0f, 0.0f, 0.0f, 0.0f};
+ hw_layers_info_->left_frame_roi.push_back(LayerRect(0.0f, 0.0f,
+ layer_mixer_width, layer_mixer_height));
+ hw_layers_info_->right_frame_roi.push_back(LayerRect(0.0f, 0.0f, 0.0f, 0.0f));
}
}
@@ -210,8 +218,8 @@
mixer_attributes, display_attributes,
&partial_update_intf_);
- error = strategy_intf_->Reconfigure(hw_panel_info.mode, hw_panel_info.s3d_mode, mixer_attributes,
- fb_config);
+ error = strategy_intf_->Reconfigure(hw_panel_info, hw_resource_info_, mixer_attributes,
+ fb_config);
if (error != kErrorNone) {
return error;
}
@@ -224,4 +232,18 @@
return kErrorNone;
}
+DisplayError Strategy::SetCompositionState(LayerComposition composition_type, bool enable) {
+ DLOGI("composition type = %d, enable = %d", composition_type, enable);
+
+ if (composition_type == kCompositionGPU) {
+ disable_gpu_comp_ = !enable;
+ }
+
+ if (strategy_intf_) {
+ return strategy_intf_->SetCompositionState(composition_type, enable);
+ }
+
+ return kErrorNone;
+}
+
} // namespace sdm
diff --git a/msmcobalt/sdm/libs/core/strategy.h b/msm8998/sdm/libs/core/strategy.h
similarity index 94%
rename from msmcobalt/sdm/libs/core/strategy.h
rename to msm8998/sdm/libs/core/strategy.h
index 8b4b6f4..3fadd0d 100644
--- a/msmcobalt/sdm/libs/core/strategy.h
+++ b/msm8998/sdm/libs/core/strategy.h
@@ -41,13 +41,14 @@
DisplayError Deinit();
DisplayError Start(HWLayersInfo *hw_layers_info, uint32_t *max_attempts,
- bool partial_update_enable);
+ const PUConstraints &pu_constraints);
DisplayError GetNextStrategy(StrategyConstraints *constraints);
DisplayError Stop();
DisplayError Reconfigure(const HWPanelInfo &hw_panel_info,
const HWDisplayAttributes &hw_display_attributes,
const HWMixerAttributes &mixer_attributes,
const DisplayConfigVariableInfo &fb_config);
+ DisplayError SetCompositionState(LayerComposition composition_type, bool enable);
private:
void GenerateROI();
@@ -64,6 +65,7 @@
DisplayConfigVariableInfo fb_config_ = {};
bool extn_start_success_ = false;
bool tried_default_ = false;
+ bool disable_gpu_comp_ = false;
};
} // namespace sdm
diff --git a/msmcobalt/sdm/libs/hwc/Android.mk b/msm8998/sdm/libs/hwc/Android.mk
similarity index 100%
rename from msmcobalt/sdm/libs/hwc/Android.mk
rename to msm8998/sdm/libs/hwc/Android.mk
diff --git a/msmcobalt/sdm/libs/hwc/blit_engine.h b/msm8998/sdm/libs/hwc/blit_engine.h
similarity index 100%
rename from msmcobalt/sdm/libs/hwc/blit_engine.h
rename to msm8998/sdm/libs/hwc/blit_engine.h
diff --git a/msmcobalt/sdm/libs/hwc/blit_engine_c2d.cpp b/msm8998/sdm/libs/hwc/blit_engine_c2d.cpp
similarity index 100%
rename from msmcobalt/sdm/libs/hwc/blit_engine_c2d.cpp
rename to msm8998/sdm/libs/hwc/blit_engine_c2d.cpp
diff --git a/msmcobalt/sdm/libs/hwc/blit_engine_c2d.h b/msm8998/sdm/libs/hwc/blit_engine_c2d.h
similarity index 100%
rename from msmcobalt/sdm/libs/hwc/blit_engine_c2d.h
rename to msm8998/sdm/libs/hwc/blit_engine_c2d.h
diff --git a/msmcobalt/sdm/libs/hwc/cpuhint.cpp b/msm8998/sdm/libs/hwc/cpuhint.cpp
similarity index 100%
rename from msmcobalt/sdm/libs/hwc/cpuhint.cpp
rename to msm8998/sdm/libs/hwc/cpuhint.cpp
diff --git a/msmcobalt/sdm/libs/hwc/cpuhint.h b/msm8998/sdm/libs/hwc/cpuhint.h
similarity index 100%
rename from msmcobalt/sdm/libs/hwc/cpuhint.h
rename to msm8998/sdm/libs/hwc/cpuhint.h
diff --git a/msmcobalt/sdm/libs/hwc/hwc_buffer_allocator.cpp b/msm8998/sdm/libs/hwc/hwc_buffer_allocator.cpp
similarity index 95%
rename from msmcobalt/sdm/libs/hwc/hwc_buffer_allocator.cpp
rename to msm8998/sdm/libs/hwc/hwc_buffer_allocator.cpp
index 7873627..906b96d 100644
--- a/msmcobalt/sdm/libs/hwc/hwc_buffer_allocator.cpp
+++ b/msm8998/sdm/libs/hwc/hwc_buffer_allocator.cpp
@@ -64,7 +64,11 @@
int height = INT(buffer_config.height);
int format;
- if (buffer_config.secure) {
+ if (buffer_config.secure_camera) {
+ alloc_flags = GRALLOC_USAGE_HW_CAMERA_WRITE;
+ alloc_flags |= (GRALLOC_USAGE_PROTECTED | GRALLOC_USAGE_HW_COMPOSER);
+ data.align = SZ_2M;
+ } else if (buffer_config.secure) {
alloc_flags = INT(GRALLOC_USAGE_PRIVATE_MM_HEAP);
alloc_flags |= INT(GRALLOC_USAGE_PROTECTED);
data.align = SECURE_ALIGN;
@@ -166,7 +170,11 @@
int height = INT(buffer_config.height);
int format;
- if (buffer_config.secure) {
+ if (buffer_config.secure_camera) {
+ alloc_flags = GRALLOC_USAGE_HW_CAMERA_WRITE;
+ alloc_flags |= (GRALLOC_USAGE_PROTECTED | GRALLOC_USAGE_HW_COMPOSER);
+ align = SZ_2M;
+ } else if (buffer_config.secure) {
alloc_flags = INT(GRALLOC_USAGE_PRIVATE_MM_HEAP);
alloc_flags |= INT(GRALLOC_USAGE_PROTECTED);
align = SECURE_ALIGN;
diff --git a/msmcobalt/sdm/libs/hwc/hwc_buffer_allocator.h b/msm8998/sdm/libs/hwc/hwc_buffer_allocator.h
similarity index 100%
rename from msmcobalt/sdm/libs/hwc/hwc_buffer_allocator.h
rename to msm8998/sdm/libs/hwc/hwc_buffer_allocator.h
diff --git a/msmcobalt/sdm/libs/hwc/hwc_buffer_sync_handler.cpp b/msm8998/sdm/libs/hwc/hwc_buffer_sync_handler.cpp
similarity index 100%
rename from msmcobalt/sdm/libs/hwc/hwc_buffer_sync_handler.cpp
rename to msm8998/sdm/libs/hwc/hwc_buffer_sync_handler.cpp
diff --git a/msmcobalt/sdm/libs/hwc/hwc_buffer_sync_handler.h b/msm8998/sdm/libs/hwc/hwc_buffer_sync_handler.h
similarity index 100%
rename from msmcobalt/sdm/libs/hwc/hwc_buffer_sync_handler.h
rename to msm8998/sdm/libs/hwc/hwc_buffer_sync_handler.h
diff --git a/msmcobalt/sdm/libs/hwc/hwc_color_manager.cpp b/msm8998/sdm/libs/hwc/hwc_color_manager.cpp
similarity index 89%
rename from msmcobalt/sdm/libs/hwc/hwc_color_manager.cpp
rename to msm8998/sdm/libs/hwc/hwc_color_manager.cpp
index acf5f37..7bf49ff 100644
--- a/msmcobalt/sdm/libs/hwc/hwc_color_manager.cpp
+++ b/msm8998/sdm/libs/hwc/hwc_color_manager.cpp
@@ -385,7 +385,7 @@
return -EFAULT;
} else {
frame_capture_data->buffer = reinterpret_cast<uint8_t *>(buffer);
- frame_capture_data->buffer_stride = buffer_info.alloc_buffer_info.stride;
+ frame_capture_data->buffer_stride = buffer_info.buffer_config.width;
frame_capture_data->buffer_size = buffer_info.alloc_buffer_info.size;
}
ret = hwc_display->FrameCaptureAsync(buffer_info, 1);
@@ -423,65 +423,67 @@
DisplayDetailEnhancerData de_data;
PPDETuningCfgData *de_tuning_cfg_data = reinterpret_cast<PPDETuningCfgData*>(params);
- if (!de_tuning_cfg_data->cfg_en) {
- de_data.override_flags = kOverrideDEEnable;
- de_data.enable = 0;
- } else {
- de_data.override_flags = kOverrideDEEnable;
- de_data.enable = 1;
+ if (de_tuning_cfg_data->cfg_pending == true) {
+ if (!de_tuning_cfg_data->cfg_en) {
+ de_data.override_flags = kOverrideDEEnable;
+ de_data.enable = 0;
+ } else {
+ de_data.override_flags = kOverrideDEEnable;
+ de_data.enable = 1;
- if (de_tuning_cfg_data->params.flags & kDeTuningFlagSharpFactor) {
- de_data.override_flags |= kOverrideDEEnable;
- de_data.sharp_factor = de_tuning_cfg_data->params.sharp_factor;
- }
+ if (de_tuning_cfg_data->params.flags & kDeTuningFlagSharpFactor) {
+ de_data.override_flags |= kOverrideDESharpen1;
+ de_data.sharp_factor = de_tuning_cfg_data->params.sharp_factor;
+ }
- if (de_tuning_cfg_data->params.flags & kDeTuningFlagClip) {
- de_data.override_flags |= kOverrideDEEnable;
- de_data.clip = de_tuning_cfg_data->params.clip;
- }
+ if (de_tuning_cfg_data->params.flags & kDeTuningFlagClip) {
+ de_data.override_flags |= kOverrideDEClip;
+ de_data.clip = de_tuning_cfg_data->params.clip;
+ }
- if (de_tuning_cfg_data->params.flags & kDeTuningFlagThrQuiet) {
- de_data.override_flags |= kOverrideDEEnable;
- de_data.thr_quiet = de_tuning_cfg_data->params.thr_quiet;
- }
+ if (de_tuning_cfg_data->params.flags & kDeTuningFlagThrQuiet) {
+ de_data.override_flags |= kOverrideDEThrQuiet;
+ de_data.thr_quiet = de_tuning_cfg_data->params.thr_quiet;
+ }
- if (de_tuning_cfg_data->params.flags & kDeTuningFlagThrDieout) {
- de_data.override_flags |= kOverrideDEEnable;
- de_data.thr_dieout = de_tuning_cfg_data->params.thr_dieout;
- }
+ if (de_tuning_cfg_data->params.flags & kDeTuningFlagThrDieout) {
+ de_data.override_flags |= kOverrideDEThrDieout;
+ de_data.thr_dieout = de_tuning_cfg_data->params.thr_dieout;
+ }
- if (de_tuning_cfg_data->params.flags & kDeTuningFlagThrLow) {
- de_data.override_flags |= kOverrideDEEnable;
- de_data.thr_low = de_tuning_cfg_data->params.thr_low;
- }
+ if (de_tuning_cfg_data->params.flags & kDeTuningFlagThrLow) {
+ de_data.override_flags |= kOverrideDEThrLow;
+ de_data.thr_low = de_tuning_cfg_data->params.thr_low;
+ }
- if (de_tuning_cfg_data->params.flags & kDeTuningFlagThrHigh) {
- de_data.override_flags |= kOverrideDEEnable;
- de_data.thr_high = de_tuning_cfg_data->params.thr_high;
- }
+ if (de_tuning_cfg_data->params.flags & kDeTuningFlagThrHigh) {
+ de_data.override_flags |= kOverrideDEThrHigh;
+ de_data.thr_high = de_tuning_cfg_data->params.thr_high;
+ }
- if (de_tuning_cfg_data->params.flags & kDeTuningFlagContentQualLevel) {
- de_data.override_flags |= kOverrideDEEnable;
- switch (de_tuning_cfg_data->params.quality) {
- case kDeContentQualLow:
- de_data.quality_level = kContentQualityLow;
- break;
- case kDeContentQualMedium:
- de_data.quality_level = kContentQualityMedium;
- break;
- case kDeContentQualHigh:
- de_data.quality_level = kContentQualityHigh;
- break;
- case kDeContentQualUnknown:
- default:
- de_data.quality_level = kContentQualityUnknown;
- break;
+ if (de_tuning_cfg_data->params.flags & kDeTuningFlagContentQualLevel) {
+ switch (de_tuning_cfg_data->params.quality) {
+ case kDeContentQualLow:
+ de_data.quality_level = kContentQualityLow;
+ break;
+ case kDeContentQualMedium:
+ de_data.quality_level = kContentQualityMedium;
+ break;
+ case kDeContentQualHigh:
+ de_data.quality_level = kContentQualityHigh;
+ break;
+ case kDeContentQualUnknown:
+ default:
+ de_data.quality_level = kContentQualityUnknown;
+ break;
+ }
}
}
- }
- err = hwc_display->SetDetailEnhancerConfig(de_data);
- if (err) {
- DLOGW("SetDetailEnhancerConfig failed. err = %d", err);
+ err = hwc_display->SetDetailEnhancerConfig(de_data);
+ if (err) {
+ DLOGW("SetDetailEnhancerConfig failed. err = %d", err);
+ }
+ de_tuning_cfg_data->cfg_pending = false;
}
return err;
diff --git a/msmcobalt/sdm/libs/hwc/hwc_color_manager.h b/msm8998/sdm/libs/hwc/hwc_color_manager.h
similarity index 100%
rename from msmcobalt/sdm/libs/hwc/hwc_color_manager.h
rename to msm8998/sdm/libs/hwc/hwc_color_manager.h
diff --git a/msmcobalt/sdm/libs/hwc/hwc_debugger.cpp b/msm8998/sdm/libs/hwc/hwc_debugger.cpp
similarity index 100%
rename from msmcobalt/sdm/libs/hwc/hwc_debugger.cpp
rename to msm8998/sdm/libs/hwc/hwc_debugger.cpp
diff --git a/msmcobalt/sdm/libs/hwc/hwc_debugger.h b/msm8998/sdm/libs/hwc/hwc_debugger.h
similarity index 100%
rename from msmcobalt/sdm/libs/hwc/hwc_debugger.h
rename to msm8998/sdm/libs/hwc/hwc_debugger.h
diff --git a/msmcobalt/sdm/libs/hwc/hwc_display.cpp b/msm8998/sdm/libs/hwc/hwc_display.cpp
similarity index 97%
rename from msmcobalt/sdm/libs/hwc/hwc_display.cpp
rename to msm8998/sdm/libs/hwc/hwc_display.cpp
index 3dafeb6..3327ed9 100644
--- a/msmcobalt/sdm/libs/hwc/hwc_display.cpp
+++ b/msm8998/sdm/libs/hwc/hwc_display.cpp
@@ -371,6 +371,9 @@
if (pvt_handle->flags & private_handle_t::PRIV_FLAGS_SECURE_BUFFER) {
layer_stack_.flags.secure_present = true;
layer_buffer->flags.secure = true;
+ if (pvt_handle->flags & private_handle_t::PRIV_FLAGS_CAMERA_WRITE) {
+ layer_buffer->flags.secure_camera = true;
+ }
}
// Gralloc Usage Protected Buffer - L3 - which needs to be treated as Secure & avoid fallback
if (pvt_handle->flags & private_handle_t::PRIV_FLAGS_PROTECTED_BUFFER) {
@@ -451,6 +454,7 @@
for (size_t i = 0; i < num_hw_layers; i++) {
hwc_layer_1_t &hwc_layer = content_list->hwLayers[i];
+ const private_handle_t *pvt_handle = static_cast<const private_handle_t *>(hwc_layer.handle);
Layer *layer = layer_stack_.layers.at(i);
int ret = PrepareLayerParams(&content_list->hwLayers[i], layer);
@@ -468,6 +472,15 @@
ApplyScanAdjustment(&scaled_display_frame);
SetRect(scaled_display_frame, &layer->dst_rect);
+ if (pvt_handle) {
+ bool NonIntegralSourceCrop = IsNonIntegralSourceCrop(hwc_layer.sourceCropf);
+ bool secure = (pvt_handle->flags & private_handle_t::PRIV_FLAGS_SECURE_BUFFER) ||
+ (pvt_handle->flags & private_handle_t::PRIV_FLAGS_PROTECTED_BUFFER) ||
+ (pvt_handle->flags & private_handle_t::PRIV_FLAGS_SECURE_DISPLAY);
+ if (NonIntegralSourceCrop && !secure) {
+ layer->flags.skip = true;
+ }
+ }
SetRect(hwc_layer.sourceCropf, &layer->src_rect);
ApplyDeInterlaceAdjustment(layer);
@@ -608,7 +621,7 @@
size_t num_hw_layers = content_list->numHwLayers;
- if (!skip_prepare_) {
+ if (!skip_prepare_cnt) {
DisplayError error = display_intf_->Prepare(&layer_stack_);
if (error != kErrorNone) {
if (error == kErrorShutDown) {
@@ -626,7 +639,7 @@
} else {
// Skip is not set
MarkLayersForGPUBypass(content_list);
- skip_prepare_ = false;
+ skip_prepare_cnt = skip_prepare_cnt - 1;
DLOGI("SecureDisplay %s, Skip Prepare/Commit and Flush", secure_display_active_ ? "Starting" :
"Stopping");
flush_ = true;
@@ -796,6 +809,17 @@
(layer_stack_.flags.geometry_changed));
}
+bool HWCDisplay::IsNonIntegralSourceCrop(const hwc_frect_t &source) {
+ if ((source.left != roundf(source.left)) ||
+ (source.top != roundf(source.top)) ||
+ (source.right != roundf(source.right)) ||
+ (source.bottom != roundf(source.bottom))) {
+ return true;
+ } else {
+ return false;
+ }
+}
+
void HWCDisplay::SetRect(const hwc_rect_t &source, LayerRect *target) {
target->left = FLOAT(source.left);
target->top = FLOAT(source.top);
@@ -1328,7 +1352,7 @@
return 0;
}
-void HWCDisplay::SetSecureDisplay(bool secure_display_active) {
+void HWCDisplay::SetSecureDisplay(bool secure_display_active, bool force_flush) {
secure_display_active_ = secure_display_active;
return;
}
diff --git a/msmcobalt/sdm/libs/hwc/hwc_display.h b/msm8998/sdm/libs/hwc/hwc_display.h
similarity index 97%
rename from msmcobalt/sdm/libs/hwc/hwc_display.h
rename to msm8998/sdm/libs/hwc/hwc_display.h
index 5b59fb8..7dab6d5 100644
--- a/msmcobalt/sdm/libs/hwc/hwc_display.h
+++ b/msm8998/sdm/libs/hwc/hwc_display.h
@@ -85,7 +85,7 @@
virtual int OnMinHdcpEncryptionLevelChange(uint32_t min_enc_level);
virtual int Perform(uint32_t operation, ...);
virtual int SetCursorPosition(int x, int y);
- virtual void SetSecureDisplay(bool secure_display_active);
+ virtual void SetSecureDisplay(bool secure_display_active, bool force_flush);
virtual DisplayError SetMixerResolution(uint32_t width, uint32_t height);
virtual DisplayError GetMixerResolution(uint32_t *width, uint32_t *height);
virtual void GetPanelResolution(uint32_t *width, uint32_t *height);
@@ -175,6 +175,7 @@
DisplayError SetMetaData(const private_handle_t *pvt_handle, Layer *layer);
bool NeedsFrameBufferRefresh(hwc_display_contents_1_t *content_list);
bool IsLayerUpdating(hwc_display_contents_1_t *content_list, const Layer *layer);
+ bool IsNonIntegralSourceCrop(const hwc_frect_t &source);
uint32_t GetUpdatingLayersCount(uint32_t app_layer_count);
bool SingleVideoLayerUpdating(uint32_t app_layer_count);
bool IsSurfaceUpdated(const std::vector<LayerRect> &dirty_regions);
@@ -209,7 +210,7 @@
bool shutdown_pending_ = false;
bool use_blit_comp_ = false;
bool secure_display_active_ = false;
- bool skip_prepare_ = false;
+ uint32_t skip_prepare_cnt = 0;
bool solid_fill_enable_ = false;
bool disable_animation_ = false;
uint32_t solid_fill_color_ = 0;
diff --git a/msmcobalt/sdm/libs/hwc/hwc_display_external.cpp b/msm8998/sdm/libs/hwc/hwc_display_external.cpp
similarity index 99%
rename from msmcobalt/sdm/libs/hwc/hwc_display_external.cpp
rename to msm8998/sdm/libs/hwc/hwc_display_external.cpp
index ed916d4..8a3a591 100644
--- a/msmcobalt/sdm/libs/hwc/hwc_display_external.cpp
+++ b/msm8998/sdm/libs/hwc/hwc_display_external.cpp
@@ -214,7 +214,7 @@
+ y_offset;
}
-void HWCDisplayExternal::SetSecureDisplay(bool secure_display_active) {
+void HWCDisplayExternal::SetSecureDisplay(bool secure_display_active, bool force_flush) {
if (secure_display_active_ != secure_display_active) {
secure_display_active_ = secure_display_active;
diff --git a/msmcobalt/sdm/libs/hwc/hwc_display_external.h b/msm8998/sdm/libs/hwc/hwc_display_external.h
similarity index 97%
rename from msmcobalt/sdm/libs/hwc/hwc_display_external.h
rename to msm8998/sdm/libs/hwc/hwc_display_external.h
index ac70489..c5ac3d7 100644
--- a/msmcobalt/sdm/libs/hwc/hwc_display_external.h
+++ b/msm8998/sdm/libs/hwc/hwc_display_external.h
@@ -39,7 +39,7 @@
static void Destroy(HWCDisplay *hwc_display);
virtual int Prepare(hwc_display_contents_1_t *content_list);
virtual int Commit(hwc_display_contents_1_t *content_list);
- virtual void SetSecureDisplay(bool secure_display_active);
+ virtual void SetSecureDisplay(bool secure_display_active, bool force_flush);
virtual int Perform(uint32_t operation, ...);
protected:
diff --git a/msmcobalt/sdm/libs/hwc/hwc_display_null.cpp b/msm8998/sdm/libs/hwc/hwc_display_null.cpp
similarity index 100%
rename from msmcobalt/sdm/libs/hwc/hwc_display_null.cpp
rename to msm8998/sdm/libs/hwc/hwc_display_null.cpp
diff --git a/msmcobalt/sdm/libs/hwc/hwc_display_null.h b/msm8998/sdm/libs/hwc/hwc_display_null.h
similarity index 97%
rename from msmcobalt/sdm/libs/hwc/hwc_display_null.h
rename to msm8998/sdm/libs/hwc/hwc_display_null.h
index 297e870..f1e0e5e 100644
--- a/msmcobalt/sdm/libs/hwc/hwc_display_null.h
+++ b/msm8998/sdm/libs/hwc/hwc_display_null.h
@@ -74,7 +74,7 @@
virtual int OnMinHdcpEncryptionLevelChange(uint32_t min_enc_level) { return 0; }
virtual int Perform(uint32_t operation, ...) { return 0; }
virtual int SetCursorPosition(int x, int y) { return 0; }
- virtual void SetSecureDisplay(bool secure_display_active) { return; }
+ virtual void SetSecureDisplay(bool secure_display_active, bool force_flush) { return; }
// Display Configurations
virtual int SetActiveDisplayConfig(int config) { return 0; }
diff --git a/msmcobalt/sdm/libs/hwc/hwc_display_primary.cpp b/msm8998/sdm/libs/hwc/hwc_display_primary.cpp
similarity index 94%
rename from msmcobalt/sdm/libs/hwc/hwc_display_primary.cpp
rename to msm8998/sdm/libs/hwc/hwc_display_primary.cpp
index bf2d384..51402d7 100644
--- a/msmcobalt/sdm/libs/hwc/hwc_display_primary.cpp
+++ b/msm8998/sdm/libs/hwc/hwc_display_primary.cpp
@@ -297,15 +297,33 @@
}
}
-void HWCDisplayPrimary::SetSecureDisplay(bool secure_display_active) {
+void HWCDisplayPrimary::SetSecureDisplay(bool secure_display_active, bool force_flush) {
if (secure_display_active_ != secure_display_active) {
// Skip Prepare and call Flush for null commit
DLOGI("SecureDisplay state changed from %d to %d Needs Flush!!", secure_display_active_,
secure_display_active);
secure_display_active_ = secure_display_active;
- skip_prepare_ = true;
+ skip_prepare_cnt = 1;
+
+ // Issue two null commits for command mode panels when external displays are connected.
+ // Two null commits are required to handle non secure to secure transitions at 30fps.
+ // TODO(user): Need two null commits on video mode also to handle transition cases of
+ // primary at higher fps (ex60) and external at lower fps.
+
+ // Avoid flush for command mode panels when no external displays are connected.
+ // This is to avoid flicker/blink on primary during transitions.
+ DisplayConfigFixedInfo display_config;
+ display_intf_->GetConfig(&display_config);
+ if (display_config.is_cmdmode) {
+ if (force_flush) {
+ DLOGI("Issue two null commits for command mode panels");
+ skip_prepare_cnt = 2;
+ } else {
+ DLOGI("Avoid flush for command mode panel when no external displays are connected");
+ skip_prepare_cnt = 0;
+ }
+ }
}
- return;
}
void HWCDisplayPrimary::ForceRefreshRate(uint32_t refresh_rate) {
diff --git a/msmcobalt/sdm/libs/hwc/hwc_display_primary.h b/msm8998/sdm/libs/hwc/hwc_display_primary.h
similarity index 97%
rename from msmcobalt/sdm/libs/hwc/hwc_display_primary.h
rename to msm8998/sdm/libs/hwc/hwc_display_primary.h
index 901d856..07f6c55 100644
--- a/msmcobalt/sdm/libs/hwc/hwc_display_primary.h
+++ b/msm8998/sdm/libs/hwc/hwc_display_primary.h
@@ -40,7 +40,7 @@
virtual int Prepare(hwc_display_contents_1_t *content_list);
virtual int Commit(hwc_display_contents_1_t *content_list);
virtual int Perform(uint32_t operation, ...);
- virtual void SetSecureDisplay(bool secure_display_active);
+ virtual void SetSecureDisplay(bool secure_display_active, bool force_flush);
virtual DisplayError Refresh();
virtual void SetIdleTimeoutMs(uint32_t timeout_ms);
virtual void SetFrameDumpConfig(uint32_t count, uint32_t bit_mask_layer_type);
diff --git a/msmcobalt/sdm/libs/hwc/hwc_display_virtual.cpp b/msm8998/sdm/libs/hwc/hwc_display_virtual.cpp
similarity index 100%
rename from msmcobalt/sdm/libs/hwc/hwc_display_virtual.cpp
rename to msm8998/sdm/libs/hwc/hwc_display_virtual.cpp
diff --git a/msmcobalt/sdm/libs/hwc/hwc_display_virtual.h b/msm8998/sdm/libs/hwc/hwc_display_virtual.h
similarity index 100%
rename from msmcobalt/sdm/libs/hwc/hwc_display_virtual.h
rename to msm8998/sdm/libs/hwc/hwc_display_virtual.h
diff --git a/msmcobalt/sdm/libs/hwc/hwc_session.cpp b/msm8998/sdm/libs/hwc/hwc_session.cpp
similarity index 96%
rename from msmcobalt/sdm/libs/hwc/hwc_session.cpp
rename to msm8998/sdm/libs/hwc/hwc_session.cpp
index 5cdf7a7..cc8dc05 100644
--- a/msmcobalt/sdm/libs/hwc/hwc_session.cpp
+++ b/msm8998/sdm/libs/hwc/hwc_session.cpp
@@ -45,6 +45,7 @@
#include <sync/sync.h>
#include <profiler.h>
#include <bitset>
+#include <vector>
#include "hwc_buffer_allocator.h"
#include "hwc_buffer_sync_handler.h"
@@ -184,6 +185,7 @@
return -errno;
}
+ connected_displays_[HWC_DISPLAY_PRIMARY] = 1;
return 0;
}
@@ -201,6 +203,7 @@
DLOGE("Display core de-initialization failed. Error = %d", error);
}
+ connected_displays_[HWC_DISPLAY_PRIMARY] = 0;
return 0;
}
@@ -272,6 +275,7 @@
if (hwc_session->need_invalidate_) {
hwc_procs->invalidate(hwc_procs);
+ hwc_session->need_invalidate_ = false;
}
hwc_session->HandleSecureDisplaySession(displays);
@@ -636,16 +640,18 @@
if (disp == HWC_DISPLAY_EXTERNAL) {
status = HWCDisplayExternal::Create(core_intf_, &hwc_procs_, primary_width, primary_height,
qservice_, false, &hwc_display_[disp]);
+ connected_displays_[HWC_DISPLAY_EXTERNAL] = 1;
} else if (disp == HWC_DISPLAY_VIRTUAL) {
status = HWCDisplayVirtual::Create(core_intf_, &hwc_procs_, primary_width, primary_height,
content_list, &hwc_display_[disp]);
+ connected_displays_[HWC_DISPLAY_VIRTUAL] = 1;
} else {
DLOGE("Invalid display type");
return -1;
}
if (!status) {
- hwc_display_[disp]->SetSecureDisplay(secure_display_active_);
+ hwc_display_[disp]->SetSecureDisplay(secure_display_active_, true);
}
return status;
@@ -656,8 +662,10 @@
if (disp == HWC_DISPLAY_EXTERNAL) {
HWCDisplayExternal::Destroy(hwc_display_[disp]);
+ connected_displays_[HWC_DISPLAY_EXTERNAL] = 0;
} else if (disp == HWC_DISPLAY_VIRTUAL) {
HWCDisplayVirtual::Destroy(hwc_display_[disp]);
+ connected_displays_[HWC_DISPLAY_VIRTUAL] = 0;
} else {
DLOGE("Invalid display type");
return -1;
@@ -769,6 +777,10 @@
status = SetMixerResolution(input_parcel);
break;
+ case qService::IQService::GET_HDR_CAPABILITIES:
+ status = GetHdrCapabilities(input_parcel, output_parcel);
+ break;
+
default:
DLOGW("QService command = %d is not supported", command);
return -EINVAL;
@@ -1176,6 +1188,24 @@
return 0;
}
+android::status_t HWCSession::GetHdrCapabilities(const android::Parcel *input_parcel,
+ android::Parcel *output_parcel) {
+ // TODO(akumarkr): Get values from display intf
+ // uint32_t dpy = UINT32(input_parcel->readInt32());
+ std::vector<int32_t> supported_hdr_types;
+ supported_hdr_types.push_back(HAL_HDR_HDR10);
+ float max_luminance = 500.0;
+ float max_average_luminance = 200.0;
+ float min_luminance = 0.5;
+ if (output_parcel != nullptr) {
+ output_parcel->writeInt32Vector(supported_hdr_types);
+ output_parcel->writeFloat(max_luminance);
+ output_parcel->writeFloat(max_average_luminance);
+ output_parcel->writeFloat(min_luminance);
+ }
+ return 0;
+}
+
void HWCSession::DynamicDebug(const android::Parcel *input_parcel) {
int type = input_parcel->readInt32();
bool enable = (input_parcel->readInt32() > 0);
@@ -1580,9 +1610,18 @@
}
}
+ // Force flush on primary during transitions(secure<->non secure)
+ // when external displays are connected.
+ bool force_flush = false;
+ if ((connected_displays_[HWC_DISPLAY_PRIMARY] == 1) &&
+ ((connected_displays_[HWC_DISPLAY_EXTERNAL] == 1) ||
+ (connected_displays_[HWC_DISPLAY_VIRTUAL] == 1))) {
+ force_flush = true;
+ }
+
for (ssize_t dpy = static_cast<ssize_t>(HWC_NUM_DISPLAY_TYPES - 1); dpy >= 0; dpy--) {
if (hwc_display_[dpy]) {
- hwc_display_[dpy]->SetSecureDisplay(secure_display_active_);
+ hwc_display_[dpy]->SetSecureDisplay(secure_display_active_, force_flush);
}
}
}
diff --git a/msmcobalt/sdm/libs/hwc/hwc_session.h b/msm8998/sdm/libs/hwc/hwc_session.h
similarity index 96%
rename from msmcobalt/sdm/libs/hwc/hwc_session.h
rename to msm8998/sdm/libs/hwc/hwc_session.h
index 54b7260..c0dba84 100644
--- a/msmcobalt/sdm/libs/hwc/hwc_session.h
+++ b/msm8998/sdm/libs/hwc/hwc_session.h
@@ -125,6 +125,8 @@
android::Parcel *output_parcel);
android::status_t SetMixerResolution(const android::Parcel *input_parcel);
android::status_t SetDisplayPort(DisplayPort sdm_disp_port, int *hwc_disp_port);
+ android::status_t GetHdrCapabilities(const android::Parcel *input_parcel,
+ android::Parcel *output_parcel);
static Locker locker_;
CoreInterface *core_intf_ = NULL;
@@ -146,6 +148,7 @@
qService::QService *qservice_ = NULL;
bool is_hdmi_primary_ = false;
bool is_hdmi_yuv_ = false;
+ std::bitset<HWC_NUM_DISPLAY_TYPES> connected_displays_; // Bit mask of connected displays
};
} // namespace sdm
diff --git a/msmcobalt/sdm/libs/hwc2/Android.mk b/msm8998/sdm/libs/hwc2/Android.mk
similarity index 100%
rename from msmcobalt/sdm/libs/hwc2/Android.mk
rename to msm8998/sdm/libs/hwc2/Android.mk
diff --git a/msmcobalt/sdm/libs/hwc2/hwc_callbacks.cpp b/msm8998/sdm/libs/hwc2/hwc_callbacks.cpp
similarity index 100%
rename from msmcobalt/sdm/libs/hwc2/hwc_callbacks.cpp
rename to msm8998/sdm/libs/hwc2/hwc_callbacks.cpp
diff --git a/msmcobalt/sdm/libs/hwc2/hwc_callbacks.h b/msm8998/sdm/libs/hwc2/hwc_callbacks.h
similarity index 100%
rename from msmcobalt/sdm/libs/hwc2/hwc_callbacks.h
rename to msm8998/sdm/libs/hwc2/hwc_callbacks.h
diff --git a/msmcobalt/sdm/libs/hwc2/hwc_color_manager.cpp b/msm8998/sdm/libs/hwc2/hwc_color_manager.cpp
similarity index 86%
rename from msmcobalt/sdm/libs/hwc2/hwc_color_manager.cpp
rename to msm8998/sdm/libs/hwc2/hwc_color_manager.cpp
index a5cb821..c76f540 100644
--- a/msmcobalt/sdm/libs/hwc2/hwc_color_manager.cpp
+++ b/msm8998/sdm/libs/hwc2/hwc_color_manager.cpp
@@ -241,7 +241,7 @@
return -EFAULT;
} else {
frame_capture_data->buffer = reinterpret_cast<uint8_t *>(buffer);
- frame_capture_data->buffer_stride = buffer_info.alloc_buffer_info.stride;
+ frame_capture_data->buffer_stride = buffer_info.buffer_config.width;
frame_capture_data->buffer_size = buffer_info.alloc_buffer_info.size;
}
ret = hwc_display->FrameCaptureAsync(buffer_info, 1);
@@ -279,65 +279,67 @@
DisplayDetailEnhancerData de_data;
PPDETuningCfgData *de_tuning_cfg_data = reinterpret_cast<PPDETuningCfgData*>(params);
- if (!de_tuning_cfg_data->cfg_en) {
- de_data.override_flags = kOverrideDEEnable;
- de_data.enable = 0;
- } else {
- de_data.override_flags = kOverrideDEEnable;
- de_data.enable = 1;
+ if (de_tuning_cfg_data->cfg_pending == true) {
+ if (!de_tuning_cfg_data->cfg_en) {
+ de_data.override_flags = kOverrideDEEnable;
+ de_data.enable = 0;
+ } else {
+ de_data.override_flags = kOverrideDEEnable;
+ de_data.enable = 1;
- if (de_tuning_cfg_data->params.flags & kDeTuningFlagSharpFactor) {
- de_data.override_flags |= kOverrideDEEnable;
- de_data.sharp_factor = de_tuning_cfg_data->params.sharp_factor;
- }
+ if (de_tuning_cfg_data->params.flags & kDeTuningFlagSharpFactor) {
+ de_data.override_flags |= kOverrideDESharpen1;
+ de_data.sharp_factor = de_tuning_cfg_data->params.sharp_factor;
+ }
- if (de_tuning_cfg_data->params.flags & kDeTuningFlagClip) {
- de_data.override_flags |= kOverrideDEEnable;
- de_data.clip = de_tuning_cfg_data->params.clip;
- }
+ if (de_tuning_cfg_data->params.flags & kDeTuningFlagClip) {
+ de_data.override_flags |= kOverrideDEClip;
+ de_data.clip = de_tuning_cfg_data->params.clip;
+ }
- if (de_tuning_cfg_data->params.flags & kDeTuningFlagThrQuiet) {
- de_data.override_flags |= kOverrideDEEnable;
- de_data.thr_quiet = de_tuning_cfg_data->params.thr_quiet;
- }
+ if (de_tuning_cfg_data->params.flags & kDeTuningFlagThrQuiet) {
+ de_data.override_flags |= kOverrideDEThrQuiet;
+ de_data.thr_quiet = de_tuning_cfg_data->params.thr_quiet;
+ }
- if (de_tuning_cfg_data->params.flags & kDeTuningFlagThrDieout) {
- de_data.override_flags |= kOverrideDEEnable;
- de_data.thr_dieout = de_tuning_cfg_data->params.thr_dieout;
- }
+ if (de_tuning_cfg_data->params.flags & kDeTuningFlagThrDieout) {
+ de_data.override_flags |= kOverrideDEThrDieout;
+ de_data.thr_dieout = de_tuning_cfg_data->params.thr_dieout;
+ }
- if (de_tuning_cfg_data->params.flags & kDeTuningFlagThrLow) {
- de_data.override_flags |= kOverrideDEEnable;
- de_data.thr_low = de_tuning_cfg_data->params.thr_low;
- }
+ if (de_tuning_cfg_data->params.flags & kDeTuningFlagThrLow) {
+ de_data.override_flags |= kOverrideDEThrLow;
+ de_data.thr_low = de_tuning_cfg_data->params.thr_low;
+ }
- if (de_tuning_cfg_data->params.flags & kDeTuningFlagThrHigh) {
- de_data.override_flags |= kOverrideDEEnable;
- de_data.thr_high = de_tuning_cfg_data->params.thr_high;
- }
+ if (de_tuning_cfg_data->params.flags & kDeTuningFlagThrHigh) {
+ de_data.override_flags |= kOverrideDEThrHigh;
+ de_data.thr_high = de_tuning_cfg_data->params.thr_high;
+ }
- if (de_tuning_cfg_data->params.flags & kDeTuningFlagContentQualLevel) {
- de_data.override_flags |= kOverrideDEEnable;
- switch (de_tuning_cfg_data->params.quality) {
- case kDeContentQualLow:
- de_data.quality_level = kContentQualityLow;
- break;
- case kDeContentQualMedium:
- de_data.quality_level = kContentQualityMedium;
- break;
- case kDeContentQualHigh:
- de_data.quality_level = kContentQualityHigh;
- break;
- case kDeContentQualUnknown:
- default:
- de_data.quality_level = kContentQualityUnknown;
- break;
+ if (de_tuning_cfg_data->params.flags & kDeTuningFlagContentQualLevel) {
+ switch (de_tuning_cfg_data->params.quality) {
+ case kDeContentQualLow:
+ de_data.quality_level = kContentQualityLow;
+ break;
+ case kDeContentQualMedium:
+ de_data.quality_level = kContentQualityMedium;
+ break;
+ case kDeContentQualHigh:
+ de_data.quality_level = kContentQualityHigh;
+ break;
+ case kDeContentQualUnknown:
+ default:
+ de_data.quality_level = kContentQualityUnknown;
+ break;
+ }
}
}
- }
- err = hwc_display->SetDetailEnhancerConfig(de_data);
- if (err) {
- DLOGW("SetDetailEnhancerConfig failed. err = %d", err);
+ err = hwc_display->SetDetailEnhancerConfig(de_data);
+ if (err) {
+ DLOGW("SetDetailEnhancerConfig failed. err = %d", err);
+ }
+ de_tuning_cfg_data->cfg_pending = false;
}
return err;
diff --git a/msmcobalt/sdm/libs/hwc2/hwc_color_manager.h b/msm8998/sdm/libs/hwc2/hwc_color_manager.h
similarity index 100%
rename from msmcobalt/sdm/libs/hwc2/hwc_color_manager.h
rename to msm8998/sdm/libs/hwc2/hwc_color_manager.h
diff --git a/msmcobalt/sdm/libs/hwc2/hwc_display.cpp b/msm8998/sdm/libs/hwc2/hwc_display.cpp
similarity index 99%
rename from msmcobalt/sdm/libs/hwc2/hwc_display.cpp
rename to msm8998/sdm/libs/hwc2/hwc_display.cpp
index e5e1732..0f2b900 100644
--- a/msmcobalt/sdm/libs/hwc2/hwc_display.cpp
+++ b/msm8998/sdm/libs/hwc2/hwc_display.cpp
@@ -386,6 +386,8 @@
LayerBuffer *layer_buffer = layer->input_buffer;
layer_buffer->width = UINT32(layer->dst_rect.right - layer->dst_rect.left);
layer_buffer->height = UINT32(layer->dst_rect.bottom - layer->dst_rect.top);
+ layer_buffer->unaligned_width = layer_buffer->width;
+ layer_buffer->unaligned_height = layer_buffer->height;
layer_buffer->acquire_fence_fd = -1;
layer_buffer->release_fence_fd = -1;
layer->src_rect.left = 0;
@@ -774,18 +776,21 @@
}
HWC2::Error HWCDisplay::AcceptDisplayChanges() {
- if (!validated_ && !layer_set_.empty()) {
+ if (layer_set_.empty()) {
+ return HWC2::Error::None;
+ }
+
+ if (!validated_) {
return HWC2::Error::NotValidated;
}
for (const auto& change : layer_changes_) {
auto hwc_layer = layer_map_[change.first];
auto composition = change.second;
-
- if (hwc_layer == nullptr) {
- DLOGI("Null layer in HWCDisplay::AcceptDisplayChanges.");
- } else {
+ if (hwc_layer != nullptr) {
hwc_layer->UpdateClientCompositionType(composition);
+ } else {
+ DLOGW("Invalid layer: %" PRIu64, change.first);
}
}
return HWC2::Error::None;
diff --git a/msmcobalt/sdm/libs/hwc2/hwc_display.h b/msm8998/sdm/libs/hwc2/hwc_display.h
similarity index 100%
rename from msmcobalt/sdm/libs/hwc2/hwc_display.h
rename to msm8998/sdm/libs/hwc2/hwc_display.h
diff --git a/msmcobalt/sdm/libs/hwc2/hwc_display_external.cpp b/msm8998/sdm/libs/hwc2/hwc_display_external.cpp
similarity index 100%
rename from msmcobalt/sdm/libs/hwc2/hwc_display_external.cpp
rename to msm8998/sdm/libs/hwc2/hwc_display_external.cpp
diff --git a/msmcobalt/sdm/libs/hwc2/hwc_display_external.h b/msm8998/sdm/libs/hwc2/hwc_display_external.h
similarity index 100%
rename from msmcobalt/sdm/libs/hwc2/hwc_display_external.h
rename to msm8998/sdm/libs/hwc2/hwc_display_external.h
diff --git a/msmcobalt/sdm/libs/hwc2/hwc_display_primary.cpp b/msm8998/sdm/libs/hwc2/hwc_display_primary.cpp
similarity index 100%
rename from msmcobalt/sdm/libs/hwc2/hwc_display_primary.cpp
rename to msm8998/sdm/libs/hwc2/hwc_display_primary.cpp
diff --git a/msmcobalt/sdm/libs/hwc2/hwc_display_primary.h b/msm8998/sdm/libs/hwc2/hwc_display_primary.h
similarity index 100%
rename from msmcobalt/sdm/libs/hwc2/hwc_display_primary.h
rename to msm8998/sdm/libs/hwc2/hwc_display_primary.h
diff --git a/msmcobalt/sdm/libs/hwc2/hwc_display_virtual.cpp b/msm8998/sdm/libs/hwc2/hwc_display_virtual.cpp
similarity index 100%
rename from msmcobalt/sdm/libs/hwc2/hwc_display_virtual.cpp
rename to msm8998/sdm/libs/hwc2/hwc_display_virtual.cpp
diff --git a/msmcobalt/sdm/libs/hwc2/hwc_display_virtual.h b/msm8998/sdm/libs/hwc2/hwc_display_virtual.h
similarity index 100%
rename from msmcobalt/sdm/libs/hwc2/hwc_display_virtual.h
rename to msm8998/sdm/libs/hwc2/hwc_display_virtual.h
diff --git a/msmcobalt/sdm/libs/hwc2/hwc_layers.cpp b/msm8998/sdm/libs/hwc2/hwc_layers.cpp
similarity index 98%
rename from msmcobalt/sdm/libs/hwc2/hwc_layers.cpp
rename to msm8998/sdm/libs/hwc2/hwc_layers.cpp
index 588ee8c..f4ae584 100644
--- a/msmcobalt/sdm/libs/hwc2/hwc_layers.cpp
+++ b/msm8998/sdm/libs/hwc2/hwc_layers.cpp
@@ -98,6 +98,9 @@
// TZ Protected Buffer - L1
if (handle->flags & private_handle_t::PRIV_FLAGS_SECURE_BUFFER) {
layer_buffer->flags.secure = true;
+ if (handle->flags & private_handle_t::PRIV_FLAGS_CAMERA_WRITE) {
+ layer_buffer->flags.secure_camera = true;
+ }
}
if (handle->flags & private_handle_t::PRIV_FLAGS_SECURE_DISPLAY) {
layer_buffer->flags.secure_display = true;
@@ -107,6 +110,7 @@
layer_buffer->planes[0].offset = handle->offset;
layer_buffer->planes[0].stride = UINT32(handle->width);
layer_buffer->acquire_fence_fd = acquire_fence;
+ layer_buffer->size = handle->size;
layer_buffer->buffer_id = reinterpret_cast<uint64_t>(handle);
return HWC2::Error::None;
diff --git a/msmcobalt/sdm/libs/hwc2/hwc_layers.h b/msm8998/sdm/libs/hwc2/hwc_layers.h
similarity index 100%
rename from msmcobalt/sdm/libs/hwc2/hwc_layers.h
rename to msm8998/sdm/libs/hwc2/hwc_layers.h
diff --git a/msmcobalt/sdm/libs/hwc2/hwc_session.cpp b/msm8998/sdm/libs/hwc2/hwc_session.cpp
similarity index 99%
rename from msmcobalt/sdm/libs/hwc2/hwc_session.cpp
rename to msm8998/sdm/libs/hwc2/hwc_session.cpp
index 66ab568..96111d9 100644
--- a/msmcobalt/sdm/libs/hwc2/hwc_session.cpp
+++ b/msm8998/sdm/libs/hwc2/hwc_session.cpp
@@ -215,7 +215,8 @@
// HWC2 functions returned in GetFunction
// Defined in the same order as in the HWC2 header
-static int32_t AcceptDisplayChanges(hwc2_device_t *device, hwc2_display_t display) {
+int32_t HWCSession::AcceptDisplayChanges(hwc2_device_t *device, hwc2_display_t display) {
+ SCOPE_LOCK(locker_);
return HWCSession::CallDisplayFunction(device, display, &HWCDisplay::AcceptDisplayChanges);
}
@@ -590,7 +591,7 @@
switch (descriptor) {
case HWC2::FunctionDescriptor::AcceptDisplayChanges:
- return AsFP<HWC2_PFN_ACCEPT_DISPLAY_CHANGES>(AcceptDisplayChanges);
+ return AsFP<HWC2_PFN_ACCEPT_DISPLAY_CHANGES>(HWCSession::AcceptDisplayChanges);
case HWC2::FunctionDescriptor::CreateLayer:
return AsFP<HWC2_PFN_CREATE_LAYER>(CreateLayer);
case HWC2::FunctionDescriptor::CreateVirtualDisplay:
diff --git a/msmcobalt/sdm/libs/hwc2/hwc_session.h b/msm8998/sdm/libs/hwc2/hwc_session.h
similarity index 98%
rename from msmcobalt/sdm/libs/hwc2/hwc_session.h
rename to msm8998/sdm/libs/hwc2/hwc_session.h
index ce3e27f..7ae59ed 100644
--- a/msmcobalt/sdm/libs/hwc2/hwc_session.h
+++ b/msm8998/sdm/libs/hwc2/hwc_session.h
@@ -82,6 +82,7 @@
// HWC2 Functions that require a concrete implementation in hwc session
// and hence need to be member functions
+ static int32_t AcceptDisplayChanges(hwc2_device_t *device, hwc2_display_t display);
static int32_t CreateLayer(hwc2_device_t *device, hwc2_display_t display,
hwc2_layer_t *out_layer_id);
static int32_t CreateVirtualDisplay(hwc2_device_t *device, uint32_t width, uint32_t height,
diff --git a/msmcobalt/sdm/libs/utils/Android.mk b/msm8998/sdm/libs/utils/Android.mk
similarity index 100%
rename from msmcobalt/sdm/libs/utils/Android.mk
rename to msm8998/sdm/libs/utils/Android.mk
diff --git a/msmcobalt/sdm/libs/utils/Makefile.am b/msm8998/sdm/libs/utils/Makefile.am
similarity index 85%
rename from msmcobalt/sdm/libs/utils/Makefile.am
rename to msm8998/sdm/libs/utils/Makefile.am
index 5b0eaab..ba6efae 100644
--- a/msmcobalt/sdm/libs/utils/Makefile.am
+++ b/msm8998/sdm/libs/utils/Makefile.am
@@ -7,4 +7,5 @@
libsdmutils_la_CC = @CC@
libsdmutils_la_SOURCES = $(cpp_sources)
libsdmutils_la_CFLAGS = $(COMMON_CFLAGS) -DLOG_TAG=\"SDM\"
-libsdmutils_la_CPPFLAGS = $(AM_CPPFLAGS)
\ No newline at end of file
+libsdmutils_la_CPPFLAGS = $(AM_CPPFLAGS)
+libsdmutils_la_LDFLAGS = -shared -avoid-version
\ No newline at end of file
diff --git a/msmcobalt/sdm/libs/utils/debug.cpp b/msm8998/sdm/libs/utils/debug.cpp
similarity index 95%
rename from msmcobalt/sdm/libs/utils/debug.cpp
rename to msm8998/sdm/libs/utils/debug.cpp
index 4a8e070..fc8567a 100644
--- a/msmcobalt/sdm/libs/utils/debug.cpp
+++ b/msm8998/sdm/libs/utils/debug.cpp
@@ -31,6 +31,7 @@
#include <utils/debug.h>
#include <utils/constants.h>
#include <string>
+#include <algorithm>
namespace sdm {
@@ -163,7 +164,7 @@
}
DisplayError Debug::GetMixerResolution(uint32_t *width, uint32_t *height) {
- char value[64];
+ char value[64] = {};
DisplayError error = debug_.debug_handler_->GetProperty("sdm.mixer_resolution", value);
if (error !=kErrorNone) {
@@ -178,6 +179,13 @@
return kErrorNone;
}
+int Debug::GetExtMaxlayers() {
+ int max_external_layers = 0;
+ debug_.debug_handler_->GetProperty("sdm.max_external_layers", &max_external_layers);
+
+ return std::max(max_external_layers, 2);
+}
+
bool Debug::GetProperty(const char* property_name, char* value) {
if (debug_.debug_handler_->GetProperty(property_name, value) != kErrorNone) {
return false;
diff --git a/msmcobalt/sdm/libs/utils/formats.cpp b/msm8998/sdm/libs/utils/formats.cpp
similarity index 100%
rename from msmcobalt/sdm/libs/utils/formats.cpp
rename to msm8998/sdm/libs/utils/formats.cpp
diff --git a/msmcobalt/sdm/libs/utils/rect.cpp b/msm8998/sdm/libs/utils/rect.cpp
similarity index 94%
rename from msmcobalt/sdm/libs/utils/rect.cpp
rename to msm8998/sdm/libs/utils/rect.cpp
index e1180e3..fc553a3 100644
--- a/msmcobalt/sdm/libs/utils/rect.cpp
+++ b/msm8998/sdm/libs/utils/rect.cpp
@@ -205,6 +205,10 @@
return;
}
+ int x_offset = INT(src_domain.left);
+ int y_offset = INT(src_domain.top);
+
+ LayerRect modified_in_rect = Reposition(in_rect, -x_offset, -y_offset);
float src_domain_width = src_domain.right - src_domain.left;
float src_domain_height = src_domain.bottom - src_domain.top;
float dst_domain_width = dst_domain.right - dst_domain.left;
@@ -213,10 +217,10 @@
float width_ratio = dst_domain_width / src_domain_width;
float height_ratio = dst_domain_height / src_domain_height;
- out_rect->left = dst_domain.left + (width_ratio * in_rect.left);
- out_rect->top = dst_domain.top + (height_ratio * in_rect.top);
- out_rect->right = dst_domain.left + (width_ratio * in_rect.right);
- out_rect->bottom = dst_domain.top + (height_ratio * in_rect.bottom);
+ out_rect->left = dst_domain.left + (width_ratio * modified_in_rect.left);
+ out_rect->top = dst_domain.top + (height_ratio * modified_in_rect.top);
+ out_rect->right = dst_domain.left + (width_ratio * modified_in_rect.right);
+ out_rect->bottom = dst_domain.top + (height_ratio * modified_in_rect.bottom);
}
RectOrientation GetOrientation(const LayerRect &in_rect) {
diff --git a/msmcobalt/sdm/libs/utils/sys.cpp b/msm8998/sdm/libs/utils/sys.cpp
similarity index 100%
rename from msmcobalt/sdm/libs/utils/sys.cpp
rename to msm8998/sdm/libs/utils/sys.cpp