2

GPUImage の Android ポートをOpenGL レンダラーおよび複数のフィルターのマネージャーとして使用するアプリケーションがあります。

現在、ビデオの実装がないため、Google grafika リポジトリの RecordFBOActivity を GPUImage アーキテクチャで動作するように適応させようとしています。

ベース GPUImage クラスは GLContext と GLSurfaceView を管理し、GPUImageRenderer クラスは Renderer クラスを実装します。

これは、grafika の RecordFBOActivity から RenderThread を適応させようとしているクラスです。いくつかの問題があります。

まずpreparegl()メソッドで、GPUImage は SurfaceHolder をまったく使用しないため、Surface の代わりに SurfaceTexture を渡します(実装できると思いますが、基本コードをあまり変更しないようにしています。私の実装を前述のレポにプッシュバックしたいと思います)。WindowSurface.javaには、SurfaceTexture とSurfaceTextureからWindowSurfaceを構築するためのオーバーロードされたメソッドがあることは知っていますが、これを行うと、mSurface iVar は常に null になります。渡すサーフェスがないため、NPE が発生します。記録のmakeCurrent()メソッドで。

第二に、GPUImageは grafika の例が使用するようなSurfaceViewではなく、GLSurfaceViewにアタッチするため、競合を引き起こしている可能性のある低レベルの矛盾があるかどうかは少しわかりません...

第三に、少なくとも現時点ではこれが主な問題だと思いますが、GPUImage のカメラ プレビューをgrafikaのWindowSurfaceと調整できないようです。prepareGl()メソッドをコメント アウトすると、 GPUImage のsetUpSurfaceTexture()は、 glGenTextures ( )によって作成されたSurfaceTextureからカメラのプレビュー テクスチャを設定し、プレビューは正常に動作します..フィルター レンダー チェーンにアタッチされるだけでなく、 . ただし、prepareGL()メソッドを呼び出して、まったく同じSurfaceTextureをmWindowSurfaceのコンストラクターに渡すと、、カメラ サービスが停止し、EGL_BAD_SURFACEエラーが発生します。

いくつかの可動部分がある長い質問ですが、私は知っています...問題と自分へのアプローチを明確にすることができるので、編集/更新を試みます。しかし、誰かが何か考え/尋問をしてくれたら嬉しいです...特に@fadden :D

4

1 に答える 1

0

私も同じことを達成しようとしていて、faddenが提案したことを試しました。CameraSurfaceRendererに機能を統合しようとしましたGPUImageRenderer。プレビューは問題ありませんが、録画は黒いフレームのビデオです。EGL14.eglGetCurrentContext()次の呼び出しに対して戻りますnull。私の推測では、新しいコンテキストが作成された場合、それは持っている可能性があるものと同じではありGPUImageません

mVideoEncoder.startRecording(new TextureMovieEncoder.EncoderConfig(
                                    mOutputFile, 640, 480, 1000000, EGL14.eglGetCurrentContext()));

@Jesses.co.tt 達成できましたか?

(コメントを追加できないため、回答として追加されます)。

于 2014-12-06T17:17:23.443 に答える