라이브 카메라 미리보기에 SurfaceTexture를 사용하고 있습니다. 이렇게하면 데이터 스트림이 텍스처로 GPU에 직접 전송됩니다.Android camera surfaceTexture - 이전 프레임을 보존하는 방법?
이 질감은 각각의 새로운 카메라 프레임에 오는 덮어 씌우됩니다
을 지금 -. 나는이 덮어 쓰기를 방지하고 (내 궁극적 인 목표는 여기입니다) 메모리에 지난 수 (n)은 이전 프레임을 유지하려면
카메라의 데이터가 항상 n 개의 텍스처에서 가장 오래된 텍스처를 덮어 씁니다. 나는 그 (것)들 사이에서 교체 할 필요가있다.
이 텍스처는 데이터가 들어오는대로 즉시 렌더링에 사용할 수 있어야
내가 필요 없어요 :. 바이트 버퍼로 캡처 된 데이터를 저장하고 새로운 텍스처로 다시 변환 = 모두 실시간으로 천천히해야합니다 시각. 여기에 성과가 핵심입니다.
내가 surfaceTexture 모드에서 카메라를 실행하려면이 프로그램 예제를 사용했다: 나는 attachToGLContext (INT의 texName) SurfaceTexture 클래스의 방법을 사용하여 새로운 질감을 연결하는 시도 http://maninara.blogspot.co.uk/2012/09/render-camera-preview-using-opengl-es.html
하지만에 나를 수있는 것 같지 않습니다
http://developer.android.com/reference/android/graphics/SurfaceTexture.html
.. 나는 새를 부착하기 전에 "() detachFromGLContext"를 사용해야합니다 같은 이전을 파괴하지 않고, 보이는 것을 이해해야 어떤 도움을한다.
라이브 텍스처는 .updateTexImage()에 의해 제공됩니다. 그래서 요약하면 : 1. onDraw : glGenTextures를 사용하여 저장할 텍스처의 빈 슬롯을 예약합니다. 2. 카메라 미리보기의 스트림이 이미지 데이터가 아닌 텍스처 형식으로 제공됩니다 (GLES11Ext.GL_TEXTURE_EXTERNAL_OES, hTex [0 ]). 따라서 glGetTexImage를 사용하여 다음을 사용하여 이미지 데이터 ("camera_data"라고 부름)에 대한 참조를 가져옵니다. glGetTexImage (GLES11Ext.GL_TEXTURE_EXTERNAL_OES, 0, format, type, camera_data)) 3. 단계를 수행합니다. 다음 프레임이 방금 저장 한 텍스처를 덮어 쓰지 않을까요? – Jayco
여기서 무슨 일이 일어나는지 구별하는 것이 중요합니다. : 한 이미지의 데이터가 3MB라고 가정 해 보겠습니다. 카메라가 미리보기 텍스처를 피드하면 프레임 당 한 번만 3MB를 GPU로 이동하고 렌더링합니다 (카메라 캡처 -> 3MB 이동 -> GPU 렌더링). 이 모든 프레임 보존 작업을 수행 할 때 다음과 같은 작업을 수행 할 수 있습니다. 3MB 데이터에 대한 참조를 이동 하시겠습니까? (정확히 원하는 것입니다) 이렇게 : (카메라 캡쳐 -> 3MB 이동 -> GPU 렌더 -> 3MB로 유지 & 보존) 아니면 실제로 3MB를 한 번 이상 옮깁니 까? 이렇게 : (카메라 캡처 -> 3MB 이동 -> GPU 렌더 -> 3MB를 다시 텍스쳐로 이동) Thx – Jayco
1. 예, glGenTextures를 사용하여 텍스처가 저장 될 슬롯을 확보하십시오. 2. 사용하지 않았습니다. 전에 glGetTexImage, 나는 네 길을 생각한다. 3. glActiveTexture와 glBindTexture를 사용하여 덮어 쓸 슬롯을 선택하십시오.따라서 덮어 쓰지 않으려는 슬롯을 예약 할 수 있습니다. 4. glGetTexImage를 호출 할 때 (3MB 이동 - 텍스처 가져 오기) 프로세스가 발생한다고 생각하므로 동일한 프레임에서 glGetTexImage를 다시 호출하지 않으면 3MB 이동이 프레임 당 한 번 수행됩니다. – gloompisces