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()为其配置一个输入表面,并通过将图形绘制到从媒体编解码器表面获得的画布

我有一个Android应用程序,它使用GPU加速画布-->
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)