我在我的一个应用程序中使用 MediaCodec API。我使用了 bigflake 的代码,应用程序运行得很好。但是我仍然无法理解函数 dequeueInputBuffer()
和函数 dequeueOutputBuffer()
中的参数 timeoutUs
即使在阅读了它在 API 引用中。
如果有人能很好地解释这个参数的使用和效果,那就太好了。并且在上述两个函数调用中它应该相同吗?
最佳答案
好吧,主要思想是在内部,MediaCodec 层组件工作是异步的。因此,当您调用 dequeueInputBuffer()
或 dequeueOutputBuffer()
时,调用线程并未完成任何实际工作,只是在选定的超时期间检查内部组件状态,直到响应准备好或超时发生。
根据我的经验,即使缓冲区分配也是异步的,所以如果没有内部缓冲区准备好出队……小的超时可能会导致 INFO_TRY_AGAIN_LATER。但主要是用于解码\编码。您提交输入帧以通过非阻塞调用进行处理,处理发生在另一个线程中,您还使用非阻塞调用检查输出帧准备情况。所以所有的管道都不会为每一个繁重的(解码\编码\等)操作而休眠,并且可以执行其他操作
关于android - MediaCodec API android 中的 timeoutUs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25067244/