Procesamiento de vídeo en Android 3.x / Google TV / SDK: Marco de vídeo a SurfaceTexture / OpenGL / GLSL
Después de pasar algún tiempo en él, podría ser mejor preguntar. Gracias por ayudar, chicos!
Pregunta
- Zoom in OpenGL ES 2.0 - desapareciendo objeto
- Android OpenGL texturas se ven terrible en Sprint Samsung Galaxy s2 Epic Touch 4g
- LibGDX - Selector de color
- Texturas OpenGL de Android: crearlas y borrarlas al vuelo
- Android: actualiza el mapa de bits del hilo del temporizador
- ¿Cómo renderizar una trama de vídeo de MediaPlayer o VideoView a SurfaceTexture o una textura de OpenGL, para cambiar el color de la textura / fragmento a través de GLSL? (Lo necesitamos para las rutinas de procesamiento de vídeo GLES / GLSL).
Contexto
A) Google TV (dispositivo LG G2 2012) es un dispositivo Android 3.2 con soporte para SDK (sin NDK)
B) Es fácil de hacer desde la cámara a SurfaceTexture, pero ¿cómo hacer el vídeo a SurfaceTexture en Android 3.x? Para la solución de la cámara, vea abajo.
C) Ya estoy haciendo marcos de video a un GLView / GLRenderer, pero no estoy cogiendo un marco para cambiarlo a través de GLSL. Parece que no funciona. Pero necesito texturas GLES / GLSL accesibles con datos de video para procesamiento de video:
Clase MainActivity:
public void onCreate(Bundle state) { super.onCreate(state); m_View = new GLSimpleView(this); setContentView(m_View); m_Holder = m_View.getHolder(); m_Holder.addCallback(this); m_Holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); }
Clase GLSimpleView:
public GLSimpleView(Context context) { super(context); m_Renderer = new GLTextureRenderer(context); this.setRenderer(m_Renderer); }
GLTextureRender clase:
int[] textures = new int[1]; GLES20.glGenTextures(1, textures, 0); m_SurfaceTexture = textures[0]; GLES20.glBindTexture(GL_TEXTURE_EXTERNAL_OES, mTextureID); GLES20.glTexParameterf(GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_NEAREST); GLES20.glTexParameterf(GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR); GLES20.glTexParameteri(GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE); GLES20.glTexParameteri(GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE); m_Surface = new SurfaceTexture(m_SurfaceTexture); m_Surface.setOnFrameAvailableListener(this); // THIS ONE DOESN'T WORK WITH ANDROID 3.x! // HOW TO BIND m_Surface TO m_MediaPlayer? //Surface surface = new Surface(m_Surface); //m_MediaPlayer.setSurface(surface); //surface.release();
También compare esto:
-
SurfaceTexture para cámara (Necesito este para MediaPlayer o VideoView!): Uso de SurfaceTexture en Android
-
Vídeo a GLView (no hay acceso a texturas a través de GLSL!): Reproduciendo video en un GLSurfaceView en lugar de SurfaceView
-
Android 4.x SDK VideoSurfaceTexture muestra (no compatible con 3,2): http://source-android.frandroid.com/cts/tests/src/android/media/cts/VideoSurfaceView.java
-
Android MediaPlayer (en Android 3.x no hay soporte de setSurface ()!): Http://developer.android.com/reference/android/media/MediaPlayer.html
Por lo tanto la pregunta principal sigue siendo: ¿Cómo acceder y manipular un marco de vídeo con Android 3.x? Tal vez una solución diferente? ¿Me estoy perdiendo algo, después de pasar demasiado tiempo? Considere que no hay soporte de NDK en Google TV en absoluto, que somos muy limitados si tratamos de manipular datos de video.
- ¿Por qué está bloqueando glClear en OpenGLES?
- Usando Tracer Para opengl en depurador android
- Android Opengl ES Número máximo de texturas
- Android sólo juego en OpenGL: rendimiento en C ++ (NDK) vs Java (Dalvik)
- Android opengl dibujar el modelo 3d de archivo .obj
- Mover la cámara alrededor de la esfera
- NVidia PerfHUD ES Tegra en Google Nexus 7
- Vista previa de la cámara de corte para TextureView
Megha tuvo la amabilidad de investigar esto para mí. No apoyamos esto en Google TV para ARM. Es imposible con nuestro SOC actual (Sistema en un chip).
- Android wifi obtener la frecuencia de la Wifi conectado
- ¿Hay alguna manera de acceder automáticamente a cualquier Log in Logcat por un doble clic?