Share via


DirectX Surface 緩衝區

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

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

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

增強的視訊轉譯器 (EVR) 在解碼器未針對 DirectX 影片加速設定時建立 DirectX 介面緩衝區, (DXVA) 。 如需詳細資訊,請參閱 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;
}

媒體緩衝區

影片範例