Od 27 marca 2025 r. zalecamy używanie android-latest-release
zamiast aosp-main
do kompilowania i wspołtworzenia AOSP. Więcej informacji znajdziesz w artykule o zmianach w AOSP.
Eksportowanie statystyk kodowania filmów
Zadbaj o dobrą organizację dzięki kolekcji
Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.
Od Androida 13 klienci aplikacji mogą poprosić koder wideo o eksportowanie statystyk kodowania dla każdego zakodowanego klatki wideo. Dzięki statystykom uzyskanym z kodera wideo aplikacje mogą optymalizować zadania kodowania wideo, takie jak kodowanie wieloprzebiegowe i wstępna obróbka ramek przed kodowaniem.
Aby eksportować statystyki kodowania wideo, dostawcy układów SoC muszą zmienić sterownik kodera wideo zgodnie z instrukcjami podanymi w artykule Aktualizacje sterownika kodera wideo.
Dane statystyk kodowania filmów
W Androidzie 13 koder wideo eksportuje dane statystyczne zgodnie z tabelą poniżej.
Nazwa statystyk kodera |
Opis |
Średni QP bloku na klatkę
|
Średnia wartość wszystkich QP bloków w klatce wideo, które są zakodowane w strumieniu bitów.
|
Typ obrazu
|
Typ I lub P lub B
|
Deweloperzy mogą pobierać informacje statystyczne o każdym ujęciu za pomocą klasy dla deweloperów MediaFormat
.
Aktualizacje sterownika kodera wideo
Aby umożliwić eksportowanie statystyk kodowania wideo, dostawcy SoC muszą zmienić sterownik kodera wideo. W wersji bazowej Codec 2.0 w Androidzie 13 dodano te klucze:
KEY_VIDEO_QP_AVERAGE
opisuje średni QP bloku na ramkę.
W przypadku implementacji klucza KEY_VIDEO_QP_AVERAGE
obowiązują te reguły:
Koder SoC musi zaokrąglić średnią wartość QP bloku do najbliższej liczby całkowitej przed przesłaniem do kodeka 2.0.
Średnia wartość jest obliczana tylko na podstawie płaszczyzny luminancji.
Jeśli wszystkie bloki w bieżącym klatku są w trybie pominięcia, koder SoC musi zwrócić INT_MAX
. Ten stan występuje, gdy nie są kodowane żadne współczynniki i nie są kodowane żadne istotne informacje QP w ramce.
KEY_PICTURE_TYPE
opisuje typ obrazu zakodowanego ramki jako PICTURE_TYPE_I
,
PICTURE_TYPE_P
,
PICTURE_TYPE_B
lub PICTURE_TYPE_UNKNOWN
.
KEY_VIDEO_ENCODING_STATISTICS_LEVEL
określa poziom informacji statystyk kodowania emitowanych przez koder wideo:
Przykładową implementację znajdziesz w pliku VideoEncodingStatisticsTest
.
Weryfikacja
Uruchom test CTS VideoEncodingStatisticsTest
, aby sprawdzić, czy średnia wartość QP w statystykach kodowania wideo działa prawidłowo. CTS wykonuje kodowanie tego samego filmu wejściowego dwukrotnie: raz z wyższym bitrate, a drugi raz z niższym bitrate. CTS porównuje następnie 2 wyeksportowane średnie wartości QP z 2 kodowań. Jeśli średni QP z kodowania o niższym bitrate jest wyższy niż średni QP z kodowania o wyższym bitrate, CTS przechodzi test.
Aby sprawdzić, czy funkcja eksportowania statystyk kodowania wideo jest wyłączona, gdy jest włączona, użyj klawisza VIDEO_ENCODING_STATISTICS_LEVEL_NONE
w następujący sposób:
format.setInteger(MediaFormat.KEY_VIDEO_ENCODING_STATISTICS_LEVEL, MediaFormat.VIDEO_ENCODING_STATISTICS_LEVEL_NONE);
Treść strony i umieszczone na niej fragmenty kodu podlegają licencjom opisanym w Licencji na treści. Java i OpenJDK są znakami towarowymi lub zastrzeżonymi znakami towarowymi należącymi do firmy Oracle lub jej podmiotów stowarzyszonych.
Ostatnia aktualizacja: 2025-07-27 UTC.
[[["Łatwo zrozumieć","easyToUnderstand","thumb-up"],["Rozwiązało to mój problem","solvedMyProblem","thumb-up"],["Inne","otherUp","thumb-up"]],[["Brak potrzebnych mi informacji","missingTheInformationINeed","thumb-down"],["Zbyt skomplikowane / zbyt wiele czynności do wykonania","tooComplicatedTooManySteps","thumb-down"],["Nieaktualne treści","outOfDate","thumb-down"],["Problem z tłumaczeniem","translationIssue","thumb-down"],["Problem z przykładami/kodem","samplesCodeIssue","thumb-down"],["Inne","otherDown","thumb-down"]],["Ostatnia aktualizacja: 2025-07-27 UTC."],[],[],null,["# Export video encoding statistics\n\nStarting with Android 13, app clients can request the\nvideo encoder to export encoding statistics for each encoded video frame. With\nthe statistics obtained from the video encoder, apps can optimize their video\nencoding tasks such as multipass encoding and frame preprocessing prior to\nencoding.\n\nTo export video encoding statistics, SoC vendors must change the video encoder\ndriver as described in [Updates to the video encoder driver](#updates-encoder).\n\nVideo encoding statistics data\n------------------------------\n\nWith Android 13, the video encoder exports statistics\ndata as shown in the following table.\n\n| Name of encoder statistics | Description |\n|----------------------------|-------------------------------------------------------------------------------------|\n| Average block QP per frame | The average of all block QPs in the video frame that are encoded into the bitstream |\n| Picture type | Type I or P or B |\n\nDevelopers can retrieve statistics information for each frame by using the\n[`MediaFormat`](https://developer.android.com/reference/android/media/MediaFormat)\ndeveloper class.\n\nUpdates to the video encoder driver\n-----------------------------------\n\nTo support the export of video encoding statistics, SoC vendors must change the\nvideo encoder driver. The following keys are added in the Codec 2.0 base in\nAndroid 13:\n\n- [`KEY_VIDEO_QP_AVERAGE`](https://cs.android.com/android/platform/superproject/+/android-latest-release:frameworks/base/media/java/android/media/MediaFormat.java;drc=5ad6db77423479d027abb791ad3c02da39513a2c;l=1154) describes the per-frame\n average block QP.\n\n The following rules apply to the implementation of the `KEY_VIDEO_QP_AVERAGE`\n key:\n - The SoC encoder must round the average of the block QPs to the nearest\n integer before emitting to Codec 2.0.\n\n - The average value is computed only from a luma plane.\n\n - The SoC encoder must return `INT_MAX` if all the blocks in the current\n frame are in the skipped mode. This condition occurs when no coefficients are\n encoded and no significant QP info is encoded in the frame.\n\n- [`KEY_PICTURE_TYPE`](https://cs.android.com/android/platform/superproject/+/android-latest-release:frameworks/base/media/java/android/media/MediaFormat.java;drc=5ad6db77423479d027abb791ad3c02da39513a2c;l=1163)\n describes the picture type of the encoded frame as [`PICTURE_TYPE_I`](https://developer.android.com/reference/android/media/MediaFormat#PICTURE_TYPE_I),\n [`PICTURE_TYPE_P`](https://developer.android.com/reference/android/media/MediaFormat#PICTURE_TYPE_P),\n [`PICTURE_TYPE_B`](https://developer.android.com/reference/android/media/MediaFormat#PICTURE_TYPE_B),\n or [`PICTURE_TYPE_UNKNOWN`](https://developer.android.com/reference/android/media/MediaFormat#PICTURE_TYPE_UNKNOWN).\n\n- [`KEY_VIDEO_ENCODING_STATISTICS_LEVEL`](https://cs.android.com/android/platform/superproject/+/android-latest-release:frameworks/base/media/java/android/media/MediaFormat.java;drc=5ad6db77423479d027abb791ad3c02da39513a2c;l=1122) describes the level of\n encoding statistics information emitted from video encoder, as follows:\n\n - When the encoder generates no information about encoding statistics,\n this key is set to [`VIDEO_ENCODING_STATISTICS_LEVEL_NONE`](https://cs.android.com/android/platform/superproject/+/android-latest-release:frameworks/base/media/java/android/media/MediaFormat.java;drc=5ad6db77423479d027abb791ad3c02da39513a2c;l=1129).\n\n - When the encoder generates `KEY_VIDEO_QP_AVERAGE` and `KEY_PICTURE_TYPE`\n for each frame, this key is set to [`VIDEO_ENCODING_STATISTICS_LEVEL_1`](https://cs.android.com/android/platform/superproject/+/android-latest-release:frameworks/base/media/java/android/media/MediaFormat.java;drc=5ad6db77423479d027abb791ad3c02da39513a2c;l=1136).\n\nSee [`VideoEncodingStatisticsTest`](https://cs.android.com/android/platform/superproject/+/android-latest-release:cts/tests/tests/media/codec/src/android/media/codec/cts/VideoEncodingStatisticsTest.java;drc=77bafd18279c8d6dad49fd74dac2e369fdc6ba69;l=56)\nfor a reference implementation.\n\nValidation\n----------\n\nRun the [`VideoEncodingStatisticsTest`](https://cs.android.com/android/platform/superproject/+/android-latest-release:cts/tests/tests/media/codec/src/android/media/codec/cts/VideoEncodingStatisticsTest.java;drc=77bafd18279c8d6dad49fd74dac2e369fdc6ba69;l=56)\nCTS test to validate that the average QP part of the video encoding statistics\nworks correctly: CTS runs two encodings of the same input video, one with a\nhigher bitrate, and another with a lower bitrate. CTS then compares the two\nexported average QP values from the two encodings. If the average QP from the encoding\nwith the lower bitrate is higher than the average QP from the encoding with the\nhigher bitrate, CTS passes.\n\nTo validate turning off the exporting video encoding statistics feature when\nenabled, use the `VIDEO_ENCODING_STATISTICS_LEVEL_NONE` key as follows: \n\n format.setInteger(MediaFormat.KEY_VIDEO_ENCODING_STATISTICS_LEVEL, MediaFormat.VIDEO_ENCODING_STATISTICS_LEVEL_NONE);"]]