Ab Android 13 können App-Clients den Video-Encoder auffordern, Codierungsstatistiken für jedes codierte Videobild zu exportieren. Mit den vom Video-Encoder erhaltenen Statistiken können Apps ihre Video-Kodierungsaufgaben wie Multipass-Kodierung und Frame-Vorverarbeitung vor der Kodierung optimieren.
Um Videokodierungsstatistiken zu exportieren, müssen SoC-Anbieter den Video-Encoder-Treiber ändern, wie unter Aktualisierungen des Video-Encoder-Treibers beschrieben.
Statistikdaten zur Videokodierung
Mit Android 13 exportiert der Video-Encoder Statistikdaten wie in der folgenden Tabelle dargestellt.
Name der Encoder-Statistik | Beschreibung |
---|---|
Durchschnittlicher Block-QP pro Frame | Der Durchschnitt aller Block-QPs im Videobild, die in den Bitstrom codiert werden |
Bildtyp | Typ I oder P oder B |
Entwickler können mithilfe der MediaFormat
Entwicklerklasse Statistikinformationen für jeden Frame abrufen.
Aktualisierungen des Video-Encoder-Treibers
Um den Export von Videokodierungsstatistiken zu unterstützen, müssen SoC-Anbieter den Videokodierertreiber ändern. Die folgenden Schlüssel werden in der Codec 2.0-Basis in Android 13 hinzugefügt:
KEY_VIDEO_QP_AVERAGE
beschreibt den durchschnittlichen Block-QP pro Frame.Für die Implementierung des Schlüssels
KEY_VIDEO_QP_AVERAGE
gelten folgende Regeln:Der SoC-Encoder muss den Durchschnitt der Block-QPs auf die nächste ganze Zahl runden, bevor er ihn an Codec 2.0 sendet.
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 codiert sind 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 Ebene der Codierungsstatistikinformationen, die vom Video-Encoder ausgegeben werden, wie folgt:Wenn der Encoder keine Informationen über Codierungsstatistiken generiert, wird dieser Schlüssel auf
VIDEO_ENCODING_STATISTICS_LEVEL_NONE
gesetzt.Wenn der Encoder
KEY_VIDEO_QP_AVERAGE
undKEY_PICTURE_TYPE
für jedes Bild generiert, wird dieser Schlüssel aufVIDEO_ENCODING_STATISTICS_LEVEL_1
gesetzt.
Eine Referenzimplementierung finden Sie unter VideoEncodingStatisticsTest
.
Validierung
Führen Sie den CTS-Test VideoEncodingStatisticsTest
aus, um zu überprüfen, ob der durchschnittliche QP-Teil der Videokodierungsstatistik ordnungsgemäß funktioniert: CTS führt zwei Kodierungen desselben Eingabevideos aus, eine mit einer höheren Bitrate und eine mit einer niedrigeren Bitrate. CTS vergleicht dann die beiden exportierten durchschnittlichen QP-Werte aus den beiden Kodierungen. Wenn der durchschnittliche QP der Kodierung mit der niedrigeren Bitrate höher ist als der durchschnittliche QP der Kodierung mit der höheren Bitrate, wird CTS bestanden.
Um das Deaktivieren der Funktion zum Exportieren von Videokodierungsstatistiken zu überprüfen, 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);