如何更改 Android 10 hdmi 端口的显示方向 您好, 我正在开发一款搭载安卓 10_2.3.0 的 i.MX8MP 定制板。我试图将 Android 图像的显示方向从横向改为纵向,因此在 .mk 中添加了以下更改文件 diff --git a/imx8m/BoardConfigCommon.mk b/imx8m/BoardConfigCommon.mk index 92197b61..2b105592 100644 --- a/imx8m/BoardConfigCommon.mk +++ b/imx8m/BoardConfigCommon.mk @ -10,7 +10,10 @@ have_fsl_imx_ipu \\ prebuilt_fsl_imx_gpu \ board_soc_type (板卡类型 product_manufacturer (产品制造商 -板载 VPU +board_vpu_only +sf_primary_display_orientation (主要显示方向 + +soong_config_imxplugin_sf_primary_display_orientation = 270 SOONG_CONFIG_IMXPLUGIN_BOARD_PLATFORM = imx8 soong_config_imxplugin_num_framebuffer_surface_buffers = 3 diff --git a/imx8m/evk_8mm/BoardConfig.mk b/imx8m/evk_8mm/BoardConfig.mk 索引 ed30f771..cd8f4c89 100644 --- a/imx8m/evk_8mm/BoardConfig.mk +++ b/imx8m/evk_8mm/BoardConfig.mk @@ -117,6 +117,8 @@ target_uses_mke2FS: = true # 定义 帧缓冲区数 num_framebuffer_surface_buffer_surface_buffer_buffer_surface_buffer_bu ffer_surface_buffer_buffer_buffer_surface_buffer_buffer_buffer_buffer_sur 当我设置 SF_PRIMARY_DISPLAY_ORIENTION: = 270 时,输出显示在 landscape_view_android_10.jpeg 当我设置 SF_PRIMARY_DISPLAY_ORIENTATION := 180 时,输出结果显示为 portrait_type_view_android_10.jpeg 但方向不对。W当我在安卓 15 中通过 $ settings put system user_rotation 3 命令时,我看到了正确的肖像视图。 correct_portrait_view.jpg 不过,该命令在 Android 11 上不起作用。 我将附上一张图片,显示我期望在 Android 10 中看到的方向 correct_portrait_view.jpg 谢谢&Regards Subash.P Android 图形与显示 i.MX 8 系列 | i.MX 8QuadMax (8QM) | 8QuadPlus i.MX 8M | i.MX 8M Mini | i.MX 8M Nano Re: How to change the display Orientation in Android 10 hdmi port 你好@刘志明 使用您的补丁后,我可以在屏幕上看到一些变化,但分辨率不高。此外,当我连接鼠标时,它只能横向导航,而不能纵向导航。 此外,导航栏也不可见。 a6a427ba-b133-4e1c-9cc8-b7fe694ef852.jpg 敬上, Subash P. Re: How to change the display Orientation in Android 10 hdmi port 您好,在 Android10 中, surfaceflinger 旋转信息不会传递到 HWC,请尝试 HAL 中的附件,并使用 "settings put system accelerometer_rotation 0/1 "进行测试。
diff --git a/display/display/Composer.cpp b/display/display/Composer.cpp
old mode 100644
new mode 100755
index 8dba110..282c4f8
--- a/display/display/Composer.cpp
+++ b/display/display/Composer.cpp
@@ -350,11 +350,40 @@ int Composer::clearWormHole(LayerVector& layers)
int Composer::composeLayer(Layer* layer, bool bypass)
{
+ int transform;
if (layer == NULL || mTarget == NULL) {
ALOGE("composeLayer: invalid layer or target");
return -EINVAL;
}
+
+ /*
+ 0 => 4
+ 4 => 3
+ 3 => 7
+ 7 => 0
+ */
+ ALOGI("liutest1 composeLayer transform:0x%x\n",layer->transform);
+
+ switch (layer->transform)
+ {
+ case 0:
+ transform = 4;
+ break;
+ case 4:
+ transform = 3;
+ break;
+ case 3:
+ transform = 7;
+ break;
+ case 7:
+ transform = 0;
+ break;
+
+ default:
+ ALOGI("liutest1 invalid transform:0x%x\n",layer->transform);
+ }
+
if (bypass && layer->isSolidColor()) {
ALOGV("composeLayer dim layer bypassed");
return 0;
@@ -392,7 +421,7 @@ int Composer::composeLayer(Layer* layer, bool bypass)
continue;
}
- setClipping(srect, drect, clip, layer->transform);
+ setClipping(srect, drect, clip, /*layer->transform*/transform);
ALOGV("index:%d, i:%d sourceCrop(l:%d,t:%d,r:%d,b:%d), "
"visible(l:%d,t:%d,r:%d,b:%d), "
"display(l:%d,t:%d,r:%d,b:%d)", layer->index, (int)i,
@@ -403,8 +432,9 @@ int Composer::composeLayer(Layer* layer, bool bypass)
ALOGV("zorder:0x%x, layer phys:0x%" PRIx64,
layer->zorder, layer->handle->phys);
}
- ALOGV("transform:0x%x, blend:0x%x, alpha:0x%x",
- layer->transform, layer->blendMode, layer->planeAlpha);
+ /*ALOGV*/ALOGI("liutest1 transform:0x%x:0x%x, blend:0x%x, alpha:0x%x",
+ layer->transform,transform, layer->blendMode, layer->planeAlpha);
+
setG2dSurface(dSurfaceX, mTarget, drect);
@@ -422,7 +452,7 @@ int Composer::composeLayer(Layer* layer, bool bypass)
return -EINVAL;
}
- convertRotation(layer->transform, sSurface, dSurface);
+ convertRotation(/*layer->transform*/transform, sSurface, dSurface);
if (!bypass) {
convertBlending(layer->blendMode, sSurface, dSurface);
}
致敬, Zhiming
View full article