mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-25 19:21:06 +00:00
d3d11vp9dec: Fix critical warning
Don't query GPU vendor using null device. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5353>
This commit is contained in:
parent
4b891639da
commit
39aca8a096
3 changed files with 28 additions and 16 deletions
|
@ -127,24 +127,11 @@ gst_d3d11_is_windows_8_or_greater (void)
|
|||
}
|
||||
|
||||
GstD3D11DeviceVendor
|
||||
gst_d3d11_get_device_vendor (GstD3D11Device * device)
|
||||
gst_d3d11_get_device_vendor_from_id (guint vendor_id)
|
||||
{
|
||||
guint device_id = 0;
|
||||
guint vendor_id = 0;
|
||||
gchar *desc = NULL;
|
||||
GstD3D11DeviceVendor vendor = GST_D3D11_DEVICE_VENDOR_UNKNOWN;
|
||||
|
||||
g_return_val_if_fail (GST_IS_D3D11_DEVICE (device),
|
||||
GST_D3D11_DEVICE_VENDOR_UNKNOWN);
|
||||
|
||||
g_object_get (device, "device-id", &device_id, "vendor-id", &vendor_id,
|
||||
"description", &desc, NULL);
|
||||
|
||||
switch (vendor_id) {
|
||||
case 0:
|
||||
if (device_id == 0 && desc && g_strrstr (desc, "SraKmd"))
|
||||
vendor = GST_D3D11_DEVICE_VENDOR_XBOX;
|
||||
break;
|
||||
case 0x1002:
|
||||
case 0x1022:
|
||||
vendor = GST_D3D11_DEVICE_VENDOR_AMD;
|
||||
|
@ -162,9 +149,32 @@ gst_d3d11_get_device_vendor (GstD3D11Device * device)
|
|||
break;
|
||||
}
|
||||
|
||||
return vendor;
|
||||
}
|
||||
|
||||
GstD3D11DeviceVendor
|
||||
gst_d3d11_get_device_vendor (GstD3D11Device * device)
|
||||
{
|
||||
guint device_id = 0;
|
||||
guint vendor_id = 0;
|
||||
gchar *desc = nullptr;
|
||||
GstD3D11DeviceVendor vendor = GST_D3D11_DEVICE_VENDOR_UNKNOWN;
|
||||
|
||||
g_return_val_if_fail (GST_IS_D3D11_DEVICE (device),
|
||||
GST_D3D11_DEVICE_VENDOR_UNKNOWN);
|
||||
|
||||
g_object_get (device, "device-id", &device_id, "vendor-id", &vendor_id,
|
||||
"description", &desc, nullptr);
|
||||
|
||||
if (device_id == 0 && desc && g_strrstr (desc, "SraKmd"))
|
||||
vendor = GST_D3D11_DEVICE_VENDOR_XBOX;
|
||||
|
||||
g_free (desc);
|
||||
|
||||
return vendor;
|
||||
if (vendor != GST_D3D11_DEVICE_VENDOR_UNKNOWN)
|
||||
return vendor;
|
||||
|
||||
return gst_d3d11_get_device_vendor_from_id (vendor_id);
|
||||
}
|
||||
|
||||
gboolean
|
||||
|
|
|
@ -57,6 +57,8 @@ gboolean gst_d3d11_is_windows_8_or_greater (void);
|
|||
|
||||
GstD3D11DeviceVendor gst_d3d11_get_device_vendor (GstD3D11Device * device);
|
||||
|
||||
GstD3D11DeviceVendor gst_d3d11_get_device_vendor_from_id (guint vendor_id);
|
||||
|
||||
gboolean gst_d3d11_hdr_meta_data_to_dxgi (GstVideoMasteringDisplayInfo * minfo,
|
||||
GstVideoContentLightLevel * cll,
|
||||
DXGI_HDR_METADATA_HDR10 * dxgi_hdr10);
|
||||
|
|
|
@ -137,7 +137,7 @@ gst_d3d11_vp9_dec_open (GstVideoDecoder * decoder)
|
|||
* reliable, since 1b means that it's supported and 0b indicates it may not be
|
||||
* supported. Because some GPUs can support it even if the bit 12 is not
|
||||
* set, do filtering by vendor for now (AMD and Intel looks fine) */
|
||||
if (gst_d3d11_get_device_vendor (self->device) ==
|
||||
if (gst_d3d11_get_device_vendor_from_id (cdata->vendor_id) ==
|
||||
GST_D3D11_DEVICE_VENDOR_NVIDIA) {
|
||||
gst_vp9_decoder_set_non_keyframe_format_change_support (vp9dec, FALSE);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue