Nexus 5崩溃:FinalizerWatchdogDaemon - SurfaceTexture.finalize()

时间:2015-05-15 21:17:18

标签: android mediacodec nexus-5

我们在尝试重新编码视频时遇到了一个特殊的问题,它似乎只发生在Nexus 5.我们使用MediaCodec对客户端的视频进行压缩和重新编码,有时在任务运行时在Nexus 5上,我们遇到了以下崩溃:

05-15 16:25:15.023 E/AndroidRuntime( 4716): FATAL EXCEPTION: FinalizerWatchdogDaemon
05-15 16:25:15.023 E/AndroidRuntime( 4716): java.util.concurrent.TimeoutException: android.graphics.SurfaceTexture.finalize() timed out after 10 seconds
05-15 16:25:15.023 E/AndroidRuntime( 4716):     at android.graphics.SurfaceTexture.nativeFinalize(Native Method)
05-15 16:25:15.023 E/AndroidRuntime( 4716):     at android.graphics.SurfaceTexture.finalize(SurfaceTexture.java:353)
05-15 16:25:15.023 E/AndroidRuntime( 4716):     at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:190)
05-15 16:25:15.023 E/AndroidRuntime( 4716):     at java.lang.Daemons$FinalizerDaemon.run(Daemons.java:173)
05-15 16:25:15.023 E/AndroidRuntime( 4716):     at java.lang.Thread.run(Thread.java:818)    

我们的代码与bigflake的DecodeEditEncodeTest(https://android.googlesource.com/platform/cts/+/jb-mr2-release/tests/tests/media/src/android/media/cts/DecodeEditEncodeTest.java)相似,我们也使用他们的InputSurface,OutputSurface和TextureRender类(https://android.googlesource.com/platform/cts/+/jb-mr2-release/tests/tests/media/src/android/media/cts/)。我猜这个问题出现在OutputSurface或TextureRender的某个地方,因为它们是实际操作表面纹理的类。

我们可以提出的唯一可靠的重复步骤是,当几个视频排队等待重新编码时,它似乎会随机发生,即使编码器一次只能处理一个视频。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

SurfaceTexture终结器由于某种原因挂起。 VM检测到卡住的线程并引发异常。

SurfaceTexture终结器为here,但它只调用nativeFinalize(),您可以看到here。没有太多事情发生 - 只是将字段归零并调整引用计数 - 所以它不清楚" Lollipop"消息来源为什么会这样。 "奇巧"和" Lollipop-mr1"看起来一样。

该设备上运行的是什么版本的Android?