On Wed, Jan 3, 2018 at 11:18 PM, wm4 <nfx...@googlemail.com> wrote:
> On Wed,  3 Jan 2018 13:59:34 -0800
> Humberto Ribeiro <mont3z.cla...@gmail.com> wrote:
>
>> ---
>>  libavutil/hwcontext_dxva2.c | 6 +++++-
>>  1 file changed, 5 insertions(+), 1 deletion(-)
>>
>> diff --git a/libavutil/hwcontext_dxva2.c b/libavutil/hwcontext_dxva2.c
>> index 2ddd4be..44ebdbc 100644
>> --- a/libavutil/hwcontext_dxva2.c
>> +++ b/libavutil/hwcontext_dxva2.c
>> @@ -485,7 +485,11 @@ static int dxva2_device_create9ex(AVHWDeviceContext 
>> *ctx, UINT adapter)
>>      if (FAILED(hr))
>>          return AVERROR_UNKNOWN;
>>
>> -    IDirect3D9Ex_GetAdapterDisplayModeEx(d3d9ex, adapter, &modeex, NULL);
>> +    hr = IDirect3D9Ex_GetAdapterDisplayModeEx(d3d9ex, adapter, &modeex, 
>> NULL);
>> +    if (FAILED(hr)) {
>> +        IDirect3D9Ex_Release(d3d9ex);
>> +        return AVERROR_UNKNOWN;
>> +    }
>>
>>      d3dpp.BackBufferFormat = modeex.Format;
>>
>
> LGTM, but when does it happen? Why would creation of IDirect3D9Ex
> succeed, but this method fail? The strangest thing being that
> CreateDeviceEx apparently fails, even though modeex is
> zero-initialized and doesn't contain any pointers.
>

I noticed something about this some time ago - D3DDISPLAYMODEEX should
not be entirely zero-initialized before this call, instead its "Size"
member should be set to sizeof(D3DDISPLAYMODEEX) - see
https://msdn.microsoft.com/en-us/library/windows/desktop/bb172549(v=vs.85).aspx
Currently it always causes IDirect3D9Ex_GetAdapterDisplayModeEx to
fail due to that (at least on my hardware), but it didn't seem to have
any impact on the later create device call in my case.

- Hendrik
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

Reply via email to