请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TDA2E
我们正在开发基于 DRA76x 的定制板。
我们正在使用 Vision SDK、其中我们开发了一个用例、用于显示 Android APK 上覆盖的摄像机。
我们的硬件可以从 VOUT1和 VOUT3输出视频。
当我们使用 VOUT1用于 Android 和 IPU 生成的摄像头覆盖时、所有视频系统都能正常工作。 我们有一个命令行工具来显示/隐藏摄像机覆盖、它工作正常。
但是、当我们尝试使用 VOUT3输出时、我们会面临一些问题。 在 u-boot 期间正确显示摄像机、但当内核启动时不显示视频、内核显示以下跟踪:
omapdrm omapdrm.0: lcd3: timeout waiting for enable
我们在论坛上找到了一些注释、指示为 VOUT3启用其他时钟:
--- a/kernel/android-4.4/drivers/gpu/drm/omapdrm/dss/dpi.c +++ b/kernel/android-4.4/drivers/gpu/drm/omapdrm/dss/dpi.c @@ -92,10 +92,10 @@ static enum dss_clk_source dpi_get_clk_src_dra7xx(enum omap_channel channel) } case OMAP_DSS_CHANNEL_LCD3: { - if (dss_pll_find_by_src(DSS_CLK_SRC_PLL2_1)) - return DSS_CLK_SRC_PLL2_1; if (dss_pll_find_by_src(DSS_CLK_SRC_PLL1_3)) return DSS_CLK_SRC_PLL1_3; + if (dss_pll_find_by_src(DSS_CLK_SRC_PLL2_1)) + return DSS_CLK_SRC_PLL2_1; } default: break; @@ -137,7 +137,7 @@ static enum dss_clk_source dpi_get_clk_src(enum omap_channel channel) case OMAP_DSS_CHANNEL_LCD: return DSS_CLK_SRC_PLL1_1; case OMAP_DSS_CHANNEL_LCD3: - return DSS_CLK_SRC_PLL2_1; + return DSS_CLK_SRC_PLL1_3; case OMAP_DSS_CHANNEL_LCD2: default: return DSS_CLK_SRC_FCK;
通过此更改、我们有视频、但摄像头显示/隐藏功能不能按预期工作。
例如、如果我们运行设置 APK 并显示摄像头、则摄像头已正确重叠。 在执行 hide 和 show 命令后、不会显示摄像机覆盖图。 然后、如果我们终止设置 APK、我们将看到摄像机覆盖。
感觉摄像机覆盖层并不总是覆盖 Android 视频。
IPU 固件中的更改如下:
- pVInfo->vencId = SYSTEM_DCTRL_DSS_VENC_LCD1; - pVInfo->outputPort = SYSTEM_DCTRL_DSS_DPI1_OUTPUT; - ovlyPrms->vencId = SYSTEM_DCTRL_DSS_VENC_LCD1; + pVInfo->vencId = SYSTEM_DCTRL_DSS_VENC_LCD3; + pVInfo->outputPort = SYSTEM_DCTRL_DSS_DPI3_OUTPUT; + ovlyPrms->vencId = SYSTEM_DCTRL_DSS_VENC_LCD3;
DTS 中的更改包括:
&dss { status = "ok"; vdda_video-supply = <&ldo5_reg>; ports { #address-cells = <1>; #size-cells = <0>; status = "ok"; // VOUT1 - HDMI_CH2 port@0 { reg = <0>; dss_vout1_out: endpoint { remote-endpoint = <&tfp410_in>; data-lines = <24>; }; }; // VOUT3 - HDMI_CH1 port@2 { reg = <2>; dss_vout3_out: endpoint { remote-endpoint = <&tfp410_in>; data-lines = <24>; }; }; }; }; &tfp410_in { - remote-endpoint = <&dss_vout1_out>; + remote-endpoint = <&dss_vout3_out>; }; -&dss_vout3_out { +&dss_vout1_out { /delete-property/ remote-endpoint; };