Pergunta

Estou usando a API MediaCodec em um dos meus aplicativos.Usei o código do bigflake e o aplicativo está funcionando muito bem.Mas ainda não consegui entender o parâmetro timeoutUs em ambas as funções dequeueInputBuffer() e a função dequeueOutputBuffer() mesmo depois de ler sobre isso na referência da API.Seria ótimo se alguém pudesse explicar bem o uso e o efeito desse parâmetro.E deveria ser o mesmo em ambas as chamadas de função acima?

Foi útil?

Solução

Bem, a ideia principal é que internamente, abaixo da camada MediaCodec, o trabalho dos componentes seja assíncrono.Então, quando você ligar dequeueInputBuffer() ou dequeueOutputBuffer() nenhum trabalho real é feito no thread de chamada, apenas verificando o estado do componente interno durante o tempo limite selecionado até que a resposta esteja pronta ou o tempo limite aconteça.Pela minha experiência, até a alocação de buffer é assíncrona; portanto, se nenhum buffer interno estiver pronto para retirada da fila ...um pequeno tempo limite pode resultar em INFO_TRY_AGAIN_LATER.Mas principalmente é para decodificação/codificação.Você envia o quadro de entrada para processamento por chamada sem bloqueio, o processamento acontece em outro thread e você verifica a prontidão do quadro de saída também com chamada sem bloqueio.Portanto, todo pipline não dorme para cada operação pesada (decodificação\codificação\etc) e pode realizar outras operações

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top