Ab Android 13 können App-Clients den Video-Encoder anfordern, Codierungsstatistiken für jeden codierten Videoframes zu exportieren. Mithilfe der vom Video-Encoder abgerufenen Statistiken können Apps ihre Video-Codierungsaufgaben optimieren, z. B. die Multipass-Codierung und die Frame-Vorverarbeitung vor der Codierung.
Wenn SoC-Anbieter Statistiken zur Videocodierung exportieren möchten, müssen sie den Videocodierertreiber ändern, wie unter Updates für den Videocodierertreiber beschrieben.
Daten zu Video-Codierungsstatistiken
Unter Android 13 exportiert der Video-Encoder Statistikdaten, wie in der folgenden Tabelle dargestellt.
| Name der Encoder-Statistiken | Beschreibung |
|---|---|
| Durchschnittlicher Block‑QP pro Frame | Der Durchschnitt aller Block-QPs im Videobild, die in den Bitstream codiert sind |
| Bildtyp | Geben Sie „I“, „P“ oder „B“ ein. |
Entwickler können Statistiken für jeden Frame mit der Entwicklerklasse MediaFormat abrufen.
Updates für den Videocoder-Treiber
Damit der Export von Video-Codierungsstatistiken unterstützt wird, müssen SoC-Anbieter den Video-Encoder-Treiber ändern. In Android 13 wurden der Codec 2.0-Basis die folgenden Schlüssel hinzugefügt:
KEY_VIDEO_QP_AVERAGEbeschreibt den durchschnittlichen Block‑QP pro Frame.Für die Implementierung des
KEY_VIDEO_QP_AVERAGE-Schlüssels gelten die folgenden Regeln:Der SoC-Encoder muss den Durchschnitt der Block-QPs auf die nächste Ganzzahl runden, bevor er an Codec 2.0 ausgegeben wird.
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. Dieser Zustand tritt auf, wenn keine Koeffizienten 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_BoderPICTURE_TYPE_UNKNOWN.KEY_VIDEO_ENCODING_STATISTICS_LEVELbeschreibt die Menge der Informationen zu Codierungsstatistiken, die vom Video-Encoder ausgegeben werden:Wenn der Encoder keine Informationen zu Codierungsstatistiken generiert, wird dieser Schlüssel auf
VIDEO_ENCODING_STATISTICS_LEVEL_NONEgesetzt.Wenn der Encoder für jeden Frame
KEY_VIDEO_QP_AVERAGEundKEY_PICTURE_TYPEgeneriert, wird dieser Schlüssel aufVIDEO_ENCODING_STATISTICS_LEVEL_1gesetzt.
Eine Referenzimplementierung finden Sie unter VideoEncodingStatisticsTest.
Zertifizierungsstufe
Führen Sie den VideoEncodingStatisticsTest-CTS-Test aus, um zu prüfen, ob der durchschnittliche QP-Teil der Videocodierungsstatistiken korrekt funktioniert. Beim CTS werden zwei Codierungen desselben Eingabevideos ausgeführt, eine mit einer höheren Bitrate und eine mit einer niedrigeren Bitrate. Im CTS werden dann die beiden exportierten durchschnittlichen QP-Werte der beiden Codierungen verglichen. Wenn der durchschnittliche QP-Wert der Codierung mit der niedrigeren Bitrate höher ist als der durchschnittliche QP-Wert der Codierung mit der höheren Bitrate, besteht der CTS.
Um zu prüfen, ob das Exportieren von Video-Codierungsstatistiken deaktiviert wird, wenn die Funktion aktiviert ist, verwenden Sie den VIDEO_ENCODING_STATISTICS_LEVEL_NONE-Schlüssel wie folgt:
format.setInteger(MediaFormat.KEY_VIDEO_ENCODING_STATISTICS_LEVEL, MediaFormat.VIDEO_ENCODING_STATISTICS_LEVEL_NONE);