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 PQ et AQ, ce qui réduit la charge de travail liée à 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. Il est important de noter que les profils et les paramètres peuvent être gérés par nom de package (application) et par ID d'entrée. De plus, les profils peuvent être créés par des applications système ou par d'autres applications figurant sur la liste d'autorisation. Seul le propriétaire des profils peut les modifier ou les supprimer. Plus précisément, le framework gère les profils d'image et de son. La luminosité, le contraste et la netteté sont des exemples de paramètres d'image. Les paramètres audio incluent, par exemple, les basses et les aigus. 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 via 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 est également compatible avec les changements d'état, ce qui permet d'utiliser différents ensembles de paramètres pour des états tels que le HDR, de gérer les profils d'image actifs pour le traitement en cours et de gérer 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é multimédia est composé de plusieurs composants clés qui fonctionnent ensemble au niveau des couches application, framework et matériel.

Figure 1 : Interactions entre les composants du framework de qualité média
- Gestionnaire de la qualité du contenu 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é multimédia : base de données SQLite qui stocke tous les profils d'image et de son.
- Contrat de qualité mé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é multimédia est compatible avec un large éventail de fonctionnalités. Il fournit un système flexible et puissant pour gérer la qualité multimé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é du contenu multimédia.
Créer et appliquer un profil photo

Figure 2. Diagramme de séquence pour la création d'un profil photo
- Une application système appelle
setPictureProfileAllowList()pour accorder à une application multimédia l'autorisation de créer des profils. - L'application multimédia enregistre un
PictureProfileCallbackpour recevoir des notifications concernant les modifications apportées au profil. - L'application multimédia appelle
createPictureProfile()avec un objetPictureProfile. - Le
MediaQualityServicetraite la requête, enregistre le profil dans la base de données et informe l'application de la réussite ou de l'échec de l'opération via le rappel enregistré (onPictureProfileAdded()ouonError()).
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.

Figure 3. Diagramme de séquence pour définir un profil d'image par flux
- L'application multimédia interroge
MediaQualityManagerpour obtenir la liste des profils d'image disponibles. - L'application utilise ensuite
MediaCodec.setParameterspour sélectionner et définir le profil souhaité pour le flux. - Le framework communique ce choix au HAL de qualité média (QM), en transmettant l'ID du profil et ses paramètres.
- 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é.
- L'application système récupère une liste des profils d'image disponibles à partir du framework.
- L'application sélectionne ensuite l'un de ces profils comme nouveau profil par défaut global en appelant
setDefaultPictureProfile(id). - 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 du SDK Media Quality 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ètre 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. Nécessite l'autorisation MANAGE_GLOBAL_PICTURE_QUALITY_SERVICE. |
registerPictureProfileCallback(PictureProfileCallback cb) |
Enregistre un rappel pour écouter les modifications apportées au profil. |
Objet PictureProfile
L'objet PictureProfile encapsule toutes les informations d'un mode image 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é du contenu multimé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 via 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 qui représente 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 notifier 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. |