2012-08-04 11 views
5

Po spędzeniu trochę czasu w tym temacie może lepiej zapytać. Dzięki za pomoc, chłopaki!Przetwarzanie wideo w systemie Android 3.x/Google TV/SDK: ramka wideo do SurfaceTexture/OpenGL/GLSL

Pytanie

  • Jak renderować klatki wideo z MediaPlayer lub VideoView do SurfaceTexture lub OpenGL tekstury, w celu zmiany tekstury/fragment koloru poprzez GLSL? (Musimy go do fantazyjnych GLES/GLSL procedur przetwarzania wideo.)

Kontekst

a) Google TV (LG G2 2012 device) jest Android 3.2 urządzenie ze wsparciem SDK-only (bez NDK)

b) Łatwo jest renderować z kamery do SurfaceTexture, ale jak renderować wideo do SurfaceTexture w systemie Android 3.x? Aby uzyskać rozwiązanie do aparatu, patrz poniżej.

c) Już renderuję klatki wideo do GLView/GLRenderer, ale nie łapię ramki, aby zmienić ją za pomocą GLSL. Wygląda na to, że nie działa. Ale muszę accessable tekstur GLES/GLSL z danych wideo do przetwarzania wideo:

klasa główną działalność:

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

klasa GLSimpleView: Klasa

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

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

GLTextureRender:

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

także porównaj to:

Dlatego główne pytanie brzmi: Jak uzyskać dostęp i manipulować ramką wideo za pomocą systemu Android 3.x? Być może inne rozwiązanie? Czy brakuje mi czegoś po spędzeniu zbyt dużej ilości czasu? Weź pod uwagę, że nie ma żadnej obsługi NDK w Google TV, że jesteśmy bardzo ograniczeni, jeśli próbujemy manipulować danymi wideo.

+0

Czy widziałeś: http://stackoverflow.com/questions/8620560/video-processing-in-android? Ciekawi mnie też, czy przyjrzał się teraz przestarzałemu interfejsowi API Rendercript Graphics dla twojego projektu. –

Odpowiedz

0

Megha była na tyle uprzejma, aby zajrzeć do tego dla mnie. Nie obsługujemy tego w Google TV dla ARM. To niemożliwe z naszym obecnym SOC (System on a Chip).

+0

Wielkie dzięki, pomaga – btxsqdr

Powiązane problemy