特定のエンコード モードのオーディオの種類の列挙 (Microsoft Media Foundation)

オーディオ エンコーダーで受け入れられる入出力メディアの種類は非常に構造化されています。 IMediaObject::GetOutputType メソッドまたは IMFTransform::GetOutputType を呼び出して、サポートされている出力の種類を取得する必要があります。 出力の種類を取得した後は、変更しないでください。

1 パス CBR 以外のエンコード モードを使用する場合は、モードを設定してから、そのモードの出力の種類を列挙する必要があります。エンコーダーは、モード セットに応じて、サポートされている出力の種類を変更します。 エンコード モードを制御するプロパティは 、MFPKEY_VBRENABLED され 、MFPKEY_PASSESUSEDされます。 エンコーダーでモードが設定されている場合は、CBR と同様に、変更せずに出力の種類を列挙して選択する必要があります。

品質ベースの VBR の種類の識別

品質ベースの VBR の種類を識別する手順は、エンコーダーが DirectX Media Object (DMO) として機能しているか、Media Foundation Transform (MFT) として機能しているかによって異なります。 エンコーダーが DMO または MFT として機能する場合の詳細については、「 Codec Objects」の下の個々のコーデック リファレンス ページを参照してください。

オーディオ エンコーダーが DMO として機能し、1 パス VBR を使用するようにエンコーダーを構成すると、サポートされているすべての出力の種類が列挙されます。 ただし、通常は quality パラメーターに基づいて 1 パス VBR 型を選択します。 エンコーダーは、1 パス VBR 出力の種類の品質値を、DMO_MEDIA_TYPE.pbFormat が指す WAVEFORMATEX 構造体の nAvgBytesPerSec メンバーに配置します。

この値は、0x7FFFFFXX という形式で格納されます。XX は品質値 (0 から 100) です。 たとえば、0x7FFFFF62 の nAvgBytesPerSec 値は品質レベル 98 (0x62 = 98) を指定します。

次の例は、エンコーダーが 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");
}

エンコーダーが MFT として機能していて、 GetAvailableOutputType の呼び出しで出力の種類を列挙する場合は、 MFT に対して MFPKEY_MOST_RECENTLY_ENUMERATED_VBRQUALITY プロパティのクエリを実行できます。 返される値は、最後に返された出力メディアの種類の VBR 品質を示します。 その後、その値を使用して、エンコーダーの MFPKEY_DESIRED_VBRQUALITY プロパティを設定できます。

ピーク制約の設定

品質ベースの VBR (1 パス) と制約のない 2 パス VBR の場合、出力の種類を取得した後に追加の設定は必要ありません。 ピーク制約付き VBR を使用するには、VBR が有効で、2 つのパスが設定された出力タイプを取得します。 この型は変更せずに、制約のない VBR 設定を記述します。 ピーク制約を設定するには、 MFPKEY_RMAX プロパティとMFPKEY_BMAXプロパティ 設定します。

オーディオ エンコードの構成

オーディオ エンコーダーの出力の種類の検索

Two-Pass エンコードの使用

VBR エンコードの使用