0

スウィズリングを必要としない方法で 2vuy 非平面データを GPU にプッシュする効率的な方法を知っている人はいますか?

h264 ビデオ ファイルから生の 2vuy データを取得し、OpenGL オブジェクトにマップするテクスチャに正常にロードしています。私のコードがかなりの時間を に費やしていることに気付きましたglgProcessPixelsWithProcessor。私のglTexImage2D呼び出しは次のようになります。

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, width, height, 0, GL_YCBCR_422_APPLE,
    GL_UNSIGNED_SHORT_8_8_APPLE, data);

Apple はその OpenGL ガイドでGL_YCBCR_422_APPLE、「許容できる」パフォーマンス (p103) を提供すると述べていますが、

注: データをスウィズルするだけでよい場合は、データがスウィズルをglgProcessPixels必要としない場合ほど速くはありませんが、かなり高速にスウィズルを実行します。ただし、非ネイティブ データ形式は一度に 1 バイトずつ変換されるため、避けるべきパフォーマンス コストが発生します。

CPUで何らかの内部フォーマット変換が行われていると思います。glgProcessPixelsブロックメソッドも実行している別のスレッドで気付きました。

私のパスは最も効率的ですか?そうでない場合、何ですか?

4

1 に答える 1

4

現在のコードは、Apple の拡張機能に依存しています。内部で何が起こっているのかわかりません。

ただし、私が提案するのは、それぞれが正確に 1 つのチャネルを持つ 3 つの 2D テクスチャを作成し、各テクスチャがカラー プレーンの 1 つを受け取ることです。独立したテクスチャを使用すると、クロマ サブサンプリング (422) のサポートがより簡単になります。

次に、シェーダーで色空間変換を実行します。数学を書き留める際には、XYZ のようなコンタクト カラー スペースを介してこれを行うことをお勧めします。これにより、出力デバイスのカラー プロファイルを考慮に入れることができます。ICC プロファイルは、XYZ 色空間座標からデバイス色空間 (RGB) 座標への変換データを提供します。

于 2012-11-22T09:47:43.877 に答える