Configuración de codificación de audio estándar, Professional o sin pérdida

Cuando el codificador de audio multimedia de Windows enumera los tipos de salida, identifica cada tipo enumerado como Estándar, Professional o Sin pérdida. Puede determinar si un tipo de salida es Estándar, Professional o Sin pérdida mediante los pasos siguientes.

  1. Llame a IMFTransform::GetOutputAvailableType para obtener una interfaz IMFMediaType que represente el tipo de salida.
  2. Llame a IMFMediaType::GetRepresentation para obtener una estructura de AM_MEDIA_TYPE que contiene información sobre el tipo de salida.
  3. El miembro pbFormat de la estructura AM_MEDIA_TYPE apunta a una estructura WAVEFORMATEX que contiene información adicional sobre el tipo de salida. Inspeccione el miembro wFormatTag de la estructura WAVEFORMATEX . Un valor de 0x161 indica Estándar, un valor de 0x162 indica Professional y un valor de 0x163 indica Pérdida.

Si establece propiedades en el codificador de audio multimedia Windows antes de enumerar los tipos de salida, puede limitar el número de tipos de salida enumerados. Por ejemplo, si establece adecuadamente las propiedades de VBR, puede limitar los tipos de salida enumerados a los que se encuentran en la categoría Sin pérdida.

Codificación de audio estándar

Puede usar los pasos siguientes para configurar la codificación de audio estándar.

  1. Establezca las propiedades que prefiera en el codificador.
  2. Enumerar los posibles tipos de salida.
  3. Inspeccione los tipos enumerados y elija uno que tenga una etiqueta de formato de audio de 0x161.
  4. Establezca el tipo de salida en el tipo elegido llamando a IMFTransform::SetOutputType.

Codificación de audio de Professional

Puede usar los pasos siguientes para configurar Professional codificación de audio.

  1. Establezca las propiedades que prefiera en el codificador.
  2. Enumerar los posibles tipos de salida.
  3. Inspeccione los tipos enumerados y elija uno que tenga una etiqueta de formato de audio de 0x162.
  4. Establezca el tipo de salida en el tipo elegido llamando a IMFTransform::SetOutputType.

Codificación de audio sin pérdida

Puede usar los pasos siguientes para configurar la codificación de audio sin pérdida.

  1. Establezca la propiedad MFPKEY_VBRENABLEDen VARIANT_TRUE.
  2. Establezca la propiedad MFPKEY_CONSTRAIN_ENUMERATED_VBRQUALITYen VARIANT_TRUE.
  3. Establezca la propiedad MFPKEY_DESIRED_VBRQUALITY en 100.
  4. Enumerar los tipos de salida.
  5. Establezca el tipo de salida en uno de los tipos enumerados en el paso 4 llamando a IMFTransform::SetOutputType.

El código siguiente enumera todos los tipos de salida sin pérdida para el codificador de audio multimedia de Windows. El código imprime el valor de la etiqueta de formato de audio para cada tipo enumerado. Dado que todos los tipos enumerados no tienen pérdida, todas esas etiquetas de formato tienen un valor de 0x163. Supongamos que pIMT es un puntero a una interfaz IMFTransform en un objeto codificador de audio multimedia Windows y que pStore es un puntero a una interfaz IPropertyStore en el mismo objeto. Suponga también que hr es una variable de tipo HRESULT que se declaró anteriormente en el código.

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                 
      }                                
   } 
}

Configuración de la codificación de audio