問題タブ [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.
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);
を置き換えるために使用します
しかし、結果は奇妙です。下の図を参照してください。
私は本当にそれを理解することができません、そしてそれを行う正しい方法は何ですか?
誰が私にアドバイスをくれますか?
android - 背景色を設定できず、EGL で出力をクリアできません
OpenGLを学ぶために、Androidで以下のサンプルコードを試しました。しかし、期待される出力が表示されませんでした。問題がどこにあるか指摘してください。
fadden の寄稿を参考にしました。
ステップ1:
renderHandler で renderThread を作成しました。
RenderThread コンストラクターで受け取った userSurface。
現在、Choreographer Callback メカニズムを使用して doFrame() API を呼び出して、表面に色を描画するだけです。
注: アプリケーションは TextureView を使用し、次の方法でサーフェスを受け取りました。
問題:
OpenGL コーディングの正しい手順に沿っているかどうかはわかりません。また、表面に色が表示されていませんが、黒色のみです。何もしなくても黒い色をします。
入力をお願いします。また、私が注意する必要がある不足している部分を教えてください。
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
android - Egl で構成されたサーフェスをネイティブに渡し、データをプッシュする際の問題
まず、すばらしい例を提供してくれた fadden に感謝します。
このContinuousCapture.java の例に従って試してみ たところ、以下のプログラムが作成されました。
1)
ANativeWwindow 参照を取得し、ANative lock メソッドと unlockpost メソッドを使用して BufferQueue を取得し、データを入力することで、ネイティブ レイヤーの TextureView に画像を表示しようとして います。
すなわち:
2)
同時に、この Surface からデータを取得してエンコーダに渡したいと考えています。または、別の面に表示します。
最初のステップとして、EglCore を別のスレッドに初期化し、EglContext でユーザー指定のサーフェスを構成しようとする以下のクラスを作成しました。ここまでは順調ですね。しかし、lock & unlockAndPost メソッドで前述したように、データをバッファーにコピーしようとすると、以下のエラーが表示されます。
質問: それは正しいアプローチですか?. または私は何かを見落としましたか?
親切に私を助けてください。
android - 非同期表示に役立つ BufferQueue 同期ロジックを理解できない
このリンクから Android アーキテクチャを読んでい ます。
最初の試みでは、あちこちの断片を除いてすべてを理解できませんでした。
私は何を理解していますか?
1)
「同期フレームワーク」と呼ばれるものがあります。- わかった
2)
この同期フレームワークは、プロセス間、およびユーザー空間とカーネル空間の間で使用できます。- わかった
3)
非同期メカニズムに使用されます。- わかった。
4)
同期フレームワークがないと仮定します。
与えられたバッファを表示する表示システムがあります。
同期であるため、遅延が発生する可能性があります。
5)
同期フレームワークがサポートされていると仮定します。それは次のようなものです: 表示システムにバッファと startfence を与えます。startfence でシグナルを受け取ったときにバッファを表示する必要があります。同時に、完了したら、donefence で私を親密にする必要があります。表示システムが私に提供したもの。[完全には理解できていませんが、非同期モデルに役立つと感じています]、システムのレンダリング中にバッファを埋めることができます。
灰色の領域: それでも、非同期モードで display_buffer を使用する方法の疑似コードを書くことができませんでした。
Androidの公式リンクから段落を読んでいます。
"最近の Android デバイスは「同期フレームワーク」をサポートしています。これにより、グラフィックス データを非同期に操作できるハードウェア コンポーネントと組み合わせると、システムは気の利いたことを行うことができます。たとえば、プロデューサーは一連の OpenGL ES 描画コマンドを送信してからキューに入れることができます。レンダリングが完了する前の出力バッファ. バッファには, コンテンツの準備ができたことを知らせるフェンスが付随する. 2 つ目のフェンスはバッファがフリー リストに戻されるときに付随するため, コンシューマはコンテンツがまだ残っている間にバッファを解放できる.このアプローチにより、バッファーがシステム内を移動する際のレイテンシーとスループットが向上します。」
質問:
私は特にこの声明に混乱しています。
「コンテンツがまだ使用されている間にコンシューマがバッファを解放できるように、バッファがフリー リストに返されるときに 2 つ目のフェンスが付随します。このアプローチにより、バッファがシステムを移動する際のレイテンシとスループットが向上します。」
同じバッファの 2 番目のフェンス?. または別のバッファ?私が見るように、2つのバッファキューがあり、1つはリストがいっぱいで、もう1つは空のリストです。
android - Android で外部テクスチャから EGLSurface にブリットできない
テクスチャと変換マトリックスを EGLSurface にレンダリングしようとすると、ビューに何も表示されません。
この問題のフォローアップとして、 grafika/fadden サンプル コードの連続キャプチャに従って、コードを少し修正しました。
これが私のコードです:
RenderThread で実行される draw メソッドを次に示します。
この描画メソッドは、ネイティブ コードからプロデューサ側でデータが生成されるたびに適切に呼び出されます。
ネイティブ側でデータを生成するかどうかを確認するために、EGL 構成なしでユーザー サーフェスを直接渡すと、フレームが画面にレンダリングされます。
ネイティブレベルでは、
私が使用するフレームをレンダリングするには
何が間違っているのか、どこをもっと掘り下げる必要があるのか 考えられませんでした。
助けてくれてありがとう。
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 コードは次のとおりです。
android - Android - ガウスぼかしのような効果 - OpenGL
指定されていない場合、この質問は、github にあるgrafikaプロジェクトCameraCaptureActivity
内に構築されているだけです。
3x3 カーネルを使用する組み込みのぼかし効果があります。
ただし、このぼかし効果は十分に強力ではありません。ガウス効果がiOSでできることのようなものを探していUIVisualEffectView
ます。次のようになります。
素敵な滑らかな重いぼかし効果ですが、これまでのところ、管理されている最高の ive は次のとおりです。
ご覧のとおり、滑らかではなく、少し角張っています。
これは、シグマが 30、カーネル サイズが 5 のこの便利なツールを使用して生成された 5x5 カーネルに変換することで実現しました。次のように生成されます。
Grafika
プロジェクト内で動作させるために、クラス内で変更する必要がKERNEL_SIZE
ありましたmTexOffset
Texture2dProgram
KERNEL_SIZE
は現在25
、mTextOffset
次のように計算されています。
iOSのようなぼかしを実現するために何を変更できるかについて誰か提案がありますか(iOSもピクセルを明るくしていると思います)? 私が本当に間違っているのは setTextSize() の計算、特に50.0f
値だと思います。これを薄い空気から取り出して、その効果を観察しました
android - Grafika CameraCapture コードを使用して拡張された Android カメラ プレビュー
Grafika の CameraCaptureActivityコードを使用して直面している問題について助けを求めています。カメラを記録してプレビューを表示できるアプリを構築したいので、このサンプルとコードはまさに私が望んでいたものと同じように見え、これまでのところ素晴らしいものでした。
私が抱えている問題は、カメラのプレビュー サイズが、プレビューの表示に使用する正確なサイズと一致しない場合GLSurfaceView
、引き伸ばされたプレビューが表示されることです。
外観は次のとおりです。
ご覧のとおり、ノート シートは完全な正方形であるため、横方向に引き伸ばされています。
Samsung Galaxy S4 でのこの正確な例では、カメラのプレビュー サイズは( API1280x720
を使用して利用可能なプレビュー サイズから抽出された) であり、は画面全体をカバーします。Camera2
GLSurfaceView
1920x1080
いつ表示されますか?
この問題は、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
カメラが開かれ、 . 外観は次のとおりです。640x480
573x430
SurfaceFlinger ログ:
Grafika のアプリ ログ:
そう...
うまく機能させる方法についてアイデアをお持ちの方がいらっしゃいましたら、ぜひご連絡ください。
ありがとう!