Ab Android 13 können App-Clients den Video-Encoder anfordern, Codierungsstatistiken für jeden codierten Videoframe zu exportieren. Mit den vom Video-Encoder abgerufenen Statistiken können Apps ihre Videocodierungsaufgaben optimieren, z. B. Multipass-Codierung und Frame-Vorverarbeitung vor der Codierung.
Wenn SoC-Anbieter Videocodierungsstatistiken exportieren möchten, müssen sie den Treiber des Video-Encoders ändern. Weitere Informationen finden Sie unter Updates am Treiber des Video-Encoders.
Daten zu Videocodierungsstatistiken
In Android 13 exportiert der Video-Encoder Statistiken wie in der folgenden Tabelle dargestellt.
| Name der Encoder-Statistiken | Beschreibung |
|---|---|
| Durchschnittliche Block-QP pro Frame | Der Durchschnitt aller Block-QPs im Videoframe, die in den Bitstream codiert sind |
| Bildtyp | Typ I, P oder B |
Entwickler können mit der
MediaFormat
Entwicklerklasse Statistiken für jeden Frame abrufen.
Updates am Treiber des Video-Encoders
Damit Videocodierungsstatistiken exportiert werden können, müssen SoC-Anbieter den Treiber des Video-Encoders ändern. In Android 13 werden der Codec 2.0-Basis die folgenden Schlüssel hinzugefügt:
KEY_VIDEO_QP_AVERAGEbeschreibt die durchschnittliche Block-QP pro Frame.Für die Implementierung des Schlüssels
KEY_VIDEO_QP_AVERAGEgelten die folgenden Regeln:Der SoC-Encoder muss den Durchschnitt der Block-QPs auf die nächste Ganzzahl runden, bevor er ihn an Codec 2.0 sendet.
Der Durchschnittswert wird nur aus einer Luma-Ebene berechnet.
Der SoC-Encoder muss
INT_MAXzurückgeben, wenn sich alle Blöcke im aktuellen Frame im übersprungenen Modus befinden. Diese Bedingung tritt ein, wenn keine Koeffizienten codiert werden und keine signifikanten QP-Informationen im Frame codiert sind.
KEY_PICTURE_TYPEbeschreibt den Bildtyp des codierten Frames alsPICTURE_TYPE_I,PICTURE_TYPE_P,PICTURE_TYPE_B, oderPICTURE_TYPE_UNKNOWN.KEY_VIDEO_ENCODING_STATISTICS_LEVELbeschreibt die Ebene der Informationen zu Codierungsstatistiken, die vom Video-Encoder ausgegeben werden. Die Werte sind wie folgt definiert:Wenn der Encoder keine Informationen zu Codierungsstatistiken generiert, wird dieser Schlüssel auf
VIDEO_ENCODING_STATISTICS_LEVEL_NONEgesetzt.Wenn der Encoder
KEY_VIDEO_QP_AVERAGEundKEY_PICTURE_TYPEfür jeden Frame generiert, wird dieser Schlüssel aufVIDEO_ENCODING_STATISTICS_LEVEL_1gesetzt.
Eine Referenzimplementierung finden Sie unter VideoEncodingStatisticsTest.
Validierung
Führen Sie den VideoEncodingStatisticsTest
CTS-Test aus, um zu prüfen, ob der durchschnittliche QP-Teil der Videocodierungsstatistiken
korrekt funktioniert. CTS führt zwei Codierungen desselben Eingabevideos aus, eine mit einer
höheren Bitrate und eine mit einer niedrigeren Bitrate. Anschließend vergleicht CTS die beiden exportierten durchschnittlichen QP-Werte aus den beiden Codierungen. Wenn die durchschnittliche QP aus der Codierung mit der niedrigeren Bitrate höher ist als die durchschnittliche QP aus der Codierung mit der höheren Bitrate, besteht der CTS-Test.
Wenn Sie prüfen möchten, ob die Funktion zum Exportieren von Videocodierungsstatistiken deaktiviert werden kann, wenn sie aktiviert ist, verwenden Sie den Schlüssel VIDEO_ENCODING_STATISTICS_LEVEL_NONE wie folgt:
format.setInteger(MediaFormat.KEY_VIDEO_ENCODING_STATISTICS_LEVEL, MediaFormat.VIDEO_ENCODING_STATISTICS_LEVEL_NONE);