Recupero delle funzionalità di formato tramite IWMDMDevice
Il metodo consigliato per eseguire query su un dispositivo per le funzionalità di riproduzione è IWMDMDevice3::GetFormatCapability. Tuttavia, se un dispositivo non supporta questo metodo, l'applicazione può invece chiamare IWMDMDevice::GetFormatSupport per recuperare una matrice di formati audio supportati come strutture _WAVEFORMATEX e formati MIME come stringhe dal dispositivo.
La procedura seguente illustra come un'applicazione può usare questo metodo per eseguire query su un dispositivo per i formati supportati:
- Chiamare GetFormatSupport per recuperare matrici di formati audio e mime.
- Eseguire il ciclo attraverso i formati audio recuperati ed esaminare ogni struttura _WAVEFORMATEX per cercare di trovare un formato audio accettabile
- Eseguire il ciclo attraverso le stringhe di formato MIME recuperate (se desiderato) per trovare un tipo di file accettabile. L'SDK non definisce costanti per i formati MIME; è consigliabile usare i valori standard del settore (che possono essere trovati nel sito Web iana.org). Un dispositivo deve elencare i tipi MIME specifici supportati.
Il codice C++ seguente illustra il recupero delle funzionalità di formato da un dispositivo usando GetFormatSupport.
// Function to print out device caps for a device
// that supports only IWMDMDevice.
void CWMDMController::GetCaps(IWMDMDevice* pDevice)
{
HRESULT hr = S_OK;
// Get all capabilities for audio and mime support.
_WAVEFORMATEX* pAudioFormats;
LPWSTR* pMimeFormats;
UINT numAudioFormats = 0;
UINT numMimeFormats = 0;
hr = pDevice->GetFormatSupport(
&pAudioFormats,
&numAudioFormats,
&pMimeFormats,
&numMimeFormats);
if (FAILED(hr)) return;
// Print out audio format data.
if (numAudioFormats > 0)
{
// TODO: Display a banner for the supported audio-format listing.
}
else
{
// TODO: Display a message indicating that no audio formats are supported.
}
for (int i = 0; i < numAudioFormats; i++)
{
// TODO: For each valid audio format, display the max channel,
// max samples/second, avg. bytes/sec, block alignment, and
// max bits/sample values.
}
// Print out MIME formats.
if (numMimeFormats > 0)
// TODO: Display a banner to precede the MIME format listing.
else
// TODO: Display a banner indicating that no MIME formats are supported.
for (i = 0; i < numMimeFormats; i++)
{
// TODO: Display the specified MIME format.
}
return;
}
Argomenti correlati