Auflisten von Audiotypen für bestimmte Codierungsmodi (Microsoft Media Foundation)
Die vom Audioencoder akzeptierten Eingabe- und Ausgabemedientypen sind sehr strukturiert. Sie müssen unterstützte Ausgabetypen abrufen, indem Sie die IMediaObject::GetOutputType-Methode oder IMFTransform::GetOutputType aufrufen. Nachdem Sie einen Ausgabetyp erhalten haben, dürfen Sie ihn nicht mehr ändern.
Wenn Sie einen anderen Codierungsmodus als one-pass CBR verwenden möchten, müssen Sie den Modus festlegen und dann die Ausgabetypen für diesen Modus auflisten. der Encoder ändert die unterstützten Ausgabetypen je nach Modussatz. Die Eigenschaften, die den Codierungsmodus steuern, sind MFPKEY_VBRENABLED und MFPKEY_PASSESUSED. Wenn der Modus im Encoder festgelegt ist, müssen Sie einen Ausgabetyp auflisten und auswählen, indem Sie ihn unverändert verwenden, genau wie bei CBR.
Identifizieren qualitätsbasierter VBR-Typen
Das Verfahren zum Identifizieren qualitätsbasierter VBR-Typen hängt davon ab, ob der Encoder als DirectX Media Object (DMO) oder als Media Foundation Transform (MFT) fungiert. Informationen dazu, wann ein Encoder als DMO oder MFT fungiert, finden Sie auf den einzelnen Codec-Referenzseiten unter Codec-Objekte.
Wenn ein Audioencoder als DMO fungiert und Sie den Encoder für die Verwendung von VbR mit einem Durchlauf konfigurieren, werden alle unterstützten Ausgabetypen aufgelistet. In der Regel sollten Sie jedoch einen VBR-Typ mit einem Durchlauf basierend auf dem Qualitätsparameter auswählen. Der Encoder legt den Qualitätswert für VBR-Ausgabetypen mit einem Pass in das nAvgBytesPerSec-Element der WAVEFORMATEX-Struktur , auf die von DMO_MEDIA_TYPE.pbFormat verwiesen wird.
Dieser Wert wird im folgenden Format gespeichert: 0x7FFFFFXX, wobei XX der Qualitätswert ist (von 0 bis 100). Der nAvgBytesPerSec-Wert von 0x7FFFFF62 gibt beispielsweise die Qualitätsebene 98 (0x62 = 98) an.
Das folgende Beispiel zeigt, wie Sie den Qualitätslevel eines Formats überprüfen, wenn der Encoder als DMO fungiert.
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");
}
Wenn der Encoder als MFT fungiert und bei einem Aufruf von GetAvailableOutputType einen Ausgabetyp auflistet, können Sie den MFT nach der MFPKEY_MOST_RECENTLY_ENUMERATED_VBRQUALITY-Eigenschaft abfragen. Der zurückgegebene Wert gibt die VBR-Qualität des zuletzt zurückgegebenen Ausgabemedientyps an. Anschließend können Sie diesen Wert verwenden, um die MFPKEY_DESIRED_VBRQUALITY Eigenschaft des Encoders festzulegen.
Festlegen von Spitzeneinschränkungen
Für qualitätsbasierte VBR (ein Durchlauf) und nicht eingeschränkte VBR mit zwei Durchgängen sind nach dem Abrufen des Ausgabetyps keine zusätzlichen Einstellungen erforderlich. Um VBR mit Spitzenbeschränkungen zu verwenden, rufen Sie einen Ausgabetyp mit aktiviertem VBR und zwei Durchläufen ab. Dieser Typ beschreibt ohne Änderung nicht eingeschränkte VBR-Einstellungen. Um Spitzeneinschränkungen festzulegen, legen Sie die Eigenschaften MFPKEY_RMAX und MFPKEY_BMAX fest.
Zugehörige Themen