Wskazówki OEM na temat wdrażania RoI

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 i left: 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 elementu rect. 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:

  1. Standard rect
  2. Standard QP_map
  3. Dostawca rect
  4. Dostawca QP_map