Conseils OEM pour la mise en œuvre du RoI

Android 15 introduit un processus standardisé Vidéo sur l'intégration des configurations utilisateur pour les régions d'intérêt (RoI) d'encodage. Cette fonctionnalité permet d'améliorer la qualité de la compression proposant des API publiques pour intégrer et analyser les configurations utilisateur dans la vidéo encodeur/décodeur.

Implémentation

Les fournisseurs de SoC et les OEM peuvent contrôler la prise en charge du protocole RoI pour l'encodage vidéo avec le FEATURE_Roi . Si l'option FEATURE_Roi n'est pas activée, le comportement de l'encodeur vidéo reste inchangé.

Modifications apportées au framework vidéo

Cette section détaille les modifications à apporter à la structure vidéo nécessaires pour mettre en œuvre cette .

Clés dans Codec2

Dans Android 15, le mappage des paramètres de quantification (QP_map) et la configuration rectangulaire (rect) sont définies comme RoI types de configuration. De plus, deux clés sont introduites dans Codec2 (C2) pour prennent en charge ces nouveaux types. L'utilisation des deux clés est la même que pour les API publiques. Dans la boucle de trame de l'encodeur, la configuration est ajustée de façon dynamique. pendant la phase d'exécution, avant que le tampon d'entrée ne soit mis en file d'attente, décrit comme ce qui suit:

  • Dans un scénario persistant, si aucune configuration RoI n'est fournie pour le trame, l'encodeur utilise la même configuration que la trame précédente.

  • Dans un scénario dynamique, les types de configuration RoI peuvent changer de manière dynamique.

Les nouvelles clés en C2 sont décrites dans les sections suivantes.

kParamIndexQpOffsetMapBuffer

kParamIndexQpOffsetMapBuffer la clé signale la carte qp-offset pour un frame. Sa valeur est définie à l'aide de l'entrée Paramètre PARAMETER_KEY_QP_OFFSET_MAP de setParameters.

kParamIndexQpOffsetMapBuffer est un tableau d'octets dans C2InfoBuffer, avec les attributs suivants:

  • Longueur: le nombre de blocs de 16 x 16 dans une image.

  • Valeur: chaque valeur du tableau correspond au décalage QP d'un bloc 16 x 16, dans la région -51~51. Le QP de la plus grande unité de codage (LCU) cible est calculé par le le contrôle du débit de l'encodeur plus le décalage. Si le résultat calculé dépasse la valeur 0~51 région, la valeur est tronquée à 0~51.

    • Si la valeur est 0: aucun décalage QP, c'est le contrôle de taux d'origine qui détermine le QP.
    • Si elle est différente de zéro: QP correspond au contrôle de taux d'origine plus le décalage.
    • Si elle est négative, la qualité de la vidéo est améliorée dans la LCU cible.
    • Si elle est positive: la qualité de la vidéo diminue dans la LCU cible.
  • Utilisation: l'utilisateur doit configurer cette clé sous forme de blocs 16 x 16. L'encodeur ajuste la configuration à la taille réelle de la bibliothèque LCU en faisant la moyenne des valeurs de la couche 16 x 16 dans le LCU.

C2_PARAMKEY_QP_OFFSET_RECTS

C2_PARAMKEY_QP_OFFSET_RECTS (définie sur coding.qp-offset-rects) définit le ROAS sur QpOffset-Rects. Sa valeur est définie à l'aide du paramètre d'entrée PARAMETER_KEY_QP_OFFSET_RECTS de setParameters.

Pour utiliser cette clé, la structure suivante C2QpOffsetRectStruct est introduit:

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

Où :

  • top et left: coordonnées de RoI, dans une forme rectangulaire. Le RoI est étirés pour s'aligner sur les limites de l'unité de calcul du temps de calcul. Cette valeur représente coin supérieur gauche de chaque pixel, de sorte que ((0,0), (16, 16)) définit un bloc complet de 16 x 16.

  • qpOffset: chaque valeur du tableau représente le décalage QP de la cible. rect. Sa définition et son utilisation sont les mêmes que Valeur kParamIndexQpOffsetMapBuffer.

Algorithme de mappage

Le tableau suivant montre le mappage entre les clés publiques et la vidéo. framework:

Clés publiques ou API Mappage dans le framework vidéo
PARAMETER_KEY_QP_OFFSET_MAP La valeur est transmise à kParamIndexQpOffsetMapBuffer en tant que C2InfoBuffer instance.
PARAMETER_KEY_QP_OFFSET_RECTS La valeur String est convertie en Struct C2QpOffsetRectStruct et transmis à C2_PARAMKEY_QP_OFFSET_RECTS

Gestion des exceptions

L'implémentation OEM doit gérer les cas d'erreur suivants:

Cas d'erreur Exemple Manipulation
La clé du fournisseur et la clé standardisée sont utilisées pour activer le ROAS. L'utilisateur appelle à la fois setFeatureEnabled(FEATURE_ROI) ET la clé du fournisseur pour activer le RoI. Le RoI doit être activé.
Le décalage QP est compris dans la plage, mais n'est pas pris en charge par les fournisseurs de SoC. L'utilisateur définit le décalage QP sur 12, mais le SoC n'accepte qu'un décalage QP inférieur à 10. La plage de décalage QP compatible est définie dans l'optique d'obtenir le meilleur résultat possible. La valeur est limitée à la plage compatible du SoC.
Plusieurs configurations RoI (clé standardisée ou clé spécifique au fournisseur) sont définies sur une seule image. L'utilisateur utilise à la fois une clé standardisée et une clé de fournisseur pour l'image 1. S'il est disponible, le framework conserve le premier rect standardisé la première configuration QP_map standardisée, ou les deux. Dans chaque catégorie, le framework n'envoie qu'un seul modèle sur le SoC et si la configuration standardisée est disponible, l'implémentation du SoC doit ignorer les configurations du fournisseur. Si plusieurs configurations sont envoyées au SoC, le fournisseur du SoC doit conserver une seule configuration RoI et ignorer les autres configurations.

Les configurations sont conservées dans cet ordre de priorité:

  1. rect standardisé
  2. QP_map standardisé
  3. Fournisseur rect
  4. Fournisseur QP_map