Frage

Ich verwende die MediaCodec-API in einer meiner Apps.Ich habe den Code von Bigflake verwendet und die App läuft ziemlich gut.Aber ich kann den Parameter immer noch nicht verstehen timeoutUs in beiden Funktionen dequeueInputBuffer() und die Funktion dequeueOutputBuffer() auch nach dem Lesen darüber in der API-Referenz.Es wäre großartig, wenn jemand die Verwendung und Wirkung dieses Parameters schön erklären könnte.Und sollte es in beiden obigen Funktionsaufrufen gleich sein?

War es hilfreich?

Lösung

Nun, die Hauptidee ist, dass intern unterhalb der MediaCodec-Schichtkomponenten asynchron gearbeitet wird.Also wenn du anrufst dequeueInputBuffer() oder dequeueOutputBuffer() es wird keine tatsächliche Arbeit am aufrufenden Thread ausgeführt, sondern nur der interne Komponentenstatus während des ausgewählten Timeouts überprüft, bis die Antwort bereit ist oder ein Timeout auftritt.Aus meiner Erfahrung ist sogar die Pufferzuweisung asynchron, wenn also kein interner Puffer zum Entfernen aus der Warteschlange bereit ist...ein kleines Timeout kann zu INFO_TRY_AGAIN_LATER .Aber hauptsächlich dient es zum Dekodieren \ Kodieren.Sie senden den Eingaberahmen zur Verarbeitung durch einen nicht blockierenden Aufruf, die Verarbeitung erfolgt in einem anderen Thread und Sie überprüfen die Bereitschaft des Ausgaberahmens auch bei einem nicht blockierenden Aufruf.Daher schläft die gesamte Pipline nicht bei jeder schweren Operation (Dekodieren \ Kodieren \ usw.) und könnte andere Operationen ausführen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top