Я использую SurfaceTexture для предварительного просмотра камеры. Это отправляет поток данных непосредственно на GPU в виде текстуры.Камера Android surfaceTexture - Как сохранить предыдущие кадры?
Эта текстура получает перезаписана с каждой новой кадр камеры приходит в
Теперь. - Я хочу, чтобы избежать этого перезаписи и сохранить последние несколько (N) предыдущих кадров в памяти (которая является моей конечной целью здесь)
Данные, поступающие с камеры, всегда будут перезаписывать самую старую текстуру из n количества доступных текстур. Мне просто нужно чередовать их.
Этих текстуры должны быть доступны для немедленного предоставления, так как данные поступают в
Мне не нужно:., Чтобы сохранить полученные данные в виде байтового буфера и преобразовать его обратно в новые текстуры = медленно, все должно быть в режиме реального времени время. Здесь важна производительность.
Я использовал этот пример программы для запуска камеры в режиме surfaceTexture: http://maninara.blogspot.co.uk/2012/09/render-camera-preview-using-opengl-es.html
Я попытался приклеить новую текстуру, используя attachToGLContext (INT texName) метод класса SurfaceTexture, но это не кажется, что позволяет мне сделать это, не разрушая предыдущую, кажется, что я должен использовать «detachFromGLContext()» перед установкой новый ..
http://developer.android.com/reference/android/graphics/SurfaceTexture.html
Любая помощь приветствуется.
Живая текстура питается .updateTexImage(). Итак, вкратце ?: 1. onDraw: используйте glGenTextures для резервирования свободных слотов для текстур, которые будут сохранены. 2. Поток из предварительного просмотра камеры поступает в виде текстуры, а не как данные изображения (GLES11Ext.GL_TEXTURE_EXTERNAL_OES, hTex [0 ]). Поэтому я буду использовать glGetTexImage для получения ссылки на данные изображения (вы назвали его «camera_data»), используя это: glGetTexImage (GLES11Ext.GL_TEXTURE_EXTERNAL_OES, 0, формат, тип, camera_data)) 3. Следуя инструкциям. Правильно ли это выглядит? Будет ли следующий кадр не перезаписывать текстуру, которую мы только что сохранили? – Jayco
Теперь важно для меня различать, что здесь происходит ?: Позволяет сказать, что данные одного изображения - 3 МБ. Когда камера подает текстуру предварительного просмотра, она перемещает 3 МБ на графический процессор только один раз на кадр и отображает: (Захват камеры -> перемещение 3 МБ -> рендеринг графического процессора). Когда мы делаем все это сохранение кадра, мы: Перемещение ссылок на данные 3 МБ? (это именно то, что я хотел) Вот так: (Camera capt. -> move 3MB -> GPU rend. -> получить ссылку на 3MB и сохранить) Или мы перемещаем фактическое 3 МБ более одного раза? Например: (Захват камеры -> перемещение 3 МБ -> разгон графического процессора. -> Переместите 3 МБ в текс снова) Thx – Jayco
1. Да, используйте glGenTextures, чтобы зарезервировать свободные слоты для текстур, которые будут сохранены. 2. Я не использовал glGetTexImage раньше, я думаю, что ваш путь прав. 3. Используйте glActiveTexture и glBindTexture, чтобы выбрать слот, который вы хотите перезаписать.Поэтому вы можете зарезервировать слоты, которые вы не хотите перезаписывать. 4. Я думаю, что процесс (перемещение 3MB -> получить текстуру) происходит, когда вы вызываете glGetTexImage, поэтому, если вы не вызываете glGetTexImage снова на одном кадре, перемещение 3MB будет выполняться один раз на каждый кадр. – gloompisces