zoukankan      html  css  js  c++  java
  • RK3399 Android7.1 异形屏修改

    属性说明:
    persist.sys.framebuffer.xoffset //用来调整水平方向偏移
    persist.sys.framebuffer.yoffset //用来调整垂直方向偏移
    persist.sys.framebuffer.main //用来设置上层应用的渲染布局,这个属性值与裁剪屏尺寸相关,例如可显示区域为 1920x400,那么就设置为 1920x400@60 即可。
    sys.hwc.compose_policy=0 //裁剪屏建议关闭HWC,否则在一些场景显示会出现偏差出现抖屏的情况,修改方法可将build.prop文件中的该字段修改为 0,默认值为 6

    HWC_DISPLAY_PRIMARY = 0,
    HWC_DISPLAY_EXTERNAL = 1, // HDMI, EDP

    hardware ockchiphwcomposerhwcomposer.cpp 

    static int hwc_get_display_configs(struct hwc_composer_device_1 *dev,
                                       int display, uint32_t *configs,
                                       size_t *num_configs) {
      if (!num_configs)
        return 0;
    
      struct hwc_context_t *ctx = (struct hwc_context_t *)&dev->common;
      DrmConnector *connector = ctx->drm.GetConnectorFromType(display);
      if (!connector) {
        ALOGE("%s:Failed to get connector for display %d line=%d", __FUNCTION__,display,__LINE__);
        return -ENODEV;
      }
    
      hwc_drm_display_t *hd = &ctx->displays[connector->display()];
      if (!hd->active)
        return -ENODEV;
    
      int ret = connector->UpdateModes();
      if (ret) {
        ALOGE("Failed to update display modes %d", ret);
        return ret;
      }
    
      if (connector->state() != DRM_MODE_CONNECTED && display == HWC_DISPLAY_EXTERNAL) {
        ALOGE("connector is not connected with display %d", display);
        return -ENODEV;
      }
    
      update_display_bestmode(hd, display, connector);
      DrmMode mode = connector->best_mode();
      connector->set_current_mode(mode);
    
      char framebuffer_size[PROPERTY_VALUE_MAX];
      uint32_t width = 0, height = 0 , vrefresh = 0 ;
      if (display == HWC_DISPLAY_PRIMARY)
        property_get("persist." PROPERTY_TYPE ".framebuffer.main", framebuffer_size, "use_baseparameter");
      else if(display == HWC_DISPLAY_EXTERNAL)
        property_get("persist." PROPERTY_TYPE ".framebuffer.aux", framebuffer_size, "use_baseparameter");
    

    android7.1_异形屏修改

    0.dts中配置1920x1080的分辨率
    1.build.prop添加下面属性:
    persist.sys.framebuffer.main=1920x600@60  
    2.hardware/rockchip/hwcomposer合入下面修改:
    diff --git a/hwcomposer.cpp b/hwcomposer.cpp
    index 0fd2177..3ad13a9 100755
    --- a/hwcomposer.cpp
    +++ b/hwcomposer.cpp
    @@ -3498,8 +3498,10 @@ static int hwc_get_display_configs(struct hwc_composer_device_1 *dev,
    
       char framebuffer_size[PROPERTY_VALUE_MAX];
       uint32_t width = 0, height = 0 , vrefresh = 0 ;
    +  if (display == HWC_DISPLAY_PRIMARY)
       property_get("persist.sys.framebuffer.main", framebuffer_size, "use_baseparameter");
    -
    +  else if(display == HWC_DISPLAY_EXTERNAL)
    +  property_get("persist.sys.framebuffer.aux", framebuffer_size, "use_baseparameter");
       /*
        * if unset framebuffer_size, get it from baseparameter , by libin
        */
    
    @@ -2298,7 +2301,8 @@ static int hwc_prepare(hwc_composer_device_1_t *dev, size_t num_displays,
         hd->rel_yres = mode.v_display();
         hd->v_total = mode.v_total();
         hd->w_scale = (float)mode.h_display() / hd->framebuffer_width;
    -    hd->h_scale = (float)mode.v_display() / hd->framebuffer_height;
    +    //hd->h_scale = (float)mode.v_display() / hd->framebuffer_height;
    +    hd->h_scale = 1.0;
         int fbSize = hd->framebuffer_width * hd->framebuffer_height;
         //get plane size for display
         std::vector<PlaneGroup *>& plane_groups = ctx->drm.GetPlaneGroups();
    @@ -3638,7 +3647,8 @@ static int hwc_set_active_config(struct hwc_composer_device_1 *dev, int display,
         return -ENOENT;
       }
       hd->w_scale = (float)mode.h_display() / hd->framebuffer_width;
    -  hd->h_scale = (float)mode.v_display() / hd->framebuffer_height;
    +  //hd->h_scale = (float)mode.v_display() / hd->framebuffer_height;
    +  hd->h_scale = 1.0;
    
       c->set_current_mode(mode);
       ctx->drm.UpdateDisplayRoute();
    

      

      

  • 相关阅读:
    人月神话 画蛇添足
    人月神话 贵族专制和民主政治
    人月神话 外科手术队伍
    人月神话 焦油坑
    体温填报(五)
    体温填报(四)
    qwb与学姐
    qwb VS 去污棒
    1045 快速排序(25 分)
    LibreOJ #107. 维护全序集
  • 原文地址:https://www.cnblogs.com/crushgirl/p/15213949.html
Copyright © 2011-2022 走看看