Linee guida dell'OEM per l'implementazione del RoI

Android 15 introduce un processo standardizzato per integrazione delle configurazioni utente della regione di interesse (RoI) nel video Android di codifica. Questa funzionalità consente una migliore qualità di compressione per i RoI offrendo API pubbliche per integrare e analizzare le configurazioni utente nei video. dell'architettura

Implementazione

I fornitori di SoC e gli OEM possono controllare il supporto RoI per la codifica video con FEATURE_Roi flag. Se l'opzione FEATURE_Roi non è attiva, il comportamento del codificatore video non cambia.

Modifiche nel framework dei video

Questa sezione descrive le modifiche al framework video necessarie per implementare questa funzionalità. funzionalità.

Chiavi nel codec2

In Android 15, la mappa dei parametri di quantizzazione (QP_map) e la configurazione rettangolare (rect) sono definite come RoI tipi di configurazione. Inoltre, nel Codec2 (C2) vengono introdotte due chiavi per supportano questi nuovi tipi. L'utilizzo di entrambe le chiavi corrisponde a quello delle API pubbliche. All'interno del loop dei fotogrammi dell'encoder, la configurazione viene regolata dinamicamente durante la fase di esecuzione, prima che il buffer di input venga messo in coda, come descritto che segue:

  • In uno scenario fissante, se non viene fornita alcuna configurazione RoI per l'attuale frame, l'encoder usa la stessa configurazione del frame precedente.

  • In uno scenario dinamico, i tipi di configurazione RoI possono cambiare in modo dinamico.

Le nuove chiavi in C2 sono descritte nelle sezioni seguenti.

kParamIndexQpOffsetMapBuffer

La kParamIndexQpOffsetMapBuffer indica la mappa qp-offset per un frame. Il suo valore viene impostato utilizzando l'input parametro PARAMETER_KEY_QP_OFFSET_MAP da setParameters.

kParamIndexQpOffsetMapBuffer è un array di byte in C2InfoBuffer, con i seguenti attributi:

  • Lunghezza: il numero di blocchi 16 x 16 in un frame.

  • Valore: ogni valore dell'array corrisponde all'offset QP di un blocco 16x16, in regione -51~51. Il QP dell'unità di codifica (LCU) target più grande viene calcolato controllo della frequenza dell'encoder più l'offset. Se il risultato calcolato supera 0~51 regione, il valore viene troncato a 0~51.

    • Se pari a 0: nessuna compensazione del QP, il QP viene deciso dal controllo originale del tasso.
    • Se è diverso da zero: QP rappresenta il controllo della tariffa originale più l'offset.
    • Se negativa: la qualità video viene migliorata nella LCU target.
    • Se positiva: la qualità video diminuisce nella LCU target.
  • Utilizzo: l'utente deve configurare questa chiave come blocchi 16x16. L'encoder regola la configurazione alla dimensione reale dell'LCU mediante i valori del formato 16 x 16 blocchi nell'LCU.

C2_PARAMKEY_QP_OFFSET_RECTS

La C2_PARAMKEY_QP_OFFSET_RECTS (impostato su coding.qp-offset-rects) imposta il RoI come QpOffset-Rects. Il suo valore viene impostato utilizzando il parametro di input PARAMETER_KEY_QP_OFFSET_RECTS da setParameters.

Per supportare questa chiave, viene utilizzata la seguente struttura C2QpOffsetRectStruct dell'IA generativa:

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")
}

Dove:

  • top e left: le coordinate del RoI, con forma rettangolare. Il RoI è più esteso per allinearsi ai confini delle LCU. Il valore rappresenta angolo superiore sinistro di ciascun pixel, in modo tale che ((0,0), (16, 16)) definisca un blocco completo di 16 x 16.

  • qpOffset: ogni valore dell'array rappresenta l'offset QP del target Area rect. La sua definizione e il suo utilizzo sono gli stessi di quelli del Valore kParamIndexQpOffsetMapBuffer.

di Gemini Advanced.

Algoritmo di mappatura

La tabella seguente mostra la mappatura dalle chiavi pubbliche al video :

Chiavi pubbliche o API Mappatura nel framework video
PARAMETER_KEY_QP_OFFSET_MAP Il valore viene passato a kParamIndexQpOffsetMapBuffer come C2InfoBuffer istanza.
PARAMETER_KEY_QP_OFFSET_RECTS Il valore viene convertito da String a Struct C2QpOffsetRectStruct e passato a C2_PARAMKEY_QP_OFFSET_RECTS.

Gestione degli errori

L'implementazione dell'OEM deve gestire i seguenti casi di errore:

Caso di errore Esempio Prescrizioni d'uso
Per attivare il RoI vengono utilizzate sia la chiave del fornitore sia la chiave standardizzata. L'utente chiama sia setFeatureEnabled(FEATURE_ROI) CHE la chiave del fornitore per attivare il RoI. Il RoI deve essere attivato.
L'offset QP rientra nell'intervallo, ma non è supportato dai fornitori di SoC. L'utente imposta l'offset QP su 12, ma il SoC supporta solo l'offset QP fino a 10. L'intervallo di offset QP supportato viene lasciato come criterio del "best effort". Il valore è bloccato nell'intervallo supportato dal SoC.
Configurazioni di RoI multiple (sia una chiave standardizzata che specifiche del fornitore) sono impostate su un singolo frame. L'utente utilizza sia la chiave standardizzata che la chiave del fornitore per il frame 1. Se disponibile, il framework conserva il primo rect standardizzato la prima configurazione QP_map standardizzata, o entrambe le cose. In ogni categoria, il framework invia un solo elemento la configurazione al SoC e, se è disponibile la configurazione standardizzata, l'implementazione del SoC deve ignorare le configurazioni del fornitore. Se vengono inviate più configurazioni al SoC, il fornitore del SoC deve conservare una sola configurazione RoI e ignorano le altre.

Le configurazioni vengono conservate in questo ordine di priorità:

  1. rect standardizzato
  2. QP_map standardizzato
  3. Fornitore rect
  4. Fornitore QP_map