Question

J'utilise l'API MediaCodec dans l'une de mes applications.J'ai utilisé le code de bigflake et l'application fonctionne plutôt bien.Mais je n'arrive toujours pas à comprendre le paramètre timeoutUs dans les deux fonctions dequeueInputBuffer() et la fonction dequeueOutputBuffer() même après en avoir lu dans la référence API.Ce serait formidable si quelqu'un pouvait bien expliquer l'utilisation et l'effet de ce paramètre.Et cela devrait-il être le même dans les deux appels de fonction ci-dessus ?

Était-ce utile?

La solution

Eh bien, l'idée principale est qu'en interne, sous la couche MediaCodec, le travail des composants est asynchrone.Alors quand tu appelles dequeueInputBuffer() ou dequeueOutputBuffer() aucun travail réel n'est effectué par le thread appelant, il suffit de vérifier l'état du composant interne pendant le délai d'attente sélectionné jusqu'à ce que la réponse soit prête ou que le délai d'attente se produise.D'après mon expérience, même l'allocation de tampon est asynchrone, donc si aucun tampon interne n'est prêt à être retiré de la file d'attente...un petit délai d'attente peut entraîner INFO_TRY_AGAIN_LATER.Mais c'est principalement pour le décodage/encodage.Vous soumettez la trame d'entrée pour traitement par un appel non bloquant, le traitement a lieu dans un autre thread et vous vérifiez également l'état de préparation de la trame de sortie avec un appel non bloquant.Ainsi, tous les pipelines ne dorment pas pour chaque opération lourde (décodage\encodage\etc) et pourraient effectuer d'autres opérations

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top