Firefly开源社区

打印 上一主题 下一主题

4k 是假的吗?

79

积分

0

威望

0

贡献

技术小白

积分
79

4k 是假的吗?

发表于 2014-11-19 13:00:12      浏览:32478 | 回复:26        打印     [复制链接] 楼主
    测试发现,即使android 选择4k 输出, android 系统运行状态还是1080p, 所谓的4k是不是把 1080p 的framebuffer scale输出到 4k 显示器(新下载的11月版本)?
   请问如何修改 kernel 分辨率,让 android 运行在 4k分辨率下?
回复

使用道具 举报

79

积分

0

威望

0

贡献

技术小白

积分
79
发表于 2014-11-20 10:03:50      沙发
把 kernel/arch/arm/boot/dts/lcd-box.dtsi  修改为 改成 native-mode = <&timing2>; 编译出 resource.img, 更新后不是4k, 变成1280x720,4k 失败自动回到720p ?
回复

使用道具 举报

79

积分

0

威望

0

贡献

技术小白

积分
79
发表于 2014-11-21 10:32:07      板凳
烧写4k resource.img 后显示 /sys/class/graphics/fb0/disp_info
  1. z-order:
  2.   layer3_sel_win[3]
  3.   layer2_sel_win[2]
  4.   layer1_sel_win[1]
  5.   layer0_sel_win[0]
  6. win0:
  7.   state:0,   fmt:ARGB888,   y_vir:320,   uv_vir:320
  8.   xact: 320,   yact: 240,   dsp_x: 320,   dsp_y: 240,   x_st:   0,   y_st:   0
  9.   y_h_fac:    4096,   y_v_fac:    4096,   uv_h_fac:    4096,   uv_v_fac:    4096
  10.   y_addr: 0x00000000,   uv_addr:0x00000000
  11. win1:
  12.   state:1,   fmt:ARGB888,   y_vir:3840,   uv_vir:0
  13.   xact:1280,   yact: 720,   dsp_x:3840,   dsp_y:2160,   x_st:   0,   y_st:   0
  14.   y_h_fac:   21825,   y_v_fac:   21809,   uv_h_fac:    4096,   uv_v_fac:    4096
  15.   y_addr: 0x10000000,   uv_addr:0x00000000
  16. win2:
  17.   state:0
  18.   fmt:ARGB888
  19.   area0:  state:0,  y_vir: 320,  dsp_x: 320,  dsp_y: 240,  x_st:   0,  y_st:   0,  addr:0x00000000
  20.   area1:  state:0,  y_vir: 320,  dsp_x: 320,  dsp_y: 240,  x_st:   0,  y_st:   0,  addr:0x00000000
  21.   area2:  state:0,  y_vir: 320,  dsp_x: 320,  dsp_y: 240,  x_st:   0,  y_st:   0,  addr:0x00000000
  22.   area3:  state:0,  y_vir: 320,  dsp_x: 320,  dsp_y: 240,  x_st:   0,  y_st:   0,  addr:0x00000000
  23. win3:
  24.   state:0
  25.   fmt:ARGB888
  26.   area0:  state:0,  y_vir: 320,  dsp_x: 320,  dsp_y: 240,  x_st:   0,  y_st:   0,  addr:0x00000000
  27.   area1:  state:0,  y_vir: 320,  dsp_x: 320,  dsp_y: 240,  x_st:   0,  y_st:   0   addr:0x00000000
  28.   area2:  state:0,  y_vir: 320,  dsp_x: 320,  dsp_y: 240,  x_st:   0,  y_st:   0,  addr:0x00000000
  29.   area3:  state:0,  y_vir: 320,  dsp_x: 320,  dsp_y: 240,  x_st:   0,  y_st:   0,  addr:0x00000000
复制代码


马上 reboot 后变成
  1. z-order:
  2.   layer3_sel_win[3]
  3.   layer2_sel_win[2]
  4.   layer1_sel_win[1]
  5.   layer0_sel_win[0]
  6. win0:
  7.   state:0,   fmt:ARGB888,   y_vir:320,   uv_vir:320
  8.   xact: 320,   yact: 240,   dsp_x: 320,   dsp_y: 240,   x_st:   0,   y_st:   0
  9.   y_h_fac:    4096,   y_v_fac:    4096,   uv_h_fac:    4096,   uv_v_fac:    4096
  10.   y_addr: 0x00000000,   uv_addr:0x00000000
  11. win1:
  12.   state:1,   fmt:ARGB888,   y_vir:3840,   uv_vir:0
  13.   xact:1920,   yact:1080,   dsp_x:3840,   dsp_y:2160,   x_st:   0,   y_st:   0
  14.   y_h_fac:   32750,   y_v_fac:   32737,   uv_h_fac:    4096,   uv_v_fac:    4096
  15.   y_addr: 0x13f48000,   uv_addr:0x00000000
  16. win2:
  17.   state:0
  18.   fmt:ARGB888
  19.   area0:  state:0,  y_vir: 320,  dsp_x: 320,  dsp_y: 240,  x_st:   0,  y_st:   0,  addr:0x00000000
  20.   area1:  state:0,  y_vir: 320,  dsp_x: 320,  dsp_y: 240,  x_st:   0,  y_st:   0,  addr:0x00000000
  21.   area2:  state:0,  y_vir: 320,  dsp_x: 320,  dsp_y: 240,  x_st:   0,  y_st:   0,  addr:0x00000000
  22.   area3:  state:0,  y_vir: 320,  dsp_x: 320,  dsp_y: 240,  x_st:   0,  y_st:   0,  addr:0x00000000
  23. win3:
  24.   state:0
  25.   fmt:ARGB888
  26.   area0:  state:0,  y_vir: 320,  dsp_x: 320,  dsp_y: 240,  x_st:   0,  y_st:   0,  addr:0x00000000
  27.   area1:  state:0,  y_vir: 320,  dsp_x: 320,  dsp_y: 240,  x_st:   0,  y_st:   0   addr:0x00000000
  28.   area2:  state:0,  y_vir: 320,  dsp_x: 320,  dsp_y: 240,  x_st:   0,  y_st:   0,  addr:0x00000000
  29.   area3:  state:0,  y_vir: 320,  dsp_x: 320,  dsp_y: 240,  x_st:   0,  y_st:   0,  addr:0x00000000
复制代码

重启过程可以看到 屏幕中央的 android 图标 明显变小很多, 似乎4k 有效了, 但是进入android 后,第一次是720p 分辨率, 之后重启都是1080p,貌似android 系统拒绝了4k模式?
回复

使用道具 举报

79

积分

0

威望

0

贡献

技术小白

积分
79
发表于 2014-11-21 11:23:59      地板
android 本身限制应该没有,2013 年开始 android 就支持高分辨率了。现在一些平板手机超过1080p.
贴上log
  1. [root@victor ApiDemos]# adb logcat|egrep '(384|192|128)0'
  2. D/Displaymanager(  138): [display_list_add] display 0 iface HDMI connect 1 enable 1 mode 3840x2160p-30
  3. D/Displaymanager(  138): [display_list_add] display 0 iface VGA connect 1 enable 0 mode 1920x1080p-60
  4. D/Displaymanager(  138): read cfg: display=0,iface=4,enable=1,mode=3840x2160p-25
  5. D/Displaymanager(  138): [readConfig] display 0 iface 4 connect 1 enable 1 mode 3840x2160p-25
  6. D/Displaymanager(  138): read cfg: display=0,iface=3,enable=0,mode=1920x1080p-60
  7. D/Displaymanager(  138): [readConfig] display 0 iface 3 connect 1 enable 0 mode 1920x1080p-60
  8. D/Displaymanager(  138): [operateIfaceMode] property 0 iface 4 type 1 mode 3840x2160p-25
  9. I/[Gralloc](  142): xres         = 3840 px
  10. I/[Gralloc](  142): xres_virtual = 3840 px
  11. D/hwcomposer(  142): set default fake ui size 1280x720
  12. D/hwcomposer(  142): hwc_getDisplayAttributes disp = 0, width = 3840
  13. D/BootAnimation(  447): DISPLAY,W-H: 3840-2160, ori: 0
  14. D/CameraHal(  145): ParserDVConfig(667):  DV_720P(720p) resolution(1280x720) fps(10) support(0)
  15. D/CameraHal(  145): ParserDVConfig(679):  DV_1080P(1080p) resolution(1920x1080) fps(10) support(0)
  16. D/CameraHal(  145): ParserDVConfig(667):  DV_720P(720p) resolution(1280x720) fps(10) support(1)
  17. D/CameraHal(  145): ParserDVConfig(679):  DV_1080P(1080p) resolution(1920x1080) fps(10) support(1)
  18. D/SensorService(  470): Max socket buffer size 163840
  19. I/DisplayManagerService(  470): Display device added: DisplayDeviceInfo{"Built-in Screen": 3840 x 2160, 60.000004 fps, density 160, 159.895 x 159.953 dpi, touch INTERNAL, rotation 0, type BUILT_IN, FLAG_DEFAULT_DISPLAY, FLAG_ROTATES_WITH_CONTENT, FLAG_SECURE, FLAG_SUPPORTS_PROTECTED_BUFFERS}
  20. D/Environment(  470): screen raw size:3840,2160
  21. D/Environment(  470): screen raw size:3840,2160
  22. D/Environment(  470): screen raw size:3840,2160
  23. D/Environment(  470): screen raw size:3840,2160
  24. D/Environment(  470): screen raw size:3840,2160
  25. D/qiuen   (  470): >>>CURRENT DISPLAY SIZE: 1920x1080
  26. I/qiuen   (  470): FORCED DISPLAY SIZE: 1920x1080
  27. I/ActivityManager(  470): Config changes=1df8 {1.0 ?mcc?mnc en_US ldltr sw1080dp w1920dp h1080dp 160dpi xlrg long land ?uimode ?night -touch -keyb/v/h -nav/h s.2}
  28. I/ActivityManager(  470): Config changes=400 {1.0 ?mcc?mnc en_US ldltr sw1080dp w1920dp h1007dp 160dpi xlrg long land ?uimode ?night -touch -keyb/v/h -nav/h s.3}
  29. I/ActivityManager(  470): Config changes=200 {1.0 ?mcc?mnc en_US ldltr sw1080dp w1920dp h1007dp 160dpi xlrg long land -touch -keyb/v/h -nav/h s.4}
  30. D/Environment(  470): screen raw size:1920,1080
  31. I/ActivityManager(  470): Config changes=60 {1.0 ?mcc?mnc en_US ldltr sw1080dp w1920dp h1007dp 160dpi xlrg long land -touch -keyb/v/h dpad/v s.5}
  32. D/Environment(  470): screen raw size:1920,1080
  33. D/Environment(  470): screen raw size:1920,1080
  34. D/DisplayOutputManager(  470): setDisplaySize 0 1920 1080
  35. D/Displaymanager(  138): switchFramebuffer display 0 new res is x 1920 y 1080
  36. D/DisplayDeviceManagementService(  470): send cmd utils switchfb 0 1920x1080

复制代码

貌似是进入ui 后 才强制到1080p.
回复

使用道具 举报

79

积分

0

威望

0

贡献

技术小白

积分
79
发表于 2014-11-24 15:41:57      5#
确实如此,那个 里面那个 getCurScreenSize 读 /sys/class/graphic/fb0/disp_info 过滤了 1080 以上的
回复

使用道具 举报

79

积分

0

威望

0

贡献

技术小白

积分
79
发表于 2014-11-24 17:36:15      6#
测试发现只修改 getCurScreenSize 还不够,切换分辨率之后回不到4k,原来
frameworks/base/core/java/android/os/DisplayOutputManager.java 中 setMode 也限制了1080p
修改后切换分辨率回4k正常
  1.                 if (n <= 720){
  2.                   m = 1280;
  3.                   n = 720;
  4.                 } else if (n > 2160) {
  5.                   m = 1920;
  6.                   n = 1080;
  7.                 } else if ( (m==3840&&n==2160)|| (m==1920&&n==1080)||(m == 1680 && n == 1050) ||(m == 1600 && n == 900) || (m == 1440 && n == 900) || (m == 1366 && n == 768)|| (m == 1024 && n == 768)|| (m == 800 && n == 600)) {
  8.                     //Oh no
  9.                     ;
  10.                 } else {
  11.                   m = 1280;
  12.                   n = 720;
  13.                 }
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

友情链接 : 爱板网 电子发烧友论坛 云汉电子社区 粤ICP备14022046号-2
快速回复 返回顶部 返回列表