From: Bernhard Kölbl besentv@gmail.com
This behavior seems to match the Windows behavior the closest. Additionally the docu mentions the output format being used as render target. --- dlls/mfmediaengine/main.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+)
diff --git a/dlls/mfmediaengine/main.c b/dlls/mfmediaengine/main.c index b2ddc376db8..68696d328e9 100644 --- a/dlls/mfmediaengine/main.c +++ b/dlls/mfmediaengine/main.c @@ -1029,9 +1029,12 @@ static HRESULT media_engine_create_audio_renderer(struct media_engine *engine, I
static HRESULT media_engine_create_video_renderer(struct media_engine *engine, IMFTopologyNode **node) { + D3D11_TEXTURE2D_DESC texture_desc; DXGI_FORMAT output_format; + ID3D11Texture2D *texture; IMFMediaType *media_type; IMFActivate *activate; + ID3D11Device *device; GUID subtype; HRESULT hr;
@@ -1043,6 +1046,26 @@ static HRESULT media_engine_create_video_renderer(struct media_engine *engine, I return E_FAIL; }
+ if (FAILED(hr = media_engine_lock_d3d_device(engine, &device))) + return hr; + + /* Check if supplied format is valid for render targets. */ + memset(&texture_desc, 0, sizeof(D3D11_TEXTURE2D_DESC)); + texture_desc.Width = 320; + texture_desc.Height = 240; + texture_desc.MipLevels = 1; + texture_desc.ArraySize = 1; + texture_desc.Format = output_format; + texture_desc.SampleDesc.Count = 1; + texture_desc.Usage = D3D11_USAGE_DEFAULT; + texture_desc.BindFlags = D3D11_BIND_RENDER_TARGET; + + if (FAILED(ID3D11Device_CreateTexture2D(device, &texture_desc, NULL, &texture))) + return MF_E_INVALIDMEDIATYPE; + + ID3D11Texture2D_Release(texture); + media_engine_unlock_d3d_device(engine, device); + memcpy(&subtype, &MFVideoFormat_Base, sizeof(subtype)); if (!(subtype.Data1 = MFMapDXGIFormatToDX9Format(output_format))) {