Obtención de funcionalidades de formato a través de IWMDMDevice
El método recomendado para consultar un dispositivo para sus funcionalidades de reproducción es IWMDMDevice3::GetFormatCapability. Sin embargo, si un dispositivo no admite este método, la aplicación puede llamar a IWMDMDevice::GetFormatSupport para recuperar una matriz de formatos de audio admitidos como estructuras _WAVEFORMATEX y formatos MIME como cadenas del dispositivo.
En los pasos siguientes se muestra cómo una aplicación puede usar este método para consultar un dispositivo en busca de formatos admitidos:
- Llame a GetFormatSupport para recuperar matrices de formatos de audio y mime.
- Recorra en bucle los formatos de audio recuperados y examine cada estructura de _WAVEFORMATEX para intentar encontrar un formato de audio aceptable.
- Recorra en bucle las cadenas de formato MIME recuperadas (si lo desea) para buscar un tipo de archivo aceptable. El SDK no define constantes para formatos MIME; Debe usar valores estándar del sector (que se pueden encontrar en el sitio web de iana.org). Un dispositivo debe enumerar los tipos MIME específicos que admite.
En el código de C++ siguiente se muestra cómo recuperar funcionalidades de formato de un dispositivo mediante 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;
}
Temas relacionados