Android 15 wprowadza standardowy proces integrowanie konfiguracji użytkowników dotyczących regionu zainteresowań z filmem na Androida. platformy kodowania. Ta funkcja umożliwia lepszą jakość kompresji dla RoI dzięki oferowanie publicznych interfejsów API do integracji i analizowania konfiguracji użytkowników z filmem kodera.
Implementacja
Dostawcy układów SoC i OEM mogą kontrolować obsługę RoI w zakresie kodowania wideo za pomocą
FEATURE_Roi
flaga. Jeśli nie włączysz FEATURE_Roi
, działanie kodera nie ulegnie zmianie.
Zmiany w strukturze wideo
W tej sekcji opisujemy zmiany w strukturze wideo niezbędne do ich wdrożenia funkcji.
Klucze w Kodeku2
W Androidzie 15 mapa parametrów kwantyzacji
(QP_map
) i konfiguracja prostokątna (rect
) są zdefiniowane jako ROAS
typów konfiguracji. Dodatkowo w Kodekie 2 (C2) wprowadzono dwa klucze,
obsługują nowe typy treści. Wykorzystanie obu kluczy jest takie samo jak publicznych interfejsów API.
W pętli klatki kodera konfiguracja jest dostosowywana dynamicznie.
przed umieszczeniem bufora wejściowego w kolejce. Opisaliśmy to jako
następujące:
w przypadku przyklejonego scenariusza, jeśli w bieżącym okresie nie ma konfiguracji ROAS , koder używa tej samej konfiguracji co poprzednia.
W scenariuszu dynamicznym typy konfiguracji ROI mogą się zmieniać dynamicznie.
Nowe klucze w języku C2 zostały opisane w sekcjach poniżej.
kParamIndexQpOffsetMapBuffer,
kParamIndexQpOffsetMapBuffer
kluczowe sygnały na mapie qp-offset
dla ramki. Jego wartość jest ustawiana na podstawie danych wejściowych
parametr PARAMETER_KEY_QP_OFFSET_MAP
od setParameters
.
kParamIndexQpOffsetMapBuffer
to tablica bajtów w argumencie
C2InfoBuffer
,
o tych atrybutach:
Długość: liczba 16 x 16 bloków w jednej klatce.
Wartość: każda wartość tablicy to przesunięcie QP bloku 16 x 16 w regionie -51~51. Jakość QP docelowej największej jednostki kodującej (LCU) jest obliczana przez ustawienie szybkości enkodera plus przesunięcie. Jeśli obliczony wynik przekracza 0~51 regionu, wartość jest skracana do 0~51.
- Jeśli 0: brak przesunięcia QP, o jakości decyduje pierwotne ustawienie stawki.
- Jeśli ma wartość różną od 0: QP to pierwotna kontrola stawki i przesunięcie.
- Jeśli wartość ujemna: jakość filmu zostanie poprawiona w docelowej jednostce LCU.
- Jeśli wartość jest dodatnia: jakość filmu pogorszy się w docelowej jednostce LCU.
Użycie: użytkownik musi skonfigurować ten klucz jako bloki 16 x 16. Koder dostosowuje się do rzeczywistego rozmiaru LCU poprzez uśrednienie wartości wymiarów 16 x 16 w LCU.
C2_PARAMKEY_QP_OFFSET_RECTS
C2_PARAMKEY_QP_OFFSET_RECTS
klawisz (ustawiony na coding.qp-offset-rects
)
ustawia RoI na QpOffset-Rects
. Jego wartość jest ustalana za pomocą parametru wejściowego PARAMETER_KEY_QP_OFFSET_RECTS
z setParameters
.
Aby obsługiwać ten klucz, użyj następującej struktury: C2QpOffsetRectStruct
została wprowadzona:
struct C2QpOffsetRectStruct : C2Rect {
int32_t qpOffset;
DEFINE_AND_DESCRIBE_C2STRUCT(QpOffsetRect)
C2FIELD(width, "width")
C2FIELD(height, "height")
C2FIELD(left, "left")
C2FIELD(top, "top")
C2FIELD(qpOffset, "qp-offset")
}
Gdzie:
top
ileft
: współrzędne RoI w prostokątnym kształcie. Wskaźnik RoI to rozciągnięto w celu wyrównania do granic LCU. Wartość reprezentuje w lewym górnym rogu każdego piksela, tak by ((0,0), (16; 16)) zdefiniować pełny blok 16 x 16.qpOffset
: każda wartość tablicy odpowiada przesunięciem QP docelowego elementurect
. Jego definicja i zastosowanie są takie same jak Wartość:kParamIndexQpOffsetMapBuffer
.
Algorytm mapowania
W tabeli poniżej znajdziesz mapowanie kluczy publicznych na film platforma:
Klucze publiczne lub interfejsy API | Mapowanie w ramach struktury wideo |
---|---|
PARAMETER_KEY_QP_OFFSET_MAP |
Wartość jest przekazywana do kParamIndexQpOffsetMapBuffer jako
C2InfoBuffer instancję. |
PARAMETER_KEY_QP_OFFSET_RECTS |
Wartość jest konwertowana z: String na
Struct C2QpOffsetRectStruct i przekazano do
C2_PARAMKEY_QP_OFFSET_RECTS |
Obsługa błędów
Implementacja OEM musi obsługiwać te przypadki błędów:
Wielkość błędu | Przykład | Obsługa |
---|---|---|
Do włączania RoI służą zarówno klucz dostawcy, jak i standardowy klucz. | Użytkownik wywołuje zarówno setFeatureEnabled(FEATURE_ROI) , ORAZ
klucza dostawcy, aby włączyć RoI. |
Funkcja RoI musi być włączona. |
Przesunięcie QP mieści się w zakresie, ale nie jest obsługiwane przez dostawców układów SOC. | Użytkownik ustawia przesunięcie QP na 12, ale układ SoC obsługuje tylko przesunięcia QP do 10. | Pozostały obsługiwany zakres przesunięcia QP. Wartość to ograniczony do obsługiwanego zakresu układu SOC. |
wiele konfiguracji RoI (np. ustandaryzowany klucz lub klucza dostawcy) są ustawione na pojedynczą klatkę. | Użytkownik używa zarówno klucza standardowego, jak i klucza dostawcy na potrzeby ramki 1. | Jeśli platforma jest dostępna, zachowuje pierwszy ustandaryzowany zasób rect
pierwszą ustandaryzowaną konfigurację QP_map ,
lub jedno i drugie. W każdej kategorii platforma przesyła tylko jeden
do SOC. Jeśli dostępna jest konfiguracja ustandaryzowana,
Implementacja SOC musi ignorować konfiguracje dostawcy. Jeśli
do układu SOC wysyła się wiele konfiguracji, jego dostawca musi zachować
tylko jedną konfigurację RoI i zignoruj pozostałe.Konfiguracje są zachowywane w takiej kolejności:
|