8

CPU を使用して iPhone で実行時に YUV から RGB への変換を実行するために理想的には NEON に最適化された、本当に高速な API を推奨できる人はいますか? 残念ながら、加速フレームワークの vImage は適切なものを提供しません。vDSP を使用すると、float に変換して元に戻すのは最適ではなく、自分で NEON を作成するのとほぼ同じくらいの作業になります。

シェーダーを介してこれに GPU を使用する方法を知っています。実際、メインのビデオ プレーンを表示するために既に使用しています。残念ながら、実行時にディスプレイのサブ領域の RGBA テクスチャを作成して保存する必要もあります。この質問に対する適切な回答のほとんどはシェーダーに関するものですが、その追加作業に GPU を使用したくありません。理由は次のとおりです。

(1) RenderTextures と YUV シェーダーを使用して領域を変換およびキャッシュすることはできますが、これ以上同期/複雑さをアプリに追加したくありません。(私はすでに CVTextureCache から Unity3D にテクスチャを渡しています... 多くの場合、Unity3D の背後にある OpenGL から状態を既に切り替えており、これ以上デバッグを行いたくありません...)

(2) より実際には、私はゲームを書いていて、余裕のある GPU を持っていません (ゲームは一般的にそうではありません - 私はここ数年、GPU をオフにする方法よりも、GPU をオフにする方法について多くのプレゼンテーションを行ってきました)。物を載せて…)

(3) iPad には、何もしない予備のコアがあります。

YUV から RGBA への変換を行うライブラリは数多くありますが、独自の NEON バージョンを作成する時間を節約したいと考えています。現在、私は次のような OpenCV の実装を使用しています。

cv::cvtColor(avFoundationYUVCaptureMat, BGRAInputImage, CV_YUV420sp2BGRA, 4);

これは正しいですが、終わりが遅くなります。

以前に他の実装 (CoreImage? FFMpeg?) を調べたことがあり、その実装を推奨できる人がいれば、非常に感謝しています。

ありがとう、アレックス。

4

2 に答える 2

4

、、が別々の平面にあり、クロマダウンサンプリングがない場合はY、を使用して変換を実行できるはずです。UVvImageMatrixMultiply_Planar8

于 2012-10-03T00:09:13.783 に答える
2

私がしたのはグーグルだけyuv rgb neonで、これが私が見つけたものです - https://code.ros.org/trac/opencv/browser/trunk/opencv/android/android-jni/jni/yuv2rgb_neon.c?rev=4083

コメントが述べているように、それはまだラフであり、RGBA に変換するように調整する必要があるかもしれませんが、それは簡単なことです。

私の知る限り、NEON ブログで公開されている他の機能があるはずです。hilbert-space、webshaker、arm ソフトウェア イネーブルメント ブログなどを確認してください。

于 2012-06-30T05:26:24.377 に答える