5

時間をかけてから聞いたほうがいいかもしれません。助けてくれてありがとう、みんな!

質問

  • GLSL 経由でテクスチャ/フラグメントの色を変更するために、MediaPlayer または VideoView から SurfaceTexture または OpenGL テクスチャにビデオ フレームをレンダリングする方法は? (派手な GLES/GLSL ビデオ処理ルーチンに必要です。)

環境

a) Google TV (LG G2 2012 デバイス) は、SDK のみをサポートする (NDK なし) Android 3.2 デバイスです。

b) カメラから SurfaceTexture へのレンダリングは簡単ですが、Android 3.x でビデオを SurfaceTexture にレンダリングするにはどうすればよいですか? カメラ ソリューションについては、以下を参照してください。

c) 既にビデオ フレームを GLView/GLRenderer にレンダリングしていますが、GLSL 経由で変更するためにフレームを取得していません。うまくいかないようです。しかし、ビデオ処理用のビデオ データを含むアクセス可能な GLES/GLSL テクスチャが必要です。

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

GLSimpleView クラス:

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

これも比較してください:

したがって、主な質問は依然として次のとおりです。Android 3.x でビデオ フレームにアクセスして操作するにはどうすればよいですか? おそらく別の解決策でしょうか?あまりにも多くの時間を費やした後、私は何かを見逃していますか? Google TV では NDK がまったくサポートされていないことを考慮してください。ビデオ データを操作しようとすると、非常に制限されます。

4

1 に答える 1

0

メガは私のためにこれを調べるのに十分親切でした. Google TV for ARM ではこれをサポートしていません。現在の SOC (System on a Chip) では不可能です。

于 2012-08-16T06:09:56.873 に答える