1245817_ja-JP

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

1245817_ja-JP

1245817_ja-JP

H264エンコード前のグラフィック付きIMX8ビデオオーバーレイ

こんにちは。私たちは 1920x1080p30 ビデオカメラを使用した目視検査システムを設計しています。

低電力システムでは、H264 エンコードの前とディスプレイの前に、ビデオ ストリームにグラフィックをオーバーレイする必要があります。iMX8M-Plus のような SOC でこれを行う方法に関する情報が見つかりません。iMX6 には、最大解像度 1024x1024 (1920x1080 の場合は 4 倍) でビデオ ストリームにグラフィックを合成/オーバーレイできる IPU がありました。iMX8M ファミリでは、ビデオ プロセッシングのこの側面が失われているようです。

SO、2D または 3D GPU は、通常の表示作業も実行しながら、メモリへのこの合成/オーバーレイを実行する必要があると思います。これを処理するための gstreamer プラグインは存在しないようです、SO何かを作成する必要があります。しかし、この段階で私が知りたいのは、次のことです。

1. iMX8-Plus ハードウェアは、CPU 使用率を最小限に抑えてこれを実現できますか (カメラは YUV I422/I421 で、コンポーザー/オーバーレイ出力は VPU エンコーダー (NV12 ?) とディスプレイに供給する必要があります)?

2. これについてどのように進めればよいか、何かアイデアはありますか?通常の X11/Wayland グラフィックス GUI が使用されている間は GPU を使用し、ゼロ コピー DMA バッファー パイプラインなどを通じてデータを供給する必要があります。

Terry

Re: IMX8 Video overlay with graphics before H264 encode

私たちのアプリケーションでは簡単です。オーバーレイ QImage は、1 秒に 1 回程度非同期的に作成されます (実際には 2 つの QImage があり、1 つは描画用、もう 1 つは切り替え用の Mutex による表示用です)。

gstreamer appsrc 要素は、5 fps でビデオ フレームを送信するように構成されており、QImage を取得して、imxcompositor_g2d を介して gstreamer ストリームに挿入します。

ogstOverlaysrc=gst_bin_get_by_name(GST_BIN(ogstPipeline), "appsrc");
if(ogstOverlaySrc){
g_object_set(G_OBJECT(ogstOverlaySrc), "caps", gst_caps_new_simple("video/x-raw",
"format", G_TYPE_STRING, "BGRA", "width", G_TYPE_INT, osize.width(),
"height", G_TYPE_INT, osize.height(),
"framerate", GST_TYPE_FRACTION, 5, 1,
NULL), NULL);

g_object_set(G_OBJECT(ogstOverlaySrc), "stream-type", 0, // GST_APP_STREAM_TYPE_STREAM
"format", GST_FORMAT_TIME, "is-live", FALSE, NULL);

g_signal_connect(ogstOverlaySrc, "need-data", G_CALLBACK(gstOverlayAddFrameCallback), gpointer(this));
}

パイプライン ビット:

imxcompositor_g2d name=c latency=20000000 sink_1::alpha=1.0 ! identity drop-allocation=true
v4l2src device=/dev/video3 ! video/x-raw,width=1920,height=1080,framerate=25/1 ! c.sink_0
appsrc name="appsrc" ! videoconvert ! video/x-raw,format=ARGB ! c.sink_1

Re: IMX8 Video overlay with graphics before H264 encode

詳しいご回答ありがとうございます!もしよろしければ、これに基づいてさらにいくつか質問します。
1.QT オーバーレイとビデオ フレームをどのように同期させていますか?データ オーバーレイは、対応するビデオ フレームに正しく同期される必要があると思われます。
2. QT + Gstreamer の組み合わせについてはあまり詳しくないのですが、この 2 つがどのようにインターフェースされるかについてもう少し詳しく教えていただけますか?QT アプリ内で Gstreamer を使用してビデオを取得する方法についていくつかの情報を見つけましたが、それは私たちがやろうとしていることではありませんでした。

PS: あなたの投稿を最初に解釈すると、オーバーレイを画像として保存し、それを appSrc を使用して挿入していると思われます。そのリンクは私にとってはよく分かりません。

ありがとう!

Re: IMX8 Video overlay with graphics before H264 encode

そうですね、1920x1080p25 のビデオ ストリームを送信するアナログ カメラがあり、それにオーバーレイしています。Qt を使用して、フル 1920 x 1080 サイズの QImage にオーバーレイ イメージを作成し、次に gstreamer appSrc を使用して、これをアルファ = 1.0 のビデオ ストリームとともに imxcompositor_g2d ソースの 1 つに挿入します。

私たちの場合、これ以上の速度は必要ないため、Qt 描画側での CPU 使用率を節約するために appSrc gstreamer オーバーレイ フレームを 5 fps で生成しましたが、問題なく 25 fps を完全に実行できました。

FHD ビデオ ストリームをキャプチャし、テキスト/グラフィックをオーバーレイし、H264 エンコードしながら LCD パネルに表示し、ファイルに保存し、サウンド ストリームを管理する当社のシステムでは、imx8mp の全体的な使用率 (4コア) は約 25% です。

しかし、IMX8mp を gstreamer で操作するのは、ちょっとした危険地帯です。詳細なドキュメントがなく、内部的には比較的複雑なシステムであるため、効率的に動作させるには、gstreamer の配置や設定(多くはわかりにくい)を試行錯誤する必要があることがよくあります。

Re: IMX8 Video overlay with graphics before H264 encode

@TerryBarnaby1 、このソリューションを使用して、どのようなフレームレートを実現できましたか?私たちはさまざまなオプションを評価していますが、カメラからキャプチャしたフレームに図形を描画したりテキストを重ねたりするための潜在的な解決策に関するリソースはほとんどありません。

よろしくお願いします!

Re: IMX8 Video overlay with graphics before H264 encode

こんにちは、テリー
私のCASE、位置と解像度が設定されたビデオウィンドウを内部に持つシンプルなWaylandアプリケーションのようなユースケースを考えてみましょう。最善のアプローチは何でしょうか?複数の egl サーフェスを使用しますか?あるいはウェイランドの地下表面ですか?どちらのアプローチがより良いかご提案いただけますか?

Re: IMX8 Video overlay with graphics before H264 encode

こんにちは
上記の質問に関して何か情報はありますか? waylandsink にはアルファ プロパティに関する制限がありますか?
また、GPU/VPU を使用してクロマキー プロパティを使用する方法については何かアイデアがありますか?

Re: IMX8 Video overlay with graphics before H264 encode

こんにちはNXP

waylandsink のアルファ プロパティが機能しません (5.4.70- imx8mplus) 、何か制限がありますか?

Re: IMX8 Video overlay with graphics before H264 encode

こんにちは

複数のビデオを実行するシンプルなWaylandアプリケーションを検討してください

もう 1 つのポイントとして、waylandsink (imx8m-plus) のアルファ プロパティを使用しようとしていますが、機能しません。ここには何か制限がありますか?

Re: IMX8 Video overlay with graphics before H264 encode

それはあなたが具体的に何をしたいかによると思います。iMX8mp ハードウェア、実装された gstreamer モジュール、Wayland サーバー コード、GUI ツールキットなどを理解する必要がありますが、その情報は不足しており、私は専門家ではありません。また、W ayland GUI レイヤーの意味によっても異なります。

私の場合、Qtウィンドウに表示する前にビデオストリームにテキストをオーバーレイし、さらにH264エンコードしてファイルに出力する必要がありました。Qt GUIプラットフォームを使用しています。コードでは、ビデオにオーバーレイされるグラフィカル「レイヤー」(この例ではtest1.pngから取得)を、通常のQt描画プリミティブを使用してQt QImageで生成し、gstreamerの「appsrc name=\"appsrc\" ! videoconvert ! imagefreeze ! c.sink_1」部分パイプラインを使用してimxcompositor_g2dに送り込んでいます。画面出力は「waylandsink name=\"videoSink\"」で、このwaylandsink領域をアプリケーション内の特定のQtウィンドウ上で移動およびサイズ調整するためのC++ GUIコードが含まれています。

Re: IMX8 Video overlay with graphics before H264 encode

こんにちは、テリー

ご意見ありがとうございます。ビデオ レイヤーと Wayland GUI レイヤーをブレンドしたい場合、同様のアプローチで可能ですか?




Re: IMX8 Video overlay with graphics before H264 encode

現在の (NXP Yocto hardknott) ベースの Linux では、グラフィックス 2D エンジンを使用してオーバーレイ プロセッシングを実行できることがわかりました。gstreamed imxcompositor_g2d モジュールはこれをCAN。典型的な gstreamer コマンドは次のようになります。

gst-launch-1.0imxcompositor_g2d name=c sink_1::alpha=0.5 !waylandsink v4l2src デバイス=/dev/video3 !ビデオ/x-raw、幅=1920、高さ=1080、フレームレート=30/1 !c.sink_0 マルチファイルrc location=./test1.png caps=image/png,framerate=1/1 !pngdec !画像フリーズ!c.シンク_1

これにより、フル HD カメラ ストリームが取得され、その上に test1.png ファイルがオーバーレイされます。imxcompositor_g2d に続いて、このビデオ ストリームを "vpuenc_h264 に渡すCAN。h264parse !アビムックス!「filesink location=/tmp/temp.avi」と入力して、ハードウェア h264 エンコーダーを使用してエンコードし、必要に応じて h264 エンコーダーだけでなくディスプレイにも出力します。

Re: IMX8 Video overlay with graphics before H264 encode

こんにちは

私も同様の要件で作業しており、imx8m plus プラットフォームでビデオ オーバーレイをテストする方法を理解したいと思いますが、残念ながら、2021 年 1 月 13 日の L5.4.70_2.3.0 の Linux ユーザー ガイドのドキュメントには imx8m-plus 固有の情報がなく、プラグインoverlaysinkも利用できません。

Re: IMX8 Video overlay with graphics before H264 encode

どうもありがとう。

「i.MX Linux ®ユーザー ガイド」にビデオ プロセッシング アーキテクチャ (ハードウェアおよびソフトウェア レイヤー/API およびパッケージ) の概要と履歴が記載されており、NXP Yocto BSP およびコミュニティ Yocto BSP でこれがどのようにサポートされているかが説明されていると便利です。

Re: IMX8 Video overlay with graphics before H264 encode

ハイ


はい、 imx-gst1.0-plugin が gstreamer1.0-plugins-imx に置き換えられました。

i.MX6ファミリでは、ビデオレンダリングはDRIではなくG2Dに依存します。

i.MX8ファミリでは、WaylandがDRIを使用しているため、ビデオレンダリングはDRIに依存します。

Re: IMX8 Video overlay with graphics before H264 encode

情報ありがとうございます。ただし、これは特定の NXP BSP リリースに固有の情報です。

カスタム ボード用の Yocto リリースを作成する必要があるため、最新のビデオ プロセッシング gstreamer 要素を取得するには、これ用の Yocto ビルドを構成する必要があります。NXP「Yocto」ビルドはコミュニティ ビルド (より主流) とは異なり、BSP タイプと 3 つの異なるカーネル バリアント、そしてさまざまなカーネル ドライバ構成などの付属品がすべて存在します。また、古い Yocto ビルドには、さまざまな gstreamer 要素やドライバなどがあります。

私は、現在および計画中のビデオ プロセッシング ソフトウェア ツリーの基礎が何であるかを理解しようとしているだけなので、ビルドではこれに従います。カスタム ボードにはコミュニティの Yocto BSP を使用すると言われていますが、これは NXP Yocto wrt ビデオ プロセッシングとはまったく異なります。例えば、ユーザーレベルではgstreamer1.0-plugins-imxがありますおよびimx-gst1.0-プラグインどちらのパッケージも、IMX6DL 用のコミュニティ ベースの Yocto dunfell ビルドではビルドされません。

imx-gst1.0-pluginはパッケージはgstreamer1.0-plugins-imxから引き継がれましたすべての IMX バリアントで、これは DRI GPU インターフェース ルートに依存しますか?

私は、最も賢明な方法で開発できるように、ハードウェア ビデオ プロセッシング ソフトウェア/ハードウェア アーキテクチャ/パッケージとその履歴全体を理解したいと考えています。

Terry

Re: IMX8 Video overlay with graphics before H264 encode

ハイ


すべての BSP リリース ノートと i.MX GStreamer 1.0 プラグインの詳細は、i.MX_Linux_Release_Notes.pdf (マルチメディア) に記載されています。

i.MX_Linux_Users_Guide.pdf では、テストの実行方法について説明しています。

最後に言及した点については、リリースノートに次のように書かれています。

i.MX 6ファミリ:
• overlaysink : G2Dベースのビデオシンクプラグイン
• imxv4l2sink: V4L2ベースのビデオシンクプラグイン


Re: IMX8 Video overlay with graphics before H264 encode

情報ありがとうございます。imx8m は一部のビデオプロセッシングをサポートしていないことがわかりましたが、2D GPU を搭載していないためリリースしていませんでした。この iMX8 シリーズは非常に乱雑で、部品の命名も奇妙です。

しかし、基本的な疑問は残ります。私たちのデザインでは imx8mq をターゲットにしておらず、おそらく IMX8M-Plus または IMX8-DualXPlus を使用することになるでしょう。私が決定しようとしているのは、一般的な H264 の前に、ハードウェア ビデオ合成をサポートする適切な Yocto リリースを構築する方法です。

ソフトウェア サポートは過去 5 年間で大きく変化しており、Yocto リリースを作成するためのルートは多数あり、カーネル内外のグラフィックスおよびビデオ プロセッシング ドライバの変更も数多く行われています。これらの変更や、方向性がどこに向かっているのか、どのようなユーザー レベル API とカーネルおよびカーネル レベル API が必要なのかについての、簡単な全体ガイドは存在しないようです。SO私はこれを理解して、最初にビデオプロセッシングのコンセプトをテストし、次にボードをデザインして、このカスタム ボードに適した Yocto ビルドを作成できるようにしたいと考えています。

例えば、imx-gst1.0-pluginはパッケージはgstreamer1.0-plugins-imxを置き換えましたパッケージと、いつ、どのような低レベル API/ドライバが必要/サポートされるか (DRI ?)。iMX6 と iMX8M-Plus に互換性のあるシステムを構築したいのですが、それが可能かどうかわかりません。

Terry

Re: IMX8 Video overlay with graphics before H264 encode

ハイ


i.MX8MQには2D GPUがないSO、 imxcompositor_g2dは使用できません。別のimxcompositorを試すCAN。


BR

Re: IMX8 Video overlay with graphics before H264 encode

情報ありがとうございます。これを試して、この出力が H264 VPU エンコーダーを介して取得CANこと、およびこれの全体的な CPU 使用率を証明したいと思います。しかし、gstreamer imxcompositor_g2d プラグインはどこでどうやって入手すればいいのでしょうか?私は、iMX6 および iMX8 テスト プラットフォームに適したコミュニティまたは nxp ベースの Yocto ビルドを構築しようとしていますが、このプラグインを見たことはありません。NXP gstreamer プラグインは現時点ではかなり混乱しているようです。

このユーザーレベルの部分はgstreamer1.0-plugins-imxにあるべきでしょうか?パッケージ ?

https://github.com/Freescale/fsl-community-bsp-platform -b dunfell」を使用してIMXコミュニティYoctoリリースをビルドすると、gstreamer1.0-plugins-imxをビルドできませんパッケージ。

IMX NXP Yocto リリースをビルドする場合: " https://source.codeaurora.org/external/imx/imx-manifestimx8mqevk マシンの「-b imx-Linux-zeus -m imx-5.4.70-2.3.0.xml」では、ビルド内に確認できる限り imxcompositor_g2d プラグインがありません (imx8mqevk がないため実行できません)。また、ビルド (IMAGE_INSTALL_append) に「gstreamer1.0-plugins-imx」を追加すると、「imx8mqevk (not in COMPATIBLE_MACHINE)」というエラーが発生します。

SO、機能する imxcompositor_g2d gstreamer プラグインを提供する適切な Yocto Linux システムを構築するには、何を構築すればよいのでしょうか?

Re: IMX8 Video overlay with graphics before H264 encode

ハイ


1.YUV422 および YUV420 入出力フォーマットもサポートされ、エンコーダー (NV12) をサポートします。

2.7.3.16をご覧くださいi.MX_Linux_User's_Guide.pdf のビデオ構成
imxcompositor_g2d は対応するハードウェアを使用してビデオ合成を高速化します。複数の
ビデオを 1 つにまとめます。合成時にビデオのポジショニング、サイズ、回転を指定CAN。ビデオカラースペース変換は
入力ビデオと出力ビデオが同じでない場合も自動的に実行されます。各ビデオにはアルファ値とZオーダー値をCAN設定し、
アルファブレンディングとビデオブレンディングシーケンスを取得します。

Tags (1)
No ratings
Version history
Last update:
‎11-21-2025 06:34 PM
Updated by: