当启用Traceview方法分析时,MediaCodec似乎不返回输入或输出缓冲区。复制步骤:
Grafika详细日志显示,在停止方法分析之前,MediaCodec中没有可用的输入或输出缓冲区。
我的猜测是,MediaCodec在幕后做了一些活生生的事情,这可能与Traceview的实现方式相冲突,但这只是猜测而已。
这是众所周知的问题吗?有没有办法解决它和配置文件应用程序使用MediaCodec?
发布于 2014-02-20 18:16:47
哇哦。
来自dalvik/vm/Thread.cpp (第2105行):
/*
* If we're doing method trace profiling, we don't want threads to exit,
* because if they do we'll end up reusing thread IDs. This complicates
* analysis and makes it impossible to have reasonable output in the
* "threads" section of the "key" file.通常情况下,这很好--如果线程退出了,它就没有什么可做的了,所以如果我们把它保持得更长一点,也就无关紧要了。Thread#join()的信号已经发生了,所以没有什么可做的了。
但是在这种情况下,提供ACodec回调的原生onFrameAvailable()线程暂时连接到VM上。因此,这个纯本机线程希望将自己附加到VM,调用回调,分离自身,然后返回工作。但是由于方法分析是活动的,线程分离暂停直到方法分析完成.但是,在恢复代码执行之前,方法分析不会完成。所以我们陷入僵局了。
所以这里有两个问题:
我看不出有什么干净的方法可以通过改变应用程序来解决这个问题--你必须在没有可用帧通知的情况下离开。最好的选择是放弃TraceView分析,转而使用系统。
https://stackoverflow.com/questions/21897288
复制相似问题