Udostępnij przez


Wyliczanie typów audio dla określonych trybów kodowania (Microsoft Media Foundation)

Typy nośników wejściowych i wyjściowych akceptowane przez koder audio są bardzo ustrukturyzowane. Należy uzyskać obsługiwane typy danych wyjściowych, wywołując metodę IMediaObject::GetOutputType lub metodę IMFTransform::GetOutputType. Po otrzymaniu typu danych wyjściowych nie można go zmienić.

Jeśli chcesz użyć trybu kodowania innego niż jednoprzepustowy CBR, musisz ustawić tryb, a następnie wyliczyć typy danych wyjściowych dla tego trybu; koder zmienia obsługiwane typy danych wyjściowych w zależności od ustawionego trybu. Właściwości kontrolujące tryb kodowania są MFPKEY_VBRENABLED i MFPKEY_PASSESUSED. Gdy tryb jest ustawiony w koderze, należy wyliczyć i wybrać typ danych wyjściowych, używając go bez zmian, podobnie jak w przypadku CBR.

Identyfikowanie typów VBR opartych na jakości

Procedura identyfikowania typów VBR zależnych od jakości zależy od tego, czy koder działa jako obiekt DirectX Media Object (DMO) czy jako transformacja Media Foundation (MFT). Aby uzyskać informacje o tym, kiedy koder działa jako DMO lub MFT, zobacz poszczególne strony referencyjne kodeka w obszarze Codec Objects.

Gdy koder audio działa jako DMO i konfigurujesz koder tak, aby używał jednoprzebiegowej VBR, wylicza wszystkie obsługiwane typy wyjściowe. Zazwyczaj jednak należy wybrać jednoprzepustowy typ VBR na podstawie parametru jakości. Koder umieszcza wartość jakości dla jednoprzepustowych typów danych wyjściowych VBR w nAvgBytesPerSec elementu członkowskiego WAVEFORMATEX struktury wskazywanej przez DMO_MEDIA_TYPE.pbFormat.

Ta wartość jest przechowywana w następującym formacie: 0x7FFFFFXX, gdzie XX jest wartością jakości (od 0 do 100). Na przykład nAvgBytesPerSec wartość 0x7FFFFF62 określa poziom jakości 98 (0x62 = 98).

W poniższym przykładzie pokazano, jak sprawdzić poziom jakości formatu, gdy koder działa jako 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");
}

Gdy koder działa jako MFT i wylicza typ wyjściowy w wywołaniu GetAvailableOutputType, możesz zapytać MFT na temat właściwości MFPKEY_MOST_RECENTLY_ENUMERATED_VBRQUALITY. Zwrócona wartość wskazuje jakość VBR ostatnio zwróconego typu nośnika wyjściowego. Następnie możesz użyć tej wartości, aby ustawić właściwość MFPKEY_DESIRED_VBRQUALITY kodera.

Ustawianie ograniczeń szczytowych

W przypadku jednoprzepustowego VBR opartego na jakości oraz nieograniczonego dwuprzebiegowego VBR nie są potrzebne żadne dodatkowe ustawienia po określeniu typu wyjściowego. Aby użyć VBR ograniczonego szczytowo, pobierz typ wyjściowy z VBR włączonym i ustawionymi dwoma przebiegami. Ten typ, bez modyfikacji, opisuje niekonsekwowane ustawienia VBR. Aby ustawić ograniczenia szczytowe, ustaw właściwości MFPKEY_RMAX i MFPKEY_BMAX.

konfigurowanie kodowania audio

znajdowanie typów danych wyjściowych kodera audio

używanie Two-Pass kodowania

Korzystanie z kodowania VBR