Konfigurieren der Standard-, Professional- oder verlustfreien Audiocodierung
Wenn der Windows Media Audio-Encoder Ausgabetypen aufzählt, identifiziert er jeden aufzählbaren Typ entweder als Standard, Professional oder Als verlustfrei. Sie können ermitteln, ob ein Ausgabetyp Standard, Professional oder Lossless ist, indem Sie die folgenden Schritte ausführen.
- Rufen Sie ÜBERTRANSFORM::GetOutputAvailableType auf, um eine INTERFACESMediaType-Schnittstelle abzurufen, die den Ausgabetyp darstellt.
- Rufen Sie ÜBERMEDIATYPE::GetRepresentation auf, um eine AM MEDIA _ _ TYPE-Struktur abzurufen, die Informationen zum Ausgabetyp enthält.
- Der pbFormat-Member der AM MEDIA _ _ TYPE-Struktur zeigt auf eine WAVEFORMATEX-Struktur, die zusätzliche Informationen zum Ausgabetyp enthält. Überprüfen Sie den wFormatTag-Member der WAVEFORMATEX-Struktur. Der Wert 0x161 steht für Standard, der Wert 0x162 für Professional und der Wert 0x163 für Lossless.
Wenn Sie Eigenschaften für den Windows Media Audio-Encoder festlegen, bevor Sie Ausgabetypen auflisten, können Sie die Anzahl der aufgezählten Ausgabetypen begrenzen. Wenn Sie z. B. die VBR-Eigenschaften entsprechend festlegen, können Sie die aufzählten Ausgabetypen auf diejenigen beschränken, die sich in der Kategorie Verlustlos befinden.
Standardaudiocodierung
Sie können die folgenden Schritte ausführen, um die Standardaudiocodierung zu konfigurieren.
- Legen Sie die Eigenschaften Ihrer Wahl für den Encoder fest.
- Aufzählen der möglichen Ausgabetypen.
- Überprüfen Sie die aufzählten Typen, und wählen Sie einen Typ aus, der über ein Audioformattag 0x161 verfügt.
- Legen Sie den Ausgabetyp auf den ausgewählten Typ fest, indem Sie ÜBERTRANSFORM::SetOutputTypeaufrufen.
Professional Audiocodierung
Sie können die folgenden Schritte ausführen, um Professional Audiocodierung zu konfigurieren.
- Legen Sie die Eigenschaften Ihrer Wahl für den Encoder fest.
- Aufzählen der möglichen Ausgabetypen.
- Überprüfen Sie die aufzählten Typen, und wählen Sie einen Typ aus, der über ein Audioformattag 0x162 verfügt.
- Legen Sie den Ausgabetyp auf den ausgewählten Typ fest, indem Sie ÜBERTRANSFORM::SetOutputTypeaufrufen.
Verlustfreie Audiocodierung
Sie können die folgenden Schritte ausführen, um die verlustfreie Audiocodierung zu konfigurieren.
- Legen Sie die MFPKEY _ VBRENABLED-Eigenschaft auf VARIANT _ TRUE fest.
- Legen Sie die EIGENSCHAFT MFPKEY _ CONSTRAIN _ ENUMERATED _ VBRQUALITY auf VARIANT _ TRUE fest.
- Legen Sie die MFPKEY _ DESIRED _ VBRQUALITY-Eigenschaft auf 100 fest.
- Aufzählen von Ausgabetypen.
- Legen Sie den Ausgabetyp auf einen der in Schritt 4 aufzählten Typen fest, indem Sie DEN TYPTRANSFORM::SetOutputTypeaufrufen.
Der folgende Code listet alle verlustfreien Ausgabetypen für den Windows Media Audio-Encoder auf. Der Code gibt den Wert des Audioformattags für jeden aufzählten Typ aus. Da alle aufzählbaren Typen verlustfrei sind, haben alle diese Formattags den Wert 0x163. Angenommen, pIMT ist ein Zeiger auf eine POINTERTransform-Schnittstelle auf einem Windows Media Audio-Encoderobjekt und pStore ist ein Zeiger auf eine IPropertyStore-Schnittstelle für dasselbe Objekt. Angenommen, hr ist eine Variable vom Typ HRESULT, die zuvor im Code deklariert wurde.
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
}
}
}