私はOpenGL処理パイプライン(シェーダのコレクション)を持つアプリケーションを設計しており、同時にエンドユーザは未処理のカメラプレビューを見る必要があります。カメラの同時プレビューと処理
たとえば、カメラのプレビューを表示すると同時に、カメラから受け取ったシーンの赤いオブジェクトの数をカウントするとしますが、オブジェクトをカウントするために使用するシェーダ色相フィルタリングなどがユーザに見られないようにする。
これを正しく設定するにはどうすればよいですか?
私はカメラのプレビューをセットアップしてから、コールバックでカメラフレームデータをYUV形式で受け取ってから、OpenGLテクスチャにダンプしてフレームを処理しますが、それに関連したパフォーマンス上の問題があります。カメラのハードウェアからVMにデータをラウンドトリップしてから、GPUのメモリに戻す必要があります。私はSurfaceTexture
を使用して、カメラから直接データをOpenGLの理解可能な形式で取得し、この問題を解決するためにシェーダに渡します。
私はエンドユーザーにSurfaceTexture
同じ未処理のことを示すことができるだろうと思ったが、私はそれを私はそれをレンダリングしたいSurfaceTexture
を渡すことができ、コンストラクタやセッターをTextureView
ありません。常に独自のものを作成します。
- GLRenderThread:
これは私の現在の設定の概要を説明し、このクラスでは、スレッドから延びOpenGLコンテキストをセットアップ、ディスプレイ等の表面(eglCreateWindowSurfaceの3番目のパラメータ)としてSurfaceTextureを使用しています。
- GLFilterChain:入力テクスチャの検出を実行するシェーダのコレクション。
- カメラ:最後にGLRenderThreadのSurfaceTexture 明らか
を表示TextureViewは、この設定で、私が示すよ
リアルタイムプレビュー用と処理用の2つのGLコンテキストを使用する必要があると思いますが、私は確信していません。私は誰かが私を正しい方向に押し込むことを望んでいる。
http://stackoverflow.com/questions/12519235/modifying-camera-output-using-surfacetexture-and-opengl –