問題タブ [grafika]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
155 参照

android - ContinuousCaptureActivityでカメラプレビューの領域をSurfaceViewの半分にする方法

カメラ プレビューの領域を SurfaceView の半分にしたいので、ContinuousCaptureActivity のコードを変更します。詳細は次のとおりです。

https://github.com/google/grafika/blob/master/src/com/android/grafika/ContinuousCaptureActivity.java#L436GLES20.glViewport(0, 0, viewWidth / 2, viewHeight / 2);を置き換えるために使用します

しかし、結果は奇妙です。下の図を参照してください。

ここに画像の説明を入力

私は本当にそれを理解することができません、そしてそれを行う正しい方法は何ですか?

誰が私にアドバイスをくれますか?

0 投票する
1 に答える
764 参照

android - 背景色を設定できず、EGL で出力をクリアできません

OpenGLを学ぶために、Androidで以下のサンプルコードを試しました。しかし、期待される出力が表示されませんでした。問題がどこにあるか指摘してください。

fadden の寄稿を参考にしました。

グラフィカ・ファデン

ステップ1:

renderHandler で renderThread を作成しました。

RenderThread コンストラクターで受け取った userSurface。

現在、Choreographer Callback メカニズムを使用して doFrame() API を呼び出して、表面に色を描画するだけです。

注: アプリケーションは TextureView を使用し、次の方法でサーフェスを受け取りました。

問題:

OpenGL コーディングの正しい手順に沿っているかどうかはわかりません。また、表面に色が表示されていませんが、黒色のみです。何もしなくても黒い色をします。

入力をお願いします。また、私が注意する必要がある不足している部分を教えてください。

0 投票する
2 に答える
3645 参照

android - MatrixのrotateM()を使用してSurfaceTextureからマトリックスを回転させますが、ビデオ出力は破損します

私はopengl esでビデオを再生することができました.grafikaのContinuousCaptureActivityの方法を使用しました.私のデータソースはCameraではなくMediaPlayerであり、違いはありません. MediaPlayer はビデオ フレームを継続的に生成し、各フレームを onFrameAvailable コールバックで画面に描画します。コードは次のとおりで、うまく機能します。

ここで、ビデオ フレームを 270 度回転させたいので、コードを変更しました。

しかし、結果は奇妙です。下の写真を見てください。 ここに画像の説明を入力

しかし、以下のコードでビデオ フレームを正常に反転できます。

ローテーションを達成する方法、誰か助けてくれませんか?

追加:

最初に、各描画アクションに常に次のコードを使用したことを伝えたいと思います。

このデモを使用してテストを行います。これは、このテストにとって非常に優れたデモです。 https://github.com/izacus/AndroidOpenGLVideoDemo

surfacetexture から取得した行列は次のとおりです。

1.0、0.0、0.0、0.0

0.0、-1.0、0.0、0.0

0.0、0.0、1.0、0.0

0.0、1.0、0.0、1.0

「Matrix.setRotateM(videoTextureTransform, 0, 270 , 0, 0, 1);」の後、

それは次のようになりました:

1.1924881E-8、-1.0、0.0、0.0

1.0、1.1924881E-8、0.0、0.0

0.0、0.0、1.0、0.0

0.0、0.0、0.0、1.0

このビデオ効果は次のとおりです。 ここに画像の説明を入力

0 投票する
1 に答える
335 参照

android - Egl で構成されたサーフェスをネイティブに渡し、データをプッシュする際の問題

まず、すばらしい例を提供してくれた fadden に感謝します。

このContinuousCapture.java の例に従って試してみ たところ、以下のプログラムが作成されました。

1)

ANativeWwindow 参照を取得し、ANative lock メソッドと unlockpost メソッドを使用して BufferQueue を取得し、データを入力することで、ネイティブ レイヤーの TextureView に画像を表示しようとして ます。

すなわち:

2)

同時に、この Surface からデータを取得してエンコーダに渡したいと考えています。または、別の面に表示します。

最初のステップとして、EglCore を別のスレッドに初期化し、EglContext でユーザー指定のサーフェスを構成しようとする以下のクラスを作成しました。ここまでは順調ですね。しかし、lock & unlockAndPost メソッドで前述したように、データをバッファーにコピーしようとすると、以下のエラーが表示されます。

質問: それは正しいアプローチですか?. または私は何かを見落としましたか?

親切に私を助けてください。

0 投票する
1 に答える
520 参照

android - 非同期表示に役立つ BufferQueue 同期ロジックを理解できない

このリンクから Android アーキテクチャを読んでい ます。

最初の試みでは、あちこちの断片を除いてすべてを理解できませんでした。

私は何を理解していますか?

1)

「同期フレームワーク」と呼ばれるものがあります。- わかった

2)

この同期フレームワークは、プロセス間、およびユーザー空間とカーネル空間の間で使用できます。- わかった

3)

非同期メカニズムに使用されます。- わかった。

4)

同期フレームワークがないと仮定します。

与えられたバッファを表示する表示システムがあります。

同期であるため、遅延が発生する可能性があります。

5)

同期フレームワークがサポートされていると仮定します。それは次のようなものです: 表示システムにバッファと startfence を与えます。startfence でシグナルを受け取ったときにバッファを表示する必要があります。同時に、完了したら、donefence で私を親密にする必要があります。表示システムが私に提供したもの。[完全には理解できていませんが、非同期モデルに役立つと感じています]、システムのレンダリング中にバッファを埋めることができます。

灰色の領域: それでも、非同期モードで display_buffer を使用する方法の疑似コードを書くことができませんでした。

Androidの公式リンクから段落を読んでいます。

"最近の Android デバイスは「同期フレームワーク」をサポートしています。これにより、グラフィックス データを非同期に操作できるハードウェア コンポーネントと組み合わせると、システムは気の利いたことを行うことができます。たとえば、プロデューサーは一連の OpenGL ES 描画コマンドを送信してからキューに入れることができます。レンダリングが完了する前の出力バッファ. バッファには, コンテンツの準備ができたことを知らせるフェンスが付随する. 2 つ目のフェンスはバッファがフリー リストに戻されるときに付随するため, コンシューマはコンテンツがまだ残っている間にバッファを解放できる.このアプローチにより、バッファーがシステム内を移動する際のレイテンシーとスループットが向上します。

質問:

私は特にこの声明に混乱しています。

「コンテンツがまだ使用されている間にコンシューマがバッファを解放できるように、バッファがフリー リストに返されるときに 2 つ目のフェンスが付随します。このアプローチにより、バッファがシステムを移動する際のレイテンシとスループットが向上します。」

同じバッファの 2 番目のフェンス?. または別のバッファ?私が見るように、2つのバッファキューがあり、1つはリストがいっぱいで、もう1つは空のリストです。

0 投票する
0 に答える
397 参照

android - Android で外部テクスチャから EGLSurface にブリットできない

テクスチャと変換マトリックスを EGLSurface にレンダリングしようとすると、ビューに何も表示されません。

この問題のフォローアップとして、 grafika/fadden サンプル コードの連続キャプチャに従って、コードを少し修正しました。

これが私のコードです:

RenderThread で実行される draw メソッドを次に示します。

この描画メソッドは、ネイティブ コードからプロデューサ側でデータが生成されるたびに適切に呼び出されます。

ネイティブ側でデータを生成するかどうかを確認するために、EGL 構成なしでユーザー サーフェスを直接渡すと、フレームが画面にレンダリングされます。

ネイティブレベルでは、

私が使用するフレームをレンダリングするには

何が間違っているのか、どこをもっと掘り下げる必要があるのか​​ 考えられませんでした。

助けてくれてありがとう。

0 投票する
0 に答える
1510 参照

performance - glMapBufferRange() が遅く、マッピングされたデータの memcpy() も Android で遅い

グラフィックの ContinuousCaptureActivity ( ContinuousCaptureActivity.java のソース コード)に似たビデオ録画デモを作成することができました。

違いは、grafika はハードウェア エンコーディングを使用していましたが、私はソフトウェア エンコーディングを使用したことです。ソフトウェア エンコーディングでは、非常に高速な PBO を使用して GPU からすべてのビデオ フレームを取得し、画像データを ffmpeg にコピーしてから、h264 エンコーディングを行います。

glMapBufferRange() は 5 ミリ秒未満 memcpy() は10 ミリ秒未満でした。

しかし、huawei mate7の携帯では性能が低い。glMapBufferRange() は 15~30ms、memcpy() は 25~35ms かかりました。

mate7 で通常の memcpy() をテストしましたが、通常のメモリをコピーするとはるかに高速です。

それは本当に奇妙です、誰が私を助けてくれますか?

デバイス情報:

詳細はこちら:huawei mate 7

pbo コードは次のとおりです。

0 投票する
1 に答える
1856 参照

android - Android - ガウスぼかしのような効果 - OpenGL

指定されていない場合、この質問は、github にあるgrafikaプロジェクトCameraCaptureActivity内に構築されているだけです。

3x3 カーネルを使用する組み込みのぼかし効果があります。

ただし、このぼかし効果は十分に強力ではありません。ガウス効果がiOSでできることのようなものを探していUIVisualEffectViewます。次のようになります。

素敵な滑らかな重いぼかし効果ですが、これまでのところ、管理されている最高の ive は次のとおりです。

ご覧のとおり、滑らかではなく、少し角張っています。

これは、シグマが 30、カーネル サイズが 5 のこの便利なツールを使用して生成された 5x5 カーネルに変換することで実現しました。次のように生成されます。

Grafikaプロジェクト内で動作させるために、クラス内で変更する必要がKERNEL_SIZEありましたmTexOffsetTexture2dProgram

KERNEL_SIZEは現在25mTextOffset次のように計算されています。

iOSのようなぼかしを実現するために何を変更できるかについて誰か提案がありますか(iOSもピクセルを明るくしていると思います)? 私が本当に間違っているのは setTextSize() の計算、特に50.0f値だと思います。これを薄い空気から取り出して、その効果を観察しました

0 投票する
1 に答える
1651 参照

android - Grafika CameraCapture コードを使用して拡張された Android カメラ プレビュー

Grafika の CameraCaptureActivityコードを使用して直面している問題について助けを求めています。カメラを記録してプレビューを表示できるアプリを構築したいので、このサンプルとコードはまさに私が望んでいたものと同じように見え、これまでのところ素晴らしいものでした。

私が抱えている問題は、カメラのプレビュー サイズが、プレビューの表示に使用する正確なサイズと一致しない場合GLSurfaceView、引き伸ばされたプレビューが表示されることです。

外観は次のとおりです。

引き伸ばされたプレビュー

ご覧のとおり、ノート シートは完全な正方形であるため、横方向に引き伸ばされています。

Samsung Galaxy S4 でのこの正確な例では、カメラのプレビュー サイズは( API1280x720を使用して利用可能なプレビュー サイズから抽出された) であり、は画面全体をカバーします。Camera2GLSurfaceView1920x1080

いつ表示されますか?

この問題は、SurfaceView がカメラ出力と比較してアップスケールされている場合に発生します。比率が正しいままであることを常に確認している場合でも ( 1920x1080= 1,5 * 1280x720)。

どのコードを使用していますか?

以下を含むGrafikaのコードを使用します。

いくつかのログ?

SurfaceFlinger ダンプは次のようになります。

カメラのプレビュー サイズ コード?

何を試しましたか?

最初はこれがCamera2問題だと思ったので、古い Camera API だけを使用しようとしましたが、結果は同じです。

それから比率の問題かと思いましたが、ご覧のとおり、ここの比率は水平方向と垂直方向で問題ありません。

私の賭けは、Surface のサイズが変更されたときに適用される OpenGL 変換があることですが、私は OpenGL の純粋な初心者なので、機能するものを見つけることができませんでした。これらの行を追加してみましたが、役に立ちません:

Grafika からの別の例:

これは、Grafika アプリからの別の問題の例です。

電話: Galaxy S3 Neo ( GT-I9301L) - Android 4.4.2

電話には画面があり、解像度で1280x720カメラが開かれ、 . 外観は次のとおりです。640x480573x430

GS3 Neoでストレッチ

SurfaceFlinger ログ:

Grafika のアプリ ログ:

そう...

うまく機能させる方法についてアイデアをお持ちの方がいらっしゃいましたら、ぜひご連絡ください。

ありがとう!