Revert "display: Update to AU199 proprietary drop"
This reverts commit acef02b3f216de230e09c8a9779215d70b313654.
diff --git a/msm8996/libgralloc/alloc_controller.cpp b/msm8996/libgralloc/alloc_controller.cpp
index e9cdc73..2a5d099 100644
--- a/msm8996/libgralloc/alloc_controller.cpp
+++ b/msm8996/libgralloc/alloc_controller.cpp
@@ -99,10 +99,14 @@
//------------- MDPCapabilityInfo-----------------------//
MDPCapabilityInfo :: MDPCapabilityInfo() {
+ isMacroTileSupported = false;
qdutils::querySDEInfo(HAS_MACRO_TILE, &isMacroTileSupported);
- qdutils::querySDEInfo(HAS_UBWC, &isUBwcSupported);
}
+int MDPCapabilityInfo :: isMacroTilingSupportedByMDP(){
+ return isMacroTileSupported;
+ }
+
//------------- AdrenoMemInfo-----------------------//
AdrenoMemInfo::AdrenoMemInfo()
{
@@ -928,23 +932,20 @@
static bool isUBwcSupported(int format)
{
- if (MDPCapabilityInfo::getInstance().isUBwcSupportedByMDP()) {
- // Existing HAL formats with UBWC support
- switch(format)
- {
- case HAL_PIXEL_FORMAT_BGR_565:
- case HAL_PIXEL_FORMAT_RGBA_8888:
- case HAL_PIXEL_FORMAT_RGBX_8888:
- case HAL_PIXEL_FORMAT_NV12_ENCODEABLE:
- case HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS:
- case HAL_PIXEL_FORMAT_RGBA_1010102:
- case HAL_PIXEL_FORMAT_RGBX_1010102:
- return true;
- default:
- break;
- }
+ // Existing HAL formats with UBWC support
+ switch(format)
+ {
+ case HAL_PIXEL_FORMAT_BGR_565:
+ case HAL_PIXEL_FORMAT_RGBA_8888:
+ case HAL_PIXEL_FORMAT_RGBX_8888:
+ case HAL_PIXEL_FORMAT_NV12_ENCODEABLE:
+ case HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS:
+ case HAL_PIXEL_FORMAT_RGBA_1010102:
+ case HAL_PIXEL_FORMAT_RGBX_1010102:
+ return true;
+ default:
+ return false;
}
- return false;
}
bool isUBwcEnabled(int format, int usage)
diff --git a/msm8996/libgralloc/gr.h b/msm8996/libgralloc/gr.h
index 5fe1bdb..e7d449e 100644
--- a/msm8996/libgralloc/gr.h
+++ b/msm8996/libgralloc/gr.h
@@ -201,9 +201,7 @@
class MDPCapabilityInfo : public android::Singleton <MDPCapabilityInfo>
{
- int isMacroTileSupported = 0;
- int isUBwcSupported = 0;
-
+ int isMacroTileSupported;
public:
MDPCapabilityInfo();
/*
@@ -212,14 +210,8 @@
* @return 1 : supported
* 0 : not supported
*/
- int isMacroTilingSupportedByMDP() { return isMacroTileSupported; }
- /*
- * Function to return whether MDP supports UBWC feature
- *
- * @return 1 : supported
- * 0 : not supported
- */
- int isUBwcSupportedByMDP() { return isUBwcSupported; }
+ int isMacroTilingSupportedByMDP();
+
};
#endif /* GR_H_ */
diff --git a/msm8996/libmemtrack/kgsl.c b/msm8996/libmemtrack/kgsl.c
index 5a6b075..4ad94ce 100644
--- a/msm8996/libmemtrack/kgsl.c
+++ b/msm8996/libmemtrack/kgsl.c
@@ -83,7 +83,7 @@
* count the entry as accounted else count the entry as unaccounted.
*/
while (1) {
- unsigned long size, mapsize;
+ unsigned long size;
char line_type[7];
char flags[8];
char line_usage[19];
@@ -94,21 +94,20 @@
}
/* Format:
- * gpuaddr useraddr size id flags type usage sglen mapsize
- * 545ba000 545ba000 4096 1 -----pY gpumem arraybuffer 1 4096
+ * gpuaddr useraddr size id flags type usage sglen
+ * 545ba000 545ba000 4096 1 -----pY gpumem arraybuffer 1
*/
- ret = sscanf(line, "%*x %*x %lu %*d %7s %6s %18s %*d %lu\n",
- &size, flags, line_type, line_usage, &mapsize);
- if (ret != 5) {
+ ret = sscanf(line, "%*x %*x %lu %*d %7s %6s %18s %*d\n",
+ &size, flags, line_type, line_usage);
+ if (ret != 4) {
continue;
}
if (type == MEMTRACK_TYPE_GL && strcmp(line_type, "gpumem") == 0) {
- if (flags[6] == 'Y') {
- accounted_size += mapsize;
- unaccounted_size += size - mapsize;
- } else
+ if (flags[6] == 'Y')
+ accounted_size += size;
+ else
unaccounted_size += size;
} else if (type == MEMTRACK_TYPE_GRAPHICS && strcmp(line_type, "ion") == 0) {
diff --git a/msm8996/libqdutils/qd_utils.cpp b/msm8996/libqdutils/qd_utils.cpp
index 6453b58..254df30 100644
--- a/msm8996/libqdutils/qd_utils.cpp
+++ b/msm8996/libqdutils/qd_utils.cpp
@@ -62,10 +62,6 @@
featureName = "tile_format";
break;
- case HAS_UBWC:
- featureName = "ubwc";
- break;
-
default:
ALOGE("Invalid query type %d", type);
return -EINVAL;
diff --git a/msm8996/libqdutils/qd_utils.h b/msm8996/libqdutils/qd_utils.h
index 0392e05..2b9ca74 100644
--- a/msm8996/libqdutils/qd_utils.h
+++ b/msm8996/libqdutils/qd_utils.h
@@ -48,7 +48,6 @@
enum HWQueryType {
HAS_MACRO_TILE = 0,
- HAS_UBWC = 1,
};
enum {
diff --git a/msm8996/libqservice/IQService.h b/msm8996/libqservice/IQService.h
index 49467db..2d7dddc 100644
--- a/msm8996/libqservice/IQService.h
+++ b/msm8996/libqservice/IQService.h
@@ -1,6 +1,6 @@
/*
* Copyright (C) 2010 The Android Open Source Project
- * Copyright (C) 2012-2014, 2016 The Linux Foundation. All rights reserved.
+ * Copyright (C) 2012-2014, The Linux Foundation. All rights reserved.
*
* Not a Contribution, Apache license notifications and license are
* retained for attribution purposes only.
@@ -72,7 +72,6 @@
SET_CAMERA_STATUS = 30, // To notify display when camera is on and off
MIN_HDCP_ENCRYPTION_LEVEL_CHANGED = 31,
GET_BW_TRANSACTION_STATUS = 32, //Client can query BW transaction status.
- SET_LAYER_MIXER_RESOLUTION = 33, // Enables client to set layer mixer resolution.
COMMAND_LIST_END = 400,
};
diff --git a/msm8996/sdm/include/core/display_interface.h b/msm8996/sdm/include/core/display_interface.h
index bb89d1d..951cd54 100644
--- a/msm8996/sdm/include/core/display_interface.h
+++ b/msm8996/sdm/include/core/display_interface.h
@@ -76,48 +76,6 @@
//!< if VSync is enabled. Contents are not rendered in this state.
};
-/*! @brief This enum represents flags to override detail enhancer parameters.
-
- @sa DisplayInterface::SetDetailEnhancerData
-*/
-enum DetailEnhancerOverrideFlags {
- kOverrideDEEnable = 0x1, // Specifies to enable detail enhancer
- kOverrideDESharpen1 = 0x2, // Specifies user defined Sharpening/smooth for noise
- kOverrideDESharpen2 = 0x4, // Specifies user defined Sharpening/smooth for signal
- kOverrideDEClip = 0x8, // Specifies user defined DE clip shift
- kOverrideDELimit = 0x10, // Specifies user defined DE limit value
- kOverrideDEThrQuiet = 0x20, // Specifies user defined DE quiet threshold
- kOverrideDEThrDieout = 0x40, // Specifies user defined DE dieout threshold
- kOverrideDEThrLow = 0x80, // Specifies user defined DE low threshold
- kOverrideDEThrHigh = 0x100, // Specifies user defined DE high threshold
- kOverrideDEFilterConfig = 0x200, // Specifies user defined scaling filter config
- kOverrideDEMax = 0xFFFFFFFF,
-};
-
-/*! @brief This enum represents Y/RGB scaling filter configuration.
-
- @sa DisplayInterface::SetDetailEnhancerData
-*/
-enum ScalingFilterConfig {
- kFilterEdgeDirected,
- kFilterCircular,
- kFilterSeparable,
- kFilterBilinear,
- kFilterMax,
-};
-
-/*! @brief This enum represents the quality level of the content.
-
- @sa DisplayInterface::SetDetailEnhancerData
-*/
-enum ContentQuality {
- kContentQualityUnknown, // Default: high artifact and noise
- kContentQualityLow, // Low quality content, high artifact and noise,
- kContentQualityMedium, // Medium quality, medium artifact and noise,
- kContentQualityHigh, // High quality content, low artifact and noise
- kContentQualityMax,
-};
-
/*! @brief This structure defines configuration for fixed properties of a display device.
@sa DisplayInterface::GetConfig
@@ -151,30 +109,6 @@
int64_t timestamp = 0; //!< System monotonic clock timestamp in nanoseconds.
};
-/*! @brief The structure defines the user input for detail enhancer module.
-
- @sa DisplayInterface::SetDetailEnhancerData
-*/
-struct DisplayDetailEnhancerData {
- uint32_t override_flags = 0; // flags to specify which data to be set.
- uint16_t enable = 0; // Detail enchancer enable
- int16_t sharpen_level1 = 0; // Sharpening/smooth strenght for noise
- int16_t sharpen_level2 = 0; // Sharpening/smooth strenght for signal
- uint16_t clip = 0; // DE clip shift
- uint16_t limit = 0; // DE limit value
- uint16_t thr_quiet = 0; // DE quiet threshold
- uint16_t thr_dieout = 0; // DE dieout threshold
- uint16_t thr_low = 0; // DE low threshold
- uint16_t thr_high = 0; // DE high threshold
- int32_t sharp_factor = 50; // sharp_factor specifies sharpness/smoothness level,
- // range -100..100 positive for sharpness and negative for
- // smoothness
- ContentQuality quality_level = kContentQualityUnknown;
- // Specifies context quality level
- ScalingFilterConfig filter_config = kFilterEdgeDirected;
- // Y/RGB filter configuration
-};
-
/*! @brief Display device event handler implemented by the client.
@details This class declares prototype for display device event handler methods which must be
@@ -409,11 +343,6 @@
*/
virtual DisplayError ControlPartialUpdate(bool enable, uint32_t *pending) = 0;
- /*! @brief Method to disable partial update for at least 1 frame.
- @return \link DisplayError \endlink
- */
- virtual DisplayError DisablePartialUpdateOneFrame() = 0;
-
/*! @brief Method to set the mode of the primary display.
@param[in] mode the new display mode.
@@ -422,6 +351,13 @@
*/
virtual DisplayError SetDisplayMode(uint32_t mode) = 0;
+ /*! @brief Method to determine whether scaling for a custom resolution is valid.
+
+ @return \link DisplayError \endlink
+ */
+ virtual DisplayError IsScalingValid(const LayerRect &crop, const LayerRect &dst,
+ bool rotate90) = 0;
+
/*! @brief Method to get the min and max refresh rate of a display.
@param[out] min and max refresh rate.
@@ -531,48 +467,6 @@
*/
virtual DisplayError GetPanelBrightness(int *level) = 0;
- /*! @brief Method to set layer mixer resolution.
-
- @param[in] width layer mixer width
- @param[in] height layer mixer height
-
- @return \link DisplayError \endlink
- */
- virtual DisplayError SetMixerResolution(uint32_t width, uint32_t height) = 0;
-
- /*! @brief Method to get layer mixer resolution.
-
- @param[out] width layer mixer width
- @param[out] height layer mixer height
-
- @return \link DisplayError \endlink
- */
- virtual DisplayError GetMixerResolution(uint32_t *width, uint32_t *height) = 0;
-
- /*! @brief Method to set frame buffer configuration.
-
- @param[in] variable_info \link DisplayConfigVariableInfo \endlink
-
- @return \link DisplayError \endlink
- */
- virtual DisplayError SetFrameBufferConfig(const DisplayConfigVariableInfo &variable_info) = 0;
-
- /*! @brief Method to get frame buffer configuration.
-
- @param[out] variable_info \link DisplayConfigVariableInfo \endlink
-
- @return \link DisplayError \endlink
- */
- virtual DisplayError GetFrameBufferConfig(DisplayConfigVariableInfo *variable_info) = 0;
-
- /*! @brief Method to set detail enhancement data.
-
- @param[in] de_data \link DisplayDetailEnhancerData \endlink
-
- @return \link DisplayError \endlink
- */
- virtual DisplayError SetDetailEnhancerData(const DisplayDetailEnhancerData &de_data) = 0;
-
protected:
virtual ~DisplayInterface() { }
};
diff --git a/msm8996/sdm/include/core/layer_buffer.h b/msm8996/sdm/include/core/layer_buffer.h
index 7713394..7eba4e3 100644
--- a/msm8996/sdm/include/core/layer_buffer.h
+++ b/msm8996/sdm/include/core/layer_buffer.h
@@ -68,7 +68,6 @@
kFormatXBGR2101010, //!< 10-bits Padding, Blue, Green, Red interleaved in XBGR order. No Alpha.
kFormatRGBA1010102Ubwc, //!< UBWC aligned RGBA1010102 format
kFormatRGBX1010102Ubwc, //!< UBWC aligned RGBX1010102 format
- kFormatRGB101010, // 10-bits Red, Green, Blue, interleaved in RGB order. No Alpha.
/* All YUV-Planar formats, Any new format will be added towards end of this group to maintain
backward compatibility.
diff --git a/msm8996/sdm/include/private/extension_interface.h b/msm8996/sdm/include/private/extension_interface.h
index dea127e..4283b53 100644
--- a/msm8996/sdm/include/private/extension_interface.h
+++ b/msm8996/sdm/include/private/extension_interface.h
@@ -54,16 +54,11 @@
public:
virtual DisplayError CreatePartialUpdate(DisplayType type, const HWResourceInfo &hw_resource_info,
const HWPanelInfo &hw_panel_info,
- const HWMixerAttributes &mixer_attributes,
- const HWDisplayAttributes &display_attributes,
PartialUpdateInterface **interface) = 0;
virtual DisplayError DestroyPartialUpdate(PartialUpdateInterface *interface) = 0;
virtual DisplayError CreateStrategyExtn(DisplayType type, HWDisplayMode mode,
- HWS3DMode s3d_mode,
- const HWMixerAttributes &mixer_attributes,
- const DisplayConfigVariableInfo &fb_config,
- StrategyInterface **interface) = 0;
+ HWS3DMode s3d_mode, StrategyInterface **interface) = 0;
virtual DisplayError DestroyStrategyExtn(StrategyInterface *interface) = 0;
virtual DisplayError CreateResourceExtn(const HWResourceInfo &hw_resource_info,
diff --git a/msm8996/sdm/include/private/hw_info_types.h b/msm8996/sdm/include/private/hw_info_types.h
index 0f40e17..70d5b96 100644
--- a/msm8996/sdm/include/private/hw_info_types.h
+++ b/msm8996/sdm/include/private/hw_info_types.h
@@ -91,6 +91,15 @@
kHWSubBlockMax,
};
+// y/RGB & UV Scaling Filters
+enum HWScalingFilter {
+ kScalingFilterEdgeDirected,
+ kScalingFilterCircular,
+ kScalingFilterSeparable,
+ kScalingFilterBilinear,
+ kScalingFilterMax,
+};
+
enum HWAlphaInterpolation {
kInterpolationPixelRepeat,
kInterpolationBilinear,
@@ -133,13 +142,6 @@
void Reset() { *this = HWRotatorInfo(); }
};
-struct HWDestScalarInfo {
- uint32_t count = 0;
- uint32_t max_input_width = 0;
- uint32_t max_output_width = 0;
- uint32_t max_scale_up = 1;
-};
-
struct HWResourceInfo {
uint32_t hw_version = 0;
uint32_t hw_revision = 0;
@@ -186,7 +188,6 @@
std::vector<HWPipeCaps> hw_pipes;
FormatsMap supported_formats_map;
HWRotatorInfo hw_rot_info;
- HWDestScalarInfo hw_dest_scalar_info;
void Reset() { *this = HWResourceInfo(); }
};
@@ -307,7 +308,16 @@
uint64_t sep_lut = 0;
};
-struct HWDetailEnhanceData : DisplayDetailEnhancerData {
+struct HWDetailEnhanceData {
+ uint32_t enable = 0;
+ int16_t sharpen_level1 = 0;
+ int16_t sharpen_level2 = 0;
+ uint16_t clip = 0;
+ uint16_t limit = 0;
+ uint16_t thr_quiet = 0;
+ uint16_t thr_dieout = 0;
+ uint16_t thr_low = 0;
+ uint16_t thr_high = 0;
uint16_t prec_shift = 0;
int16_t adjust_a[MAX_DETAIL_ENHANCE_CURVE] = {0};
int16_t adjust_b[MAX_DETAIL_ENHANCE_CURVE] = {0};
@@ -352,8 +362,8 @@
uint32_t dst_height = 0;
HWPlane plane[MAX_PLANES];
// scale_v2_data fields
- ScalingFilterConfig y_rgb_filter_cfg = kFilterEdgeDirected;
- ScalingFilterConfig uv_filter_cfg = kFilterEdgeDirected;
+ HWScalingFilter y_rgb_filter_cfg = kScalingFilterEdgeDirected;
+ HWScalingFilter uv_filter_cfg = kScalingFilterEdgeDirected;
HWAlphaInterpolation alpha_filter_cfg = kInterpolationPixelRepeat;
HWBlendingFilter blend_cfg = kBlendFilterCircular;
@@ -376,15 +386,6 @@
HWDetailEnhanceData detail_enhance;
};
-struct HWDestScaleInfo {
- uint32_t mixer_width = 0;
- uint32_t mixer_height = 0;
- bool scale_update = false;
- HWScaleData scale_data = {};
-};
-
-typedef std::map<uint32_t, HWDestScaleInfo *> DestScaleInfoMap;
-
struct HWPipeInfo {
uint32_t pipe_id = 0;
HWSubBlockType sub_block_type = kHWSubBlockMax;
@@ -426,7 +427,6 @@
LayerRect right_partial_update; // Right ROI.
bool use_hw_cursor = false; // Indicates that HWCursor pipe needs to be used for cursor layer
- DestScaleInfoMap dest_scale_info_map = {};
};
struct HWLayers {
@@ -439,6 +439,7 @@
struct HWDisplayAttributes : DisplayConfigVariableInfo {
bool is_device_split = false;
+ uint32_t split_left = 0;
uint32_t v_front_porch = 0; //!< Vertical front porch of panel
uint32_t v_back_porch = 0; //!< Vertical back porch of panel
uint32_t v_pulse_width = 0; //!< Vertical pulse width of panel
@@ -447,44 +448,20 @@
void Reset() { *this = HWDisplayAttributes(); }
- bool operator !=(const HWDisplayAttributes &display_attributes) {
- return ((is_device_split != display_attributes.is_device_split) ||
- (x_pixels != display_attributes.x_pixels) ||
- (y_pixels != display_attributes.y_pixels) ||
- (x_dpi != display_attributes.x_dpi) ||
- (y_dpi != display_attributes.y_dpi) ||
- (fps != display_attributes.fps) ||
- (vsync_period_ns != display_attributes.vsync_period_ns) ||
- (v_front_porch != display_attributes.v_front_porch) ||
- (v_back_porch != display_attributes.v_back_porch) ||
- (v_pulse_width != display_attributes.v_pulse_width) ||
- (is_yuv != display_attributes.is_yuv));
+ bool operator !=(const HWDisplayAttributes &attributes) {
+ return ((is_device_split != attributes.is_device_split) ||
+ (split_left != attributes.split_left) ||
+ (x_pixels != attributes.x_pixels) || (y_pixels != attributes.y_pixels) ||
+ (x_dpi != attributes.x_dpi) || (y_dpi != attributes.y_dpi) || (fps != attributes.fps) ||
+ (vsync_period_ns != attributes.vsync_period_ns) ||
+ (v_front_porch != attributes.v_front_porch) ||
+ (v_back_porch != attributes.v_back_porch) ||
+ (v_pulse_width != attributes.v_pulse_width) ||
+ (is_yuv != attributes.is_yuv));
}
- bool operator ==(const HWDisplayAttributes &display_attributes) {
- return !(operator !=(display_attributes));
- }
-};
-
-struct HWMixerAttributes {
- uint32_t width = 0; // Layer mixer width
- uint32_t height = 0; // Layer mixer height
- uint32_t split_left = 0;
- LayerBufferFormat output_format = kFormatRGB101010; // Layer mixer output format
-
- bool operator !=(const HWMixerAttributes &mixer_attributes) {
- return ((width != mixer_attributes.width) ||
- (height != mixer_attributes.height) ||
- (output_format != mixer_attributes.output_format) ||
- (split_left != mixer_attributes.split_left));
- }
-
- bool operator ==(const HWMixerAttributes &mixer_attributes) {
- return !(operator !=(mixer_attributes));
- }
-
- bool IsValid() {
- return (width > 0 && height > 0);
+ bool operator ==(const HWDisplayAttributes &attributes) {
+ return !(operator !=(attributes));
}
};
diff --git a/msm8996/sdm/include/private/resource_interface.h b/msm8996/sdm/include/private/resource_interface.h
index 6115112..21652f5 100644
--- a/msm8996/sdm/include/private/resource_interface.h
+++ b/msm8996/sdm/include/private/resource_interface.h
@@ -32,16 +32,11 @@
class ResourceInterface {
public:
- virtual DisplayError RegisterDisplay(DisplayType type,
- const HWDisplayAttributes &display_attributes,
- const HWPanelInfo &hw_panel_info,
- const HWMixerAttributes &mixer_attributes,
- Handle *display_ctx) = 0;
+ virtual DisplayError RegisterDisplay(DisplayType type, const HWDisplayAttributes &attributes,
+ const HWPanelInfo &hw_panel_info, Handle *display_ctx) = 0;
virtual DisplayError UnregisterDisplay(Handle display_ctx) = 0;
- virtual DisplayError ReconfigureDisplay(Handle display_ctx,
- const HWDisplayAttributes &display_attributes,
- const HWPanelInfo &hw_panel_info,
- const HWMixerAttributes &mixer_attributes) = 0;
+ virtual void ReconfigureDisplay(Handle display_ctx, const HWDisplayAttributes &attributes,
+ const HWPanelInfo &hw_panel_info) = 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;
@@ -58,8 +53,6 @@
int x, int y) = 0;
virtual DisplayError SetMaxBandwidthMode(HWBwModes mode) = 0;
virtual DisplayError GetScaleLutConfig(HWScaleLutInfo *lut_info) = 0;
- virtual DisplayError SetDetailEnhancerData(Handle display_ctx,
- const DisplayDetailEnhancerData &de_data) = 0;
protected:
virtual ~ResourceInterface() { }
diff --git a/msm8996/sdm/include/private/strategy_interface.h b/msm8996/sdm/include/private/strategy_interface.h
index f2bfe23..17acfed 100644
--- a/msm8996/sdm/include/private/strategy_interface.h
+++ b/msm8996/sdm/include/private/strategy_interface.h
@@ -48,9 +48,7 @@
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,
- const HWMixerAttributes &mixer_attributes,
- const DisplayConfigVariableInfo &fb_config) = 0;
+ virtual DisplayError Reconfigure(HWDisplayMode mode, HWS3DMode s3d_mode) = 0;
protected:
virtual ~StrategyInterface() { }
diff --git a/msm8996/sdm/include/utils/rect.h b/msm8996/sdm/include/utils/rect.h
index d084556..c198645 100644
--- a/msm8996/sdm/include/utils/rect.h
+++ b/msm8996/sdm/include/utils/rect.h
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2015-2016, The Linux Foundation. All rights reserved.
+* Copyright (c) 2015, 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
@@ -37,12 +37,6 @@
namespace sdm {
- enum RectOrientation {
- kOrientationPortrait,
- kOrientationLandscape,
- kOrientationUnknown,
- };
-
bool IsValid(const LayerRect &rect);
bool IsCongruent(const LayerRect &rect1, const LayerRect &rect2);
void Log(DebugTag debug_tag, const char *prefix, const LayerRect &roi);
@@ -55,9 +49,6 @@
bool flip_horizontal, LayerRect *out_rects);
void SplitTopBottom(const LayerRect &in_rect, uint32_t split_count, uint32_t align_y,
bool flip_horizontal, LayerRect *out_rects);
- void ScaleRect(const LayerRect &src_domain, const LayerRect &dst_domain, const LayerRect &in_rect,
- LayerRect *out_rect);
- RectOrientation GetOrientation(const LayerRect &in_rect);
} // namespace sdm
#endif // __RECT_H__
diff --git a/msm8996/sdm/libs/core/comp_manager.cpp b/msm8996/sdm/libs/core/comp_manager.cpp
index 6fa7e5f..562186c 100644
--- a/msm8996/sdm/libs/core/comp_manager.cpp
+++ b/msm8996/sdm/libs/core/comp_manager.cpp
@@ -69,12 +69,8 @@
return kErrorNone;
}
-DisplayError CompManager::RegisterDisplay(DisplayType type,
- const HWDisplayAttributes &display_attributes,
- const HWPanelInfo &hw_panel_info,
- const HWMixerAttributes &mixer_attributes,
- const DisplayConfigVariableInfo &fb_config,
- Handle *display_ctx) {
+DisplayError CompManager::RegisterDisplay(DisplayType type, const HWDisplayAttributes &attributes,
+ const HWPanelInfo &hw_panel_info, Handle *display_ctx) {
SCOPE_LOCK(locker_);
DisplayError error = kErrorNone;
@@ -85,8 +81,7 @@
}
Strategy *&strategy = display_comp_ctx->strategy;
- strategy = new Strategy(extension_intf_, type, hw_res_info_, hw_panel_info, mixer_attributes,
- display_attributes, fb_config);
+ strategy = new Strategy(extension_intf_, type, hw_res_info_, hw_panel_info, attributes);
if (!strategy) {
DLOGE("Unable to create strategy");
delete display_comp_ctx;
@@ -100,7 +95,7 @@
return error;
}
- error = resource_intf_->RegisterDisplay(type, display_attributes, hw_panel_info, mixer_attributes,
+ error = resource_intf_->RegisterDisplay(type, attributes, hw_panel_info,
&display_comp_ctx->display_resource_ctx);
if (error != kErrorNone) {
strategy->Deinit();
@@ -159,25 +154,17 @@
}
DisplayError CompManager::ReconfigureDisplay(Handle comp_handle,
- const HWDisplayAttributes &display_attributes,
- const HWPanelInfo &hw_panel_info,
- const HWMixerAttributes &mixer_attributes,
- const DisplayConfigVariableInfo &fb_config) {
- SCOPE_LOCK(locker_);
-
- DisplayError error = kErrorNone;
+ const HWDisplayAttributes &attributes,
+ const HWPanelInfo &hw_panel_info) {
DisplayCompositionContext *display_comp_ctx =
reinterpret_cast<DisplayCompositionContext *>(comp_handle);
- error = resource_intf_->ReconfigureDisplay(display_comp_ctx->display_resource_ctx,
- display_attributes, hw_panel_info, mixer_attributes);
- if (error != kErrorNone) {
- return error;
- }
+ resource_intf_->ReconfigureDisplay(display_comp_ctx->display_resource_ctx, attributes,
+ hw_panel_info);
+ DisplayError error = kErrorNone;
if (display_comp_ctx->strategy) {
- error = display_comp_ctx->strategy->Reconfigure(hw_panel_info, display_attributes,
- mixer_attributes, fb_config);
+ error = display_comp_ctx->strategy->Reconfigure(hw_panel_info, attributes);
if (error != kErrorNone) {
DLOGE("Unable to Reconfigure strategy.");
display_comp_ctx->strategy->Deinit();
@@ -481,15 +468,5 @@
return resource_intf_->GetScaleLutConfig(lut_info);
}
-DisplayError CompManager::SetDetailEnhancerData(Handle display_ctx,
- const DisplayDetailEnhancerData &de_data) {
- SCOPE_LOCK(locker_);
-
- DisplayCompositionContext *display_comp_ctx =
- reinterpret_cast<DisplayCompositionContext *>(display_ctx);
-
- return resource_intf_->SetDetailEnhancerData(display_comp_ctx->display_resource_ctx, de_data);
-}
-
} // namespace sdm
diff --git a/msm8996/sdm/libs/core/comp_manager.h b/msm8996/sdm/libs/core/comp_manager.h
index a77eed0..d6d45c1 100644
--- a/msm8996/sdm/libs/core/comp_manager.h
+++ b/msm8996/sdm/libs/core/comp_manager.h
@@ -41,15 +41,11 @@
DisplayError Init(const HWResourceInfo &hw_res_info_, ExtensionInterface *extension_intf,
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 RegisterDisplay(DisplayType type, const HWDisplayAttributes &attributes,
+ const HWPanelInfo &hw_panel_info, Handle *res_mgr_hnd);
DisplayError UnregisterDisplay(Handle res_mgr_hnd);
- DisplayError ReconfigureDisplay(Handle display_ctx, const HWDisplayAttributes &display_attributes,
- const HWPanelInfo &hw_panel_info,
- const HWMixerAttributes &mixer_attributes,
- const DisplayConfigVariableInfo &fb_config);
+ DisplayError ReconfigureDisplay(Handle display_ctx, const HWDisplayAttributes &attributes,
+ const HWPanelInfo &hw_panel_info);
void PrePrepare(Handle display_ctx, HWLayers *hw_layers);
DisplayError Prepare(Handle display_ctx, HWLayers *hw_layers);
DisplayError PostPrepare(Handle display_ctx, HWLayers *hw_layers);
@@ -66,7 +62,6 @@
bool CanSetIdleTimeout(Handle display_ctx);
DisplayError SetMaxBandwidthMode(HWBwModes mode);
DisplayError GetScaleLutConfig(HWScaleLutInfo *lut_info);
- DisplayError SetDetailEnhancerData(Handle display_ctx, const DisplayDetailEnhancerData &de_data);
// DumpImpl method
virtual void AppendDump(char *buffer, uint32_t length);
diff --git a/msm8996/sdm/libs/core/display_base.cpp b/msm8996/sdm/libs/core/display_base.cpp
index d9583b7..8cbdeb2 100644
--- a/msm8996/sdm/libs/core/display_base.cpp
+++ b/msm8996/sdm/libs/core/display_base.cpp
@@ -56,18 +56,6 @@
uint32_t active_index = 0;
hw_intf_->GetActiveConfig(&active_index);
hw_intf_->GetDisplayAttributes(active_index, &display_attributes_);
- fb_config_ = display_attributes_;
-
- HWMixerAttributes mixer_attributes;
- error = hw_intf_->GetMixerAttributes(&mixer_attributes);
- if (error != kErrorNone) {
- return error;
- }
- mixer_attributes_ = mixer_attributes;
-
- // Override x_pixels and y_pixels of frame buffer with mixer width and height
- fb_config_.x_pixels = mixer_attributes.width;
- fb_config_.y_pixels = mixer_attributes.height;
HWScaleLutInfo lut_info = {};
error = comp_manager_->GetScaleLutConfig(&lut_info);
@@ -79,8 +67,8 @@
goto CleanupOnError;
}
- error = comp_manager_->RegisterDisplay(display_type_, display_attributes_, hw_panel_info_,
- mixer_attributes, fb_config_, &display_comp_ctx_);
+ error = comp_manager_->RegisterDisplay(display_type_, display_attributes_,
+ hw_panel_info_, &display_comp_ctx_);
if (error != kErrorNone) {
goto CleanupOnError;
}
@@ -173,24 +161,17 @@
return kErrorParameters;
}
- float layer_mixer_width = FLOAT(mixer_attributes_.width);
- float layer_mixer_height = FLOAT(mixer_attributes_.height);
- float fb_width = FLOAT(fb_config_.x_pixels);
- float fb_height = FLOAT(fb_config_.y_pixels);
- LayerRect src_domain = (LayerRect){0.0f, 0.0f, fb_width, fb_height};
- LayerRect dst_domain = (LayerRect){0.0f, 0.0f, layer_mixer_width, layer_mixer_height};
- LayerRect out_rect = gpu_target_layer->dst_rect;
+ auto gpu_target_layer_dst_xpixels = gpu_target_layer->dst_rect.right;
+ auto gpu_target_layer_dst_ypixels = gpu_target_layer->dst_rect.bottom;
- ScaleRect(src_domain, dst_domain, gpu_target_layer->dst_rect, &out_rect);
+ HWDisplayAttributes display_attrib;
+ uint32_t active_index = 0;
+ hw_intf_->GetActiveConfig(&active_index);
+ hw_intf_->GetDisplayAttributes(active_index, &display_attrib);
- auto gpu_target_layer_dst_xpixels = out_rect.right - out_rect.left;
- auto gpu_target_layer_dst_ypixels = out_rect.bottom - out_rect.top;
-
- if (gpu_target_layer_dst_xpixels > mixer_attributes_.width ||
- gpu_target_layer_dst_ypixels > mixer_attributes_.height) {
- DLOGE("GPU target layer dst rect is not with in limits gpu wxh %fx%f mixer wxh %dx%d",
- gpu_target_layer_dst_xpixels, gpu_target_layer_dst_ypixels, mixer_attributes_.width,
- mixer_attributes_.height);
+ if (gpu_target_layer_dst_xpixels > display_attrib.x_pixels ||
+ gpu_target_layer_dst_ypixels > display_attrib.y_pixels) {
+ DLOGE("GPU target layer dst rect is not with in limits");
return kErrorParameters;
}
@@ -198,34 +179,35 @@
}
DisplayError DisplayBase::Prepare(LayerStack *layer_stack) {
- SCOPE_LOCK(locker_);
-
- if (!active_) {
- return kErrorPermission;
- }
+ DisplayError error = kErrorNone;
+ bool disable_partial_update = false;
+ uint32_t pending = 0;
if (!layer_stack) {
return kErrorParameters;
}
- return PrepareLocked(layer_stack);
-}
-
-DisplayError DisplayBase::PrepareLocked(LayerStack *layer_stack) {
- DisplayError error = kErrorNone;
+ pending_commit_ = false;
error = ValidateGPUTarget(layer_stack);
if (error != kErrorNone) {
return error;
}
- if (color_mgr_ && color_mgr_->NeedsPartialUpdateDisable()) {
- DisablePartialUpdateOneFrameLocked();
+ if (!active_) {
+ return kErrorPermission;
}
- if (partial_update_control_ == false || disable_pu_one_frame_) {
- comp_manager_->ControlPartialUpdate(display_comp_ctx_, false /* enable */);
- disable_pu_one_frame_ = false;
+ // Request to disable partial update only if it is currently enabled.
+ if (color_mgr_ && partial_update_control_) {
+ disable_partial_update = color_mgr_->NeedsPartialUpdateDisable();
+ if (disable_partial_update) {
+ ControlPartialUpdate(false, &pending);
+ }
+ }
+
+ if (one_frame_full_roi_) {
+ ControlPartialUpdate(false, &pending);
}
// Clean hw layers for reuse.
@@ -267,22 +249,29 @@
}
comp_manager_->PostPrepare(display_comp_ctx_, &hw_layers_);
+ if (disable_partial_update) {
+ ControlPartialUpdate(true, &pending);
+ }
+
+ if (one_frame_full_roi_) {
+ ControlPartialUpdate(true, &pending);
+ one_frame_full_roi_ = false;
+ }
return error;
}
DisplayError DisplayBase::Commit(LayerStack *layer_stack) {
- SCOPE_LOCK(locker_);
-
- if (!active_) {
- pending_commit_ = false;
- return kErrorPermission;
- }
+ DisplayError error = kErrorNone;
if (!layer_stack) {
return kErrorParameters;
}
+ if (!active_) {
+ return kErrorPermission;
+ }
+
if (!pending_commit_) {
DLOGE("Commit: Corresponding Prepare() is not called for display = %d", display_type_);
return kErrorUndefined;
@@ -290,12 +279,6 @@
pending_commit_ = false;
- return CommitLocked(layer_stack);
-}
-
-DisplayError DisplayBase::CommitLocked(LayerStack *layer_stack) {
- DisplayError error = kErrorNone;
-
// Layer stack attributes has changed, need to Reconfigure, currently in use for Hybrid Comp
if (layer_stack->flags.attributes_changed) {
error = comp_manager_->ReConfigure(display_comp_ctx_, &hw_layers_);
@@ -336,10 +319,6 @@
}
}
- if (partial_update_control_) {
- comp_manager_->ControlPartialUpdate(display_comp_ctx_, true /* enable */);
- }
-
error = comp_manager_->PostCommit(display_comp_ctx_, &hw_layers_);
if (error != kErrorNone) {
return error;
@@ -481,11 +460,6 @@
}
DisplayError DisplayBase::SetActiveConfig(uint32_t index) {
- SCOPE_LOCK(locker_);
- return SetActiveConfigLocked(index);
-}
-
-DisplayError DisplayBase::SetActiveConfigLocked(uint32_t index) {
DisplayError error = kErrorNone;
uint32_t active_index = 0;
@@ -500,12 +474,26 @@
return error;
}
- return ReconfigureDisplay();
-}
+ HWDisplayAttributes attrib;
+ error = hw_intf_->GetDisplayAttributes(index, &attrib);
+ if (error != kErrorNone) {
+ return error;
+ }
-DisplayError DisplayBase::SetActiveConfig(DisplayConfigVariableInfo *variable_info) {
- SCOPE_LOCK(locker_);
- return SetActiveConfigLocked(variable_info);
+ hw_intf_->GetHWPanelInfo(&hw_panel_info_);
+
+ if (display_comp_ctx_) {
+ comp_manager_->UnregisterDisplay(display_comp_ctx_);
+ }
+
+ error = comp_manager_->RegisterDisplay(display_type_, attrib, hw_panel_info_,
+ &display_comp_ctx_);
+
+ if (error == kErrorNone && partial_update_control_) {
+ one_frame_full_roi_ = true;
+ }
+
+ return error;
}
DisplayError DisplayBase::SetMaxMixerStages(uint32_t max_mixer_stages) {
@@ -521,19 +509,43 @@
}
DisplayError DisplayBase::ControlPartialUpdate(bool enable, uint32_t *pending) {
- SCOPE_LOCK(locker_);
- return ControlPartialUpdateLocked(enable, pending);
-}
+ if (!pending) {
+ return kErrorParameters;
+ }
-DisplayError DisplayBase::DisablePartialUpdateOneFrame() {
- SCOPE_LOCK(locker_);
- return DisablePartialUpdateOneFrameLocked();
+ if (!hw_panel_info_.partial_update) {
+ // Nothing to be done.
+ DLOGI("partial update is not applicable for display=%d", display_type_);
+ return kErrorNotSupported;
+ }
+
+ *pending = 0;
+ if (enable == partial_update_control_) {
+ DLOGI("Same state transition is requested.");
+ return kErrorNone;
+ }
+
+ partial_update_control_ = enable;
+ comp_manager_->ControlPartialUpdate(display_comp_ctx_, enable);
+
+ if (!enable) {
+ // If the request is to turn off feature, new draw call is required to have
+ // the new setting into effect.
+ *pending = 1;
+ }
+
+ return kErrorNone;
}
DisplayError DisplayBase::SetDisplayMode(uint32_t mode) {
return kErrorNotSupported;
}
+DisplayError DisplayBase::IsScalingValid(const LayerRect &crop, const LayerRect &dst,
+ bool rotate90) {
+ return comp_manager_->ValidateScaling(crop, dst, rotate90);
+}
+
DisplayError DisplayBase::SetPanelBrightness(int level) {
return kErrorNotSupported;
}
@@ -866,135 +878,4 @@
return error;
}
-DisplayError DisplayBase::ReconfigureDisplay() {
- DisplayError error = kErrorNone;
- HWDisplayAttributes display_attributes;
- HWMixerAttributes mixer_attributes;
- HWPanelInfo hw_panel_info;
- uint32_t active_index = 0;
-
- error = hw_intf_->GetActiveConfig(&active_index);
- if (error != kErrorNone) {
- return error;
- }
-
- error = hw_intf_->GetDisplayAttributes(active_index, &display_attributes);
- if (error != kErrorNone) {
- return error;
- }
-
- error = hw_intf_->GetMixerAttributes(&mixer_attributes);
- if (error != kErrorNone) {
- return error;
- }
-
- error = hw_intf_->GetHWPanelInfo(&hw_panel_info);
- if (error != kErrorNone) {
- return error;
- }
-
- if (display_attributes == display_attributes_ && mixer_attributes == mixer_attributes_ &&
- hw_panel_info == hw_panel_info_) {
- return kErrorNone;
- }
-
- error = comp_manager_->ReconfigureDisplay(display_comp_ctx_, display_attributes, hw_panel_info,
- mixer_attributes, fb_config_);
- if (error != kErrorNone) {
- return error;
- }
-
- if (mixer_attributes != mixer_attributes_) {
- DisablePartialUpdateOneFrameLocked();
- }
-
- display_attributes_ = display_attributes;
- mixer_attributes_ = mixer_attributes;
- hw_panel_info_ = hw_panel_info;
-
- return kErrorNone;
-}
-
-DisplayError DisplayBase::SetMixerResolution(uint32_t width, uint32_t height) {
- SCOPE_LOCK(locker_);
- return SetMixerResolutionLocked(width, height);
-}
-
-DisplayError DisplayBase::GetMixerResolution(uint32_t *width, uint32_t *height) {
- SCOPE_LOCK(locker_);
- return GetMixerResolutionLocked(width, height);
-}
-
-DisplayError DisplayBase::GetMixerResolutionLocked(uint32_t *width, uint32_t *height) {
- if (!width || !height) {
- return kErrorParameters;
- }
-
- *width = mixer_attributes_.width;
- *height = mixer_attributes_.height;
-
- return kErrorNone;
-}
-
-DisplayError DisplayBase::SetFrameBufferConfig(const DisplayConfigVariableInfo &variable_info) {
- SCOPE_LOCK(locker_);
- return SetFrameBufferConfigLocked(variable_info);
-}
-
-DisplayError DisplayBase::SetFrameBufferConfigLocked(
- const DisplayConfigVariableInfo &variable_info) {
- uint32_t width = variable_info.x_pixels;
- uint32_t height = variable_info.y_pixels;
-
- if (width == 0 || height == 0) {
- DLOGE("Unsupported resolution: (%dx%d)", width, height);
- return kErrorParameters;
- }
-
- // Create rects to represent the new source and destination crops
- LayerRect crop = LayerRect(0, 0, FLOAT(width), FLOAT(height));
- LayerRect dst = LayerRect(0, 0, FLOAT(mixer_attributes_.width), FLOAT(mixer_attributes_.height));
- // Set rotate90 to false since this is taken care of during regular composition.
- bool rotate90 = false;
-
- DisplayError error = comp_manager_->ValidateScaling(crop, dst, rotate90);
- if (error != kErrorNone) {
- DLOGE("Unsupported resolution: (%dx%d)", width, height);
- return kErrorParameters;
- }
-
- error = comp_manager_->ReconfigureDisplay(display_comp_ctx_, display_attributes_, hw_panel_info_,
- mixer_attributes_, variable_info);
- if (error != kErrorNone) {
- return error;
- }
-
- fb_config_.x_pixels = width;
- fb_config_.y_pixels = height;
-
- DLOGI("New framebuffer resolution (%dx%d)", fb_config_.x_pixels, fb_config_.y_pixels);
-
- return kErrorNone;
-}
-
-DisplayError DisplayBase::GetFrameBufferConfig(DisplayConfigVariableInfo *variable_info) {
- SCOPE_LOCK(locker_);
- return GetFrameBufferConfigLocked(variable_info);
-}
-
-DisplayError DisplayBase::GetFrameBufferConfigLocked(DisplayConfigVariableInfo *variable_info) {
- if (!variable_info) {
- return kErrorParameters;
- }
-
- *variable_info = fb_config_;
-
- return kErrorNone;
-}
-
-DisplayError DisplayBase::SetDetailEnhancerData(const DisplayDetailEnhancerData &de_data) {
- SCOPE_LOCK(locker_);
- return SetDetailEnhancerDataLocked(de_data);
-}
-
} // namespace sdm
diff --git a/msm8996/sdm/libs/core/display_base.h b/msm8996/sdm/libs/core/display_base.h
index 1672351..3d58ed6 100644
--- a/msm8996/sdm/libs/core/display_base.h
+++ b/msm8996/sdm/libs/core/display_base.h
@@ -54,8 +54,8 @@
virtual ~DisplayBase() { }
virtual DisplayError Init();
virtual DisplayError Deinit();
- DisplayError Prepare(LayerStack *layer_stack) final;
- DisplayError Commit(LayerStack *layer_stack) final;
+ virtual DisplayError Prepare(LayerStack *layer_stack);
+ virtual DisplayError Commit(LayerStack *layer_stack);
virtual DisplayError Flush();
virtual DisplayError GetDisplayState(DisplayState *state);
virtual DisplayError GetNumVariableInfoConfigs(uint32_t *count);
@@ -63,12 +63,11 @@
virtual DisplayError GetActiveConfig(uint32_t *index);
virtual DisplayError GetVSyncState(bool *enabled);
virtual DisplayError SetDisplayState(DisplayState state);
- DisplayError SetActiveConfig(uint32_t index) final;
- DisplayError SetActiveConfig(DisplayConfigVariableInfo *variable_info) final;
+ virtual DisplayError SetActiveConfig(uint32_t index);
virtual DisplayError SetMaxMixerStages(uint32_t max_mixer_stages);
- DisplayError ControlPartialUpdate(bool enable, uint32_t *pending) final;
- DisplayError DisablePartialUpdateOneFrame() final;
+ virtual DisplayError ControlPartialUpdate(bool enable, uint32_t *pending);
virtual DisplayError SetDisplayMode(uint32_t mode);
+ virtual DisplayError IsScalingValid(const LayerRect &crop, const LayerRect &dst, bool rotate90);
virtual bool IsUnderscanSupported();
virtual DisplayError SetPanelBrightness(int level);
virtual DisplayError OnMinHdcpEncryptionLevelChange(uint32_t min_enc_level);
@@ -84,49 +83,21 @@
virtual DisplayError GetRefreshRateRange(uint32_t *min_refresh_rate, uint32_t *max_refresh_rate);
virtual DisplayError GetPanelBrightness(int *level);
virtual DisplayError SetVSyncState(bool enable);
- DisplayError SetMixerResolution(uint32_t width, uint32_t height) final;
- DisplayError GetMixerResolution(uint32_t *width, uint32_t *height) final;
- DisplayError SetFrameBufferConfig(const DisplayConfigVariableInfo &variable_info) final;
- DisplayError GetFrameBufferConfig(DisplayConfigVariableInfo *variable_info) final;
- DisplayError SetDetailEnhancerData(const DisplayDetailEnhancerData &de_data) final;
protected:
- virtual DisplayError PrepareLocked(LayerStack *layer_stack);
- virtual DisplayError CommitLocked(LayerStack *layer_stack);
- virtual DisplayError SetActiveConfigLocked(uint32_t index);
- virtual DisplayError SetActiveConfigLocked(DisplayConfigVariableInfo *variable_info) {
- return kErrorNotSupported;
- }
- virtual DisplayError ControlPartialUpdateLocked(bool enable, uint32_t *pending) {
- return kErrorNotSupported;
- }
- virtual DisplayError DisablePartialUpdateOneFrameLocked() {
- return kErrorNotSupported;
- }
- virtual DisplayError SetMixerResolutionLocked(uint32_t width, uint32_t height) {
- return kErrorNotSupported;
- }
- virtual DisplayError GetMixerResolutionLocked(uint32_t *width, uint32_t *height);
- virtual DisplayError SetFrameBufferConfigLocked(const DisplayConfigVariableInfo &variable_info);
- virtual DisplayError GetFrameBufferConfigLocked(DisplayConfigVariableInfo *variable_info);
- virtual DisplayError SetDetailEnhancerDataLocked(const DisplayDetailEnhancerData &de_data) {
- return kErrorNotSupported;
- }
-
// DumpImpl method
void AppendDump(char *buffer, uint32_t length);
bool IsRotationRequired(HWLayers *hw_layers);
const char *GetName(const LayerComposition &composition);
DisplayError ValidateGPUTarget(LayerStack *layer_stack);
- DisplayError ReconfigureDisplay();
- Locker locker_;
DisplayType display_type_;
DisplayEventHandler *event_handler_ = NULL;
HWDeviceType hw_device_type_;
HWInterface *hw_intf_ = NULL;
HWPanelInfo hw_panel_info_;
+ HWDisplayAttributes display_attributes_;
BufferSyncHandler *buffer_sync_handler_ = NULL;
CompManager *comp_manager_ = NULL;
RotatorInterface *rotator_intf_ = NULL;
@@ -144,17 +115,14 @@
ColorManagerProxy *color_mgr_ = NULL; // each display object owns its ColorManagerProxy
bool partial_update_control_ = true;
HWEventsInterface *hw_events_intf_ = NULL;
- bool disable_pu_one_frame_ = false;
uint32_t num_color_modes_ = 0;
SDEDisplayMode *color_modes_ = NULL;
int32_t color_mode_ = 0;
typedef std::map<std::string, SDEDisplayMode *> ColorModeMap;
ColorModeMap color_mode_map_ = {};
- HWDisplayAttributes display_attributes_ = {};
- HWMixerAttributes mixer_attributes_ = {};
- DisplayConfigVariableInfo fb_config_ = {};
private:
+ bool one_frame_full_roi_ = false;
// Unused
virtual DisplayError GetConfig(DisplayConfigFixedInfo *variable_info) {
return kErrorNone;
diff --git a/msm8996/sdm/libs/core/display_hdmi.cpp b/msm8996/sdm/libs/core/display_hdmi.cpp
index 11c268a..9a9628a 100644
--- a/msm8996/sdm/libs/core/display_hdmi.cpp
+++ b/msm8996/sdm/libs/core/display_hdmi.cpp
@@ -106,10 +106,17 @@
return error;
}
-DisplayError DisplayHDMI::PrepareLocked(LayerStack *layer_stack) {
+DisplayError DisplayHDMI::Prepare(LayerStack *layer_stack) {
+ SCOPE_LOCK(locker_);
+
SetS3DMode(layer_stack);
- return DisplayBase::PrepareLocked(layer_stack);
+ return DisplayBase::Prepare(layer_stack);
+}
+
+DisplayError DisplayHDMI::Commit(LayerStack *layer_stack) {
+ SCOPE_LOCK(locker_);
+ return DisplayBase::Commit(layer_stack);
}
DisplayError DisplayHDMI::Flush() {
@@ -147,6 +154,16 @@
return DisplayBase::SetDisplayState(state);
}
+DisplayError DisplayHDMI::SetActiveConfig(DisplayConfigVariableInfo *variable_info) {
+ SCOPE_LOCK(locker_);
+ return kErrorNotSupported;
+}
+
+DisplayError DisplayHDMI::SetActiveConfig(uint32_t index) {
+ SCOPE_LOCK(locker_);
+ return DisplayBase::SetActiveConfig(index);
+}
+
DisplayError DisplayHDMI::SetVSyncState(bool enable) {
SCOPE_LOCK(locker_);
return DisplayBase::SetVSyncState(enable);
@@ -164,6 +181,12 @@
return DisplayBase::SetDisplayMode(mode);
}
+DisplayError DisplayHDMI::IsScalingValid(const LayerRect &crop, const LayerRect &dst,
+ bool rotate90) {
+ SCOPE_LOCK(locker_);
+ return DisplayBase::IsScalingValid(crop, dst, rotate90);
+}
+
DisplayError DisplayHDMI::GetRefreshRateRange(uint32_t *min_refresh_rate,
uint32_t *max_refresh_rate) {
SCOPE_LOCK(locker_);
@@ -313,6 +336,9 @@
void DisplayHDMI::SetS3DMode(LayerStack *layer_stack) {
uint32_t s3d_layer_count = 0;
HWS3DMode s3d_mode = kS3DModeNone;
+ HWPanelInfo panel_info;
+ HWDisplayAttributes display_attributes;
+ uint32_t active_index = 0;
uint32_t layer_count = UINT32(layer_stack->layers.size());
// S3D mode is supported for the following scenarios:
@@ -347,7 +373,15 @@
layer_stack->flags.s3d_mode_present = true;
}
- DisplayBase::ReconfigureDisplay();
+ hw_intf_->GetHWPanelInfo(&panel_info);
+ hw_intf_->GetActiveConfig(&active_index);
+ hw_intf_->GetDisplayAttributes(active_index, &display_attributes);
+
+ if (panel_info != hw_panel_info_ || display_attributes != display_attributes_) {
+ comp_manager_->ReconfigureDisplay(display_comp_ctx_, display_attributes, panel_info);
+ hw_panel_info_ = panel_info;
+ display_attributes_ = display_attributes;
+ }
}
void DisplayHDMI::CECMessage(char *message) {
diff --git a/msm8996/sdm/libs/core/display_hdmi.h b/msm8996/sdm/libs/core/display_hdmi.h
index b3ec9af..88e553d 100644
--- a/msm8996/sdm/libs/core/display_hdmi.h
+++ b/msm8996/sdm/libs/core/display_hdmi.h
@@ -42,6 +42,8 @@
RotatorInterface *rotator_intf);
virtual DisplayError Init();
virtual DisplayError Deinit();
+ virtual DisplayError Prepare(LayerStack *layer_stack);
+ virtual DisplayError Commit(LayerStack *layer_stack);
virtual DisplayError Flush();
virtual DisplayError GetDisplayState(DisplayState *state);
virtual DisplayError GetNumVariableInfoConfigs(uint32_t *count);
@@ -49,10 +51,13 @@
virtual DisplayError GetActiveConfig(uint32_t *index);
virtual DisplayError GetVSyncState(bool *enabled);
virtual DisplayError SetDisplayState(DisplayState state);
+ virtual DisplayError SetActiveConfig(DisplayConfigVariableInfo *variable_info);
+ virtual DisplayError SetActiveConfig(uint32_t index);
virtual DisplayError SetVSyncState(bool enable);
virtual void SetIdleTimeoutMs(uint32_t timeout_ms);
virtual DisplayError SetMaxMixerStages(uint32_t max_mixer_stages);
virtual DisplayError SetDisplayMode(uint32_t mode);
+ virtual DisplayError IsScalingValid(const LayerRect &crop, const LayerRect &dst, bool rotate90);
virtual DisplayError GetRefreshRateRange(uint32_t *min_refresh_rate, uint32_t *max_refresh_rate);
virtual DisplayError SetRefreshRate(uint32_t refresh_rate);
virtual bool IsUnderscanSupported();
@@ -69,11 +74,11 @@
virtual void CECMessage(char *message);
private:
- virtual DisplayError PrepareLocked(LayerStack *layer_stack);
virtual uint32_t GetBestConfig(HWS3DMode s3d_mode);
virtual void GetScanSupport();
virtual void SetS3DMode(LayerStack *layer_stack);
+ Locker locker_;
HWScanSupport scan_support_;
std::map<LayerBufferS3DFormat, HWS3DMode> s3d_format_to_mode_;
std::vector<const char *> event_list_ = {"vsync_event", "idle_notify", "cec/rd_msg",
diff --git a/msm8996/sdm/libs/core/display_primary.cpp b/msm8996/sdm/libs/core/display_primary.cpp
index 70b96fe..e5751df 100644
--- a/msm8996/sdm/libs/core/display_primary.cpp
+++ b/msm8996/sdm/libs/core/display_primary.cpp
@@ -24,11 +24,6 @@
#include <utils/constants.h>
#include <utils/debug.h>
-#include <utils/rect.h>
-#include <map>
-#include <algorithm>
-#include <functional>
-#include <vector>
#include "display_primary.h"
#include "hw_interface.h"
@@ -91,25 +86,17 @@
return error;
}
-DisplayError DisplayPrimary::PrepareLocked(LayerStack *layer_stack) {
- DisplayError error = kErrorNone;
- uint32_t new_mixer_width = 0;
- uint32_t new_mixer_height = 0;
- uint32_t display_width = display_attributes_.x_pixels;
- uint32_t display_height = display_attributes_.y_pixels;
-
- if (NeedsMixerReconfiguration(layer_stack, &new_mixer_width, &new_mixer_height)) {
- error = ReconfigureMixer(new_mixer_width, new_mixer_height);
- if (error != kErrorNone) {
- ReconfigureMixer(display_width, display_height);
- }
- }
-
- return DisplayBase::PrepareLocked(layer_stack);
+DisplayError DisplayPrimary::Prepare(LayerStack *layer_stack) {
+ SCOPE_LOCK(locker_);
+ return DisplayBase::Prepare(layer_stack);
}
-DisplayError DisplayPrimary::CommitLocked(LayerStack *layer_stack) {
+DisplayError DisplayPrimary::Commit(LayerStack *layer_stack) {
+ SCOPE_LOCK(locker_);
DisplayError error = kErrorNone;
+ HWPanelInfo panel_info;
+ HWDisplayAttributes display_attributes;
+ uint32_t active_index = 0;
// Enabling auto refresh is async and needs to happen before commit ioctl
if (hw_panel_info_.mode == kModeCommand) {
@@ -118,12 +105,19 @@
bool set_idle_timeout = comp_manager_->CanSetIdleTimeout(display_comp_ctx_);
- error = DisplayBase::CommitLocked(layer_stack);
+ error = DisplayBase::Commit(layer_stack);
if (error != kErrorNone) {
return error;
}
- DisplayBase::ReconfigureDisplay();
+ hw_intf_->GetHWPanelInfo(&panel_info);
+ hw_intf_->GetActiveConfig(&active_index);
+ hw_intf_->GetDisplayAttributes(active_index, &display_attributes);
+
+ if (panel_info != hw_panel_info_) {
+ error = comp_manager_->ReconfigureDisplay(display_comp_ctx_, display_attributes, panel_info);
+ hw_panel_info_ = panel_info;
+ }
if (hw_panel_info_.mode == kModeVideo) {
if (set_idle_timeout && !layer_stack->flags.single_buffered_layer_present) {
@@ -187,6 +181,16 @@
return kErrorNone;
}
+DisplayError DisplayPrimary::SetActiveConfig(DisplayConfigVariableInfo *variable_info) {
+ SCOPE_LOCK(locker_);
+ return kErrorNotSupported;
+}
+
+DisplayError DisplayPrimary::SetActiveConfig(uint32_t index) {
+ SCOPE_LOCK(locker_);
+ return DisplayBase::SetActiveConfig(index);
+}
+
DisplayError DisplayPrimary::SetVSyncState(bool enable) {
SCOPE_LOCK(locker_);
return DisplayBase::SetVSyncState(enable);
@@ -210,16 +214,22 @@
DisplayError DisplayPrimary::SetDisplayMode(uint32_t mode) {
SCOPE_LOCK(locker_);
DisplayError error = kErrorNone;
- HWDisplayMode hw_display_mode = static_cast<HWDisplayMode>(mode);
- uint32_t pending = 0;
+ HWDisplayMode hw_display_mode = kModeDefault;
if (!active_) {
DLOGW("Invalid display state = %d. Panel must be on.", state_);
return kErrorNotSupported;
}
- if (hw_display_mode != kModeCommand && hw_display_mode != kModeVideo) {
- DLOGW("Invalid panel mode parameters. Requested = %d", hw_display_mode);
+ switch (mode) {
+ case kModeVideo:
+ hw_display_mode = kModeVideo;
+ break;
+ case kModeCommand:
+ hw_display_mode = kModeCommand;
+ break;
+ default:
+ DLOGW("Invalid panel mode parameters. Requested = %d", mode);
return kErrorParameters;
}
@@ -236,11 +246,16 @@
return error;
}
- if (mode == kModeVideo) {
- ControlPartialUpdateLocked(false /* enable */, &pending);
+ // Disable PU if the previous PU state is on when switching to video mode, and re-enable PU when
+ // switching back to command mode.
+ bool toggle_partial_update = !(hw_display_mode == kModeVideo);
+ if (partial_update_control_) {
+ comp_manager_->ControlPartialUpdate(display_comp_ctx_, toggle_partial_update);
+ }
+
+ if (hw_display_mode == kModeVideo) {
hw_intf_->SetIdleTimeoutMs(idle_timeout_ms_);
- } else if (mode == kModeCommand) {
- ControlPartialUpdateLocked(true /* enable */, &pending);
+ } else if (hw_display_mode == kModeCommand) {
hw_intf_->SetIdleTimeoutMs(0);
}
@@ -252,6 +267,12 @@
return hw_intf_->SetPanelBrightness(level);
}
+DisplayError DisplayPrimary::IsScalingValid(const LayerRect &crop, const LayerRect &dst,
+ bool rotate90) {
+ SCOPE_LOCK(locker_);
+ return DisplayBase::IsScalingValid(crop, dst, rotate90);
+}
+
DisplayError DisplayPrimary::GetRefreshRateRange(uint32_t *min_refresh_rate,
uint32_t *max_refresh_rate) {
SCOPE_LOCK(locker_);
@@ -284,7 +305,21 @@
return error;
}
- return DisplayBase::ReconfigureDisplay();
+ HWDisplayAttributes display_attributes;
+ uint32_t active_index = 0;
+ error = hw_intf_->GetActiveConfig(&active_index);
+ if (error != kErrorNone) {
+ return error;
+ }
+
+ error = hw_intf_->GetDisplayAttributes(active_index, &display_attributes);
+ if (error != kErrorNone) {
+ return error;
+ }
+
+ comp_manager_->ReconfigureDisplay(display_comp_ctx_, display_attributes, hw_panel_info_);
+
+ return kErrorNone;
}
void DisplayPrimary::AppendDump(char *buffer, uint32_t length) {
@@ -327,137 +362,5 @@
return hw_intf_->GetPanelBrightness(level);
}
-DisplayError DisplayPrimary::ControlPartialUpdateLocked(bool enable, uint32_t *pending) {
- if (!pending) {
- return kErrorParameters;
- }
-
- if (!hw_panel_info_.partial_update) {
- // Nothing to be done.
- DLOGI("partial update is not applicable for display=%d", display_type_);
- return kErrorNotSupported;
- }
-
- *pending = 0;
- if (enable == partial_update_control_) {
- DLOGI("Same state transition is requested.");
- return kErrorNone;
- }
-
- partial_update_control_ = enable;
-
- if (!enable) {
- // If the request is to turn off feature, new draw call is required to have
- // the new setting into effect.
- *pending = 1;
- }
-
- return kErrorNone;
-}
-
-DisplayError DisplayPrimary::DisablePartialUpdateOneFrameLocked() {
- disable_pu_one_frame_ = true;
-
- return kErrorNone;
-}
-
-DisplayError DisplayPrimary::SetMixerResolutionLocked(uint32_t width, uint32_t height) {
- return ReconfigureMixer(width, height);
-}
-
-DisplayError DisplayPrimary::ReconfigureMixer(uint32_t width, uint32_t height) {
- DisplayError error = kErrorNone;
-
- HWMixerAttributes mixer_attributes;
- mixer_attributes.width = width;
- mixer_attributes.height = height;
-
- error = hw_intf_->SetMixerAttributes(mixer_attributes);
- if (error != kErrorNone) {
- return error;
- }
-
- return DisplayBase::ReconfigureDisplay();
-}
-
-bool DisplayPrimary::NeedsMixerReconfiguration(LayerStack *layer_stack, uint32_t *new_mixer_width,
- uint32_t *new_mixer_height) {
- uint32_t layer_count = UINT32(layer_stack->layers.size());
-
- uint32_t fb_width = fb_config_.x_pixels;
- uint32_t fb_height = fb_config_.y_pixels;
- uint32_t fb_area = fb_width * fb_height;
- LayerRect fb_rect = (LayerRect) {0.0f, 0.0f, FLOAT(fb_width), FLOAT(fb_height)};
- uint32_t mixer_width = mixer_attributes_.width;
- uint32_t mixer_height = mixer_attributes_.height;
-
- RectOrientation fb_orientation = GetOrientation(fb_rect);
- uint32_t max_layer_area = 0;
- uint32_t max_area_layer_index = 0;
- std::vector<Layer *> layers = layer_stack->layers;
-
- for (uint32_t i = 0; i < layer_count; i++) {
- Layer *layer = layers.at(i);
- LayerBuffer *layer_buffer = layer->input_buffer;
-
- if (!layer_buffer->flags.video) {
- continue;
- }
-
- uint32_t layer_width = UINT32(layer->src_rect.right - layer->src_rect.left);
- uint32_t layer_height = UINT32(layer->src_rect.bottom - layer->src_rect.top);
- uint32_t layer_area = layer_width * layer_height;
-
- if (layer_area > max_layer_area) {
- max_layer_area = layer_area;
- max_area_layer_index = i;
- }
- }
-
- if (max_layer_area > fb_area) {
- Layer *layer = layers.at(max_area_layer_index);
-
- uint32_t layer_width = UINT32(layer->src_rect.right - layer->src_rect.left);
- uint32_t layer_height = UINT32(layer->src_rect.bottom - layer->src_rect.top);
- LayerRect layer_rect = (LayerRect){0.0f, 0.0f, FLOAT(layer_width), FLOAT(layer_height)};
-
- RectOrientation layer_orientation = GetOrientation(layer_rect);
- if (layer_orientation != kOrientationUnknown &&
- fb_orientation != kOrientationUnknown) {
- if (layer_orientation != fb_orientation) {
- Swap(layer_width, layer_height);
- }
- }
-
- // Align the width and height according to fb's aspect ratio
- layer_width = UINT32((FLOAT(fb_width) / FLOAT(fb_height)) * layer_height);
-
- *new_mixer_width = layer_width;
- *new_mixer_height = layer_height;
-
- return true;
- } else {
- if (fb_width != mixer_width || fb_height != mixer_height) {
- *new_mixer_width = fb_width;
- *new_mixer_height = fb_height;
-
- return true;
- }
- }
-
- return false;
-}
-
-DisplayError DisplayPrimary::SetDetailEnhancerDataLocked(const DisplayDetailEnhancerData &de_data) {
- DisplayError error = comp_manager_->SetDetailEnhancerData(display_comp_ctx_, de_data);
- if (error != kErrorNone) {
- return error;
- }
-
- DisablePartialUpdateOneFrameLocked();
-
- return kErrorNone;
-}
-
} // namespace sdm
diff --git a/msm8996/sdm/libs/core/display_primary.h b/msm8996/sdm/libs/core/display_primary.h
index f029961..d3a37cd 100644
--- a/msm8996/sdm/libs/core/display_primary.h
+++ b/msm8996/sdm/libs/core/display_primary.h
@@ -41,6 +41,8 @@
RotatorInterface *rotator_intf);
virtual DisplayError Init();
virtual DisplayError Deinit();
+ virtual DisplayError Prepare(LayerStack *layer_stack);
+ virtual DisplayError Commit(LayerStack *layer_stack);
virtual DisplayError Flush();
virtual DisplayError GetDisplayState(DisplayState *state);
virtual DisplayError GetNumVariableInfoConfigs(uint32_t *count);
@@ -48,10 +50,13 @@
virtual DisplayError GetActiveConfig(uint32_t *index);
virtual DisplayError GetVSyncState(bool *enabled);
virtual DisplayError SetDisplayState(DisplayState state);
+ virtual DisplayError SetActiveConfig(DisplayConfigVariableInfo *variable_info);
+ virtual DisplayError SetActiveConfig(uint32_t index);
virtual DisplayError SetVSyncState(bool enable);
virtual void SetIdleTimeoutMs(uint32_t timeout_ms);
virtual DisplayError SetMaxMixerStages(uint32_t max_mixer_stages);
virtual DisplayError SetDisplayMode(uint32_t mode);
+ virtual DisplayError IsScalingValid(const LayerRect &crop, const LayerRect &dst, bool rotate90);
virtual DisplayError GetRefreshRateRange(uint32_t *min_refresh_rate, uint32_t *max_refresh_rate);
virtual DisplayError SetRefreshRate(uint32_t refresh_rate);
virtual bool IsUnderscanSupported();
@@ -68,17 +73,7 @@
virtual void CECMessage(char *message) { }
private:
- virtual DisplayError PrepareLocked(LayerStack *layer_stack);
- virtual DisplayError CommitLocked(LayerStack *layer_stack);
- virtual DisplayError ControlPartialUpdateLocked(bool enable, uint32_t *pending);
- virtual DisplayError DisablePartialUpdateOneFrameLocked();
- virtual DisplayError SetMixerResolutionLocked(uint32_t width, uint32_t height);
- virtual DisplayError SetDetailEnhancerDataLocked(const DisplayDetailEnhancerData &de_data);
-
- bool NeedsMixerReconfiguration(LayerStack *layer_stack, uint32_t *new_mixer_width,
- uint32_t *new_mixer_height);
- DisplayError ReconfigureMixer(uint32_t width, uint32_t height);
-
+ Locker locker_;
uint32_t idle_timeout_ms_ = 0;
std::vector<const char *> event_list_ = {"vsync_event", "show_blank_event", "idle_notify",
"msm_fb_thermal_level", "thread_exit"};
diff --git a/msm8996/sdm/libs/core/display_virtual.cpp b/msm8996/sdm/libs/core/display_virtual.cpp
index cafb986..ff8da68 100644
--- a/msm8996/sdm/libs/core/display_virtual.cpp
+++ b/msm8996/sdm/libs/core/display_virtual.cpp
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2014 - 2016, The Linux Foundation. All rights reserved.
+* Copyright (c) 2014 - 2015, 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:
@@ -69,6 +69,16 @@
return error;
}
+DisplayError DisplayVirtual::Prepare(LayerStack *layer_stack) {
+ SCOPE_LOCK(locker_);
+ return DisplayBase::Prepare(layer_stack);
+}
+
+DisplayError DisplayVirtual::Commit(LayerStack *layer_stack) {
+ SCOPE_LOCK(locker_);
+ return DisplayBase::Commit(layer_stack);
+}
+
DisplayError DisplayVirtual::Flush() {
SCOPE_LOCK(locker_);
return DisplayBase::Flush();
@@ -112,7 +122,10 @@
return DisplayBase::SetDisplayState(state);
}
-DisplayError DisplayVirtual::SetActiveConfigLocked(DisplayConfigVariableInfo *variable_info) {
+DisplayError DisplayVirtual::SetActiveConfig(DisplayConfigVariableInfo *variable_info) {
+ SCOPE_LOCK(locker_);
+ DisplayError error = kErrorNone;
+
if (!variable_info) {
return kErrorParameters;
}
@@ -121,17 +134,24 @@
display_attributes_.y_pixels = variable_info->y_pixels;
display_attributes_.fps = variable_info->fps;
- HWMixerAttributes mixer_attributes;
- mixer_attributes.width = variable_info->x_pixels;;
- mixer_attributes.height = variable_info->y_pixels;
// if display is already connected, unregister display from composition manager and register
// the display with new configuration.
if (display_comp_ctx_) {
comp_manager_->UnregisterDisplay(display_comp_ctx_);
}
- return comp_manager_->RegisterDisplay(display_type_, display_attributes_, hw_panel_info_,
- mixer_attributes, fb_config_, &display_comp_ctx_);
+ error = comp_manager_->RegisterDisplay(display_type_, display_attributes_, hw_panel_info_,
+ &display_comp_ctx_);
+ if (error != kErrorNone) {
+ return error;
+ }
+
+ return error;
+}
+
+DisplayError DisplayVirtual::SetActiveConfig(uint32_t index) {
+ SCOPE_LOCK(locker_);
+ return kErrorNotSupported;
}
DisplayError DisplayVirtual::SetVSyncState(bool enable) {
@@ -151,6 +171,12 @@
return DisplayBase::SetDisplayMode(mode);
}
+DisplayError DisplayVirtual::IsScalingValid(const LayerRect &crop, const LayerRect &dst,
+ bool rotate90) {
+ SCOPE_LOCK(locker_);
+ return DisplayBase::IsScalingValid(crop, dst, rotate90);
+}
+
DisplayError DisplayVirtual::GetRefreshRateRange(uint32_t *min_refresh_rate,
uint32_t *max_refresh_rate) {
SCOPE_LOCK(locker_);
diff --git a/msm8996/sdm/libs/core/display_virtual.h b/msm8996/sdm/libs/core/display_virtual.h
index ba164ae..b26be12 100644
--- a/msm8996/sdm/libs/core/display_virtual.h
+++ b/msm8996/sdm/libs/core/display_virtual.h
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2014 - 2016, The Linux Foundation. All rights reserved.
+* Copyright (c) 2014 - 2015, 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:
@@ -40,6 +40,8 @@
RotatorInterface *rotator_intf);
virtual DisplayError Init();
virtual DisplayError Deinit();
+ virtual DisplayError Prepare(LayerStack *layer_stack);
+ virtual DisplayError Commit(LayerStack *layer_stack);
virtual DisplayError Flush();
virtual DisplayError GetDisplayState(DisplayState *state);
virtual DisplayError GetNumVariableInfoConfigs(uint32_t *count);
@@ -47,10 +49,13 @@
virtual DisplayError GetActiveConfig(uint32_t *index);
virtual DisplayError GetVSyncState(bool *enabled);
virtual DisplayError SetDisplayState(DisplayState state);
+ virtual DisplayError SetActiveConfig(DisplayConfigVariableInfo *variable_info);
+ virtual DisplayError SetActiveConfig(uint32_t index);
virtual DisplayError SetVSyncState(bool enable);
virtual void SetIdleTimeoutMs(uint32_t timeout_ms);
virtual DisplayError SetMaxMixerStages(uint32_t max_mixer_stages);
virtual DisplayError SetDisplayMode(uint32_t mode);
+ virtual DisplayError IsScalingValid(const LayerRect &crop, const LayerRect &dst, bool rotate90);
virtual DisplayError GetRefreshRateRange(uint32_t *min_refresh_rate, uint32_t *max_refresh_rate);
virtual DisplayError SetRefreshRate(uint32_t refresh_rate);
virtual bool IsUnderscanSupported();
@@ -59,10 +64,8 @@
virtual DisplayError SetCursorPosition(int x, int y);
private:
- virtual DisplayError SetActiveConfigLocked(uint32_t index) {
- return kErrorNotSupported;
- }
- virtual DisplayError SetActiveConfigLocked(DisplayConfigVariableInfo *variable_info);
+ Locker locker_;
+ HWDisplayAttributes display_attributes_;
};
} // namespace sdm
diff --git a/msm8996/sdm/libs/core/fb/hw_device.cpp b/msm8996/sdm/libs/core/fb/hw_device.cpp
index 6b7dd2e..546490a 100644
--- a/msm8996/sdm/libs/core/fb/hw_device.cpp
+++ b/msm8996/sdm/libs/core/fb/hw_device.cpp
@@ -238,10 +238,8 @@
mdp_layer.bg_color = layer->solid_fill_color;
// HWScaleData to MDP driver
- hw_scale_->SetHWScaleData(pipe_info->scale_data, mdp_layer_count, &mdp_commit,
- pipe_info->sub_block_type);
- mdp_layer.scale = hw_scale_->GetScaleDataRef(mdp_layer_count, pipe_info->sub_block_type);
-
+ hw_scale_->SetHWScaleData(pipe_info->scale_data, mdp_layer_count, &mdp_layer);
+ mdp_layer.scale = hw_scale_->GetScaleDataRef(mdp_layer_count);
mdp_layer_count++;
DLOGV_IF(kTagDriverConfig, "******************* Layer[%d] %s pipe Input ******************",
diff --git a/msm8996/sdm/libs/core/fb/hw_device.h b/msm8996/sdm/libs/core/fb/hw_device.h
index d5b18de..7311271 100644
--- a/msm8996/sdm/libs/core/fb/hw_device.h
+++ b/msm8996/sdm/libs/core/fb/hw_device.h
@@ -84,12 +84,6 @@
virtual DisplayError SetAutoRefresh(bool enable) { return kErrorNone; }
virtual DisplayError SetS3DMode(HWS3DMode s3d_mode);
virtual DisplayError SetScaleLutConfig(HWScaleLutInfo *lut_info);
- virtual DisplayError SetMixerAttributes(const HWMixerAttributes &mixer_attributes) {
- return kErrorNotSupported;
- }
- virtual DisplayError GetMixerAttributes(HWMixerAttributes *mixer_attributes) {
- return kErrorNotSupported;
- }
// For HWDevice derivatives
virtual DisplayError Init();
diff --git a/msm8996/sdm/libs/core/fb/hw_hdmi.cpp b/msm8996/sdm/libs/core/fb/hw_hdmi.cpp
index 3dfac8a..db7a2d9 100644
--- a/msm8996/sdm/libs/core/fb/hw_hdmi.cpp
+++ b/msm8996/sdm/libs/core/fb/hw_hdmi.cpp
@@ -252,8 +252,10 @@
display_attributes->y_dpi = 0;
display_attributes->fps = timing_mode->refresh_rate / 1000;
display_attributes->vsync_period_ns = UINT32(1000000000L / display_attributes->fps);
+ display_attributes->split_left = display_attributes->x_pixels;
if (display_attributes->x_pixels > hw_resource_.max_mixer_width) {
display_attributes->is_device_split = true;
+ display_attributes->split_left = display_attributes->x_pixels / 2;
display_attributes->h_total += h_blanking;
}
@@ -753,21 +755,5 @@
return kErrorNone;
}
-DisplayError HWHDMI::GetMixerAttributes(HWMixerAttributes *mixer_attributes) {
- if (!mixer_attributes) {
- return kErrorParameters;
- }
-
- HWDisplayAttributes display_attributes;
- GetDisplayAttributes(active_config_index_, &display_attributes);
-
- mixer_attributes->width = display_attributes.x_pixels;
- mixer_attributes->height = display_attributes.y_pixels;
- mixer_attributes->split_left = display_attributes.is_device_split ?
- (display_attributes.x_pixels / 2) : mixer_attributes->width;
-
- return kErrorNone;
-}
-
} // namespace sdm
diff --git a/msm8996/sdm/libs/core/fb/hw_hdmi.h b/msm8996/sdm/libs/core/fb/hw_hdmi.h
index 833b3d3..aa5e2a0 100644
--- a/msm8996/sdm/libs/core/fb/hw_hdmi.h
+++ b/msm8996/sdm/libs/core/fb/hw_hdmi.h
@@ -69,7 +69,6 @@
virtual DisplayError Validate(HWLayers *hw_layers);
virtual DisplayError SetS3DMode(HWS3DMode s3d_mode);
virtual DisplayError SetRefreshRate(uint32_t refresh_rate);
- virtual DisplayError GetMixerAttributes(HWMixerAttributes *mixer_attributes);
private:
DisplayError ReadEDIDInfo();
diff --git a/msm8996/sdm/libs/core/fb/hw_info.cpp b/msm8996/sdm/libs/core/fb/hw_info.cpp
index 25bb01c..f6f664a 100644
--- a/msm8996/sdm/libs/core/fb/hw_info.cpp
+++ b/msm8996/sdm/libs/core/fb/hw_info.cpp
@@ -31,7 +31,6 @@
#include <utils/constants.h>
#include <utils/debug.h>
#include <utils/sys.h>
-#include <dlfcn.h>
#include <algorithm>
#include <iostream>
@@ -242,16 +241,6 @@
hw_resource->system_overhead_lines = UINT32(atoi(tokens[1]));
} else if (!strncmp(tokens[0], "wb_intf_index", strlen("wb_intf_index"))) {
hw_resource->writeback_index = UINT32(atoi(tokens[1]));
- } else if (!strncmp(tokens[0], "dest_scaler_count", strlen("dest_scaler_count"))) {
- hw_resource->hw_dest_scalar_info.count = UINT32(atoi(tokens[1]));
- } else if (!strncmp(tokens[0], "max_dest_scale_up", strlen("max_dest_scale_up"))) {
- hw_resource->hw_dest_scalar_info.max_scale_up = UINT32(atoi(tokens[1]));
- } else if (!strncmp(tokens[0], "max_dest_scaler_input_width",
- strlen("max_dest_scaler_input_width"))) {
- hw_resource->hw_dest_scalar_info.max_input_width = UINT32(atoi(tokens[1]));
- } else if (!strncmp(tokens[0], "max_dest_scaler_output_width",
- strlen("max_dest_scaler_output_width"))) {
- hw_resource->hw_dest_scalar_info.max_output_width = UINT32(atoi(tokens[1]));
} else if (!strncmp(tokens[0], "features", strlen("features"))) {
for (uint32_t i = 0; i < token_count; i++) {
if (!strncmp(tokens[i], "bwc", strlen("bwc"))) {
@@ -327,14 +316,6 @@
}
}
- // Disable destination scalar count to 0 if extension library is not present
- void *extension_lib = ::dlopen("libsdmextension.so", RTLD_NOW);
- if (!extension_lib) {
- hw_resource->hw_dest_scalar_info.count = 0;
- } else {
- ::dlclose(extension_lib);
- }
-
Sys::fclose_(fileptr);
DLOGI("SDE Version = %d, SDE Revision = %x, RGB = %d, VIG = %d, DMA = %d, Cursor = %d",
diff --git a/msm8996/sdm/libs/core/fb/hw_primary.cpp b/msm8996/sdm/libs/core/fb/hw_primary.cpp
index 3d0c776..84eea2a 100644
--- a/msm8996/sdm/libs/core/fb/hw_primary.cpp
+++ b/msm8996/sdm/libs/core/fb/hw_primary.cpp
@@ -40,7 +40,6 @@
#include <utils/sys.h>
#include <core/display_interface.h>
#include <linux/msm_mdp_ext.h>
-#include <utils/rect.h>
#include <string>
@@ -100,18 +99,11 @@
return error;
}
- uint32_t dest_scalar_count = hw_resource_.hw_dest_scalar_info.count;
- if (dest_scalar_count) {
- mdp_dest_scalar_data_ = new mdp_destination_scaler_data[dest_scalar_count];
- }
-
error = PopulateDisplayAttributes();
if (error != kErrorNone) {
return error;
}
- UpdateMixerAttributes();
-
// Disable HPD at start if HDMI is external, it will be enabled later when the display powers on
// This helps for framework reboot or adb shell stop/start
EnableHotPlugDetection(0);
@@ -207,8 +199,6 @@
}
DisplayError HWPrimary::Deinit() {
- delete [] mdp_dest_scalar_data_;
-
return HWDevice::Deinit();
}
@@ -283,6 +273,8 @@
display_attributes_.vsync_period_ns = UINT32(1000000000L / display_attributes_.fps);
display_attributes_.is_device_split = (hw_panel_info_.split_info.left_split ||
(var_screeninfo.xres > hw_resource_.max_mixer_width)) ? true : false;
+ display_attributes_.split_left = hw_panel_info_.split_info.left_split ?
+ hw_panel_info_.split_info.left_split : display_attributes_.x_pixels / 2;
display_attributes_.h_total += display_attributes_.is_device_split ? h_blanking : 0;
return kErrorNone;
@@ -313,7 +305,6 @@
DLOGI("Successfully set config %u", index);
PopulateHWPanelInfo();
PopulateDisplayAttributes();
- UpdateMixerAttributes();
active_config_index_ = index;
} else {
DLOGE("Writing config index %u failed with error: %s", index, strerror(errno));
@@ -390,27 +381,15 @@
return kErrorNone;
}
-void HWPrimary::ResetDisplayParams() {
- uint32_t dst_scalar_cnt = hw_resource_.hw_dest_scalar_info.count;
+DisplayError HWPrimary::Validate(HWLayers *hw_layers) {
+ LayerStack *stack = hw_layers->info.stack;
HWDevice::ResetDisplayParams();
- if (mdp_dest_scalar_data_) {
- memset(mdp_dest_scalar_data_, 0, sizeof(mdp_dest_scalar_data_) * dst_scalar_cnt);
- mdp_disp_commit_.commit_v1.dest_scaler = mdp_dest_scalar_data_;
- }
-}
-
-DisplayError HWPrimary::Validate(HWLayers *hw_layers) {
- HWLayersInfo &hw_layer_info = hw_layers->info;
- LayerStack *stack = hw_layer_info.stack;
-
- ResetDisplayParams();
-
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_layers->info.left_partial_update;
+ LayerRect right_roi = hw_layers->info.right_partial_update;
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);
@@ -419,8 +398,8 @@
// 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 (!hw_resource_.is_src_split) {
+ mdp_commit.right_roi.x = UINT32(right_roi.left) - hw_panel_info_.split_info.left_split;
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);
@@ -445,40 +424,6 @@
DLOGI_IF(kTagDriverConfig, "****************************************************************");
}
- uint32_t index = 0;
- for (uint32_t i = 0; i < hw_resource_.hw_dest_scalar_info.count; i++) {
- DestScaleInfoMap::iterator it = hw_layer_info.dest_scale_info_map.find(i);
-
- if (it == hw_layer_info.dest_scale_info_map.end()) {
- continue;
- }
-
- HWDestScaleInfo *dest_scale_info = it->second;
-
- mdp_destination_scaler_data *dest_scalar_data = &mdp_dest_scalar_data_[index];
- hw_scale_->SetHWScaleData(dest_scale_info->scale_data, index, &mdp_commit,
- kHWDestinationScalar);
-
- if (dest_scale_info->scale_update) {
- dest_scalar_data->flags |= MDP_DESTSCALER_SCALE_UPDATE;
- }
-
- dest_scalar_data->dest_scaler_ndx = i;
- dest_scalar_data->lm_width = dest_scale_info->mixer_width;
- dest_scalar_data->lm_height = dest_scale_info->mixer_height;
- dest_scalar_data->scale = reinterpret_cast <uint64_t>
- (hw_scale_->GetScaleDataRef(index, kHWDestinationScalar));
-
- index++;
-
- DLOGV_IF(kTagDriverConfig, "************************ DestScalar[%d] **************************",
- dest_scalar_data->dest_scaler_ndx);
- DLOGV_IF(kTagDriverConfig, "Mixer WxH %dx%d", dest_scalar_data->lm_width,
- dest_scalar_data->lm_height);
- DLOGI_IF(kTagDriverConfig, "*****************************************************************");
- }
- mdp_commit.dest_scaler_cnt = UINT32(hw_layer_info.dest_scale_info_map.size());
-
return HWDevice::Validate(hw_layers);
}
@@ -695,76 +640,5 @@
return kErrorNone;
}
-DisplayError HWPrimary::SetMixerAttributes(const HWMixerAttributes &mixer_attributes) {
- if (IsResolutionSwitchEnabled() || !hw_resource_.hw_dest_scalar_info.count) {
- return kErrorNotSupported;
- }
-
- if (mixer_attributes.width > display_attributes_.x_pixels ||
- mixer_attributes.height > display_attributes_.y_pixels) {
- DLOGW("Input resolution exceeds display resolution! input: res %dx%d display: res %dx%d",
- mixer_attributes.width, mixer_attributes.height, display_attributes_.x_pixels,
- display_attributes_.y_pixels);
- return kErrorNotSupported;
- }
-
- uint32_t max_input_width = hw_resource_.hw_dest_scalar_info.max_input_width;
- if (display_attributes_.is_device_split) {
- max_input_width *= 2;
- }
-
- if (mixer_attributes.width > max_input_width) {
- DLOGW("Input width exceeds width limit! input_width %d width_limit %d", mixer_attributes.width,
- max_input_width);
- return kErrorNotSupported;
- }
-
- float mixer_aspect_ratio = FLOAT(mixer_attributes.width) / FLOAT(mixer_attributes.height);
- float display_aspect_ratio =
- FLOAT(display_attributes_.x_pixels) / FLOAT(display_attributes_.y_pixels);
-
- if (display_aspect_ratio != mixer_aspect_ratio) {
- DLOGW("Aspect ratio mismatch! input: res %dx%d display: res %dx%d", mixer_attributes.width,
- mixer_attributes.height, display_attributes_.x_pixels, display_attributes_.y_pixels);
- return kErrorNotSupported;
- }
-
- float scale_x = FLOAT(display_attributes_.x_pixels) / FLOAT(mixer_attributes.width);
- float scale_y = FLOAT(display_attributes_.y_pixels) / FLOAT(mixer_attributes.height);
- float max_scale_up = hw_resource_.hw_dest_scalar_info.max_scale_up;
- if (scale_x > max_scale_up || scale_y > max_scale_up) {
- DLOGW("Up scaling ratio exceeds for destination scalar upscale limit scale_x %f scale_y %f " \
- "max_scale_up %f", scale_x, scale_y, max_scale_up);
- return kErrorNotSupported;
- }
-
- float mixer_split_ratio = FLOAT(mixer_attributes_.split_left) / FLOAT(mixer_attributes_.width);
-
- mixer_attributes_ = mixer_attributes;
- mixer_attributes_.split_left = mixer_attributes_.width;
- if (display_attributes_.is_device_split) {
- mixer_attributes_.split_left = UINT32(FLOAT(mixer_attributes.width) * mixer_split_ratio);
- }
-
- return kErrorNone;
-}
-
-DisplayError HWPrimary::GetMixerAttributes(HWMixerAttributes *mixer_attributes) {
- if (!mixer_attributes) {
- return kErrorParameters;
- }
-
- *mixer_attributes = mixer_attributes_;
-
- return kErrorNone;
-}
-
-void HWPrimary::UpdateMixerAttributes() {
- mixer_attributes_.width = display_attributes_.x_pixels;
- mixer_attributes_.height = display_attributes_.y_pixels;
- mixer_attributes_.split_left = display_attributes_.is_device_split ?
- hw_panel_info_.split_info.left_split : mixer_attributes_.width;
-}
-
} // namespace sdm
diff --git a/msm8996/sdm/libs/core/fb/hw_primary.h b/msm8996/sdm/libs/core/fb/hw_primary.h
index 36b3f63..999c41a 100644
--- a/msm8996/sdm/libs/core/fb/hw_primary.h
+++ b/msm8996/sdm/libs/core/fb/hw_primary.h
@@ -65,8 +65,6 @@
virtual DisplayError SetPPFeatures(PPFeaturesConfig *feature_list);
virtual DisplayError GetPanelBrightness(int *level);
virtual DisplayError SetAutoRefresh(bool enable);
- virtual DisplayError SetMixerAttributes(const HWMixerAttributes &mixer_attributes);
- virtual DisplayError GetMixerAttributes(HWMixerAttributes *mixer_attributes);
private:
// Panel modes for the MSMFB_LPM_ENABLE ioctl
@@ -79,8 +77,6 @@
void InitializeConfigs();
bool IsResolutionSwitchEnabled() { return !display_configs_.empty(); }
bool GetCurrentModeFromSysfs(size_t *curr_x_pixels, size_t *curr_y_pixels);
- void UpdateMixerAttributes();
- void ResetDisplayParams();
HWDisplayAttributes display_attributes_;
std::vector<DisplayConfigVariableInfo> display_configs_;
@@ -89,8 +85,6 @@
const char *kBrightnessNode = "/sys/class/leds/lcd-backlight/brightness";
const char *kAutoRefreshNode = "/sys/devices/virtual/graphics/fb0/msm_cmd_autorefresh_en";
bool auto_refresh_ = false;
- HWMixerAttributes mixer_attributes_ = {};
- mdp_destination_scaler_data *mdp_dest_scalar_data_ = NULL;
};
} // namespace sdm
diff --git a/msm8996/sdm/libs/core/fb/hw_scale.cpp b/msm8996/sdm/libs/core/fb/hw_scale.cpp
index 3d175e5..f18727f 100644
--- a/msm8996/sdm/libs/core/fb/hw_scale.cpp
+++ b/msm8996/sdm/libs/core/fb/hw_scale.cpp
@@ -47,16 +47,11 @@
}
void HWScaleV1::SetHWScaleData(const HWScaleData &scale_data, uint32_t index,
- mdp_layer_commit_v1 *mdp_commit, HWSubBlockType sub_block_type) {
+ mdp_input_layer *mdp_layer) {
if (!scale_data.enable.scale) {
return;
}
- if (sub_block_type == kHWDestinationScalar) {
- return;
- }
-
- mdp_input_layer *mdp_layer = &mdp_commit->input_layers[index];
mdp_layer->flags |= MDP_LAYER_ENABLE_PIXEL_EXT;
mdp_scale_data *mdp_scale = &scale_data_v1_.at(index);
mdp_scale->enable_pxl_ext = scale_data.enable.scale;
@@ -89,12 +84,8 @@
return;
}
-void* HWScaleV1::GetScaleDataRef(uint32_t index, HWSubBlockType sub_block_type) {
- if (sub_block_type != kHWDestinationScalar) {
- return &scale_data_v1_.at(index);
- }
-
- return NULL;
+void* HWScaleV1::GetScaleDataRef(uint32_t index) {
+ return &scale_data_v1_.at(index);
}
void HWScaleV1::DumpScaleData(void *mdp_scale) {
@@ -121,32 +112,14 @@
}
void HWScaleV2::SetHWScaleData(const HWScaleData &scale_data, uint32_t index,
- mdp_layer_commit_v1 *mdp_commit, HWSubBlockType sub_block_type) {
+ mdp_input_layer *mdp_layer) {
if (!scale_data.enable.scale && !scale_data.enable.direction_detection &&
!scale_data.enable.detail_enhance ) {
return;
}
- mdp_scale_data_v2 *mdp_scale;
- if (sub_block_type != kHWDestinationScalar) {
- mdp_input_layer *mdp_layer = &mdp_commit->input_layers[index];
- mdp_layer->flags |= MDP_LAYER_ENABLE_QSEED3_SCALE;
- mdp_scale = &scale_data_v2_.at(index);
- } else {
- mdp_scale_data_v2 mdp_dest_scale;
- mdp_destination_scaler_data *dest_scalar =
- reinterpret_cast<mdp_destination_scaler_data *>(mdp_commit->dest_scaler);
-
- dest_scalar[index].flags = MDP_DESTSCALER_ENABLE;
-
- if (scale_data.enable.detail_enhance) {
- dest_scalar[index].flags |= MDP_DESTSCALER_ENHANCER_UPDATE;
- }
-
- dest_scale_data_v2_.insert(std::make_pair(index, mdp_dest_scale));
- mdp_scale = &dest_scale_data_v2_[index];
- }
-
+ mdp_scale_data_v2 *mdp_scale = &scale_data_v2_.at(index);
+ mdp_layer->flags |= MDP_LAYER_ENABLE_QSEED3_SCALE;
mdp_scale->enable = (scale_data.enable.scale ? ENABLE_SCALE : 0) |
(scale_data.enable.direction_detection ? ENABLE_DIRECTION_DETECTION : 0) |
(scale_data.enable.detail_enhance ? ENABLE_DETAIL_ENHANCE : 0);
@@ -233,27 +206,23 @@
return;
}
-void* HWScaleV2::GetScaleDataRef(uint32_t index, HWSubBlockType sub_block_type) {
- if (sub_block_type != kHWDestinationScalar) {
- return &scale_data_v2_.at(index);
- } else {
- return &dest_scale_data_v2_[index];
- }
+void* HWScaleV2::GetScaleDataRef(uint32_t index) {
+ return &scale_data_v2_.at(index);
}
-uint32_t HWScaleV2::GetMDPScalingFilter(ScalingFilterConfig filter_cfg) {
+uint32_t HWScaleV2::GetMDPScalingFilter(HWScalingFilter filter_cfg) {
switch (filter_cfg) {
- case kFilterEdgeDirected:
+ case kScalingFilterEdgeDirected:
return FILTER_EDGE_DIRECTED_2D;
- case kFilterCircular:
+ case kScalingFilterCircular:
return FILTER_CIRCULAR_2D;
- case kFilterSeparable:
+ case kScalingFilterSeparable:
return FILTER_SEPARABLE_1D;
- case kFilterBilinear:
+ case kScalingFilterBilinear:
return FILTER_BILINEAR;
default:
DLOGE("Invalid Scaling Filter");
- return kFilterMax;
+ return kScalingFilterMax;
}
}
diff --git a/msm8996/sdm/libs/core/fb/hw_scale.h b/msm8996/sdm/libs/core/fb/hw_scale.h
index 7590833..0891d42 100644
--- a/msm8996/sdm/libs/core/fb/hw_scale.h
+++ b/msm8996/sdm/libs/core/fb/hw_scale.h
@@ -30,7 +30,6 @@
#include <cstring>
#include <array>
-#include <map>
namespace sdm {
@@ -40,8 +39,8 @@
static DisplayError Destroy(HWScale *intf);
virtual void SetHWScaleData(const HWScaleData &scale, uint32_t index,
- mdp_layer_commit_v1 *mdp_commit, HWSubBlockType sub_block_type) = 0;
- virtual void* GetScaleDataRef(uint32_t index, HWSubBlockType sub_block_type) = 0;
+ mdp_input_layer *mdp_layer) = 0;
+ virtual void* GetScaleDataRef(uint32_t index) = 0;
virtual void DumpScaleData(void *mdp_scale) = 0;
virtual void ResetScaleParams() = 0;
protected:
@@ -51,8 +50,8 @@
class HWScaleV1 : public HWScale {
public:
virtual void SetHWScaleData(const HWScaleData &scale, uint32_t index,
- mdp_layer_commit_v1 *mdp_commit, HWSubBlockType sub_block_type);
- virtual void* GetScaleDataRef(uint32_t index, HWSubBlockType sub_block_type);
+ mdp_input_layer *mdp_layer);
+ virtual void* GetScaleDataRef(uint32_t index);
virtual void DumpScaleData(void *mdp_scale);
virtual void ResetScaleParams() { scale_data_v1_ = {}; }
@@ -64,19 +63,18 @@
class HWScaleV2 : public HWScale {
public:
virtual void SetHWScaleData(const HWScaleData &scale, uint32_t index,
- mdp_layer_commit_v1 *mdp_commit, HWSubBlockType sub_block_type);
- virtual void* GetScaleDataRef(uint32_t index, HWSubBlockType sub_block_type);
+ mdp_input_layer *mdp_layer);
+ virtual void* GetScaleDataRef(uint32_t index);
virtual void DumpScaleData(void *mdp_scale);
- virtual void ResetScaleParams() { scale_data_v2_ = {}; dest_scale_data_v2_ = {}; }
+ virtual void ResetScaleParams() { scale_data_v2_ = {}; }
protected:
~HWScaleV2() {}
std::array<mdp_scale_data_v2, (kMaxSDELayers * 2)> scale_data_v2_ = {};
- std::map<uint32_t, mdp_scale_data_v2> dest_scale_data_v2_ = {};
private:
uint32_t GetMDPAlphaInterpolation(HWAlphaInterpolation alpha_filter_cfg);
- uint32_t GetMDPScalingFilter(ScalingFilterConfig filter_cfg);
+ uint32_t GetMDPScalingFilter(HWScalingFilter filter_cfg);
};
} // namespace sdm
diff --git a/msm8996/sdm/libs/core/hw_interface.h b/msm8996/sdm/libs/core/hw_interface.h
index 0ff5126..75d92b9 100644
--- a/msm8996/sdm/libs/core/hw_interface.h
+++ b/msm8996/sdm/libs/core/hw_interface.h
@@ -95,8 +95,6 @@
virtual DisplayError SetAutoRefresh(bool enable) = 0;
virtual DisplayError SetS3DMode(HWS3DMode s3d_mode) = 0;
virtual DisplayError SetScaleLutConfig(HWScaleLutInfo *lut_info) = 0;
- virtual DisplayError SetMixerAttributes(const HWMixerAttributes &mixer_attributes) = 0;
- virtual DisplayError GetMixerAttributes(HWMixerAttributes *mixer_attributes) = 0;
protected:
virtual ~HWInterface() { }
diff --git a/msm8996/sdm/libs/core/resource_default.cpp b/msm8996/sdm/libs/core/resource_default.cpp
index bdbd8b7..e13150b 100644
--- a/msm8996/sdm/libs/core/resource_default.cpp
+++ b/msm8996/sdm/libs/core/resource_default.cpp
@@ -104,9 +104,8 @@
}
DisplayError ResourceDefault::RegisterDisplay(DisplayType type,
- const HWDisplayAttributes &display_attributes,
+ const HWDisplayAttributes &attributes,
const HWPanelInfo &hw_panel_info,
- const HWMixerAttributes &mixer_attributes,
Handle *display_ctx) {
DisplayError error = kErrorNone;
@@ -140,9 +139,12 @@
hw_block_ctx_[hw_block_id].is_in_use = true;
- display_resource_ctx->display_attributes = display_attributes;
+ display_resource_ctx->display_attributes = attributes;
display_resource_ctx->hw_block_id = hw_block_id;
- display_resource_ctx->mixer_attributes = mixer_attributes;
+
+ if (!display_resource_ctx->display_attributes.is_device_split) {
+ display_resource_ctx->display_attributes.split_left = attributes.x_pixels;
+ }
*display_ctx = display_resource_ctx;
return error;
@@ -160,19 +162,14 @@
return kErrorNone;
}
-DisplayError ResourceDefault::ReconfigureDisplay(Handle display_ctx,
- const HWDisplayAttributes &display_attributes,
- const HWPanelInfo &hw_panel_info,
- const HWMixerAttributes &mixer_attributes) {
+void ResourceDefault::ReconfigureDisplay(Handle display_ctx, const HWDisplayAttributes &attributes,
+ const HWPanelInfo &hw_panel_info) {
SCOPE_LOCK(locker_);
DisplayResourceContext *display_resource_ctx =
reinterpret_cast<DisplayResourceContext *>(display_ctx);
- display_resource_ctx->display_attributes = display_attributes;
- display_resource_ctx->mixer_attributes = mixer_attributes;
-
- return kErrorNone;
+ display_resource_ctx->display_attributes = attributes;
}
DisplayError ResourceDefault::Start(Handle display_ctx) {
@@ -450,20 +447,20 @@
DisplayError ResourceDefault::DisplaySplitConfig(DisplayResourceContext *display_resource_ctx,
const LayerRect &src_rect, const LayerRect &dst_rect,
HWLayerConfig *layer_config) {
- HWMixerAttributes &mixer_attributes = display_resource_ctx->mixer_attributes;
+ HWDisplayAttributes &display_attributes = display_resource_ctx->display_attributes;
// for display split case
HWPipeInfo *left_pipe = &layer_config->left_pipe;
HWPipeInfo *right_pipe = &layer_config->right_pipe;
LayerRect scissor_left, scissor_right, dst_left, crop_left, crop_right, dst_right;
- scissor_left.right = FLOAT(mixer_attributes.split_left);
- scissor_left.bottom = FLOAT(mixer_attributes.height);
+ scissor_left.right = FLOAT(display_attributes.split_left);
+ scissor_left.bottom = FLOAT(display_attributes.y_pixels);
- scissor_right.left = FLOAT(mixer_attributes.split_left);
+ scissor_right.left = FLOAT(display_attributes.split_left);
scissor_right.top = 0.0f;
- scissor_right.right = FLOAT(mixer_attributes.width);
- scissor_right.bottom = FLOAT(mixer_attributes.height);
+ scissor_right.right = FLOAT(display_attributes.x_pixels);
+ scissor_right.bottom = FLOAT(display_attributes.y_pixels);
crop_left = src_rect;
dst_left = dst_rect;
@@ -904,9 +901,4 @@
return kErrorNone;
}
-DisplayError ResourceDefault::SetDetailEnhancerData(Handle display_ctx,
- const DisplayDetailEnhancerData &de_data) {
- return kErrorNotSupported;
-}
-
} // namespace sdm
diff --git a/msm8996/sdm/libs/core/resource_default.h b/msm8996/sdm/libs/core/resource_default.h
index b57ce94..ce6dd5f 100644
--- a/msm8996/sdm/libs/core/resource_default.h
+++ b/msm8996/sdm/libs/core/resource_default.h
@@ -37,16 +37,11 @@
public:
DisplayError Init(const HWResourceInfo &hw_resource_info);
DisplayError Deinit();
- virtual DisplayError RegisterDisplay(DisplayType type,
- const HWDisplayAttributes &display_attributes,
- const HWPanelInfo &hw_panel_info,
- const HWMixerAttributes &mixer_attributes,
- Handle *display_ctx);
+ virtual DisplayError RegisterDisplay(DisplayType type, const HWDisplayAttributes &attributes,
+ const HWPanelInfo &hw_panel_info, Handle *display_ctx);
virtual DisplayError UnregisterDisplay(Handle display_ctx);
- virtual DisplayError ReconfigureDisplay(Handle display_ctx,
- const HWDisplayAttributes &display_attributes,
- const HWPanelInfo &hw_panel_info,
- const HWMixerAttributes &mixer_attributes);
+ virtual void ReconfigureDisplay(Handle display_ctx, const HWDisplayAttributes &attributes,
+ const HWPanelInfo &hw_panel_info);
virtual DisplayError Start(Handle display_ctx);
virtual DisplayError Stop(Handle display_ctx);
virtual DisplayError Acquire(Handle display_ctx, HWLayers *hw_layers);
@@ -59,8 +54,6 @@
DisplayError ValidateCursorConfig(Handle display_ctx, const Layer *layer, bool is_top);
DisplayError ValidateCursorPosition(Handle display_ctx, HWLayers *hw_layers, int x, int y);
DisplayError SetMaxBandwidthMode(HWBwModes mode);
- virtual DisplayError SetDetailEnhancerData(Handle display_ctx,
- const DisplayDetailEnhancerData &de_data);
private:
enum PipeOwner {
@@ -91,7 +84,6 @@
HWDisplayAttributes display_attributes;
HWBlockType hw_block_id;
uint64_t frame_count;
- HWMixerAttributes mixer_attributes;
DisplayResourceContext() : hw_block_id(kHWBlockMax), frame_count(0) { }
};
diff --git a/msm8996/sdm/libs/core/strategy.cpp b/msm8996/sdm/libs/core/strategy.cpp
index a70ac36..b8a499e 100644
--- a/msm8996/sdm/libs/core/strategy.cpp
+++ b/msm8996/sdm/libs/core/strategy.cpp
@@ -33,12 +33,9 @@
Strategy::Strategy(ExtensionInterface *extension_intf, DisplayType type,
const HWResourceInfo &hw_resource_info, const HWPanelInfo &hw_panel_info,
- const HWMixerAttributes &mixer_attributes,
- const HWDisplayAttributes &display_attributes,
- const DisplayConfigVariableInfo &fb_config)
+ const HWDisplayAttributes &hw_display_attributes)
: extension_intf_(extension_intf), display_type_(type), hw_resource_info_(hw_resource_info),
- hw_panel_info_(hw_panel_info), mixer_attributes_(mixer_attributes),
- display_attributes_(display_attributes), fb_config_(fb_config) {
+ hw_panel_info_(hw_panel_info), hw_display_attributes_(hw_display_attributes) {
}
DisplayError Strategy::Init() {
@@ -46,16 +43,14 @@
if (extension_intf_) {
error = extension_intf_->CreateStrategyExtn(display_type_, hw_panel_info_.mode,
- hw_panel_info_.s3d_mode, mixer_attributes_,
- fb_config_, &strategy_intf_);
+ hw_panel_info_.s3d_mode, &strategy_intf_);
if (error != kErrorNone) {
DLOGE("Failed to create strategy");
return error;
}
- error = extension_intf_->CreatePartialUpdate(display_type_, hw_resource_info_, hw_panel_info_,
- mixer_attributes_, display_attributes_,
- &partial_update_intf_);
+ error = extension_intf_->CreatePartialUpdate(display_type_, hw_resource_info_,
+ hw_panel_info_, &partial_update_intf_);
}
return kErrorNone;
@@ -80,9 +75,11 @@
hw_layers_info_ = hw_layers_info;
extn_start_success_ = false;
tried_default_ = false;
+
uint32_t i = 0;
LayerStack *layer_stack = hw_layers_info_->stack;
uint32_t layer_count = UINT32(layer_stack->layers.size());
+
for (; i < layer_count; i++) {
if (layer_stack->layers.at(i)->composition == kCompositionGPUTarget) {
fb_layer_index_ = i;
@@ -170,34 +167,29 @@
return;
}
- float layer_mixer_width = mixer_attributes_.width;
- float layer_mixer_height = mixer_attributes_.height;
+ float disp_x_res = hw_display_attributes_.x_pixels;
+ float disp_y_res = hw_display_attributes_.y_pixels;
if (!hw_resource_info_.is_src_split &&
- ((layer_mixer_width > hw_resource_info_.max_mixer_width) ||
+ ((disp_x_res > hw_resource_info_.max_mixer_width) ||
((display_type_ == kPrimary) && hw_panel_info_.split_info.right_split))) {
split_display = true;
}
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};
+ float left_split = FLOAT(hw_panel_info_.split_info.left_split);
+ hw_layers_info_->left_partial_update = (LayerRect) {0.0f, 0.0f, left_split, disp_y_res};
+ hw_layers_info_->right_partial_update = (LayerRect) {left_split, 0.0f, disp_x_res, disp_y_res};
} else {
- hw_layers_info_->left_partial_update = (LayerRect) {0.0f, 0.0f, layer_mixer_width,
- layer_mixer_height};
+ hw_layers_info_->left_partial_update = (LayerRect) {0.0f, 0.0f, disp_x_res, disp_y_res};
hw_layers_info_->right_partial_update = (LayerRect) {0.0f, 0.0f, 0.0f, 0.0f};
}
}
DisplayError Strategy::Reconfigure(const HWPanelInfo &hw_panel_info,
- const HWDisplayAttributes &display_attributes,
- const HWMixerAttributes &mixer_attributes,
- const DisplayConfigVariableInfo &fb_config) {
+ const HWDisplayAttributes &hw_display_attributes) {
hw_panel_info_ = hw_panel_info;
- display_attributes_ = display_attributes;
- mixer_attributes_ = mixer_attributes;
+ hw_display_attributes_ = hw_display_attributes;
if (!extension_intf_) {
return kErrorNone;
@@ -210,12 +202,10 @@
partial_update_intf_ = NULL;
}
- extension_intf_->CreatePartialUpdate(display_type_, hw_resource_info_, hw_panel_info_,
- mixer_attributes_, display_attributes_,
- &partial_update_intf_);
+ extension_intf_->CreatePartialUpdate(display_type_, hw_resource_info_,
+ hw_panel_info_, &partial_update_intf_);
- return strategy_intf_->Reconfigure(hw_panel_info_.mode, hw_panel_info_.s3d_mode, mixer_attributes,
- fb_config);
+ return strategy_intf_->Reconfigure(hw_panel_info_.mode, hw_panel_info_.s3d_mode);
}
} // namespace sdm
diff --git a/msm8996/sdm/libs/core/strategy.h b/msm8996/sdm/libs/core/strategy.h
index b284d61..5f14d28 100644
--- a/msm8996/sdm/libs/core/strategy.h
+++ b/msm8996/sdm/libs/core/strategy.h
@@ -34,8 +34,7 @@
public:
Strategy(ExtensionInterface *extension_intf, DisplayType type,
const HWResourceInfo &hw_resource_info, const HWPanelInfo &hw_panel_info,
- const HWMixerAttributes &mixer_attributes, const HWDisplayAttributes &display_attributes,
- const DisplayConfigVariableInfo &fb_config);
+ const HWDisplayAttributes &hw_display_attributes);
DisplayError Init();
DisplayError Deinit();
@@ -45,9 +44,7 @@
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);
+ const HWDisplayAttributes &hw_display_attributes);
private:
void GenerateROI();
@@ -59,9 +56,7 @@
HWResourceInfo hw_resource_info_;
HWPanelInfo hw_panel_info_;
HWLayersInfo *hw_layers_info_ = NULL;
- HWMixerAttributes mixer_attributes_ = {};
- HWDisplayAttributes display_attributes_ = {};
- DisplayConfigVariableInfo fb_config_ = {};
+ HWDisplayAttributes hw_display_attributes_;
uint32_t fb_layer_index_ = 0;
bool extn_start_success_ = false;
bool tried_default_ = false;
diff --git a/msm8996/sdm/libs/hwc/hwc_color_manager.cpp b/msm8996/sdm/libs/hwc/hwc_color_manager.cpp
index 7c12ec0..27115b5 100644
--- a/msm8996/sdm/libs/hwc/hwc_color_manager.cpp
+++ b/msm8996/sdm/libs/hwc/hwc_color_manager.cpp
@@ -254,7 +254,7 @@
uint32_t primary_width = 0;
uint32_t primary_height = 0;
- hwc_display->GetMixerResolution(&primary_width, &primary_height);
+ hwc_display->GetPanelResolution(&primary_width, &primary_height);
uint8_t *buf = new uint8_t[size]();
// handle for solid fill layer with fd = -1.
private_handle_t *handle =
diff --git a/msm8996/sdm/libs/hwc/hwc_display.cpp b/msm8996/sdm/libs/hwc/hwc_display.cpp
index 97e6c02..f829f68 100644
--- a/msm8996/sdm/libs/hwc/hwc_display.cpp
+++ b/msm8996/sdm/libs/hwc/hwc_display.cpp
@@ -83,6 +83,13 @@
swap_interval_zero_ = true;
}
+ framebuffer_config_ = new DisplayConfigVariableInfo();
+ if (!framebuffer_config_) {
+ DLOGV("Failed to allocate memory for custom framebuffer config.");
+ core_intf_->DestroyDisplay(display_intf_);
+ return -EINVAL;
+ }
+
int blit_enabled = 0;
HWCDebugHandler::Get()->GetProperty("persist.hwc.blit.comp", &blit_enabled);
if (needs_blit_ && blit_enabled) {
@@ -119,6 +126,8 @@
return -EINVAL;
}
+ delete framebuffer_config_;
+
if (blit_engine_) {
blit_engine_->DeInit();
delete blit_engine_;
@@ -215,17 +224,11 @@
return 0;
}
-int HWCDisplay::GetDisplayAttributes(uint32_t config, const uint32_t *display_attributes,
- int32_t *values) {
- DisplayConfigVariableInfo variable_config;
- DisplayError error = display_intf_->GetFrameBufferConfig(&variable_config);
- if (error != kErrorNone) {
- DLOGV("Get variable config failed. Error = %d", error);
- return -EINVAL;
- }
+int HWCDisplay::GetDisplayAttributes(uint32_t config, const uint32_t *attributes, int32_t *values) {
+ DisplayConfigVariableInfo variable_config = *framebuffer_config_;
- for (int i = 0; display_attributes[i] != HWC_DISPLAY_NO_ATTRIBUTE; i++) {
- switch (display_attributes[i]) {
+ for (int i = 0; attributes[i] != HWC_DISPLAY_NO_ATTRIBUTE; i++) {
+ switch (attributes[i]) {
case HWC_DISPLAY_VSYNC_PERIOD:
values[i] = INT32(variable_config.vsync_period_ns);
break;
@@ -242,7 +245,7 @@
values[i] = INT32(variable_config.y_dpi * 1000.0f);
break;
default:
- DLOGW("Spurious attribute type = %d", display_attributes[i]);
+ DLOGW("Spurious attribute type = %d", attributes[i]);
return -EINVAL;
}
}
@@ -258,10 +261,6 @@
return -1;
}
-DisplayError HWCDisplay::SetMixerResolution(uint32_t width, uint32_t height) {
- return kErrorNotSupported;
-}
-
void HWCDisplay::SetFrameDumpConfig(uint32_t count, uint32_t bit_mask_layer_type) {
dump_frame_count_ = count;
dump_frame_index_ = 0;
@@ -451,6 +450,7 @@
}
hwc_rect_t scaled_display_frame = hwc_layer.displayFrame;
+ ScaleDisplayFrame(&scaled_display_frame);
ApplyScanAdjustment(&scaled_display_frame);
SetRect(scaled_display_frame, &layer->dst_rect);
@@ -792,6 +792,16 @@
return error;
}
+DisplayError HWCDisplay::ControlPartialUpdate(bool enable, uint32_t *pending) {
+ DisplayError error = kErrorNone;
+
+ if (display_intf_) {
+ error = display_intf_->ControlPartialUpdate(enable, pending);
+ }
+
+ return error;
+}
+
LayerBufferFormat HWCDisplay::GetSDMFormat(const int32_t &source, const int flags) {
LayerBufferFormat format = kFormatInvalid;
if (flags & private_handle_t::PRIV_FLAGS_UBWC_ALIGNED) {
@@ -1032,49 +1042,108 @@
}
int HWCDisplay::SetFrameBufferResolution(uint32_t x_pixels, uint32_t y_pixels) {
- DisplayConfigVariableInfo fb_config;
- DisplayError error = display_intf_->GetFrameBufferConfig(&fb_config);
- if (error != kErrorNone) {
- DLOGV("Get frame buffer config failed. Error = %d", error);
+ if (x_pixels <= 0 || y_pixels <= 0) {
+ DLOGV("Unsupported config: x_pixels=%d, y_pixels=%d", x_pixels, y_pixels);
return -EINVAL;
}
- fb_config.x_pixels = x_pixels;
- fb_config.y_pixels = y_pixels;
+ if (framebuffer_config_->x_pixels == x_pixels && framebuffer_config_->y_pixels == y_pixels) {
+ return 0;
+ }
- error = display_intf_->SetFrameBufferConfig(fb_config);
+ DisplayConfigVariableInfo active_config;
+ uint32_t active_config_index = 0;
+ display_intf_->GetActiveConfig(&active_config_index);
+ DisplayError error = display_intf_->GetConfig(active_config_index, &active_config);
if (error != kErrorNone) {
- DLOGV("Set frame buffer config failed. Error = %d", error);
+ DLOGV("GetConfig variable info failed. Error = %d", error);
return -EINVAL;
}
- DLOGI("New framebuffer resolution (%dx%d)", x_pixels, y_pixels);
+ if (active_config.x_pixels <= 0 || active_config.y_pixels <= 0) {
+ DLOGV("Invalid panel resolution (%dx%d)", active_config.x_pixels, active_config.y_pixels);
+ return -EINVAL;
+ }
+
+ // Create rects to represent the new source and destination crops
+ LayerRect crop = LayerRect(0, 0, FLOAT(x_pixels), FLOAT(y_pixels));
+ LayerRect dst = LayerRect(0, 0, FLOAT(active_config.x_pixels), FLOAT(active_config.y_pixels));
+ // Set rotate90 to false since this is taken care of during regular composition.
+ bool rotate90 = false;
+ error = display_intf_->IsScalingValid(crop, dst, rotate90);
+ if (error != kErrorNone) {
+ DLOGV("Unsupported resolution: (%dx%d)", x_pixels, y_pixels);
+ return -EINVAL;
+ }
+
+ framebuffer_config_->x_pixels = x_pixels;
+ framebuffer_config_->y_pixels = y_pixels;
+ framebuffer_config_->vsync_period_ns = active_config.vsync_period_ns;
+ framebuffer_config_->x_dpi = active_config.x_dpi;
+ framebuffer_config_->y_dpi = active_config.y_dpi;
+
+ DLOGI("New framebuffer resolution (%dx%d)", framebuffer_config_->x_pixels,
+ framebuffer_config_->y_pixels);
return 0;
}
void HWCDisplay::GetFrameBufferResolution(uint32_t *x_pixels, uint32_t *y_pixels) {
- DisplayConfigVariableInfo fb_config;
- display_intf_->GetFrameBufferConfig(&fb_config);
-
- *x_pixels = fb_config.x_pixels;
- *y_pixels = fb_config.y_pixels;
+ *x_pixels = framebuffer_config_->x_pixels;
+ *y_pixels = framebuffer_config_->y_pixels;
}
-DisplayError HWCDisplay::GetMixerResolution(uint32_t *x_pixels, uint32_t *y_pixels) {
- return display_intf_->GetMixerResolution(x_pixels, y_pixels);
+void HWCDisplay::ScaleDisplayFrame(hwc_rect_t *display_frame) {
+ if (!IsFrameBufferScaled()) {
+ return;
+ }
+
+ uint32_t active_config_index = 0;
+ display_intf_->GetActiveConfig(&active_config_index);
+ DisplayConfigVariableInfo active_config;
+ DisplayError error = display_intf_->GetConfig(active_config_index, &active_config);
+ if (error != kErrorNone) {
+ DLOGE("GetConfig variable info failed. Error = %d", error);
+ return;
+ }
+
+ float custom_x_pixels = FLOAT(framebuffer_config_->x_pixels);
+ float custom_y_pixels = FLOAT(framebuffer_config_->y_pixels);
+ float active_x_pixels = FLOAT(active_config.x_pixels);
+ float active_y_pixels = FLOAT(active_config.y_pixels);
+ float x_pixels_ratio = active_x_pixels / custom_x_pixels;
+ float y_pixels_ratio = active_y_pixels / custom_y_pixels;
+ float layer_width = FLOAT(display_frame->right - display_frame->left);
+ float layer_height = FLOAT(display_frame->bottom - display_frame->top);
+
+ display_frame->left = INT(x_pixels_ratio * FLOAT(display_frame->left));
+ display_frame->top = INT(y_pixels_ratio * FLOAT(display_frame->top));
+ display_frame->right = INT(FLOAT(display_frame->left) + layer_width * x_pixels_ratio);
+ display_frame->bottom = INT(FLOAT(display_frame->top) + layer_height * y_pixels_ratio);
}
+bool HWCDisplay::IsFrameBufferScaled() {
+ if (framebuffer_config_->x_pixels == 0 || framebuffer_config_->y_pixels == 0) {
+ return false;
+ }
+ uint32_t panel_x_pixels = 0;
+ uint32_t panel_y_pixels = 0;
+ GetPanelResolution(&panel_x_pixels, &panel_y_pixels);
+ return (framebuffer_config_->x_pixels != panel_x_pixels) ||
+ (framebuffer_config_->y_pixels != panel_y_pixels);
+}
void HWCDisplay::GetPanelResolution(uint32_t *x_pixels, uint32_t *y_pixels) {
- DisplayConfigVariableInfo display_config;
- uint32_t active_index = 0;
-
- display_intf_->GetActiveConfig(&active_index);
- display_intf_->GetConfig(active_index, &display_config);
-
- *x_pixels = display_config.x_pixels;
- *y_pixels = display_config.y_pixels;
+ DisplayConfigVariableInfo active_config;
+ uint32_t active_config_index = 0;
+ display_intf_->GetActiveConfig(&active_config_index);
+ DisplayError error = display_intf_->GetConfig(active_config_index, &active_config);
+ if (error != kErrorNone) {
+ DLOGE("GetConfig variable info failed. Error = %d", error);
+ return;
+ }
+ *x_pixels = active_config.x_pixels;
+ *y_pixels = active_config.y_pixels;
}
int HWCDisplay::SetDisplayStatus(uint32_t display_status) {
@@ -1296,9 +1365,8 @@
return display_intf_->GetNumVariableInfoConfigs(count) == kErrorNone ? 0 : -1;
}
-int HWCDisplay::GetDisplayAttributesForConfig(int config,
- DisplayConfigVariableInfo *display_attributes) {
- return display_intf_->GetConfig(UINT32(config), display_attributes) == kErrorNone ? 0 : -1;
+int HWCDisplay::GetDisplayAttributesForConfig(int config, DisplayConfigVariableInfo *attributes) {
+ return display_intf_->GetConfig(UINT32(config), attributes) == kErrorNone ? 0 : -1;
}
// TODO(user): HWC needs to know updating for dyn_fps, cpu hint features,
diff --git a/msm8996/sdm/libs/hwc/hwc_display.h b/msm8996/sdm/libs/hwc/hwc_display.h
index 1dfface..8bc7a91 100644
--- a/msm8996/sdm/libs/hwc/hwc_display.h
+++ b/msm8996/sdm/libs/hwc/hwc_display.h
@@ -59,28 +59,23 @@
// Framebuffer configurations
virtual int GetDisplayConfigs(uint32_t *configs, size_t *num_configs);
- virtual int GetDisplayAttributes(uint32_t config, const uint32_t *display_attributes,
- int32_t *values);
+ virtual int GetDisplayAttributes(uint32_t config, const uint32_t *attributes, int32_t *values);
virtual int GetActiveConfig();
virtual int SetActiveConfig(int index);
virtual void SetIdleTimeoutMs(uint32_t timeout_ms);
virtual void SetFrameDumpConfig(uint32_t count, uint32_t bit_mask_layer_type);
virtual DisplayError SetMaxMixerStages(uint32_t max_mixer_stages);
- virtual DisplayError ControlPartialUpdate(bool enable, uint32_t *pending) {
- return kErrorNotSupported;
- }
+ virtual DisplayError ControlPartialUpdate(bool enable, uint32_t *pending);
virtual uint32_t GetLastPowerMode();
virtual int SetFrameBufferResolution(uint32_t x_pixels, uint32_t y_pixels);
virtual void GetFrameBufferResolution(uint32_t *x_pixels, uint32_t *y_pixels);
+ virtual void GetPanelResolution(uint32_t *x_pixels, uint32_t *y_pixels);
virtual int SetDisplayStatus(uint32_t display_status);
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 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);
// Captures frame output in the buffer specified by output_buffer_info. The API is
// non-blocking and the client is expected to check operation status later on.
@@ -98,8 +93,7 @@
virtual int SetActiveDisplayConfig(int config);
virtual int GetActiveDisplayConfig(uint32_t *config);
virtual int GetDisplayConfigCount(uint32_t *count);
- virtual int GetDisplayAttributesForConfig(int config,
- DisplayConfigVariableInfo *display_attributes);
+ virtual int GetDisplayAttributesForConfig(int config, DisplayConfigVariableInfo *attributes);
int SetPanelBrightness(int level);
int GetPanelBrightness(int *level);
@@ -142,9 +136,6 @@
virtual uint32_t RoundToStandardFPS(float fps);
virtual uint32_t SanitizeRefreshRate(uint32_t req_refresh_rate);
virtual void PrepareDynamicRefreshRate(Layer *layer);
- virtual DisplayError DisablePartialUpdateOneFrame() {
- return kErrorNotSupported;
- }
inline void SetRect(const hwc_rect_t &source, LayerRect *target);
inline void SetRect(const hwc_frect_t &source, LayerRect *target);
inline void SetComposition(const int32_t &source, LayerComposition *target);
@@ -154,6 +145,7 @@
LayerBufferFormat GetSDMFormat(const int32_t &source, const int flags);
const char *GetHALPixelFormatString(int format);
const char *GetDisplayString();
+ void ScaleDisplayFrame(hwc_rect_t *display_frame);
void MarkLayersForGPUBypass(hwc_display_contents_1_t *content_list);
virtual void ApplyScanAdjustment(hwc_rect_t *display_frame);
DisplayError SetCSC(ColorSpace_t source, LayerCSC *target);
@@ -184,6 +176,7 @@
bool dump_input_layers_ = false;
uint32_t last_power_mode_;
bool swap_interval_zero_ = false;
+ DisplayConfigVariableInfo *framebuffer_config_ = NULL;
bool display_paused_ = false;
uint32_t min_refresh_rate_ = 0;
uint32_t max_refresh_rate_ = 0;
@@ -203,6 +196,7 @@
bool animating_ = false;
private:
+ bool IsFrameBufferScaled();
void DumpInputBuffers(hwc_display_contents_1_t *content_list);
int PrepareLayerParams(hwc_layer_1_t *hwc_layer, Layer *layer);
void CommitLayerParams(hwc_layer_1_t *hwc_layer, Layer *layer);
diff --git a/msm8996/sdm/libs/hwc/hwc_display_external.cpp b/msm8996/sdm/libs/hwc/hwc_display_external.cpp
index ad8690c..a647517 100644
--- a/msm8996/sdm/libs/hwc/hwc_display_external.cpp
+++ b/msm8996/sdm/libs/hwc/hwc_display_external.cpp
@@ -50,7 +50,6 @@
uint32_t external_width = 0;
uint32_t external_height = 0;
int drc_enabled = 0;
- DisplayError error = kErrorNone;
HWCDisplay *hwc_display_external = new HWCDisplayExternal(core_intf, hwc_procs, qservice);
int status = hwc_display_external->Init();
@@ -59,10 +58,7 @@
return status;
}
- error = hwc_display_external->GetMixerResolution(&external_width, &external_height);
- if (error != kErrorNone) {
- return -EINVAL;
- }
+ hwc_display_external->GetPanelResolution(&external_width, &external_height);
if (primary_width && primary_height) {
// use_primary_res means HWCDisplayExternal should directly set framebuffer resolution to the
@@ -184,28 +180,28 @@
return;
}
- uint32_t mixer_width = 0;
- uint32_t mixer_height = 0;
- GetMixerResolution(&mixer_width, &mixer_height);
+ uint32_t panel_width = 0;
+ uint32_t panel_height = 0;
+ GetPanelResolution(&panel_width, &panel_height);
- if (mixer_width == 0 || mixer_height == 0) {
- DLOGV("Invalid mixer dimensions (%d, %d)", mixer_width, mixer_height);
+ if (panel_width == 0 || panel_height == 0) {
+ DLOGV("Invalid panel dimensions (%d, %d)", panel_width, panel_height);
return;
}
- uint32_t new_mixer_width = UINT32(mixer_width * FLOAT(1.0f - width_ratio));
- uint32_t new_mixer_height = UINT32(mixer_height * FLOAT(1.0f - height_ratio));
+ uint32_t new_panel_width = UINT32(panel_width * FLOAT(1.0f - width_ratio));
+ uint32_t new_panel_height = UINT32(panel_height * FLOAT(1.0f - height_ratio));
- int x_offset = INT((FLOAT(mixer_width) * width_ratio) / 2.0f);
- int y_offset = INT((FLOAT(mixer_height) * height_ratio) / 2.0f);
+ int x_offset = INT((FLOAT(panel_width) * width_ratio) / 2.0f);
+ int y_offset = INT((FLOAT(panel_height) * height_ratio) / 2.0f);
- display_frame->left = (display_frame->left * INT32(new_mixer_width) / INT32(mixer_width))
+ display_frame->left = (display_frame->left * INT32(new_panel_width) / INT32(panel_width))
+ x_offset;
- display_frame->top = (display_frame->top * INT32(new_mixer_height) / INT32(mixer_height)) +
+ display_frame->top = (display_frame->top * INT32(new_panel_height) / INT32(panel_height)) +
y_offset;
- display_frame->right = ((display_frame->right * INT32(new_mixer_width)) / INT32(mixer_width)) +
+ display_frame->right = ((display_frame->right * INT32(new_panel_width)) / INT32(panel_width)) +
x_offset;
- display_frame->bottom = ((display_frame->bottom * INT32(new_mixer_height)) / INT32(mixer_height))
+ display_frame->bottom = ((display_frame->bottom * INT32(new_panel_height)) / INT32(panel_height))
+ y_offset;
}
diff --git a/msm8996/sdm/libs/hwc/hwc_display_null.cpp b/msm8996/sdm/libs/hwc/hwc_display_null.cpp
index 649f40c..11cf47a 100644
--- a/msm8996/sdm/libs/hwc/hwc_display_null.cpp
+++ b/msm8996/sdm/libs/hwc/hwc_display_null.cpp
@@ -97,12 +97,12 @@
#define NULL_DISPLAY_FPS 60
-int HWCDisplayNull::GetDisplayAttributes(uint32_t config, const uint32_t *display_attributes,
+int HWCDisplayNull::GetDisplayAttributes(uint32_t config, const uint32_t *attributes,
int32_t *values) {
- for (int i = 0; display_attributes[i] != HWC_DISPLAY_NO_ATTRIBUTE; i++) {
+ for (int i = 0; attributes[i] != HWC_DISPLAY_NO_ATTRIBUTE; i++) {
// We fake display resolution as 1080P by default, though it can be overriden through a call to
// SetResolution(), and DPI as 160, though what the DPI value does is not clear
- switch (display_attributes[i]) {
+ switch (attributes[i]) {
case HWC_DISPLAY_VSYNC_PERIOD:
values[i] = INT32(1000000000L / NULL_DISPLAY_FPS);
break;
diff --git a/msm8996/sdm/libs/hwc/hwc_display_null.h b/msm8996/sdm/libs/hwc/hwc_display_null.h
index 297e870..2f6438a 100644
--- a/msm8996/sdm/libs/hwc/hwc_display_null.h
+++ b/msm8996/sdm/libs/hwc/hwc_display_null.h
@@ -48,8 +48,7 @@
return HWCDisplay::GetDisplayConfigs(configs, num_configs);
}
- virtual int GetDisplayAttributes(uint32_t config, const uint32_t *display_attributes,
- int32_t *values);
+ virtual int GetDisplayAttributes(uint32_t config, const uint32_t *attributes, int32_t *values);
virtual int GetActiveConfig() { return 0; }
virtual int SetActiveConfig(int index) { return -1; }
@@ -80,8 +79,7 @@
virtual int SetActiveDisplayConfig(int config) { return 0; }
virtual int GetActiveDisplayConfig(uint32_t *config) { return -1; }
virtual int GetDisplayConfigCount(uint32_t *count) { return -1; }
- virtual int GetDisplayAttributesForConfig(int config,
- DisplayConfigVariableInfo *display_attributes) {
+ virtual int GetDisplayAttributesForConfig(int config, DisplayConfigVariableInfo *attributes) {
return -1;
}
virtual bool IsValidContentList(hwc_display_contents_1_t *content_list) {
diff --git a/msm8996/sdm/libs/hwc/hwc_display_primary.cpp b/msm8996/sdm/libs/hwc/hwc_display_primary.cpp
index f92ab43..32ff73b 100644
--- a/msm8996/sdm/libs/hwc/hwc_display_primary.cpp
+++ b/msm8996/sdm/libs/hwc/hwc_display_primary.cpp
@@ -56,7 +56,7 @@
return status;
}
- hwc_display_primary->GetMixerResolution(&primary_width, &primary_height);
+ hwc_display_primary->GetPanelResolution(&primary_width, &primary_height);
int width = 0, height = 0;
HWCDebugHandler::Get()->GetProperty("sdm.fb_size_width", &width);
HWCDebugHandler::Get()->GetProperty("sdm.fb_size_height", &height);
@@ -382,6 +382,9 @@
frame_capture_buffer_queued_ = false;
post_processed_output_ = false;
output_buffer_ = {};
+
+ uint32_t pending = 0; // Just a temporary to satisfy the API
+ ControlPartialUpdate(true /* enable */, &pending);
}
void HWCDisplayPrimary::HandleFrameDump() {
@@ -410,6 +413,9 @@
output_buffer_ = {};
output_buffer_info_ = {};
output_buffer_base_ = nullptr;
+
+ uint32_t pending = 0; // Just a temporary to satisfy the API
+ ControlPartialUpdate(true /* enable */, &pending);
}
}
@@ -448,7 +454,8 @@
output_buffer_base_ = buffer;
post_processed_output_ = true;
- DisablePartialUpdateOneFrame();
+ uint32_t pending = 0; // Just a temporary to satisfy the API
+ ControlPartialUpdate(false /* enable */, &pending);
}
int HWCDisplayPrimary::FrameCaptureAsync(const BufferInfo& output_buffer_info,
@@ -482,38 +489,12 @@
frame_capture_buffer_queued_ = true;
// Status is only cleared on a new call to dump and remains valid otherwise
frame_capture_status_ = -EAGAIN;
- DisablePartialUpdateOneFrame();
+
+ uint32_t pending = 0; // Just a temporary to satisfy the API
+ ControlPartialUpdate(false /* enable */, &pending);
return 0;
}
-DisplayError HWCDisplayPrimary::ControlPartialUpdate(bool enable, uint32_t *pending) {
- DisplayError error = kErrorNone;
-
- if (display_intf_) {
- error = display_intf_->ControlPartialUpdate(enable, pending);
- }
-
- return error;
-}
-
-DisplayError HWCDisplayPrimary::DisablePartialUpdateOneFrame() {
- DisplayError error = kErrorNone;
-
- if (display_intf_) {
- error = display_intf_->DisablePartialUpdateOneFrame();
- }
-
- return error;
-}
-
-DisplayError HWCDisplayPrimary::SetMixerResolution(uint32_t width, uint32_t height) {
- return display_intf_->SetMixerResolution(width, height);
-}
-
-DisplayError HWCDisplayPrimary::GetMixerResolution(uint32_t *width, uint32_t *height) {
- return display_intf_->GetMixerResolution(width, height);
-}
-
} // namespace sdm
diff --git a/msm8996/sdm/libs/hwc/hwc_display_primary.h b/msm8996/sdm/libs/hwc/hwc_display_primary.h
index 81e510f..8c02731 100644
--- a/msm8996/sdm/libs/hwc/hwc_display_primary.h
+++ b/msm8996/sdm/libs/hwc/hwc_display_primary.h
@@ -54,14 +54,12 @@
virtual void SetFrameDumpConfig(uint32_t count, uint32_t bit_mask_layer_type);
virtual int FrameCaptureAsync(const BufferInfo& output_buffer_info, bool post_processed);
virtual int GetFrameCaptureStatus() { return frame_capture_status_; }
- virtual DisplayError ControlPartialUpdate(bool enable, uint32_t *pending);
private:
HWCDisplayPrimary(CoreInterface *core_intf, BufferAllocator *buffer_allocator,
hwc_procs_t const **hwc_procs, qService::QService *qservice);
void SetMetaDataRefreshRateFlag(bool enable);
virtual DisplayError SetDisplayMode(uint32_t mode);
- virtual DisplayError DisablePartialUpdateOneFrame();
void ProcessBootAnimCompleted(hwc_display_contents_1_t *content_list);
void SetQDCMSolidFillInfo(bool enable, uint32_t color);
void ToggleCPUHint(bool set);
@@ -70,8 +68,6 @@
void HandleFrameOutput();
void HandleFrameCapture();
void HandleFrameDump();
- DisplayError SetMixerResolution(uint32_t width, uint32_t height);
- DisplayError GetMixerResolution(uint32_t *width, uint32_t *height);
BufferAllocator *buffer_allocator_ = nullptr;
CPUHint *cpu_hint_ = nullptr;
diff --git a/msm8996/sdm/libs/hwc/hwc_display_virtual.cpp b/msm8996/sdm/libs/hwc/hwc_display_virtual.cpp
index 1363839..ef7198c 100644
--- a/msm8996/sdm/libs/hwc/hwc_display_virtual.cpp
+++ b/msm8996/sdm/libs/hwc/hwc_display_virtual.cpp
@@ -67,7 +67,7 @@
return status;
}
- hwc_display_virtual->GetMixerResolution(&virtual_width, &virtual_height);
+ hwc_display_virtual->GetPanelResolution(&virtual_width, &virtual_height);
if (content_list->numHwLayers < 1) {
Destroy(hwc_display_virtual);
diff --git a/msm8996/sdm/libs/hwc/hwc_session.cpp b/msm8996/sdm/libs/hwc/hwc_session.cpp
index 8d12aee..63bde5c 100644
--- a/msm8996/sdm/libs/hwc/hwc_session.cpp
+++ b/msm8996/sdm/libs/hwc/hwc_session.cpp
@@ -555,10 +555,10 @@
}
int HWCSession::GetDisplayAttributes(hwc_composer_device_1 *device, int disp, uint32_t config,
- const uint32_t *display_attributes, int32_t *values) {
+ const uint32_t *attributes, int32_t *values) {
SCOPE_LOCK(locker_);
- if (!device || !display_attributes || !values) {
+ if (!device || !attributes || !values) {
return -EINVAL;
}
@@ -569,8 +569,7 @@
HWCSession *hwc_session = static_cast<HWCSession *>(device);
int status = -EINVAL;
if (hwc_session->hwc_display_[disp]) {
- status = hwc_session->hwc_display_[disp]->GetDisplayAttributes(config, display_attributes,
- values);
+ status = hwc_session->hwc_display_[disp]->GetDisplayAttributes(config, attributes, values);
}
return status;
@@ -776,10 +775,6 @@
status = GetBWTransactionStatus(input_parcel, output_parcel);
break;
- case qService::IQService::SET_LAYER_MIXER_RESOLUTION:
- status = SetMixerResolution(input_parcel);
- break;
-
default:
DLOGW("QService command = %d is not supported", command);
return -EINVAL;
@@ -952,22 +947,22 @@
int config = input_parcel->readInt32();
int dpy = input_parcel->readInt32();
int error = android::BAD_VALUE;
- DisplayConfigVariableInfo display_attributes;
+ DisplayConfigVariableInfo attributes;
if (dpy > HWC_DISPLAY_VIRTUAL) {
return android::BAD_VALUE;
}
if (hwc_display_[dpy]) {
- error = hwc_display_[dpy]->GetDisplayAttributesForConfig(config, &display_attributes);
+ error = hwc_display_[dpy]->GetDisplayAttributesForConfig(config, &attributes);
if (error == 0) {
- output_parcel->writeInt32(INT(display_attributes.vsync_period_ns));
- output_parcel->writeInt32(INT(display_attributes.x_pixels));
- output_parcel->writeInt32(INT(display_attributes.y_pixels));
- output_parcel->writeFloat(display_attributes.x_dpi);
- output_parcel->writeFloat(display_attributes.y_dpi);
+ output_parcel->writeInt32(INT(attributes.vsync_period_ns));
+ output_parcel->writeInt32(INT(attributes.x_pixels));
+ output_parcel->writeInt32(INT(attributes.y_pixels));
+ output_parcel->writeFloat(attributes.x_dpi);
+ output_parcel->writeFloat(attributes.y_dpi);
output_parcel->writeInt32(0); // Panel type, unsupported.
- output_parcel->writeInt32(display_attributes.is_yuv);
+ output_parcel->writeInt32(attributes.is_yuv);
}
}
@@ -1121,31 +1116,6 @@
}
}
-android::status_t HWCSession::SetMixerResolution(const android::Parcel *input_parcel) {
- DisplayError error = kErrorNone;
- uint32_t dpy = UINT32(input_parcel->readInt32());
-
- if (dpy != HWC_DISPLAY_PRIMARY) {
- DLOGI("Resoulution change not supported for this display %d", dpy);
- return -EINVAL;
- }
-
- if (!hwc_display_[HWC_DISPLAY_PRIMARY]) {
- DLOGI("Primary display is not initialized");
- return -EINVAL;
- }
-
- uint32_t width = UINT32(input_parcel->readInt32());
- uint32_t height = UINT32(input_parcel->readInt32());
-
- error = hwc_display_[HWC_DISPLAY_PRIMARY]->SetMixerResolution(width, height);
- if (error != kErrorNone) {
- return -EINVAL;
- }
-
- return 0;
-}
-
void HWCSession::DynamicDebug(const android::Parcel *input_parcel) {
int type = input_parcel->readInt32();
bool enable = (input_parcel->readInt32() > 0);
diff --git a/msm8996/sdm/libs/hwc/hwc_session.h b/msm8996/sdm/libs/hwc/hwc_session.h
index 2bdae2b..efcafcf 100644
--- a/msm8996/sdm/libs/hwc/hwc_session.h
+++ b/msm8996/sdm/libs/hwc/hwc_session.h
@@ -68,7 +68,7 @@
static int GetDisplayConfigs(hwc_composer_device_1 *device, int disp, uint32_t *configs,
size_t *numConfigs);
static int GetDisplayAttributes(hwc_composer_device_1 *device, int disp, uint32_t config,
- const uint32_t *display_attributes, int32_t *values);
+ const uint32_t *attributes, int32_t *values);
static int GetActiveConfig(hwc_composer_device_1 *device, int disp);
static int SetActiveConfig(hwc_composer_device_1 *device, int disp, int index);
static int SetCursorPositionAsync(hwc_composer_device_1 *device, int disp, int x, int y);
@@ -123,8 +123,6 @@
android::Parcel *output_parcel);
android::status_t GetBWTransactionStatus(const android::Parcel *input_parcel,
android::Parcel *output_parcel);
- android::status_t SetMixerResolution(const android::Parcel *input_parcel);
-
static Locker locker_;
CoreInterface *core_intf_ = NULL;
hwc_procs_t hwc_procs_default_;
diff --git a/msm8996/sdm/libs/utils/rect.cpp b/msm8996/sdm/libs/utils/rect.cpp
index 1872df2..e756464 100644
--- a/msm8996/sdm/libs/utils/rect.cpp
+++ b/msm8996/sdm/libs/utils/rect.cpp
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2015-2016, The Linux Foundation. All rights reserved.
+* Copyright (c) 2015, 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
@@ -198,40 +198,5 @@
}
}
-void ScaleRect(const LayerRect &src_domain, const LayerRect &dst_domain, const LayerRect &in_rect,
- LayerRect *out_rect) {
- if (!IsValid(src_domain) || !IsValid(dst_domain) || !IsValid(in_rect)) {
- return;
- }
-
- 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;
- float dst_domain_height = dst_domain.bottom - dst_domain.top;
-
- float width_ratio = dst_domain_width / src_domain_width;
- float height_ratio = dst_domain_height / src_domain_height;
-
- out_rect->left = width_ratio * in_rect.left;
- out_rect->top = height_ratio * in_rect.top;
- out_rect->right = width_ratio * in_rect.right;
- out_rect->bottom = height_ratio * in_rect.bottom;
-}
-
-RectOrientation GetOrientation(const LayerRect &in_rect) {
- if (!IsValid(in_rect)) {
- return kOrientationUnknown;
- }
-
- float input_width = in_rect.right - in_rect.left;
- float input_height = in_rect.bottom - in_rect.top;
-
- if (input_width < input_height) {
- return kOrientationPortrait;
- }
-
- return kOrientationLandscape;
-}
-
} // namespace sdm