共用方式為


DirectX Surface Buffer

DirectX 介面緩衝區對像是管理 Direct3D 介面的媒體緩衝區。 若要建立此對象的實例,請呼叫 MFCreateDXSurfaceBuffer 並傳入 DirectX 介面的指標。 DirectX 介面緩衝區會公開下列介面:

有數種方式可從緩衝區物件存取表面記憶體:

如果基礎介面無法鎖定,LockLock2D 都可能會失敗。 DirectX 介面緩衝區會實作這兩種方法,主要是針對未設計來搭配 Direct3D 介面使用的元件。

增強式視訊轉譯器 (EVR) 會在譯碼器未針對 DirectX 視訊加速 (DXVA) 設定時,建立 DirectX 表面緩衝區。 如需詳細資訊,請參閱 IMFVideoSampleAllocator

取得 Direct3D Surface

若要從影片範例取得 Direct3D 表面,請執行下列動作:

  1. 呼叫 IMFSample::GetBufferByIndex,其索引值為零。
  2. 呼叫 MFGetService,並指定 MR_BUFFER_SERVICE 服務標識符。

下列程式代碼顯示下列步驟:

HRESULT GetD3DSurfaceFromSample(IMFSample *pSample, IDirect3DSurface9 **ppSurface)
{
    *ppSurface = NULL;

    IMFMediaBuffer *pBuffer = NULL;

    HRESULT hr = pSample->GetBufferByIndex(0, &pBuffer);
    if (SUCCEEDED(hr))
    {
        hr = MFGetService(pBuffer, MR_BUFFER_SERVICE, IID_PPV_ARGS(ppSurface));
        pBuffer->Release();
    }

    return hr;
}

媒體緩衝區

影片範例