Configuration de l’encodage audio standard, Professional ou sans perte

Lorsque l’encodeur media audio Windows énumère les types de sortie, il identifie chaque type énuméré comme Standard, Professional ou Lossless. Vous pouvez déterminer si un type de sortie est Standard, Professional ou Lossless en effectuant les étapes suivantes.

  1. Appelez IMFTransform::GetOutputAvailableType pour obtenir une interface IMFMediaType qui représente le type de sortie.
  2. Appelez IMFMediaType::GetRepresentation pour obtenir une structure AM_MEDIA_TYPE qui contient des informations sur le type de sortie.
  3. Le membre pbFormat de la structure AM_MEDIA_TYPE pointe vers une structure WAVEFORMATEX qui contient des informations supplémentaires sur le type de sortie. Inspectez le membre wFormatTag de la structure WAVEFORMATEX . Une valeur de 0x161 indique Standard, une valeur de 0x162 indique Professional et une valeur de 0x163 indique Lossless.

Si vous définissez des propriétés sur l’encodeur media audio Windows avant d’énumérer les types de sortie, vous pouvez limiter le nombre de types de sortie énumérés. Par exemple, si vous définissez les propriétés VBR de manière appropriée, vous pouvez limiter les types de sortie énumérés à ceux qui se trouvent dans la catégorie Sans perte.

Encodage audio standard

Vous pouvez utiliser les étapes suivantes pour configurer l’encodage audio Standard.

  1. Définissez les propriétés de votre choix sur l’encodeur.
  2. Énumérez les types de sortie possibles.
  3. Inspectez les types énumérés et choisissez une balise de format audio de 0x161.
  4. Définissez le type de sortie sur votre type choisi en appelant IMFTransform::SetOutputType.

encodage audio Professional

Vous pouvez utiliser les étapes suivantes pour configurer Professional encodage audio.

  1. Définissez les propriétés de votre choix sur l’encodeur.
  2. Énumérez les types de sortie possibles.
  3. Inspectez les types énumérés et choisissez une balise de format audio de 0x162.
  4. Définissez le type de sortie sur votre type choisi en appelant IMFTransform::SetOutputType.

Encodage audio sans perte

Vous pouvez utiliser les étapes suivantes pour configurer l’encodage audio sans perte.

  1. Définissez la propriété MFPKEY_VBRENABLED sur VARIANT_TRUE.
  2. Définissez la propriété MFPKEY_CONSTRAIN_ENUMERATED_VBRQUALITY sur VARIANT_TRUE.
  3. Définissez la propriété MFPKEY_DESIRED_VBRQUALITY sur 100.
  4. Énumérer les types de sortie.
  5. Définissez le type de sortie sur l’un des types énumérés à l’étape 4 en appelant IMFTransform::SetOutputType.

Le code suivant énumère tous les types de sortie sans perte pour l’encodeur audio multimédia Windows. Le code imprime la valeur de la balise de format audio pour chaque type énuméré. Étant donné que tous les types énumérés sont sans perte, toutes ces balises de format ont une valeur de 0x163. Supposons que pIMT est un pointeur vers une interface IMFTransform sur un objet d’encodeur Media Audio Windows et que pStore est un pointeur vers une interface IPropertyStore sur le même objet. Supposons également que hr est une variable de type HRESULT qui a été déclarée précédemment dans le code.

PROPVARIANT prop;
prop.vt = VT_BOOL;
prop.boolVal = VARIANT_TRUE;
hr = pStore->SetValue(MFPKEY_VBRENABLED, prop);

if(SUCCEEDED(hr))
{
   hr = pStore->SetValue(MFPKEY_CONSTRAIN_ENUMERATED_VBRQUALITY, prop);

   if(SUCCEEDED(hr))
   {
      prop.vt = VT_UI4;
      prop.ulVal = 100;
      hr = pStore->SetValue(MFPKEY_DESIRED_VBRQUALITY, prop);
      
      if(SUCCEEDED(hr))
      {           
         HRESULT hrAvailableType = S_OK;
         LONG j = 0;
         while(MF_E_NO_MORE_TYPES != hrAvailableType)
         {
            IMFMediaType* pOutputType = NULL;     
            hrAvailableType = pIMFT->GetOutputAvailableType(
               0, j, &pOutputType);

            if(SUCCEEDED(hrAvailableType))
            {
               AM_MEDIA_TYPE* pTypeRep = NULL;
               hr = pOutputType->GetRepresentation(
                  AM_MEDIA_TYPE_REPRESENTATION, (VOID**)&pTypeRep); 
                     
               if(SUCCEEDED(hr))
               {
                  WAVEFORMATEX* pwfex = (WAVEFORMATEX*)pTypeRep->pbFormat;
                  printf_s("%x\n", pwfex->wFormatTag);
                  pOutputType->FreeRepresentation(
                     AM_MEDIA_TYPE_REPRESENTATION, (VOID*)pTypeRep);
               }

               pOutputType->Release();
               ++j;
            }                                                                  
         } // while                 
      }                                
   } 
}

Configuration de l’encodage audio