Delen via


Audiotypen opsommen voor specifieke coderingsmodi (Microsoft Media Foundation)

De invoer- en uitvoermediatypen die door de audio-encoder worden geaccepteerd, zijn zeer gestructureerd. U moet ondersteunde uitvoertypen verkrijgen door methode IMediaObject::GetOutputType methode of IMFTransform::GetOutputTypeaan te roepen. Nadat u een uitvoertype hebt weergegeven, moet u dit niet wijzigen.

Als u een andere coderingsmodus dan CBR met één pass wilt gebruiken, moet u de modus instellen en vervolgens de uitvoertypen voor die modus inventariseren; de encoder wijzigt de ondersteunde uitvoertypen, afhankelijk van de modusset. De eigenschappen die de coderingsmodus beheren, worden MFPKEY_VBRENABLED en MFPKEY_PASSESUSED. Wanneer de modus is ingesteld in de encoder, moet u een uitvoertype opsommen en selecteren, zonder wijzigingen te gebruiken, net als bij CBR.

Op kwaliteit gebaseerde VBR-typen identificeren

De procedure voor het identificeren van VBR-typen op basis van kwaliteit is afhankelijk van of de encoder fungeert als een DirectX Media Object (DMO) of als een Media Foundation Transform (MFT). Zie de afzonderlijke codecreferentiepagina's onder Codec-objectenvoor informatie over wanneer een encoder fungeert als een DMO of een MFT.

Wanneer een audio-encoder fungeert als een DMO en u de encoder configureert voor het gebruik van één-pass-VBR, worden alle ondersteunde uitvoertypen opgesomd. Doorgaans wilt u echter een VBR-type met één wachtwoord selecteren op basis van de kwaliteitsparameter. De encoder plaatst de kwaliteitswaarde voor one-pass VBR-uitvoertypen in de nAvgBytesPerSec lid van de WAVEFORMATEX- structuur die wordt verwezen door DMO_MEDIA_TYPE.pbFormat.

Deze waarde wordt opgeslagen in de volgende indeling: 0x7FFFFFXX, waarbij XX de kwaliteitswaarde is (van 0 tot 100). De nAvgBytesPerSec waarde van 0x7FFFFF62 geeft bijvoorbeeld kwaliteitsniveau 98 (0x62 = 98) op.

In het volgende voorbeeld ziet u hoe u het kwaliteitsniveau van een indeling controleert wanneer de encoder fungeert als een 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");
}

Wanneer de encoder fungeert als een MFT en bij een aanroep naar GetAvailableOutputTypeeen uitvoertype opsomt, kunt u de MFT bevragen voor de eigenschap MFPKEY_MOST_RECENTLY_ENUMERATED_VBRQUALITY. De geretourneerde waarde geeft de VBR-kwaliteit van het meest recent geretourneerde uitvoermediatype aan. Vervolgens kunt u die waarde gebruiken om de eigenschap MFPKEY_DESIRED_VBRQUALITY van de encoder in te stellen.

Piekbeperkingen instellen

Voor op kwaliteit gebaseerde VBR (één-pass) en onbeperkte twee-pass VBR zijn geen extra instellingen vereist na het ophalen van het uitvoertype. Om piekbeperkt VBR te gebruiken, krijgt u een uitvoertype met VBR ingeschakeld en stelt u twee doorlopen in. Dit type, zonder wijziging, beschrijft onbeperkte VBR-instellingen. Als u piekbeperkingen wilt instellen, stelt u de eigenschappen MFPKEY_RMAX en MFPKEY_BMAX in.

Configureren van audiocodering

Audio Encoder-uitvoertypen zoeken

Gebruik van Two-Pass Codering

VBR-codering gebruiken