attribut MF_SA_D3D_ALLOCATE_DISPLAYABLE_RESOURCES
Gibt an, ob der Sample Allocator (SA) des MFT die zugrunde liegende Direct3D-Textur mithilfe des D3D11_RESOURCE_MISC_SHARED_DISPLAYABLE-Flags zuordnen soll.
Datentyp
UINT32
Bemerkungen
Dieses Attribut ist mit Windows 10 Build 20348 verfügbar.
Hinweis
Das D3D11_RESOURCE_MISC_SHARED_DISPLAYABLE Elementfeld der D3D11_RESOURCE_MISC_FLAG-Enumeration ist in einer zukünftigen Version des SDK verfügbar.
Die Media Foundation-Plattformebene legt das attribut MF_SA_D3D11_ALLOCATE_DISPLAYABLE_RESOURCES beim Rendern von Videos fest. Eine App kann dieses Attribut auch festlegen, wenn sie einen eigenen Videorenderer implementieren und D3D11 Displayable Resources verwenden möchte.
Beispiel
Im folgenden Codebeispiel wird die Verwendung des attributs MF_SA_D3D11_ALLOCATE_DISPLAYABLE_RESOURCES veranschaulicht.
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 = {};
};
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) |
Windows 10 Build 20348 |
Header |
|
Weitere Informationen