Merge "sdm: Fix dumpsys alignment"
diff --git a/common.mk b/common.mk
index 6476dfd..c18046d 100644
--- a/common.mk
+++ b/common.mk
@@ -5,7 +5,7 @@
 common_flags := -DDEBUG_CALC_FPS -Wno-missing-field-initializers
 common_flags += -Wconversion -Wall -Werror -std=c++11
 
-ifeq ($(call is-board-platform-in-list, msmcobalt msm8998), true)
+ifeq ($(TARGET_USES_COLOR_METADATA), true)
 common_flags += -DUSE_COLOR_METADATA
 endif
 
diff --git a/include/color_metadata.h b/include/color_metadata.h
index 328cb0e..aff6fc9 100644
--- a/include/color_metadata.h
+++ b/include/color_metadata.h
@@ -51,6 +51,7 @@
   ColorPrimaries_SMPTE_ST428 = 10,  // SMPTE_240M
   ColorPrimaries_AdobeRGB    = 11,
   ColorPrimaries_DCIP3       = 12,
+  ColorPrimaries_EBU3213     = 22,
   ColorPrimaries_Max         = 0xff,
 } ColorPrimaries;
 
@@ -63,12 +64,17 @@
   Transfer_SMPTE_170M      = 6,  // BT.601-6 525 or 625
   Transfer_SMPTE_240M      = 7,  // SMPTE_240M
   Transfer_Linear          = 8,
-  Transfer_HLG             = 9,
+  Transfer_Log             = 9,
+  Transfer_Log_Sqrt        = 10,
   Transfer_XvYCC           = 11,  // IEC 61966-2-4
   Transfer_BT1361          = 12,  // Rec.ITU-R BT.1361 extended gamut
+  Transfer_sYCC            = 13,  // IEC 61966-2-1 sRGB or sYCC
+  Transfer_BT2020_2_1      = 14,  // Rec. ITU-R BT.2020-2 (same as the values 1, 6, and 15)
+  Transfer_BT2020_2_2      = 15,  // Rec. ITU-R BT.2020-2 (same as the values 1, 6, and 14)
   Transfer_SMPTE_ST2084    = 16,  // 2084
   // transfers unlikely to be required by Android
   Transfer_ST_428          = 17,  // SMPTE ST 428-1
+  Transfer_HLG             = 18,  // ARIB STD-B67
   Transfer_Max             = 0xff,
 } GammaTransfer;
 
@@ -76,13 +82,16 @@
   MatrixCoEff_Identity           = 0,
   MatrixCoEff_BT709_5            = 1,
   /* Unspecified = 2, Reserved = 3 */
+  MatrixCoeff_FCC_73_682         = 4,
   MatrixCoEff_BT601_6_625        = 5,
   MatrixCoEff_BT601_6_525        = 6,
   MatrixCoEff_SMPTE240M          = 7,  // used with 601_525_Unadjusted
+  MatrixCoEff_YCgCo              = 8,
   MatrixCoEff_BT2020             = 9,
   MatrixCoEff_BT2020Constant     = 10,
   MatrixCoEff_BT601_6_Unadjusted = 11,  // Used with BT601_625(KR=0.222, KB=0.071)
   MatrixCoEff_DCIP3              = 12,
+  MatrixCoEff_Chroma_NonConstant = 13,
   MatrixCoEff_Max                = 0xff,
 } MatrixCoEfficients;
 
diff --git a/libqdutils/display_config.cpp b/libqdutils/display_config.cpp
index 4880cdc..83d912e 100644
--- a/libqdutils/display_config.cpp
+++ b/libqdutils/display_config.cpp
@@ -198,12 +198,12 @@
     return numConfigs;
 }
 
-int getActiveConfig(int /*dpy*/) {
+int getActiveConfig(int dpy) {
     int configIndex = -1;
     sp<IQService> binder = getBinder();
     if(binder != NULL) {
         Parcel inParcel, outParcel;
-        inParcel.writeInt32(DISPLAY_PRIMARY);
+        inParcel.writeInt32(dpy);
         status_t err = binder->dispatch(IQService::GET_ACTIVE_CONFIG,
                 &inParcel, &outParcel);
         if(!err) {
@@ -236,13 +236,13 @@
     return err;
 }
 
-DisplayAttributes getDisplayAttributes(int configIndex, int /*dpy*/) {
+DisplayAttributes getDisplayAttributes(int configIndex, int dpy) {
     DisplayAttributes dpyattr = {};
     sp<IQService> binder = getBinder();
     if(binder != NULL) {
         Parcel inParcel, outParcel;
         inParcel.writeInt32(configIndex);
-        inParcel.writeInt32(DISPLAY_PRIMARY);
+        inParcel.writeInt32(dpy);
         status_t err = binder->dispatch(
                 IQService::GET_DISPLAY_ATTRIBUTES_FOR_CONFIG, &inParcel,
                 &outParcel);
diff --git a/libqservice/IQService.cpp b/libqservice/IQService.cpp
index e1c5219..2d0cbfb 100644
--- a/libqservice/IQService.cpp
+++ b/libqservice/IQService.cpp
@@ -93,7 +93,8 @@
             callerUid == AID_ROOT ||
             callerUid == AID_CAMERASERVER ||
             callerUid == AID_AUDIO ||
-            callerUid == AID_SYSTEM);
+            callerUid == AID_SYSTEM ||
+            callerUid == AID_MEDIA_CODEC);
 
     if (code == CONNECT_HWC_CLIENT) {
         CHECK_INTERFACE(IQService, data, reply);
diff --git a/sdm/include/private/hw_info_types.h b/sdm/include/private/hw_info_types.h
index 3f5aa2b..cd57f32 100644
--- a/sdm/include/private/hw_info_types.h
+++ b/sdm/include/private/hw_info_types.h
@@ -129,6 +129,7 @@
   bool has_downscale = false;
   std::string device_path = "";
   float min_downscale = 2.0f;
+  bool downscale_compression = false;
 
   void Reset() { *this = HWRotatorInfo(); }
 };
diff --git a/sdm/libs/core/fb/hw_info.cpp b/sdm/libs/core/fb/hw_info.cpp
index 9f9cae4..08a7188 100644
--- a/sdm/libs/core/fb/hw_info.cpp
+++ b/sdm/libs/core/fb/hw_info.cpp
@@ -423,7 +423,9 @@
          string caps;
          while (Sys::getline_(caps_fs, caps)) {
            if (!ParseString(caps.c_str(), tokens, max_count, ":, =\n", &token_count)) {
-             if (!strncmp(tokens[0], "min_downscale", strlen("min_downscale"))) {
+             if (!strncmp(tokens[0], "downscale_compression", strlen("downscale_compression"))) {
+               hw_resource->hw_rot_info.downscale_compression = UINT8(atoi(tokens[1]));
+             } else if (!strncmp(tokens[0], "min_downscale", strlen("min_downscale"))) {
                hw_resource->hw_rot_info.min_downscale = FLOAT(atof(tokens[1]));
              }
            }
@@ -435,9 +437,9 @@
     }
   }
 
-  DLOGI("V4L2 Rotator: Count = %d, Downscale = %d, Min_downscale = %f",
+  DLOGI("V4L2 Rotator: Count = %d, Downscale = %d, Min_downscale = %f, Downscale_compression = %d",
         hw_resource->hw_rot_info.num_rotator, hw_resource->hw_rot_info.has_downscale,
-        hw_resource->hw_rot_info.min_downscale);
+        hw_resource->hw_rot_info.min_downscale, hw_resource->hw_rot_info.downscale_compression);
 
   return kErrorNone;
 }
diff --git a/sdm/libs/core/fb/hw_primary.cpp b/sdm/libs/core/fb/hw_primary.cpp
index 2193920..a381d7f 100644
--- a/sdm/libs/core/fb/hw_primary.cpp
+++ b/sdm/libs/core/fb/hw_primary.cpp
@@ -105,6 +105,8 @@
   EnableHotPlugDetection(1);
   InitializeConfigs();
 
+  avr_prop_disabled_ = Debug::IsAVRDisabled();
+
   return error;
 }
 
@@ -296,6 +298,10 @@
 DisplayError HWPrimary::SetRefreshRate(uint32_t refresh_rate) {
   char node_path[kMaxStringLength] = {0};
 
+  if (hw_resource_.has_avr && !avr_prop_disabled_) {
+    return kErrorNotSupported;
+  }
+
   if (refresh_rate == display_attributes_.fps) {
     return kErrorNone;
   }
@@ -398,8 +404,8 @@
   if (stack->output_buffer && hw_resource_.has_concurrent_writeback) {
     LayerBuffer *output_buffer = stack->output_buffer;
     mdp_out_layer_.writeback_ndx = hw_resource_.writeback_index;
-    mdp_out_layer_.buffer.width = output_buffer->width;
-    mdp_out_layer_.buffer.height = output_buffer->height;
+    mdp_out_layer_.buffer.width = output_buffer->unaligned_width;
+    mdp_out_layer_.buffer.height = output_buffer->unaligned_height;
     mdp_out_layer_.buffer.comp_ratio.denom = 1000;
     mdp_out_layer_.buffer.comp_ratio.numer = UINT32(hw_layers->output_compression * 1000);
     mdp_out_layer_.buffer.fence = -1;
diff --git a/sdm/libs/core/fb/hw_primary.h b/sdm/libs/core/fb/hw_primary.h
index ae45318..bd6ea2f 100644
--- a/sdm/libs/core/fb/hw_primary.h
+++ b/sdm/libs/core/fb/hw_primary.h
@@ -85,6 +85,7 @@
   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;
+  bool avr_prop_disabled_ = false;
 };
 
 }  // namespace sdm
diff --git a/sdm/libs/core/fb/hw_scale.cpp b/sdm/libs/core/fb/hw_scale.cpp
index 4933412..0997d1a 100644
--- a/sdm/libs/core/fb/hw_scale.cpp
+++ b/sdm/libs/core/fb/hw_scale.cpp
@@ -133,7 +133,7 @@
     mdp_layer->flags |= MDP_LAYER_ENABLE_QSEED3_SCALE;
     mdp_scale = &scale_data_v2_.at(index);
   } else {
-    mdp_scale_data_v2 mdp_dest_scale;
+    mdp_scale_data_v2 mdp_dest_scale = {0};
 
     dest_scale_data_v2_.insert(std::make_pair(index, mdp_dest_scale));
     mdp_scale = &dest_scale_data_v2_[index];
diff --git a/sdm/libs/hwc/hwc_color_manager.cpp b/sdm/libs/hwc/hwc_color_manager.cpp
index 7bf49ff..bfa827e 100644
--- a/sdm/libs/hwc/hwc_color_manager.cpp
+++ b/sdm/libs/hwc/hwc_color_manager.cpp
@@ -385,7 +385,7 @@
         return -EFAULT;
       } else {
         frame_capture_data->buffer = reinterpret_cast<uint8_t *>(buffer);
-        frame_capture_data->buffer_stride = buffer_info.buffer_config.width;
+        frame_capture_data->buffer_stride = buffer_info.alloc_buffer_info.aligned_width;
         frame_capture_data->buffer_size = buffer_info.alloc_buffer_info.size;
       }
       ret = hwc_display->FrameCaptureAsync(buffer_info, 1);
diff --git a/sdm/libs/hwc/hwc_display.cpp b/sdm/libs/hwc/hwc_display.cpp
index 305ed66..233698c 100644
--- a/sdm/libs/hwc/hwc_display.cpp
+++ b/sdm/libs/hwc/hwc_display.cpp
@@ -1034,7 +1034,8 @@
     }
 
     snprintf(dump_file_name, sizeof(dump_file_name), "%s/output_layer_%dx%d_%s_frame%d.raw",
-             dir_path, buffer_info.buffer_config.width, buffer_info.buffer_config.height,
+             dir_path, buffer_info.alloc_buffer_info.aligned_width,
+             buffer_info.alloc_buffer_info.aligned_height,
              GetFormatString(buffer_info.buffer_config.format), dump_frame_index_);
 
     FILE* fp = fopen(dump_file_name, "w+");