Firefly开源社区

123
发表新贴
打印 上一主题 下一主题

4k 是假的吗?

79

积分

0

威望

0

贡献

技术小白

积分
79
发表于 2014-11-21 11:23:59        只看该作者  11#
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.
回复

使用道具 举报

936

积分

20

威望

19

贡献

社区版主

Rank: 7Rank: 7Rank: 7

积分
936
发表于 2014-11-21 11:31:03        只看该作者  12#
额,我的意思是这个sdk上的android上层displaymanager 做了限制。不是说android原生的限制。
回复

使用道具 举报

63

积分

0

威望

0

贡献

技术小白

积分
63
发表于 2014-11-24 10:23:01        只看该作者  13#
试一下在frameworks/base/services/java/com/android/server/wm/WindowManagerService.java

  1. public void displayReady() {
  2.         displayReady(Display.DEFAULT_DISPLAY);

  3.         synchronized(mWindowMap) {
  4.             final DisplayContent displayContent = getDefaultDisplayContentLocked();
  5.             readForcedDisplaySizeAndDensityLocked(displayContent);
  6.             mDisplayReady = true;
  7.         }

  8.         try {
  9.             mActivityManager.updateConfiguration(null);
  10.         } catch (RemoteException e) {
  11.         }

  12.         synchronized(mWindowMap) {
  13.             mIsTouchDevice = mContext.getPackageManager().hasSystemFeature(
  14.                     PackageManager.FEATURE_TOUCHSCREEN);
  15.             configureDisplayPolicyLocked(getDefaultDisplayContentLocked());
  16.         }

  17.         try {
  18.             mActivityManager.updateConfiguration(null);
  19.         } catch (RemoteException e) {
  20.         }
  21.     }
复制代码


注释掉
readForcedDisplaySizeAndDensityLocked(displayContent);
貌似就是这里强制成1080p了。

  1. private void readForcedDisplaySizeAndDensityLocked(final DisplayContent displayContent) {
  2.       //$_rbox_$_modify_$_qiuen begin,add switch framebuffer size
  3.         String displaypolicy = SystemProperties.get("persist.sys.display.policy", "manual");
  4.             if (displaypolicy.equals("auto") == true) {
  5.                     Point ssize= new Point();
  6.                     synchronized(displayContent.mDisplaySizeLock) {
  7.                             ssize.x = displayContent.mBaseDisplayWidth;
  8.                             ssize.y = displayContent.mBaseDisplayHeight;
  9.                     }
  10.             getCurScreenSize(Display.DEFAULT_DISPLAY, ssize);
  11.                 Slog.d("qiuen", ">>>CURRENT DISPLAY SIZE: " + ssize.x + "x" + ssize.y);
  12.                 synchronized(displayContent.mDisplaySizeLock) {
  13.                         if (displayContent.mBaseDisplayWidth != ssize.x
  14.                         || displayContent.mBaseDisplayHeight != ssize.y) {
  15.                         Slog.i("qiuen", "FORCED DISPLAY SIZE: " + ssize.x + "x" + ssize.y);
  16.                         displayContent.mBaseDisplayWidth = ssize.x;
  17.                         displayContent.mBaseDisplayHeight = ssize.y;
  18.                         }
  19.                     }
  20.       //$_rbox_$_modify_$_end      
  21.         }else{
  22.         String sizeStr = Settings.Global.getString(mContext.getContentResolver(),
  23.                 Settings.Global.DISPLAY_SIZE_FORCED);
  24.         if (sizeStr == null || sizeStr.length() == 0) {
  25.             sizeStr = SystemProperties.get(SIZE_OVERRIDE, null);
  26.         }
  27.         if (sizeStr != null && sizeStr.length() > 0) {
  28.             final int pos = sizeStr.indexOf(',');
  29.             if (pos > 0 && sizeStr.lastIndexOf(',') == pos) {
  30.                 int width, height;
  31.                 try {
  32.                     width = Integer.parseInt(sizeStr.substring(0, pos));
  33.                     height = Integer.parseInt(sizeStr.substring(pos+1));
  34.                     synchronized(displayContent.mDisplaySizeLock) {
  35.                         if (displayContent.mBaseDisplayWidth != width
  36.                                 || displayContent.mBaseDisplayHeight != height) {
  37.                             Slog.i(TAG, "FORCED DISPLAY SIZE: " + width + "x" + height);
  38.                             displayContent.mBaseDisplayWidth = width;
  39.                             displayContent.mBaseDisplayHeight = height;
  40.                         }
  41.                     }
  42.                 } catch (NumberFormatException ex) {
  43.                 }
  44.             }
  45.         }
  46.         }


  47.         String densityStr = Settings.Global.getString(mContext.getContentResolver(),
  48.                 Settings.Global.DISPLAY_DENSITY_FORCED);
  49.         if (densityStr == null || densityStr.length() == 0) {
  50.             densityStr = SystemProperties.get(DENSITY_OVERRIDE, null);
  51.         }
  52.         if (densityStr != null && densityStr.length() > 0) {
  53.             int density;
  54.             try {
  55.                 density = Integer.parseInt(densityStr);
  56.                 synchronized(displayContent.mDisplaySizeLock) {
  57.                     if (displayContent.mBaseDisplayDensity != density) {
  58.                         Slog.i(TAG, "FORCED DISPLAY DENSITY: " + density);
  59.                         displayContent.mBaseDisplayDensity = density;
  60.                     }
  61.                 }
  62.             } catch (NumberFormatException ex) {
  63.             }
  64.         }
  65.     }
复制代码
回复

使用道具 举报

936

积分

20

威望

19

贡献

社区版主

Rank: 7Rank: 7Rank: 7

积分
936
发表于 2014-11-24 10:56:58        只看该作者  14#
  1. win1:
  2.   state:1,   fmt:ARGB888,   y_vir:3840,   uv_vir:0
  3.   xact:3840,   yact:2160,   dsp_x:3840,   dsp_y:2160,   x_st:   0,   y_st:   0
  4.   y_h_fac:    4096,   y_v_fac:    4096,   uv_h_fac:    4096,   uv_v_fac:    4096
  5.   y_addr: 0x13f48000,   uv_addr:0x00000000
复制代码


楼上正解。亲测有效!
回复

使用道具 举报

79

积分

0

威望

0

贡献

技术小白

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

使用道具 举报

79

积分

0

威望

0

贡献

技术小白

积分
79
发表于 2014-11-24 17:36:15        只看该作者  16#
测试发现只修改 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.                 }
复制代码
回复

使用道具 举报

22

积分

0

威望

0

贡献

游客

积分
22
发表于 2014-11-26 15:55:15        只看该作者  17#
有人试过Linux下HDMI输出2560x1080分辨率么?
回复

使用道具 举报

936

积分

20

威望

19

贡献

社区版主

Rank: 7Rank: 7Rank: 7

积分
936
发表于 2014-11-28 09:07:42        只看该作者  18#
ubuntu上hdmi输出4K (3840*2160)都没问题的。2560*1080应该也没问题的。改下驱动就可以的。楼上可以自己试下。
回复

使用道具 举报

40

积分

0

威望

0

贡献

技术小白

积分
40
发表于 2015-9-18 05:58:03        只看该作者  19#
connet 发表于 2014-11-24 17:36
测试发现只修改 getCurScreenSize 还不够,切换分辨率之后回不到4k,原来
frameworks/base/core/java/andr ...

前辈,我想在安卓系统里增加2560*1440的分辨率跟1440*2560分辨率,我有个VR眼镜必须指定这个分辨率才能点亮,我刚刚接触开发板这个东西,对安卓以前是一窍不通,能否指点一下增加以上两个分辨率的具体办法?感激不尽。
回复

使用道具 举报

40

积分

0

威望

0

贡献

技术小白

积分
40
发表于 2015-9-18 06:03:53        只看该作者  20#
本帖最后由 萧瑶 于 2015-9-18 06:07 编辑
connet 发表于 2014-11-24 17:36
测试发现只修改 getCurScreenSize 还不够,切换分辨率之后回不到4k,原来
frameworks/base/core/java/andr ...

cht2能否直接帮忙把原系统必须修改的两个地方的代码直接修改后提供一下我自己研究怎么去替换。因为以我现在的水平要直接自己编译代码的话距离还很遥远。
回复

使用道具 举报

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

本版积分规则

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