atributo MF_SA_D3D_ALLOCATE_DISPLAYABLE_RESOURCES
Especifica se o SA (Alocador de Exemplo) do MFT deve alocar a Textura Direct3D subjacente usando o sinalizador D3D11_RESOURCE_MISC_SHARED_DISPLAYABLE .
Tipo de dados
UINT32
Comentários
Esse atributo está disponível olhando com Windows 10 build 20348.
Observação
O campo membro D3D11_RESOURCE_MISC_SHARED_DISPLAYABLE da enumeração D3D11_RESOURCE_MISC_FLAG estará disponível em uma versão futura do SDK.
A camada de plataforma do Media Foundation define o atributo MF_SA_D3D11_ALLOCATE_DISPLAYABLE_RESOURCES ao renderizar o vídeo. Um aplicativo também poderá optar por definir esse atributo se quiser implementar seu próprio renderizador de vídeo e usar recursos exibicionáveis D3D11.
Exemplo
O exemplo de código a seguir demonstra o uso do atributo MF_SA_D3D11_ALLOCATE_DISPLAYABLE_RESOURCES .
class DecoderMFT : public IMFAttributes, public IMFTransform
{
//
... Other implementation details omitted
//
public:
// Implementation of IMFAttributes::GetAttributes which is invoked by the MF Topology Loader
STDMETHODIMP GetAttribtues(IMFAttributes** attributes)
{
m_attributes.copyTo(attributes);
return S_OK;
}
private:
// Private method to be called before DecoderMFT initializes its sample pool.
// A good place for this to happen is in the method which processes the
// 'MFT_MESSAGE_NOTIFY_BEGIN_STREAMING' event.
// At a minimum, this processing would be in DecoderMFT's implementation of IMFTransform::ProcessMessage.
HRESULT ConfigureTextureFlags()
{
UINT32 allocateDisplayables = MFGetAttributeUINT32(m_attributes.get(),
MF_SA_D3D11_ALLOCATE_DISPLAYABLE_RESOURCES, 0);
// If no MF_SA_* attributes which correspond to D3D misc flags are set then it is valid for
// miscFlags to be set to 0.
m_textureDesc.miscFlags = 0;
UINT32 sharedResources = 0;
if (allocateDisplayables != 0)
{
m_textureDesc.miscFlags |= D3D11_RESOURCE_MISC_DISPLAYABLE;
// The following flag is required for the decoders output to
// use D3D11_RESOURCE_MISC_DISPLAYABLE.
m_textureDesc.miscFlags |= D3D11_RESOURCE_MISC_EXCLUSIVE_WRITER;
// The following flags are required for the presentation API
// to consume and present these resources (also known as direct presentation).
m_textureDesc.miscFlags |= D3D11_RESOURCE_MISC_SHARED;
m_textureDesc.miscFlags |= D3D11_RESOURCE_MISC_SHARED_NTHANDLE;
sharedResources = 1;
}
else
{
// This handles the case when MF_SA_D3D11_ALLOCATE_DISPLAYABLE_RESOURCES was 0 or missing.
sharedResources = MFGetAttributeUINT32(m_attributes.get(), MF_SA_D3D11_SHARED_WITHOUT_MUTEX, 0);
if (sharedResources != 0)
{
m_textureDesc.miscFlags |= D3D11_RESOURCE_MISC_SHARED;
}
else
{
UINT32 sharedKeyMutex = MFGetAttributeUINT32(m_attributes.get(), MF_SA_D3D11_SHARED, 0);
if (sharedKeyMutex != 0)
{
m_textureDesc.micsFlags |= D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX;
}
}
}
// Processing for other MF_SA_* attributes which imply D3D11_RESOURCE_MISC flag
// omitted from this sample.
return S_OK;
}
// Private method showing how DecoderMFT can create a texture with the flags required
// to satisfy "MF_SA_D3D11_ALLOCATE_DISPLAYBLE_RESOURCES".
// Because this is a private function we know the passed in pointer is always valid.
// This would be invoked by another private DecoderMFT function when allocating an MFSample
// for its sample pool.
HRESULT AllocateTextureForSample(ID3D11Texture2D** texture2D)
{
return m_d3dDevice->CreateTexture2D(&m_textureDesc, nullptr, texture2D);
}
// ... other members omitted
wil::com_ptr_nothrow<IMFAttributes> m_attributes;
wil::com_ptr_nothrow<ID3D11Device> m_d3dDevice;
// This a texture description for D3D11 resources.
D3D11_TEXTURE_2D_DESC m_textureDesc = {};
};
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte |
Windows 10 build 20348 |
Cabeçalho |
|
Confira também