0

Apple の RosyWriter サンプル アプリケーションと同様に、テクスチャ キャッシュを使用してビデオ フレームを画面に描画しています。

画像を 1080p から約 320x480 にダウンサンプリングし (さまざまな理由から、より低い解像度でキャプチャしたくありません)、ミップマップ フィルタリングを使用してエイリアシングを取り除きたいと考えています。ただし、追加しようとすると:

glGenerateMipmap(CVOpenGLESTextureGetTarget(inputTexture));
glTexParameteri(CVOpenGLESTextureGetTarget(inputTexture), GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);

ミップマップが生成されていないかのように、黒い画面が表示されます。あるテクスチャから別のテクスチャにオフスクリーンでレンダリングしています。ソースと宛先の両方が、テクスチャ キャッシュを使用してピクセル バッファーにマップされます。

4

1 に答える 1

2

ミップマップは、2 の累乗サイズのテクスチャに対してのみ生成できます。私が考えることができる iOS カメラによって返されるビデオ フレーム サイズはどれも、2 の累乗の次元ではありません。ミップマップを生成しながらテクスチャ キャッシュを使用するには、テクスチャに裏打ちされた 2 のべき乗 FBO にテクスチャをオフスクリーンで再レンダリングし、そのためのミップマップを生成する必要があると思います。

とはいえ、これはおそらくあなたが望むことを達成するための最良の方法ではありません. ミップマップは、画面上でテクスチャを小さくする場合にのみ役立ちます。テクスチャを大きくする場合には役立ちません。また、実行時の生成が非常に遅いため、ビデオ処理全体が遅くなります。

ズームインすると、どのようなエイリアシングが見られますか? 通常のハードウェア テクスチャ フィルタリングは、ビデオ フレームにズームインすると、適度に滑らかな画像を生成するはずです。この例として、GPUImageフレームワークから FilterShowcase サンプルを取得して実行し、Crop フィルターを確認します。このようにビデオの一部をズームインすると、ハードウェア フィルタリングを使用するだけで、非常にうまく滑らかになるように見えます。

フレームワークで大きな画像をスムーズにダウンサンプリングするためにミップマップを使用していますが (smoothScaleOutput が YES に設定されている場合は GPUImagePicture を参照してください)、これも画像を縮小するためのものであり、ズームインするためのものではありません。

于 2012-04-26T15:22:20.230 に答える