録画したビデオにフィルターを追加できるアプリを作成しようとしています。基本的に、私は Instagram ビデオや Viddy に存在する機能を複製したいと考えています。
私は調査を行いましたが、すべてをまとめることはできません。GLSurfaceView を使用して記録されたビデオを再生することを検討しましたが、NDK を使用してピクセル操作を行い、SurfaceView に送り返すか、何らかの方法で保存できることを知っています。問題は、ピクセルデータにアクセスする機能がないように見えるため、ピクセルデータの送信方法がわからないことです。このアイデアは、カメラ機能「onPreviewFrame」から生まれました。この関数はバイト配列を返し、ピクセルを操作して表示できるようにします。
もう 1 つのアイデアは、GLSurfaceView を使用し、OpenGL を使用してフィルターをレンダリングすることです。GLSurfaceView には設定可能なレンダラーがありますが、私は OpenGL にあまり詳しくありません。しかし、これは実際に各ビデオ フレームのピクセルを取得することに戻ります。また、各フレームをテクスチャとしてリッピングし、OpenGL でテクスチャを操作することについても読みましたが、私が遭遇した答えはあまり詳細ではありません。
最後に、JavaCV について調べました。FFmpegFrameGrabber を使用しようとしていますが、あまり使用していません。1 つのフレームだけを取得したかったのですが、フレームの ByteBuffer を ImageView に書き込もうとすると、「バッファーがピクセルに対して十分な大きさではありません」というエラーが発生します。
どんなガイダンスも素晴らしいでしょう。