标签: surfaceflinger

如何更改 Android 操作系统默认自然方向?

我的设备 TI am335xevm 运行 android Jellybean 4.2.2,并将横向作为默认/自然方向。

如何将设备的默认/自然方向更改为纵向?

这是我迄今为止所尝试的,

1) 将setprop ro.sf.hwrotation 90添加到build.prop但它什么也没做。

2)改变user_rotation在值/data/data/com.android.providers.settings/databases/settings.db它改变仅应用的方向。主屏幕和启动器的方向仍然是横向。

3)修改PhoneWindowManager.java类似于链接中给出的那个改变phonewindowmanager以改变自然方向

此选项有效。但它仍然显示bootanimation在景观和动画结束后,显示旋转(旋转与动画)肖像。如何在启动动画之前避免这种旋转并更改默认/自然方向?

注意:我已经用自己的肖像图像覆盖了启动动画,使其看起来像肖像。在启动动画退出发生后仍然旋转。那么什么是通用解决方案呢?

任何建议将不胜感激。

它与SurfaceFlinger相关吗?我还想在android网站上指出这篇文章。硬件作曲家中的预旋转

(仅供参考 - 问题不在于应用程序/活动方向,而是在为自定义设备构建 Android 操作系统时设备的自然方向)

android hal orientation screen-orientation surfaceflinger

5
推荐指数
0
解决办法
5924
查看次数

AOSP / Android 7:如何详细利用EGL?

我试图从系统集成商的角度了解Android(7)图形系统。我的主要重点是libegl需要提供的最低功能。

我了解Surfaceflinger是该领域的主要参与者。Surfaceflinger初始化了EGL,创建了实际的EGL表面,并充当了该应用程序创建的缓冲区(框架)的使用者。该应用程序再次执行所需的GLES调用的主要部分。显然,这会导致限制,因为Surfaceflinger和应用程序处于单独的流程中,这不是GLES / EGL的典型用例。

我不明白的事情:

  • Android 7上的应用程序是否始终渲染到发送到surfaceflinger的EGL_KHR_image缓冲区中?据我所知,这意味着总是会有一个额外的复制步骤(即使不需要合成时也是如此)……或者还有某种优化的全屏模式,其中应用程序确实可以直接渲染到最终的EGL曲面中?

  • 这里使用哪些进程间共享机制?我的猜测是,与EGL_NATIVE_BUFFER_ANDROID一起使用的EGL_KHR_image定义了确切的二进制格式,因此可以在每个进程中创建一个图像对象,在该过程中,内存通过ashmem共享。这已经是完整/正确的图片了吗,还是我在这里错过了什么?

我想这些是我目前缺乏自信的要点。当然,我对此有一些后续问题(例如,gralloc / composition如何适合此问题?),但是根据该平台,我希望将此问题保持尽可能的紧凑。尽管如此,除了主文档页面之外,我仍然缺少针对系统集成商的文档。因此,进一步的链接将不胜感激。

我目前的重点是典型的用例,这些用例将涵盖与Android 7兼容的绝大多数应用程序。如果存在诸如长期不推荐使用的兼容性填充之类的极端情况,我现在暂时将其忽略。

android android-source surfaceflinger

5
推荐指数
0
解决办法
128
查看次数

以编程方式更改主显示分辨率

我正在尝试更改 Android 8.1 上主显示器的显示分辨率。我从内核收到一个事件(基于 EDID),告诉我需要更改模式。

然后我基本上做:

sp<IBinder> display(SurfaceComposerClient::getBuiltInDisplay(ISurfaceComposer::eDisplayIdMain));
status_t res = SurfaceComposerClient::setActiveConfig(display, new_mode);
Run Code Online (Sandbox Code Playgroud)

这会正确更新 SurfaceFlinger、显示 hal 和内核,但 windowmanager/display 不会更改分辨率,直到我运行:

wm size 1920x1080
wm density 240
Run Code Online (Sandbox Code Playgroud)

但是 wm 调用这些函数,这看起来有点太苛刻了,并且还将尺寸/密度存储在持久设置中:

public void setForcedDisplaySize(int displayId, int width, int height);
public void setForcedDisplayDensityForUser(int displayId, int density, int userId);
Run Code Online (Sandbox Code Playgroud)

我一直在查看 windowmanager/display 中的代码,但没有找到我应该用于此目的的 API。

有没有办法通知 windowmanager/display 有关 surfaceflinger 的更改,或者我错过了可以使用的 API?

我是否以错误的方式处理这个问题?有没有一种正确的方法可以改变主显示器的分辨率/模式,但我还没有找到?

android android-windowmanager surfaceflinger android-displaymanager

5
推荐指数
0
解决办法
868
查看次数

android渲染使用CPU而不是GPU?

在systrace工具中,当我看到由surfaceflinger执行绘图命令和窗口组合时,这真的很奇怪,这是在CPU上运行而不是在GPU上运行.但是根据Romain Guy的谷歌谈话,他们告诉我这个组合和绘图命令的执行是在GPU上执行的.我的设备有GPU,即使这样他们也在使用CPU核心.我认为如果CPU核心是免费的,那么它使用CPU核心,否则它使用GPU.

android surfaceflinger

4
推荐指数
1
解决办法
5185
查看次数