Compartir a través de


Enumeración de tipos de audio para modos de codificación específicos (Microsoft Media Foundation)

Los tipos de medios de entrada y salida aceptados por el codificador de audio están muy estructurados. Debe obtener los tipos de salida admitidos llamando al método IMediaObject::GetOutputType o IMFTransform::GetOutputType. Después de obtener un tipo de salida, no debe modificarlo.

Si desea usar un modo de codificación distinto de CBR de un solo paso, debe establecer el modo y, a continuación, enumerar los tipos de salida para ese modo; El codificador cambia los tipos de salida admitidos en función del modo establecido. Las propiedades que controlan el modo de codificación se MFPKEY_VBRENABLED y MFPKEY_PASSESUSED. Cuando el modo se establece en el codificador, debe enumerar y seleccionar un tipo de salida, usándolo sin modificaciones, igual que con CBR.

Identificación de tipos de VBR basados en calidad

El procedimiento para identificar tipos de VBR basados en calidad depende de si el codificador actúa como un objeto multimedia de DirectX (DMO) o actúa como transformación de Media Foundation (MFT). Para obtener información sobre cuándo un codificador actúa como DMO o MFT, vea las páginas de referencia de códec individuales en Objetos de códec.

Cuando un codificador de audio actúa como DMO y configura el codificador para que use VBR de un solo paso, enumera todos los tipos de salida admitidos. Sin embargo, normalmente querrá seleccionar un tipo VBR de un solo paso en función del parámetro de calidad. El codificador coloca el valor de calidad para los tipos de salida VBR de un paso en el miembro nAvgBytesPerSec de la estructura WAVEFORMATEX a la que apunta DMO_MEDIA_TYPE.pbFormat.

Este valor se almacena en el siguiente formato: 0x7FFFFFXX, donde XX es el valor de calidad (de 0 a 100). Por ejemplo, el valor nAvgBytesPerSec de 0x7FFFFF62 especifica el nivel de calidad 98 (0x62 = 98).

En el ejemplo siguiente se muestra cómo comprobar el nivel de calidad de un formato cuando el codificador actúa como 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");
}

Cuando el codificador actúa como MFT y enumera un tipo de salida en una llamada a GetAvailableOutputType, puede consultar el MFT para la propiedad MFPKEY_MOST_RECENTLY_ENUMERATED_VBRQUALITY . El valor devuelto indica la calidad de VBR del tipo de medio de salida devuelto más recientemente. A continuación, puede usar ese valor para establecer la propiedad MFPKEY_DESIRED_VBRQUALITY del codificador.

Establecer restricciones máximas

En el caso de VBR basado en calidad (un paso) y VBR de dos pasos sin restricciones, no se requiere ninguna configuración adicional después de recuperar el tipo de salida. Para usar VBR con restricción máxima, recupere un tipo de salida con VBR habilitado y dos pases establecidos. Este tipo, sin modificaciones, describe la configuración de VBR sin restricciones. Para establecer restricciones máximas, establezca las propiedades MFPKEY_RMAX y MFPKEY_BMAX .

Configuración de la codificación de audio

Búsqueda de tipos de salida del codificador de audio

Uso de la codificación Two-Pass

Uso de la codificación de VBR