2012-08-04 11 views
5

Nachdem er einige Zeit in sie zu verbringen, könnte es besser zu fragen sein. Danke für die Hilfe, Leute!Video-Verarbeitung auf Android 3.x/Google TV/SDK: Videorahmen zu SurfaceTexture/OpenGL/GLSL

Frage

  • Wie ein Videobild von Mediaplayer oder Videoview zu SurfaceTexture oder eine OpenGL Textur, um zu machen, um die Textur/Fragmentfarbe über GLSL zu ändern? (Wir brauchen es für ausgefallene GLES/GLSL Videoverarbeitungsroutinen.)

Kontext

a) Google TV (LG G2 2012-Gerät) ist ein Android 3.2-Gerät mit SDK-only-Unterstützung (kein NDK)

b) Es ist leicht von der Kamera auf SurfaceTexture zu machen, aber wie Video SurfaceTexture in Android 3.x zu machen? Für die Kameralösung, siehe unten.

c) Ich bin Rendering bereits Video-Frames zu einem GLView/GLRenderer, aber ich bin nicht, einen Rahmen zu ändern, um es über GLSL greifen. Es scheint nicht zu funktionieren. Aber ich brauche zugänglich GLES/GLSL Texturen mit Videodaten für die Videoverarbeitung:

MainActivity Klasse:

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); 
} 

GLSimpleView Klasse:

public GLSimpleView(Context context) { 
    super(context); 

    m_Renderer = new GLTextureRenderer(context); 
    this.setRenderer(m_Renderer); 
} 

GLTextureRender Klasse:

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(); 

Auch vergleichen Sie diese:

Deshalb ist die Hauptfrage ist nach wie vor: Wie für den Zugriff auf und ein Videobild mit Android 3.x zu manipulieren? Vielleicht eine andere Lösung? Fehle ich etwas, nachdem ich zu viel Zeit verbracht habe? Bedenken Sie, dass es keine NDK Unterstützung auf Google TV überhaupt, dass wir sehr begrenzt sind, wenn wir versuchen, Videodaten zu manipulieren.

+0

Kennen Sie schon: http://stackoverflow.com/questions/8620560/video-processing-in-android? Ich auch gespannt, ob Sie bei der jetzt veraltet render Graphics API für Ihr Projekt haben gesucht. –

Antwort

0

Megha war nett genug, um in dem für mich zu suchen. Wir unterstützen dies nicht in Google TV für ARM. Es ist unmöglich, mit unserem aktuellen SOC (System on a Chip).

+0

Vielen Dank, es hilft – btxsqdr