va: restrict interpolation & scaling property to iHD driver

interpolation & scaling is supported for all hardware on
iHD driver. But not supported in mesa driver. see:

<https://github.com/intel/media-driver/issues/1843>
<https://gitlab.freedesktop.org/mesa/mesa/-/issues/11803>

improvment of:
<https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7301>

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7443>
This commit is contained in:
Michael Scherle 2024-09-02 12:15:41 +02:00 committed by GStreamer Marge Bot
parent 2d10692b34
commit b1cda4439b
4 changed files with 43 additions and 44 deletions

View file

@ -1652,29 +1652,39 @@ gst_va_compositor_class_init (gpointer g_class, gpointer class_data)
"Device Path", GST_VA_DEVICE_PATH_PROP_DESC, NULL, "Device Path", GST_VA_DEVICE_PATH_PROP_DESC, NULL,
GST_PARAM_DOC_SHOW_DEFAULT | G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); GST_PARAM_DOC_SHOW_DEFAULT | G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
g_object_class_install_property (object_class, PROP_DEVICE_PATH,
properties[PROP_DEVICE_PATH]);
/** /**
* GstVaCompositor:scale-method: * GstVaCompositor:scale-method:
* *
* Sets the scale method algorithm to use when resizing. * Sets the scale method algorithm to use when resizing.
*/ */
properties[PROP_SCALE_METHOD] = g_param_spec_enum ("scale-method", if (GST_VA_DISPLAY_IS_IMPLEMENTATION (display, INTEL_IHD)) {
"Scale Method", "Scale method to use", GST_TYPE_VA_SCALE_METHOD, g_object_class_install_property (object_class,
VA_FILTER_SCALING_DEFAULT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); GST_VA_FILTER_PROP_SCALE_METHOD,
g_param_spec_enum ("scale-method", "Scale Method",
gst_type_mark_as_plugin_api (GST_TYPE_VA_SCALE_METHOD, 0); "Scale method to use", GST_TYPE_VA_SCALE_METHOD,
VA_FILTER_SCALING_DEFAULT,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
gst_type_mark_as_plugin_api (GST_TYPE_VA_SCALE_METHOD, 0);
}
/** /**
* GstVaCompositor:interpolation-method: * GstVaCompositor:interpolation-method:
* *
* Sets the interpolation method algorithm to use when resizing. * Sets the interpolation method algorithm to use when resizing.
*/ */
properties[PROP_INTERPOLATION_METHOD] = if (GST_VA_DISPLAY_IS_IMPLEMENTATION (display, INTEL_IHD)) {
g_param_spec_enum ("interpolation-method", "Interpolation Method", g_object_class_install_property (object_class,
"Interpolation method to use for scaling", PROP_INTERPOLATION_METHOD,
GST_TYPE_VA_INTERPOLATION_METHOD, VA_FILTER_INTERPOLATION_DEFAULT, g_param_spec_enum ("interpolation-method", "Interpolation Method",
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); "Interpolation method to use for scaling",
GST_TYPE_VA_INTERPOLATION_METHOD, VA_FILTER_INTERPOLATION_DEFAULT,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
gst_type_mark_as_plugin_api (GST_TYPE_VA_INTERPOLATION_METHOD, 0);
}
g_object_class_install_properties (object_class, N_PROPERTIES, properties);
g_free (long_name); g_free (long_name);
g_free (cdata->description); g_free (cdata->description);

View file

@ -699,6 +699,22 @@ gst_va_filter_install_properties (GstVaFilter * self, GObjectClass * klass)
common_flags)); common_flags));
} }
if (GST_VA_DISPLAY_IS_IMPLEMENTATION (self->display, INTEL_IHD)) {
g_object_class_install_property (klass,
GST_VA_FILTER_PROP_SCALE_METHOD,
g_param_spec_enum ("scale-method", "Scale Method",
"Scale method to use",
GST_TYPE_VA_SCALE_METHOD, VA_FILTER_SCALING_DEFAULT, common_flags));
}
if (GST_VA_DISPLAY_IS_IMPLEMENTATION (self->display, INTEL_IHD)) {
g_object_class_install_property (klass,
GST_VA_FILTER_PROP_INTERPOLATION_METHOD,
g_param_spec_enum ("interpolation-method", "Interpolation Method",
"Interpolation method to use for scaling",
GST_TYPE_VA_INTERPOLATION_METHOD, VA_FILTER_INTERPOLATION_DEFAULT,
common_flags));
}
return TRUE; return TRUE;
} }

View file

@ -52,6 +52,8 @@ enum {
GST_VA_FILTER_PROP_AUTO_CONTRAST, GST_VA_FILTER_PROP_AUTO_CONTRAST,
GST_VA_FILTER_PROP_DEINTERLACE_METHOD, GST_VA_FILTER_PROP_DEINTERLACE_METHOD,
GST_VA_FILTER_PROP_HDR, GST_VA_FILTER_PROP_HDR,
GST_VA_FILTER_PROP_SCALE_METHOD,
GST_VA_FILTER_PROP_INTERPOLATION_METHOD,
GST_VA_FILTER_PROP_LAST GST_VA_FILTER_PROP_LAST
}; };

View file

@ -143,8 +143,6 @@ enum
{ {
PROP_DISABLE_PASSTHROUGH = GST_VA_FILTER_PROP_LAST + 1, PROP_DISABLE_PASSTHROUGH = GST_VA_FILTER_PROP_LAST + 1,
PROP_ADD_BORDERS, PROP_ADD_BORDERS,
PROP_SCALE_METHOD,
PROP_INTERPOLATION_METHOD,
N_PROPERTIES N_PROPERTIES
}; };
@ -334,10 +332,10 @@ gst_va_vpp_set_property (GObject * object, guint prop_id,
case PROP_ADD_BORDERS: case PROP_ADD_BORDERS:
self->add_borders = g_value_get_boolean (value); self->add_borders = g_value_get_boolean (value);
break; break;
case PROP_SCALE_METHOD: case GST_VA_FILTER_PROP_SCALE_METHOD:
self->scale_method = g_value_get_enum (value); self->scale_method = g_value_get_enum (value);
break; break;
case PROP_INTERPOLATION_METHOD: case GST_VA_FILTER_PROP_INTERPOLATION_METHOD:
self->interpolation_method = g_value_get_enum (value); self->interpolation_method = g_value_get_enum (value);
break; break;
default: default:
@ -404,10 +402,10 @@ gst_va_vpp_get_property (GObject * object, guint prop_id, GValue * value,
case PROP_ADD_BORDERS: case PROP_ADD_BORDERS:
g_value_set_boolean (value, self->add_borders); g_value_set_boolean (value, self->add_borders);
break; break;
case PROP_SCALE_METHOD: case GST_VA_FILTER_PROP_SCALE_METHOD:
g_value_set_enum (value, self->scale_method); g_value_set_enum (value, self->scale_method);
break; break;
case PROP_INTERPOLATION_METHOD: case GST_VA_FILTER_PROP_INTERPOLATION_METHOD:
g_value_set_enum (value, self->interpolation_method); g_value_set_enum (value, self->interpolation_method);
break; break;
default: default:
@ -2167,33 +2165,6 @@ _install_static_properties (GObjectClass * klass)
g_object_class_install_property (klass, PROP_ADD_BORDERS, g_object_class_install_property (klass, PROP_ADD_BORDERS,
PROPERTIES (PROP_ADD_BORDERS)); PROPERTIES (PROP_ADD_BORDERS));
/**
* GstVaPostProc:scale-method
*
* Sets the scale method algorithm to use when resizing.
*
* Since: 1.22
*/
PROPERTIES (PROP_SCALE_METHOD) = g_param_spec_enum ("scale-method",
"Scale Method", "Scale method to use", GST_TYPE_VA_SCALE_METHOD,
VA_FILTER_SCALING_DEFAULT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS
| GST_PARAM_MUTABLE_PLAYING);
g_object_class_install_property (klass, PROP_SCALE_METHOD,
PROPERTIES (PROP_SCALE_METHOD));
/**
* GstVaPostProc:interpolation-method
*
* Sets the interpolation method algorithm to use when resizing.
*
*/
PROPERTIES (PROP_INTERPOLATION_METHOD) =
g_param_spec_enum ("interpolation-method", "Interpolation Method",
"Interpolation method to use for scaling",
GST_TYPE_VA_INTERPOLATION_METHOD, VA_FILTER_INTERPOLATION_DEFAULT,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | GST_PARAM_MUTABLE_PLAYING);
g_object_class_install_property (klass, PROP_INTERPOLATION_METHOD,
PROPERTIES (PROP_INTERPOLATION_METHOD));
} }
static void static void