Cadre de qualité du contenu multimédia

Le framework de qualité multimédia est introduit dans Android 16 pour Android TV dans le but d'établir une API standardisée pour les ajustements de qualité d'image (PQ) et de qualité audio (AQ). L'objectif principal est de fournir une approche unifiée de ces ajustements sur différents appareils Android TV. Ce framework standardisé vise à simplifier le développement pour les développeurs d'applications, les fabricants d'équipement d'origine (OEM) et les fournisseurs de systèmes sur une puce (SoC) en offrant un ensemble cohérent d'API Android. Pour les fournisseurs de SoC en particulier, il permet au framework Android de gérer la configuration de la qualité d'image et de la qualité audio, ce qui réduit le surcoût lié à la collaboration avec différents développeurs d'applications.

En fin de compte, pour Google et la plate-forme Android, cela permet de réduire la fragmentation, d'améliorer la qualité et l'évolutivité, de fournir de nouvelles fonctionnalités et de jeter les bases d'une interface utilisateur unifiée pour la qualité audio/vidéo et d'une expérience utilisateur améliorée.

Le framework de qualité média prend en charge différents cas d'utilisation pour améliorer l'expérience de visionnage de la télévision. Les profils et les paramètres peuvent être gérés par nom de package (application) ou par ID d'entrée. De plus, les profils peuvent être créés par des applications système ou des applications figurant sur la liste d'autorisation. Ils ne peuvent être mis à jour ou supprimés que par leur propriétaire.

Plus précisément, le framework gère les profils d'image et de son. Par exemple, la luminosité, le contraste et la netteté sont des paramètres d'image, tandis que les basses et les aigus sont des paramètres audio.

Ces profils peuvent être appliqués dans différents contextes, y compris pour définir des profils par défaut globaux, des profils de streaming à l'aide de MediaCodec, des profils par défaut d'application pour des applications multimédias spécifiques et des profils d'image d'entrée TV pour des entrées spécifiques comme HDMI. Le framework prend également en charge les changements d'état (permettant différents ensembles de paramètres pour des états tels que le HDR), gère les profils d'image actifs pour le traitement en cours et gère les fonctionnalités de rétroéclairage ambiant.

L'équipe Android collabore avec nos partenaires de l'écosystème pour prendre en charge le framework de qualité média.

Composants

Le framework de qualité média est composé de plusieurs composants clés qui fonctionnent ensemble au niveau des couches d'application, de framework et matérielles.

Diagramme de standardisation de la qualité d'image et audio
Figure 1. Interactions entre les composants du framework de qualité média.
  • Gestionnaire de la qualité multimédia (API SDK) : API SDK destinée aux applications qui leur permet de gérer les profils d'image et de son.
  • Service de qualité du contenu multimédia : service système qui contient la logique métier de base, gère les profils, les autorisations et la communication avec la HAL.
  • Base de données sur la qualité des contenus multimédias : base de données SQLite qui stocke tous les profils d'image et de son.
  • Contrat de qualité du contenu multimédia : définit les paramètres et les structures de données standardisés utilisés pour la communication entre les applications et le framework.
  • HAL de qualité média : couche d'abstraction matérielle que les fournisseurs de SoC implémentent pour communiquer les modifications apportées aux profils d'image et de son au matériel sous-jacent.

Fonctionnalités

Le framework de qualité média est compatible avec un large éventail de fonctionnalités pour fournir un système flexible et puissant de gestion de la qualité média.

Gestion des profils

  • Profils gérés par les applications : les applications peuvent créer, modifier et supprimer leurs propres profils pour une expérience personnalisée.
  • Profils par défaut : les applications système peuvent définir des profils par défaut pour des applications ou des entrées TV spécifiques (par exemple, HDMI 1).
  • Profil global par défaut : profil de secours à l'échelle du système qui est appliqué lorsqu'aucun profil spécifique n'est défini.

Workflow global

Les schémas suivants illustrent les séquences d'appels pour les opérations courantes de qualité multimédia.

Créer et appliquer un profil photo

Créer un profil avec une photo
Figure 2 : Diagramme de séquence pour la création d'un profil photo.
  1. Une application système appelle setPictureProfileAllowList() pour accorder à une application multimédia l'autorisation de créer des profils.
  2. L'application multimédia enregistre un PictureProfileCallback pour recevoir des notifications sur les modifications de profil.
  3. L'application multimédia appelle createPictureProfile() avec un objet PictureProfile.
  4. Le MediaQualityService traite la requête, enregistre le profil dans la base de données et informe l'application de la réussite ou de l'échec à l'aide du rappel enregistré (onPictureProfileAdded() ou onError()).

Définir un profil d'image par flux

Ce workflow montre comment une application peut appliquer un profil spécifique à son contenu vidéo pendant la lecture.

Définir un profil d'image pour le flux
Figure 3 : Diagramme de séquence pour définir un profil d'image par flux.
  1. L'application multimédia interroge MediaQualityManager pour obtenir la liste des profils d'image disponibles.
  2. L'application utilise ensuite MediaCodec.setParameters pour sélectionner et définir le profil sélectionné pour le flux.
  3. Le framework communique ce choix à la HAL de qualité média (QM), en transmettant l'ID du profil et ses paramètres.
  4. Enfin, le MQ HAL envoie ces paramètres au Composer HAL, qui affiche le flux vidéo avec le profil d'image spécifié.

Définir un profil global par défaut

Seules les applications système peuvent définir le profil global par défaut, qui sert de solution de repli pour tout contenu auquel aucun profil spécifique n'est attribué.

  1. L'application système récupère une liste des profils d'image disponibles à partir du framework.
  2. L'application sélectionne ensuite l'un de ces profils pour qu'il devienne le nouveau profil par défaut global en appelant setDefaultPictureProfile(id).
  3. Le framework envoie les paramètres de ce profil au HAL de qualité média, qui applique ensuite les modifications.

API du SDK Media Quality

L'API Media Quality SDK fournit les outils nécessaires aux applications pour interagir avec le framework. Le point d'entrée principal est le package android.media.quality.

android.media.quality

Ce package contient les classes principales pour gérer la qualité du contenu multimédia.

Classe Description
MediaQualityManager Classe centrale pour interagir avec le MQF.
PictureProfile Classe de données représentant un ensemble complet de paramètres d'image pour un mode spécifique.
SoundProfile Classe de données pour les paramètres audio.
MediaQualityContract Classe contenant des constantes pour toutes les clés de paramètres prédéfinies.

MediaQualityManager

Voici quelques-unes des principales méthodes :

Méthode Description
createPictureProfile(PictureProfile profile) Crée un profil photo. Nécessite des autorisations spéciales ou que l'application figure sur la liste d'autorisation.
updatePictureProfile(PictureProfile profile) Met à jour un profil photo existant. Cette méthode ne peut être appelée que par le créateur du profil.
removePictureProfile(String profileId) Supprime un profil. Cette méthode ne peut être appelée que par le créateur du profil.
getAvailablePictureProfiles() Renvoie la liste de tous les profils d'image disponibles.
setDefaultPictureProfile(String profileId) Définit le profil d'image global par défaut. Autorisation MANAGE_GLOBAL_PICTURE_QUALITY_SERVICE requise.
registerPictureProfileCallback(PictureProfileCallback cb) Enregistre un rappel pour écouter les modifications apportées au profil.

Objet PictureProfile

L'objet PictureProfile encapsule toutes les informations pour un mode photo donné.

public final class PictureProfile {
  private String id;
  private int type; // System or Application
  private String name; // e.g., "Movie", "Game"
  private String inputId; // e.g., "HDMI1"
  private String packageName; // e.g., "com.google.android.youtube"
  private PersistableBundle parameters; // Bundle containing all PQ parameters
}

HAL de qualité média

Le HAL de qualité média est une interface basée sur AIDL définie dans hardware/interfaces/tv/mediaquality/aidl/. Les fournisseurs de SoC doivent implémenter cette interface pour activer le framework de qualité média sur leurs appareils. La HAL sert de passerelle de communication entre MediaQualityService dans le framework Android et le matériel sous-jacent, responsable de l'application des ajustements d'image et de son.

Le HAL gère les profils d'image et de son à l'aide de parcelables AIDL. Cela implique de recevoir les modifications de profil du framework et de l'informer de tout ajustement effectué au niveau matériel.

Modules

L'interface HAL est composée de plusieurs fichiers AIDL clés :

Fichier HAL Description
IMediaQuality.aidl Interface principale du service de qualité multimédia, utilisée pour définir les auditeurs et découvrir les capacités matérielles.
IPictureProfileChangedListener.aidl Interface d'écouteur que le framework utilise pour notifier la HAL (plus précisément, un composant tel que la HAL du compositeur) des modifications apportées à un profil d'image.
IPictureProfileAdjustmentListener.aidl Interface d'écouteur utilisée par la HAL pour informer le framework des ajustements effectués au niveau matériel, par exemple lorsqu'un utilisateur modifie un paramètre directement à l'aide d'une télécommande matérielle.
PictureParameter.aidl Union AIDL qui définit tous les paramètres d'image standards pouvant être ajustés, tels que le contraste et la netteté.
PictureProfile.aidl Parcelable AIDL représentant un objet PictureProfile au niveau HAL, contenant un ID de profil et ses paramètres associés.
ISoundProfileChangedListener.aidl Interface d'écouteur que le framework utilise pour informer la HAL des modifications apportées à un profil audio.
ISoundProfileAdjustmentListener.aidl Interface d'écouteur que le HAL utilise pour informer le framework des ajustements sonores effectués au niveau matériel.