1

Galaxy S3で奇妙な動作が発生しています(他のテストデバイス(S3ではない)は次のようにバグアウトしません)。

シナリオ:

libffmpeg で処理された RTSP ストリームから JNI 経由で YUV データを取得しています。これらの値を取り、openGL を使用して C++ コードに入力し、テクスチャにマップできるようにします。(基本的には、openGL で RTSP ストリームからビデオを表示します)。

問題:

ビデオにオーバーレイを追加しようとしてきました (通常の Android ウィジェット/ビュー/xml を使用)。Galaxy S3 (他にはない) でボタンの背景 (R.color、R.drawable であるかどうか) に気付きましたなど)がすべて欠落しています。**ボタンのテキストは表示されます。

最大の問題は、通常の古い非openglアクティビティに戻るために押した後、それらがすべて壊れていることです(スクリーンショットが続きます)。これらのビューに表示されるのはテキストだけです。テキストが移動すると (ページネーションを考えてください)、テキストがぼやけます (スクリーンショットを参照)。

他の 5 台のデバイスでアプリを試しましたが、問題はありませんでした。これらの問題は両方とも私の Galaxy S3 で発生するので、関連していると思います。

私の最高のGoogle-fuにもかかわらず、関連するものは何も見つかりませんでした. どんな情報でも大歓迎です。タイ

openGL が一時停止した後 (その前のアクティビティに戻る) にテキストが表示されますが、移動するとぼやけます。他の要素は表示されません (表示されるはずです): openGL が一時停止した後 (その前のアクティビティに戻る) にテキストが表示されますが、移動するとぼやけます。 他の要素は表示されません (表示されるはずです)

これは、前のアクティビティに戻った後に再開すると、ビデオがどのように見えるか (実際のシーンである必要があります) です。注: ボタンに灰色の背景はありません。これは、OpenGL アクティビティが最初に開かれ、他に破損がない場合に当てはまります。 これは、前のアクティビティに戻った後に再開すると、ビデオがどのように見えるか (実際のシーンである必要があります) です。 注: ボタンには灰色の背景はありません (あるべきです)。 これは、OpenGL アクティビティが最初に開かれ、他に破損がない場合に当てはまります。

4

1 に答える 1

4

UIスレッドでopenGLをセットアップする関数を呼び出していたことがわかりました。GLSurfaceView にアタッチされた Renderer によって作成されたスレッドで draw() (など) メソッドを呼び出していました。setup メソッドが UI スレッドで呼び出されたため、ハードウェア アクセラレーションに使用される openGL が破損していました。

TL;DR:別のスレッドを作成するため、GLSurfaceView に使用されるRenderer クラスの外部で (セットアップも含めて)呼び出しを行わないでください。そのため、openGL 呼び出しは、ハードウェア アクセラレーションに使用される UI スレッドで実行されている openGL に干渉しません。

アプリがこの問題に悩まされているかどうかを確認する簡単なテストは、Android マニフェストでハードウェア アクセラレーションを無効にし、問題が解決するかどうかを確認することです。

<application android:hardwareAccelerated="false" ...>

これが他の誰かに役立つことを願っています:)

于 2013-08-16T22:02:08.280 に答える