Découverte des fonctionnalités de format d’appareil

Votre application peut essayer de déterminer les fonctionnalités de lecture d’un appareil avant de lui envoyer un fichier. Si un appareil ne peut pas gérer le format d’un fichier que vous souhaitez envoyer, votre application peut tenter de transcoder le fichier dans un format que l’appareil peut utiliser, ou informer l’utilisateur que l’appareil ne peut pas prendre en charge le fichier demandé.

Notez que certains appareils, tels que les appareils de classe de stockage de masse, peuvent servir uniquement de support de stockage amovible sans fonctionnalités de lecture. Dans ce cas, il serait inapproprié pour votre application de transcoder un fichier avant de l’envoyer à l’appareil.

Bien que la méthode IWMDMDevice::GetType permette à un appareil de signaler ses fonctionnalités, certains appareils retournent des valeurs incorrectes pour cette méthode. Avant de copier un fichier sur un appareil, vous pouvez demander à l’utilisateur si la lecture est prévue et, si c’est le cas, essayer de transcoder le fichier dans l’un des formats signalés de l’appareil (ou un format raisonnable, si l’appareil revendique la prise en charge d’un format quelconque). Une autre approche consiste à supposer que tous les formats spécifiquement répertoriés comme pris en charge par l’appareil sont destinés à la lecture et que tous les autres fichiers doivent être transférés sans modification.

Après avoir découvert le format du fichier à transférer et les formats pris en charge par un appareil, vous pouvez décider quel est le meilleur format cible pour le transcodage.

Dans le passé, il était courant qu’une application retourne zéro pour qu’une propriété indique la prise en charge de toutes les valeurs de cette propriété. Par exemple, la valeur zéro pour _WAVEFORMATEX.nSamplesPerSec indique la prise en charge de tout débit binaire. À présent, la méthode recommandée pour indiquer la prise en charge d’une valeur consiste à spécifier WMDM_ENUM_PROP_VALID_VALUES_ANY dans WMDM_PROP_DESC. ValidValuesForm. Toutefois, certaines propriétés peuvent légitimement retourner zéro pour indiquer une prise en charge spécifique. Par exemple, si _BITMAPINFOHEADER.biSizeImage a la valeur zéro, cela indique une BI_RGB bitmap. Les exceptions pour les valeurs nulles sont notées dans la documentation relative aux structures pertinentes.

Toutefois, il est important de noter que souvent, les appareils ne signalent pas correctement leurs fonctionnalités de format, ou de manière standard. Par exemple, les appareils signalent souvent qu’ils prennent en charge n’importe quel format, alors qu’en fait ils ne peuvent gérer que des formats spécifiques ou des débits binaires spécifiques au sein d’un type de format. C’est à vous de décider si votre application doit accepter ces rapports, ou si elle doit supposer une limite supérieure aux capacités de lecture d’un appareil (par exemple, 192 Kbits/s).

La méthode recommandée pour demander la prise en charge du format d’un appareil est IWMDMDevice3::GetFormatCapability. Si cette méthode n’est pas prise en charge, votre application doit se replier sur IWMDMDevice::GetFormatSupport. GetFormatSupport, contrairement à GetFormatSupport2, ne retourne pas d’informations vidéo.

La façon dont une application demande les fonctionnalités de format d’un appareil dépend de l’interface prise en charge par l’application. Pour plus de détails, consultez les rubriques suivantes :

Écriture de fichiers sur l’appareil