Timeoutus in Mediacodec API Android
-
23-12-2019 - |
Domanda
Sto usando Mediacodec API in una delle mie app.Ho usato il codice da BigFlake e l'app sta correndo abbastanza bene.Ma non riesco ancora a capire il parametro timeoutUs
in entrambe le funzioni dequeueInputBuffer()
e la funzione dequeueOutputBuffer()
anche dopo averlo letto sul riferimento API.
Sarebbe bello se qualcuno potesse spiegare bene l'uso e l'effetto di questo parametro.E dovrebbe essere uguale a entrambe le chiamate di cui sopra?
Soluzione
Bene, l'idea principale è quella internamente, al di sotto dei componenti del livello Mediacodec funziona è asincrono.Quindi, quando si chiama dequeueInputBuffer()
o dequeueOutputBuffer()
, non viene eseguito alcun lavoro azionario è il file di chiamata, semplicemente controllando lo stato del componente interno durante il timeout selezionato finché non si verifica la risposta è pronta o il timeout.
Dalla mia esperienza anche l'assegnazione del buffer è Async, quindi se nessun buffer interno è pronto per il dequeue ... il piccolo timeout può causare info_try_again_later.Ma principalmente è per la decodifica \ codifica.Si invia il frame di input per l'elaborazione mediante chiamata non bloccante, l'elaborazione avviene in un altro thread e controlli la prontezza del telaio di uscita anche con chiamata non bloccante.Quindi tutte le pipline non dorme per ogni operazione pesante (decodifica \ codifica \ ecc.) E potrebbe eseguire altre operazioni