Énumération des types audio pour des modes d’encodage spécifiques (Microsoft Media Foundation)
Les types de média d’entrée et de sortie acceptés par l’encodeur audio sont très structurés. Vous devez obtenir des types de sortie pris en charge en appelant la méthode IMediaObject::GetOutputType ou IMFTransform::GetOutputType. Une fois que vous avez obtenu un type de sortie, vous ne devez pas le modifier.
Si vous souhaitez utiliser un mode d’encodage autre que CBR à un passage, vous devez définir le mode, puis énumérer les types de sortie pour ce mode ; l’encodeur modifie les types de sortie pris en charge en fonction du mode défini. Les propriétés qui contrôlent le mode d’encodage sont MFPKEY_VBRENABLED et MFPKEY_PASSESUSED. Lorsque le mode est défini dans l’encodeur, vous devez énumérer et sélectionner un type de sortie, en l’utilisant sans modification, comme avec CBR.
Identification des types VBR basés sur la qualité
La procédure d’identification des types VBR basés sur la qualité varie selon que l’encodeur agit en tant qu’objet multimédia DirectX (DMO) ou en tant que transformation Media Foundation (MFT). Pour plus d’informations sur le moment où un encodeur agit comme un DMO ou un MFT, consultez les pages de référence de codec individuelles sous Codec Objects.
Lorsqu’un encodeur audio agit comme un DMO et que vous configurez l’encodeur pour qu’il utilise VBR à passe unique, il énumère tous les types de sortie pris en charge. Toutefois, vous souhaiterez généralement sélectionner un type VBR à passe unique en fonction du paramètre de qualité. L’encodeur place la valeur de qualité pour les types de sortie VBR à passe unique dans le membre nAvgBytesPerSec de la structure WAVEFORMATEX pointée par DMO_MEDIA_TYPE.pbFormat.
Cette valeur est stockée au format suivant : 0x7FFFFFXX, où XX est la valeur de qualité (de 0 à 100). Par exemple, la valeur nAvgBytesPerSec de 0x7FFFFF62 spécifie le niveau de qualité 98 (0x62 = 98).
L’exemple suivant montre comment vérifier le niveau de qualité d’un format lorsque l’encodeur agit en tant que DMO.
void ShowQuality(WAVEFORMATEX* pWave)
{
// Store the average bytes per second in a local variable
// with a more manageable name.
DWORD dwBps = pWave->nAvgBytesPerSec;
// Verify that the value is a VBR quality level by using
// a bitmask to check for the bit pattern 0x7FFFFFXX.
if(dwBps & 0x7FFFFF00 == 0x7FFFFF00)
printf("VBR Quality: %d%%\n",(dwBps & 0x000000FF));
else // Not a valid VBR quality value.
printf("Not a valid one-pass VBR audio format.\n");
}
Lorsque l’encodeur agit en tant que MFT et qu’il énumère un type de sortie sur un appel à GetAvailableOutputType, vous pouvez interroger le MFT pour la propriété MFPKEY_MOST_RECENTLY_ENUMERATED_VBRQUALITY . La valeur retournée indique la qualité VBR du type de média de sortie retourné le plus récemment. Vous pouvez ensuite utiliser cette valeur pour définir la propriété MFPKEY_DESIRED_VBRQUALITY de l’encodeur.
Définition des contraintes de pointe
Pour un VBR basé sur la qualité (une passe) et un VBR sans contrainte à deux passes, aucun paramètre supplémentaire n’est requis après avoir récupéré le type de sortie. Pour utiliser VBR à pic, récupérez un type de sortie avec VBR activé et deux passes définies. Ce type, sans modification, décrit les paramètres VBR non contraints. Pour définir des contraintes de pointe, définissez les propriétés MFPKEY_RMAX et MFPKEY_BMAX .
Rubriques connexes