Я пытаюсь создать приложение, где я могу добавлять фильтры к записанному видео. В принципе, я хочу воспроизвести функциональность, существующую в видеоролике Instagram, или Viddy.
Я провел исследования, и я не могу собрать все это вместе. Я изучил использование GLSurfaceView для воспроизведения записанного видео, и я знаю, что могу использовать NDK для манипуляции пикселями и отправить его обратно в SurfaceView или сохранить его каким-то образом. Проблема в том, что я не знаю, как отправлять данные пикселя, потому что, похоже, нет никакой функции для доступа к нему. Эта идея исходила от функции камеры "onPreviewFrame". Функция возвращает массив байтов, позволяющий мне манипулировать пикселями и отображать их.
Другая идея - использовать GLSurfaceView и использовать OpenGL для рендеринга фильтра. У GLSurfaceView есть средство визуализации, которое вы можете установить, но я не очень хорошо знаком с OpenGL. Но опять же, это возвращается к фактическому получению пикселей каждого видео кадра. Я также читал о том, чтобы разорвать каждый кадр как текстуру, а затем манипулировать текстурой в OpenGL, но ответы, которые я встретил, не очень детализированы.
Наконец, я просмотрел JavaCV. Попытка использовать FFmpegFrameGrabber, но у меня тоже не было. Я хотел просто захватить один кадр, но когда я пытаюсь записать фрейм ByteBuffer в ImageView, я получаю ошибку "буфер не достаточно большой для пикселей".
Любое руководство будет замечательным.