こんにちは、私はMIMXRT1176DMAAチップを使用しています。このボードにはMIPIカメラとMIPI LCDが搭載されており、LCDは主にLVGL GUIの表示に使用されます。
現在、カメラの映像を画面に表示しつつ、カメラ映像の上にLVGLラベルを重ねて表示したいと考えています。私はLVGL Canvasを通じてカメラフレームを表示しようと試みましたが、この方法はカメラフレームをCanvasに転送する際の追加プロセッシングオーバーヘッドが発生し、CPU使用率が高くカメラフィードがカクつく結果となりました。
この問題の解決策があれば教えていただけませんか?例えば、LCDIFV2のレイヤー機能を使って異なるレイヤーのコンテンツを表示することは可能でしょうか?何かアドバイスをいただけると大変ありがたいです。
こんにちは、 @Vinos さん。もし秘密でなければ、解決策は何だったのでしょうか?
敬具
試してみたところ、カメラ画面はLVGLタスクを閉じた状態でのみスムーズに動作することが分かりました。現在、Layer0はGUI、Layer1はカメラです。Layer0が閉じられ、Layer1が開かれたときに、Layer2を追加したいです。レイヤー3の中央には、円弧部分を除く全ての部分が透明な中空の円を配置する必要があります。
そこで、ARGB4444フォーマットを使用し、LCD上に四角形を描く簡単なテストを行いました(レイヤー0有効、レイヤー1無効、またはレイヤー0無効、レイヤー1有効)。しかし、得られた画像は透明ではなかった。LCDIFV2_SetLayerBlendConfig関数が呼び出されるたびに、LCDのレイヤー3には画像が表示されません。しかし、この関数をコメントアウトすると、LCDには期待どおりの不透明な画像が表示されます。
以下はコードです。SDKの例「lcdifv2_embedded_alpha_cm7」を参照してください
#define LCD_WIDTH 480
#define LCD_HEIGHT 640
#define CENTER_LAYER 2
#define DEMO_FB0_ADDR ((uint32_t)s_frameBuffer[0])
AT_NONCACHEABLE_SECTION_ALIGN(
uint8_t s_frameBuffer[1][LCD_HEIGHT][LCD_WIDTH][2],
32);
void DEMO_FillFrameBuffer(void)
{
uint32_t x, y;
for (y = 0; y < LCD_HEIGHT; y++)
{
for (x = 0; x < LCD_WIDTH; x++)
{
s_frameBuffer[0][y][x][0] = 0x11;
s_frameBuffer[0][y][x][1] = 0x11;
}
}
}
void lcd_center_layer_init()
{
DEMO_FillFrameBuffer();
/* Layer 1: ARGB4444 */
const lcdifv2_buffer_config_t fb1Config = {
.strideBytes = (LCD_WIDTH * 2),
.pixelFormat = kLCDIFV2_PixelFormatARGB4444,
};
const lcdifv2_blend_config_t blend1Config = {
.alphaMode = kLCDIFV2_AlphaEmbedded,
};
LCDIFV2_SetLayerBufferConfig(LCDIFV2, CENTER_LAYER, &fb1Config);
LCDIFV2_SetLayerSize(LCDIFV2, CENTER_LAYER, 240, 240);
LCDIFV2_SetLayerOffset(LCDIFV2, CENTER_LAYER, 0, 0);
/* comment or not */
LCDIFV2_SetLayerBlendConfig(LCDIFV2, CENTER_LAYER, &blend1Config);
LCDIFV2_SetLayerBufferAddr(LCDIFV2, CENTER_LAYER, DEMO_FB0_ADDR);
LCDIFV2_EnableLayer(LCDIFV2, CENTER_LAYER, true);
LCDIFV2_TriggerLayerShadowLoad(LCDIFV2, CENTER_LAYER);
}私のコードに何か誤りがありますか?ありがとう。
こんにちは、 @Vinos さん。
以下のリンクをご確認ください: https://github.com/lvgl/lvgl/issues/262それはあなたの調査に非常に役立つと思います。
お役に立てば幸いです!
エドウィン。
こんにちは、 @Vinos さん。
このアプリケーションをどのように進めているのかは分かりませんが、私のおすすめは以下の通りです:
「SDK_MIMXRT1170-EVK\boards\evkmimxrt1170\driver_examples\csi\mipi_rgb」の例を参照してください。カメラで撮影した映像は、LVGLのフレームバッファと合成する必要があります。これを行う方法は2つあります。
1) カメラ出力バッファからLVGLのフレームバッファにカメラ画像をコピーします。これはmemcpyでも可能ですが、パフォーマンスが悪くなるので、代わりにDMAを使うことをおすすめします。
2) カメラの出力バッファとして別の LCDIFv2 レイヤーを直接使用し、LCDIFv2 がコピーなしでディスプレイ上の異なるレイヤーをハードウェア合成します。
BR、
エドウィン。