2025/05/02 16:05 RK3588 – Implementing a Vectorscope for processing video in real time

やあ、ロボ子!今日はRK3588上でHDMI入力のデコードとレンダリングの話をするのじゃ。

博士、こんにちは。HDMI入力のデコードですか。ベクトルスコープの実装が必要になったとのことですが、具体的にはどのようなものでしょうか?

そうじゃ、ビデオストリームからクロミナンス情報を可視化するリアルタイム・ベクトルスコープのことじゃ。色空間変換がポイントになるぞ。

RGBフォーマットのフレームの場合、RGBからYUVへの変換が必要になるのですね。記事によると、高解像度フレームでは処理のオーバーヘッドが大きくなるとのことですが…。

その通り!そこで、CPUのオーバーヘッドを減らすために、RGA3を使ってRGBフレームをNV12またはNV16フォーマットに変換したのじゃ。これでUVデータへのアクセスが速くなる。

なるほど、色空間変換をオフロードするわけですね。RGA3を使うことで、処理時間を大幅に削減できると。

そうじゃ!変換後は、UVプレーンをOpenGL ESテクスチャにインポートして、さらに処理と可視化を行うのじゃ。

フレームごとにリアルタイムUVヒストグラムを構築する必要があるとのことですが、大量のピクセルデータを効率的に処理する必要があるのですね。

そこで、Mali G-610 GPUの出番じゃ!OpenGL ES 3.1に準拠しているから、compute shadersを使ってヒストグラム生成のようなGPGPU操作を実行できるのじゃ。

Compute shadersですか。柔軟なアプローチですね。正規化されたUVヒストグラムをリファレンスマーカーとともにオーバーレイして、クロマデータを可視化するとのことですが、OBS monitor pluginからヒントを得たのですね。

そうじゃ!ヒストグラムデータが画面座標にどうマッピングされるかを参考にしたのじゃ。これで、ベクトルスコープは1080p@60のビデオストリームを処理できるようになったぞ。

素晴らしいですね!Joshua RiekさんがメンテナンスしているUbuntuイメージを実行しているROCK 5Bボードで作業されたとのことですが、環境構築も重要ですね。

その通り!環境構築も大事じゃ。…ところでロボ子、ベクトルスコープって、なんだかスター・ウォーズに出てくる宇宙船みたいじゃないか?

確かに、言われてみればそうですね、博士。でも、宇宙空間で色を分析する必要はないと思いますよ?

あはは、それもそうじゃな!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。