4

ここの多くの投稿にあるコードを基本的に使用して、ビデオをテクスチャにレンダリングするアプリケーションを作成しました。オリジナルは、ここにあるいくつかの nVidia サンプル (VideoSurfaceView) から来ていると思います: Using SurfaceTexture in Android

この例は、モバイル デバイスとタブレット (両方とも Tegra ベース) で完全に正常に動作します。その後、MALI 400 ベースの Android システム (Minix Neo5) で同じコードを試してみましたが、ビデオが再生されていることがわかりますが、主に黒い画面にゴミが表示されます (わずか 3 または 4 行)。

OpenGL ES トレーサーを使用して、SurfaceTexture からテクスチャ自体にコピーされたものを確認しようとしましたが、トレーサーはそれを正しく表示できないようです (tegra システムでも tegra デバイスでも)。 OpenGL エラーも警告も表示されず、すべて正常に動作しているようです。

何かが TEXTURE_EXTERNAL にコピーされた場合にどうなるかを示すことができる他のツールはありますか? すべての TEXTURE_2D がトレーサーで利用できます。

MALI システムで気付いた奇妙な点の 1 つは、高解像度ビデオをまったく再生できないことです。そして、私のビデオ 1280x720 は、SoftwareRenderer を使用していることをデバッガーで報告しています。おそらくそれが、フレームがテクスチャとして使用される OGL_IMAGE に正しくコピーされない理由です。

内部で何が起こっているのかをもう少し理解する必要があると思いますが、パフォーマンスが悪くても、システムがそれを実行できないか、単に機能するはずであるというエラーが予想されました。おそらく、これは Android の修正版であり、メディアプレーヤーのコードが壊れているだけです...

4

1 に答える 1

0

投稿ありがとうございます!これは、他の 2 つの Android デバイス (両方とも Mali-400 MP) で観察したこととまったく同じですが、なぜこれが起こるのかわかりません。バックグラウンドで動画が再生されているようです。GLSurfaceView クラスのコンストラクターに次の行を追加しました。

setEGLConfigChooser(8,8,8,8,0,0);
getHolder().setFormat(PixelFormat.RGBA_8888);

ビデオは、私の OpenGL シーンの「後ろ」に表示されます。どちらのデバイスも、「GL_OES_EGL_image_external」拡張をサポートすると主張していました。

于 2013-04-18T10:29:54.103 に答える