Android “为什么?”;“表面帧等待超时”;打开proguard时编码?

Android “为什么?”;“表面帧等待超时”;打开proguard时编码?,android,multithreading,video-processing,android-mediacodec,android-proguard,Android,Multithreading,Video Processing,Android Mediacodec,Android Proguard,为了对视频进行转码,我将代码从复制到我的应用程序中,最重要的变化是将该类重命名为VideoTranscoder,并删除extensed AndroidTestCase,因为我将独立于任何活动运行它。在我使用proguard编译发布版本之前,一切正常,然后在运行时失败,原因是: E/d: com.testapp.a.g.a.b.b(OutputSurface.java:270) E/d: com.testapp.a.g.a.d.a(VideoTranscoder.java:944) E/d: co

为了对视频进行转码,我将代码从复制到我的应用程序中,最重要的变化是将该类重命名为
VideoTranscoder
,并删除
extensed AndroidTestCase
,因为我将独立于任何活动运行它。在我使用proguard编译发布版本之前,一切正常,然后在运行时失败,原因是:

E/d: com.testapp.a.g.a.b.b(OutputSurface.java:270)
E/d: com.testapp.a.g.a.d.a(VideoTranscoder.java:944)
E/d: com.testapp.a.g.a.d.a(VideoTranscoder.java:6353)
E/d: com.testapp.a.g.a.f.run(VideoTranscoder.java:162)
E/d: java.lang.Thread.run(Thread.java:818)
E/d: TestWrapper
E/MediaCodecController: com.testapp.a.g.a.b.b(OutputSurface.java:270)
E/MediaCodecController: com.testapp.a.g.a.d.a(VideoTranscoder.java:944)
E/MediaCodecController: com.testapp.a.g.a.d.a(VideoTranscoder.java:6353)
E/MediaCodecController: com.testapp.a.g.a.f.run(VideoTranscoder.java:162)
E/MediaCodecController: java.lang.Thread.run(Thread.java:818)
W/System.err: java.lang.RuntimeException: Surface frame wait timed out
W/System.err:     at com.testapp.a.g.a.b.b(OutputSurface.java:270)
W/System.err:     at com.testapp.a.g.a.d.a(VideoTranscoder.java:944)
W/System.err:     at com.testapp.a.g.a.d.a(VideoTranscoder.java:6353)
W/System.err:     at com.testapp.a.g.a.f.run(VideoTranscoder.java:162)
W/System.err:     at java.lang.Thread.run(Thread.java:818)
E/CompressionController: Compressor reported error, not hashing!
根据答案,比如或者我需要创建单独的线程等等,但是我实际上使用的是已经创建这些线程的原始代码。当我将gradle release设置更改为
minifyEnabled false
以禁用proguard时,一切都会再次工作


那么proguard对那些扰乱编码器/解码器的线程做了什么呢?或者,它可能正在删除由
MediaCodec
间接使用的某些类?有什么我需要添加到proguard设置中以使其工作吗?

在向proguard文件添加
-dontoptimize
后,一切都会再次工作。显然,这不是一个理想的解决方案,但似乎这是唯一可以做的事情,因为嫌疑人在这里。在我的特殊情况下,我可以避免使用
-dontoptimize
,而是使用下面一行,它不会禁用所有优化:

-optimizations !code/removal/advanced,!method/inlining/short,!method/inlining/unique,!method/removal/*,!method/marking/*