次の方法で共有


ストリーム形式

[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayer、IMFMediaEngine、Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayerIMFMediaEngineAudio/Video Capture を使用することを強くお勧めします。 Microsoft は、レガシ API を使用する既存のコードを、可能であれば新しい API を使用するように書き換えるよう提案しています。]

MSDV と UVC ドライバーの両方で、インターリーブオーディオビデオまたはビデオのみという 2 つの DV 形式を出力できます。 インターリーブオーディオビデオは、デバイスの元の形式です。 ビデオのみの形式には同じデータが含まれていますが、サンプルにはオーディオ データがないとマークされています。 ビデオのみの形式は、主に Video for Windows を使用するアプリケーションとの互換性のために存在します。 詳細については、「 Type-1 vs. Type-2 DV AVI Files」を参照してください。

MSDV ドライバー

MSDV ドライバーには、2 つの出力ピンがあります。 最初の出力ピンはインターリーブ データを送信し、2 番目の出力ピンはビデオ専用データを送信します。 一度に接続できる出力ピンは 1 つだけです。 形式を選択するには、適切な出力ピンを接続します。 出力ピンで IAMStreamConfig インターフェイスを使用して、形式を見つけることができます。

UVC ドライバー

MSDV ドライバーとは異なり、UVC ドライバーは同じピンから両方の形式を提供します。 既定の形式はビデオのみです。 形式を選択するには、出力ピンで IAMStreamConfig インターフェイスを使用します。 GetStreamCaps メソッドを呼び出して、出力ピンのメディアの種類を列挙します。 メディアの種類ごとに、メジャーの種類が目的の形式と一致する場合は、 SetFormat を呼び出して、そのメディアの種類を渡します。

フォーマット メジャーの種類
インターリーブオーディオとビデオ MEDIATYPE_Interleaved
ビデオのみ MEDIATYPE_Video

 

次の関数は、メジャー型 GUID に基づいて形式を設定します。

HRESULT SetStreamFormat(IAMStreamConfig *pConfig, const GUID& majorType)
{
    if (pConfig == NULL)
    {
        return E_POINTER;
    }

    // Get the number of stream capabilities.
    int count = 0, size = 0;
    HRESULT hr = pConfig->GetNumberOfCapabilities(&count, &size);
    if (FAILED(hr))
    {
        return hr;
    }

    // Allocate memory for the stream capabilities structure.
    BYTE *pCaps = new BYTE[size];
    if (pCaps == NULL)
    {
        return E_OUTOFMEMORY;
    }
    
    // Enumerate the stream capabilities.
    bool bFoundType = false;
    for (int ix = 0; ix < count; ix++)
    {
        AM_MEDIA_TYPE *pmt;
        hr = pConfig->GetStreamCaps(ix, &pmt, pCaps);
        if (FAILED(hr))
        {
            break;
        }
        else if (pmt->majortype == majorType)
        {
            // This is the media type we want.
            bFoundType = true;
            hr = pConfig->SetFormat(pmt);
            DeleteMediaType(pmt);
            break;
        }
        DeleteMediaType(pmt);
    }
    delete [] pCaps;
    if (FAILED(hr))
    {
        return hr;
    }
    return bFoundType ? S_OK : E_FAIL;
}

MSDV ドライバーでは IAMStreamConfig もサポートされているため、両方のデバイスの種類に対応するコードを記述できます。

DVカムコーダーの制御