Android 同时使用两个GPU加速表面?
我有一个Android应用程序,它使用GPU加速画布-->Android 同时使用两个GPU加速表面?,android,android-canvas,mediarecorder,hardware-acceleration,Android,Android Canvas,Mediarecorder,Hardware Acceleration,我有一个Android应用程序,它使用GPU加速画布-->canvas=getHolder().getSurface().lockHardwareCanvas()向SurfaceView呈现一些图形。它工作正常,没有问题 不过,我也想将我在SurfaceView上显示的图形实时录制为MP4视频文件。我能够设置一个MediaRecorder实例,使用MediaCodec.createPersistentInputSurface()为其配置一个输入表面,并通过将图形绘制到从媒体编解码器表面获得的画布
canvas=getHolder().getSurface().lockHardwareCanvas()向SurfaceView呈现一些图形代码>。它工作正常,没有问题
不过,我也想将我在SurfaceView上显示的图形实时录制为MP4视频文件。我能够设置一个MediaRecorder
实例,使用MediaCodec.createPersistentInputSurface()
为其配置一个输入表面,并通过将图形绘制到从媒体编解码器表面获得的画布上(mediaCodecCanvas=mediaCodecSurface.lockCanvas()
)成功录制视频。视频文件编码和播放良好;再一次没有问题
问题是,除了对SurfaceView
画布使用GPU加速之外,我还尝试对MediaCodec
曲面使用GPU加速。如果我使用mediaCodecCanvas=mediaCodecSurface.lockHardwareCanvas()
,同时对SurfaceView
使用lockHardwareCanvas()
,则SurfaceView
和录制的视频都会正确渲染一帧,此时输出只是“冻结”-即使渲染线程本身肯定没有冻结
这个问题似乎并不特定于在MediaCodec
表面上使用GPU加速;相反,问题似乎是同时使用两个GPU加速表面。如果我对SurfaceView
使用GPU加速,而不是MediaRecorder
,那么它可以正常工作。同样,如果我对MediaRecorder
使用GPU加速,而不是SurfaceView
,它也可以正常工作。但如果我想同时使用它,我会被“冻结”
你知道会发生什么吗?我正在使用Nexus5和天堂操作系统(Android 7.1.2)