Allwinner F133 (D1s) チップは Tina の下でディスプレイの回転をどのように実行しますか?

Allwinner オンライン開発者コミュニティ用にコンパイルされた Allwinner F133 (D1s) チップは、Tina の下でディスプレイの回転をどのように実行しますか?

問題の背景

現在、ほとんどのディスプレイは横画面デザインのレイアウト、UI、写真、ビデオなどのディスプレイに基づいています.一般的に使用されているMIPI画面のほとんどは縦画面です.レイアウトの再調整を避けるために、ディスプレイは縦画面を横画面に回転させる表示方式で、お客様の開発時間を短縮。

ディスプレイの回転には、ハードウェア G2D 回転方式とソフトウェア アルゴリズム回転方式があり、お客様の画面条件に合わせて 2 つの方式を使い分け、テストと比較を行い、主にメモリ使用量、時間効率、回転効果を評価できます。

ディスプレイ ドライバの回転フレームバッファ構成

1. 以前の公開バージョンでは、modules.mk の画面回転関連の構成がデフォルトでブロックされていたため、お使いのバージョンで回転が無効になっている場合は、関連する構成を削除する必要があります。

路径:target/allwinner/f133-common/modules.mk

次の 3 つの関連オプションをブロックします。

CONFIG_SUNXI_DISP2_FB_DISABLE_ROTATE

CONFIG_SUNXI_DISP2_FB_ROTATION_SUPPORT

CONFIG_SUNXI_DISP2_FB_HW_ROTATION_SUPPORT

変更されたコードは次のとおりです。

.....
$(eval $(call KernelPackage,net-rtl8821cs))

define KernelPackage/sunxi-disp
  SUBMENU:=$(VIDEO_MENU)
  TITLE:=sunxi-disp support
  KCONFIG:=\
	  CONFIG_DISP2_SUNXI=m \
	  #CONFIG_SUNXI_DISP2_FB_DISABLE_ROTATE=y \
	  #CONFIG_SUNXI_DISP2_FB_ROTATION_SUPPORT=n \
	  #CONFIG_SUNXI_DISP2_FB_HW_ROTATION_SUPPORT=y \
	  CONFIG_DISP2_SUNXI_BOOT_COLORBAR=n \
	  CONFIG_DISP2_SUNXI_DEBUG=y \
	  CONFIG_DISP2_SUNXI_COMPOSER=n \
	  CONFIG_DISP2_SUNXI_SUPPORT_SMBL=y \

.....

2. ハードウェア ローテーションでは、G2D ドライバーが有効になっていることを確認する必要があります。

make kernel_menuconfig
	Device Drivers  --->
		<*> SUNXI G2D Driver
		[*]   sunxi g2d mixer module
		[*]   sunxi g2d rotate module

3. ディスプレイ ドライバの回転サポートをオンにします

make kernel_menuconfig
	Device Drivers  --->
		Graphics support  ---> 
			Frame buffer Devices  --->
				 Video support for sunxi  --->
				 	DISP2 Framebuffer rotation support (Disable rotation)  --->
				 		 ( ) Disable rotation
						 ( ) Software rotation support  	(不要选这个,方案未支持)
						 (X) Hardware(G2D) rotation support (选择G2D旋转)

4.dts 構成

Board.dts と uboot-board.dts は同期的に変更されます。

&disp{
    .....
    disp_rotation_used       = <1>;/* 使能旋转功能 */
    degree0                  = <3>; /* X:screen index; 0:0 degree; 1:90 degree; 3:270 degree */
    fb0_width                = <1280>;/*fb 的长宽交换*/
    fb0_height               = <800>;
    .....
};

5. 回転後のフレームバッファのプログラミングに注意する必要がある. 回転したバッファは直接画面に表示されない. アプリケーションが画面を更新する場所で FBIOPAN_DISPLAY インターフェイスを呼び出す必要がある. LCD へのバッファ。

変更されたパブリック バージョンのローテーションで GUI をスワイプする例:

道:package/gui/littlevgl-6/lv_drivers/display/fbdev.c

void fbdev_flush(lv_disp_drv_t * drv, const lv_area_t * area, lv_color_t * color_p){
....
    lv_disp_flush_ready(drv);
    ioctl(fbfd, FBIOPAN_DISPLAY, &vinfo); /*函数最后,在刷屏函数后面,调用 FBIOPAN_DISPLAY 接口*/
}

ソフトウェア ローテーション LVGL UI 構成

UI 回転アルゴリズムは公開バージョンの lvgl-6 に実装されており, ソフトウェアはドット位置を交換して回転を実現します. この方法は純粋にソフトウェアであり, 他の構成を変更する必要はありません. 元の非回転に基づいて、LV_UI_ROTATE_DIRECTION マクロを変更します。

パス: lv_conf.h

/* UI rotation:
* - 0:  no rotate
* - 1:  90°
* - 2: 180°
* - 3: 270°
*/

#define LV_UI_ROTATE_DIRECTION     0

ビデオ ローテーションの設定

ビデオの回転には、デコーダーの回転と G2D の回転の 2 つの方法があります。

1. TPlayerSetRotate インターフェイスを使用するエンコーダー回転 (VE), このインターフェイスは LBC モードをサポートしていないことに注意してください. 詳細については、<Tina Linux マルチメディア デコーディング> ドキュメントを参照してください.

函数原型: int TPlayerSetRotate(TPlayer* p,TplayerVideoRotateTyperotateDegree);
功能 设置视频旋转的角度
参数 p: 通过 TPlayerCreate 函数创建的 TPlayer 指针; rotateDegree: 视频旋转的角度
返回值 成功返回 0,失败返回-1。
调用说明 这个函数需要在 TPlayerSetDataSource() 函数之前调用

2. G2D ローテーション:

方法 1: (1) TPlayerSetG2dRotate() インターフェイスは回転に G2D を使用します。このインターフェイスは、TPlayerCreate() の後に呼び出されます。

方法 2: (2) デフォルトのローテーションを構成ファイルで直接構成します。ファイル パス:

package/allwinner/tina_multimedia/tplayer/configs/f133_linux_cedarx.conf

48 #use g2d module to rotate the video. notice:F133/R528
49 g2d_rotate_flag = 1
50 g2d_rotate_degree = 1

画像の回転

サポートされます。

詳細については、Allwinner Online Developer Communityをご覧ください.「Allwinner Online Developer Community」は、Allwinner Technology の完全子会社である Allwinner Online が運営する、オンライン ドキュメント、データ ダウンロード、購入チャネル、および開発を含む開発者向けコミュニケーション プラットフォームです。 Developer Academy と Technology Forum のいくつかの主要なセクションであり、チップ/組み込み/スマート製品の開発者がコミュニケーションと学習を行うためのスペースを提供し、RISC-V エコシステムの促進をサポートすることに重点を置いています。

公式アカウントをフォロー: Allwinner Online

{{o.name}}
{{m.name}}

おすすめ

転載: my.oschina.net/u/6169614/blog/5596818