mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-22 22:16:22 +00:00
vaapipostproc: add support for denoise and sharpen filters.
Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
This commit is contained in:
parent
c8bea66d33
commit
ef8f5defd2
2 changed files with 51 additions and 0 deletions
|
@ -139,6 +139,8 @@ enum {
|
|||
PROP_FORCE_ASPECT_RATIO,
|
||||
PROP_DEINTERLACE_MODE,
|
||||
PROP_DEINTERLACE_METHOD,
|
||||
PROP_DENOISE,
|
||||
PROP_SHARPEN,
|
||||
};
|
||||
|
||||
#define DEFAULT_FORMAT GST_VIDEO_FORMAT_ENCODED
|
||||
|
@ -470,6 +472,16 @@ gst_vaapipostproc_process_vpp(GstBaseTransform *trans, GstBuffer *inbuf,
|
|||
!gst_vaapi_filter_set_format(postproc->filter, postproc->format))
|
||||
return GST_FLOW_NOT_SUPPORTED;
|
||||
|
||||
if ((postproc->flags & GST_VAAPI_POSTPROC_FLAG_DENOISE) &&
|
||||
!gst_vaapi_filter_set_denoising_level(postproc->filter,
|
||||
postproc->denoise_level))
|
||||
return GST_FLOW_NOT_SUPPORTED;
|
||||
|
||||
if ((postproc->flags & GST_VAAPI_POSTPROC_FLAG_SHARPEN) &&
|
||||
!gst_vaapi_filter_set_denoising_level(postproc->filter,
|
||||
postproc->sharpen_level))
|
||||
return GST_FLOW_NOT_SUPPORTED;
|
||||
|
||||
inbuf_meta = gst_buffer_get_vaapi_video_meta(inbuf);
|
||||
if (!inbuf_meta)
|
||||
goto error_invalid_buffer;
|
||||
|
@ -1446,6 +1458,14 @@ gst_vaapipostproc_set_property(
|
|||
case PROP_DEINTERLACE_METHOD:
|
||||
postproc->deinterlace_method = g_value_get_enum(value);
|
||||
break;
|
||||
case PROP_DENOISE:
|
||||
postproc->denoise_level = g_value_get_float(value);
|
||||
postproc->flags |= GST_VAAPI_POSTPROC_FLAG_DENOISE;
|
||||
break;
|
||||
case PROP_SHARPEN:
|
||||
postproc->sharpen_level = g_value_get_float(value);
|
||||
postproc->flags |= GST_VAAPI_POSTPROC_FLAG_SHARPEN;
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
|
||||
break;
|
||||
|
@ -1481,6 +1501,12 @@ gst_vaapipostproc_get_property(
|
|||
case PROP_DEINTERLACE_METHOD:
|
||||
g_value_set_enum(value, postproc->deinterlace_method);
|
||||
break;
|
||||
case PROP_DENOISE:
|
||||
g_value_set_float(value, postproc->denoise_level);
|
||||
break;
|
||||
case PROP_SHARPEN:
|
||||
g_value_set_float(value, postproc->sharpen_level);
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
|
||||
break;
|
||||
|
@ -1626,6 +1652,27 @@ gst_vaapipostproc_class_init(GstVaapiPostprocClass *klass)
|
|||
TRUE,
|
||||
G_PARAM_READWRITE));
|
||||
|
||||
/**
|
||||
* GstVaapiPostproc:denoise:
|
||||
*
|
||||
* The level of noise reduction to apply.
|
||||
*/
|
||||
filter_op = find_filter_op(filter_ops, GST_VAAPI_FILTER_OP_DENOISE);
|
||||
if (filter_op)
|
||||
g_object_class_install_property(object_class,
|
||||
PROP_DENOISE, filter_op->pspec);
|
||||
|
||||
/**
|
||||
* GstVaapiPostproc:sharpen:
|
||||
*
|
||||
* The level of sharpening to apply for positive values, or the
|
||||
* level of blurring for negative values.
|
||||
*/
|
||||
filter_op = find_filter_op(filter_ops, GST_VAAPI_FILTER_OP_SHARPEN);
|
||||
if (filter_op)
|
||||
g_object_class_install_property(object_class,
|
||||
PROP_SHARPEN, filter_op->pspec);
|
||||
|
||||
g_ptr_array_unref(filter_ops);
|
||||
}
|
||||
|
||||
|
|
|
@ -165,6 +165,10 @@ struct _GstVaapiPostproc {
|
|||
GstVaapiDeinterlaceState deinterlace_state;
|
||||
GstClockTime field_duration;
|
||||
|
||||
/* Basic filter values */
|
||||
gfloat denoise_level;
|
||||
gfloat sharpen_level;
|
||||
|
||||
guint is_raw_yuv : 1;
|
||||
guint use_vpp : 1;
|
||||
guint keep_aspect : 1;
|
||||
|
|
Loading…
Reference in a new issue