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_AVERAGE
beschreibt 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_MAX
zurü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_TYPE
beschreibt den Bildtyp des codierten Frames alsPICTURE_TYPE_I
,PICTURE_TYPE_P
,PICTURE_TYPE_B
oderPICTURE_TYPE_UNKNOWN
.KEY_VIDEO_ENCODING_STATISTICS_LEVEL
beschreibt 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_NONE
gesetzt.Wenn der Encoder für jeden Frame
KEY_VIDEO_QP_AVERAGE
undKEY_PICTURE_TYPE
generiert, wird dieser Schlüssel aufVIDEO_ENCODING_STATISTICS_LEVEL_1
gesetzt.
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);