Java 从MediaCodec将同一视频渲染到两个曲面
MediaCodec有两种操作方式:传递一个用于渲染的缓冲区,或者读取输出缓冲区并自己将其绘制到屏幕上 在第一种情况下,我通过一个曲面:是否可以在两个曲面上绘制相同的MediaCodec解码视频 解码循环如下所示:Java 从MediaCodec将同一视频渲染到两个曲面,java,android,android-mediacodec,Java,Android,Android Mediacodec,MediaCodec有两种操作方式:传递一个用于渲染的缓冲区,或者读取输出缓冲区并自己将其绘制到屏幕上 在第一种情况下,我通过一个曲面:是否可以在两个曲面上绘制相同的MediaCodec解码视频 解码循环如下所示: int outputBufferId = codec.dequeueOutputBuffer(…); if (outputBufferId >= 0) { //Do nothing, the MediaCodec will automatically draw to
int outputBufferId = codec.dequeueOutputBuffer(…);
if (outputBufferId >= 0) {
//Do nothing, the MediaCodec will automatically draw to our surface
//But how to draw to 2 surfaces?
codec.releaseOutputBuffer(outputBufferId, …);
} else if (outputBufferId == MediaCodec.INFO_OUTPUT_FORMAT_CHANGED) {
// Subsequent data will conform to new format.
// Can ignore if using getOutputFormat(outputBufferId)
outputFormat = codec.getOutputFormat(); // option B
}
如果要同时绘制多个曲面,唯一的方法是使用OpenGL 如果你愿意,我可以给你一些建议 首先,你需要一个表面纹理支持的表面。表面纹理是解码器将解码帧排队的地方,您可以从那里检索它。一旦表面纹理中有一个框架可用,您将使用OpenGL(多个EGLSurface连接到每个曲面。您可以使用eglCreateWindowSurface创建这样的曲面)
连接曲面并创建有效的EGL上下文后,只需在创建的EGL曲面中使用eglMakeCurrent和pass,每个绘制操作一个。所以eglMakeCurrent将允许您一次在一个曲面上绘制,您可以对每个曲面进行绘制。您通常可以在grafika中找到其中一些示例。如果要同时绘制多个曲面,唯一的方法是使用OpenGL 如果你愿意,我可以给你一些建议 首先,你需要一个表面纹理支持的表面。表面纹理是解码器将解码帧排队的地方,您可以从那里检索它。一旦表面纹理中有一个框架可用,您将使用OpenGL(多个EGLSurface连接到每个曲面。您可以使用eglCreateWindowSurface创建这样的曲面)
连接曲面并创建有效的EGL上下文后,只需在创建的EGL曲面中使用eglMakeCurrent和pass,每个绘制操作一个。所以eglMakeCurrent将允许您一次在一个曲面上绘制,您可以对每个曲面进行绘制。您通常可以在grafika中找到其中一些示例您可以共享代码片段吗?您可以共享代码片段吗?