我正在我的一个应用程序中使用MediaCodec API。我使用了bigflake的代码,应用程序运行得很好。但我仍然无法理解参数 timeoutUs 在这两个功能 dequeueInputBuffer() 和功能 dequeueOutputBuffer() 即使在API参考中阅读了它。如果有人能很好地解释这个参数的使用和效果,那就太好了。在上述两个函数调用中应该是相同的吗?

有帮助吗?

解决方案

那么,主要的想法是,在内部,MediaCodec层组件下面的工作是异步的。所以当你打电话的时候 dequeueInputBuffer()dequeueOutputBuffer() 调用线程实际上没有完成任何工作,只是在选定的超时期间检查内部组件状态,直到响应准备就绪或超时发生。根据我的经验,即使缓冲区分配是异步的,所以如果没有内部缓冲区准备好出队。..小超时会导致INFO_TRY_AGAIN_LATER。但主要是用于解码\编码。您通过非阻塞调用提交输入帧以进行处理,处理发生在另一个线程中,并且您还通过非阻塞调用检查输出帧准备情况。因此,所有pipline不会为每个重(解码\编码\等)操作睡眠,并且可以执行其他操作

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top