Вопрос

Я использую MediaCodec API в одном из своих приложений.Я использовал код из bigflake, и приложение работает довольно нормально.Но я все еще не в состоянии понять этот параметр timeoutUs в обеих функциях dequeueInputBuffer() и функция dequeueOutputBuffer() даже после прочтения об этом в справочнике по API.Было бы здорово, если бы кто-нибудь мог красиво объяснить использование и эффект этого параметра.И должно ли это быть одинаково в обоих приведенных выше вызовах функций?

Это было полезно?

Решение

Что ж, основная идея заключается в том, что внутри, ниже уровня MediaCodec, компоненты работают асинхронно.Поэтому, когда ты звонишь dequeueInputBuffer() или dequeueOutputBuffer() вызывающий поток фактически не выполняет никакой работы, просто проверяет состояние внутреннего компонента во время выбранного тайм-аута до тех пор, пока ответ не будет готов или не произойдет тайм-аут.По моему опыту, даже выделение буфера происходит асинхронно, поэтому, если ни один внутренний буфер не готов к удалению из очереди...небольшой тайм-аут может привести к INFO_TRY_AGAIN_LATER.Но в основном это для декодирования\кодирования.Вы отправляете входной кадр для обработки неблокирующим вызовом, обработка происходит в другом потоке, и вы проверяете готовность выходного кадра также неблокирующим вызовом.Таким образом, вся pipline не переходит в спящий режим для каждой тяжелой операции (декодирование\кодирование\и т.д.) и может выполнять другие операции

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top