mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-07-15 18:58:45 +00:00
msdk: vpp:Add more filters
-- Add Denoise -- Add Rotation https://bugzilla.gnome.org/show_bug.cgi?id=793705
This commit is contained in:
parent
d3d89f02b3
commit
36e81744d1
|
@ -64,14 +64,18 @@ GST_STATIC_PAD_TEMPLATE ("src",
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
PROP_0 = 0,
|
PROP_0,
|
||||||
PROP_HARDWARE = 1,
|
PROP_HARDWARE,
|
||||||
PROP_ASYNC_DEPTH = 2,
|
PROP_ASYNC_DEPTH,
|
||||||
|
PROP_DENOISE,
|
||||||
|
PROP_ROTATION,
|
||||||
PROP_N,
|
PROP_N,
|
||||||
};
|
};
|
||||||
|
|
||||||
#define PROP_HARDWARE_DEFAULT TRUE
|
#define PROP_HARDWARE_DEFAULT TRUE
|
||||||
#define PROP_ASYNC_DEPTH_DEFAULT 1
|
#define PROP_ASYNC_DEPTH_DEFAULT 1
|
||||||
|
#define PROP_DENOISE_DEFAULT 0
|
||||||
|
#define PROP_ROTATION_DEFAULT MFX_ANGLE_0
|
||||||
|
|
||||||
#define gst_msdkvpp_parent_class parent_class
|
#define gst_msdkvpp_parent_class parent_class
|
||||||
G_DEFINE_TYPE (GstMsdkVPP, gst_msdkvpp, GST_TYPE_BASE_TRANSFORM);
|
G_DEFINE_TYPE (GstMsdkVPP, gst_msdkvpp, GST_TYPE_BASE_TRANSFORM);
|
||||||
|
@ -90,6 +94,15 @@ free_msdk_surface (MsdkSurface * surface)
|
||||||
g_slice_free (MsdkSurface, surface);
|
g_slice_free (MsdkSurface, surface);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gst_msdkvpp_add_extra_param (GstMsdkVPP * thiz, mfxExtBuffer * param)
|
||||||
|
{
|
||||||
|
if (thiz->num_extra_params < MAX_EXTRA_PARAMS) {
|
||||||
|
thiz->extra_params[thiz->num_extra_params] = param;
|
||||||
|
thiz->num_extra_params++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
ensure_context (GstBaseTransform * trans)
|
ensure_context (GstBaseTransform * trans)
|
||||||
{
|
{
|
||||||
|
@ -712,6 +725,7 @@ gst_msdkvpp_initialize (GstMsdkVPP * thiz)
|
||||||
thiz->in_num_surfaces = request[0].NumFrameSuggested;
|
thiz->in_num_surfaces = request[0].NumFrameSuggested;
|
||||||
thiz->out_num_surfaces = request[1].NumFrameSuggested;
|
thiz->out_num_surfaces = request[1].NumFrameSuggested;
|
||||||
|
|
||||||
|
|
||||||
status = MFXVideoVPP_Init (session, &thiz->param);
|
status = MFXVideoVPP_Init (session, &thiz->param);
|
||||||
if (status < MFX_ERR_NONE) {
|
if (status < MFX_ERR_NONE) {
|
||||||
GST_ERROR_OBJECT (thiz, "Init failed (%s)", msdk_status_to_string (status));
|
GST_ERROR_OBJECT (thiz, "Init failed (%s)", msdk_status_to_string (status));
|
||||||
|
@ -858,6 +872,14 @@ gst_msdkvpp_set_property (GObject * object, guint prop_id,
|
||||||
case PROP_ASYNC_DEPTH:
|
case PROP_ASYNC_DEPTH:
|
||||||
thiz->async_depth = g_value_get_uint (value);
|
thiz->async_depth = g_value_get_uint (value);
|
||||||
break;
|
break;
|
||||||
|
case PROP_DENOISE:
|
||||||
|
thiz->denoise_factor = g_value_get_uint (value);
|
||||||
|
thiz->flags |= GST_MSDK_FLAG_DENOISE;
|
||||||
|
break;
|
||||||
|
case PROP_ROTATION:
|
||||||
|
thiz->rotation = g_value_get_enum (value);
|
||||||
|
thiz->flags |= GST_MSDK_FLAG_ROTATION;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
break;
|
break;
|
||||||
|
@ -877,6 +899,12 @@ gst_msdkvpp_get_property (GObject * object, guint prop_id,
|
||||||
case PROP_ASYNC_DEPTH:
|
case PROP_ASYNC_DEPTH:
|
||||||
g_value_set_uint (value, thiz->async_depth);
|
g_value_set_uint (value, thiz->async_depth);
|
||||||
break;
|
break;
|
||||||
|
case PROP_DENOISE:
|
||||||
|
g_value_set_uint (value, thiz->denoise_factor);
|
||||||
|
break;
|
||||||
|
case PROP_ROTATION:
|
||||||
|
g_value_set_enum (value, thiz->rotation);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
break;
|
break;
|
||||||
|
@ -957,6 +985,16 @@ gst_msdkvpp_class_init (GstMsdkVPPClass * klass)
|
||||||
1, 1, PROP_ASYNC_DEPTH_DEFAULT,
|
1, 1, PROP_ASYNC_DEPTH_DEFAULT,
|
||||||
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
|
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
|
||||||
|
|
||||||
|
obj_properties[PROP_DENOISE] =
|
||||||
|
g_param_spec_uint ("denoise", "Denoising factor",
|
||||||
|
"Denoising Factor",
|
||||||
|
0, 100, PROP_DENOISE_DEFAULT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
|
||||||
|
|
||||||
|
obj_properties[PROP_ROTATION] =
|
||||||
|
g_param_spec_enum ("rotation", "Rotation",
|
||||||
|
"Rotation Angle", gst_msdkvpp_rotation_get_type (),
|
||||||
|
PROP_ROTATION_DEFAULT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
|
||||||
|
|
||||||
g_object_class_install_properties (gobject_class, PROP_N, obj_properties);
|
g_object_class_install_properties (gobject_class, PROP_N, obj_properties);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -965,6 +1003,8 @@ gst_msdkvpp_init (GstMsdkVPP * thiz)
|
||||||
{
|
{
|
||||||
thiz->hardware = PROP_HARDWARE_DEFAULT;
|
thiz->hardware = PROP_HARDWARE_DEFAULT;
|
||||||
thiz->async_depth = PROP_ASYNC_DEPTH_DEFAULT;
|
thiz->async_depth = PROP_ASYNC_DEPTH_DEFAULT;
|
||||||
|
thiz->denoise_factor = PROP_DENOISE_DEFAULT;
|
||||||
|
thiz->rotation = PROP_ROTATION_DEFAULT;
|
||||||
gst_video_info_init (&thiz->sinkpad_info);
|
gst_video_info_init (&thiz->sinkpad_info);
|
||||||
gst_video_info_init (&thiz->srcpad_info);
|
gst_video_info_init (&thiz->srcpad_info);
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,10 +55,16 @@ G_BEGIN_DECLS
|
||||||
(G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_MSDKVPP))
|
(G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_MSDKVPP))
|
||||||
|
|
||||||
#define MAX_EXTRA_PARAMS 8
|
#define MAX_EXTRA_PARAMS 8
|
||||||
|
#define MAX_FILTER_ALGORITHMS 7
|
||||||
|
|
||||||
typedef struct _GstMsdkVPP GstMsdkVPP;
|
typedef struct _GstMsdkVPP GstMsdkVPP;
|
||||||
typedef struct _GstMsdkVPPClass GstMsdkVPPClass;
|
typedef struct _GstMsdkVPPClass GstMsdkVPPClass;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
GST_MSDK_FLAG_DENOISE = 1 << 0,
|
||||||
|
GST_MSDK_FLAG_ROTATION = 1 << 1,
|
||||||
|
} GstMsdkVppFlags;
|
||||||
|
|
||||||
struct _GstMsdkVPP
|
struct _GstMsdkVPP
|
||||||
{
|
{
|
||||||
GstBaseTransform element;
|
GstBaseTransform element;
|
||||||
|
@ -86,10 +92,23 @@ struct _GstMsdkVPP
|
||||||
gboolean use_video_memory;
|
gboolean use_video_memory;
|
||||||
gboolean shared_context;
|
gboolean shared_context;
|
||||||
gboolean add_video_meta;
|
gboolean add_video_meta;
|
||||||
|
guint flags;
|
||||||
|
|
||||||
/* element properties */
|
/* element properties */
|
||||||
gboolean hardware;
|
gboolean hardware;
|
||||||
guint async_depth;
|
guint async_depth;
|
||||||
|
guint denoise_factor;
|
||||||
|
guint rotation;
|
||||||
|
|
||||||
|
/* MFX Filters */
|
||||||
|
mfxExtVPPDoUse mfx_vpp_douse;
|
||||||
|
mfxU32 max_filter_algorithms [MAX_FILTER_ALGORITHMS];
|
||||||
|
mfxExtVPPDenoise mfx_denoise;
|
||||||
|
mfxExtVPPRotation mfx_rotation;
|
||||||
|
|
||||||
|
/* Extended buffers */
|
||||||
|
mfxExtBuffer *extra_params[MAX_EXTRA_PARAMS];
|
||||||
|
guint num_extra_params;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _GstMsdkVPPClass
|
struct _GstMsdkVPPClass
|
||||||
|
|
|
@ -33,6 +33,7 @@
|
||||||
|
|
||||||
#include "msdk-enums.h"
|
#include "msdk-enums.h"
|
||||||
|
|
||||||
|
/*========= MSDK Encoder Enums =========================*/
|
||||||
GType
|
GType
|
||||||
gst_msdkenc_rate_control_get_type (void)
|
gst_msdkenc_rate_control_get_type (void)
|
||||||
{
|
{
|
||||||
|
@ -154,3 +155,24 @@ gst_msdkenc_adaptive_b_get_type (void)
|
||||||
}
|
}
|
||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*========= MSDK VPP Enums =========================*/
|
||||||
|
|
||||||
|
GType
|
||||||
|
gst_msdkvpp_rotation_get_type (void)
|
||||||
|
{
|
||||||
|
static GType type = 0;
|
||||||
|
|
||||||
|
static const GEnumValue values[] = {
|
||||||
|
{MFX_ANGLE_0, "Unrotated mode", "0"},
|
||||||
|
{MFX_ANGLE_90, "Rotated by 90°", "90"},
|
||||||
|
{MFX_ANGLE_180, "Rotated by 180°", "180"},
|
||||||
|
{MFX_ANGLE_270, "Rotated by 270°", "270"},
|
||||||
|
{0, NULL, NULL}
|
||||||
|
};
|
||||||
|
|
||||||
|
if (!type) {
|
||||||
|
type = g_enum_register_static ("GstMsdkVPPRotation", values);
|
||||||
|
}
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
|
@ -40,6 +40,7 @@ G_BEGIN_DECLS
|
||||||
|
|
||||||
#define _MFX_TRELLIS_NONE 0
|
#define _MFX_TRELLIS_NONE 0
|
||||||
|
|
||||||
|
/*========= MSDK Encoder Enums =========================*/
|
||||||
GType
|
GType
|
||||||
gst_msdkenc_rate_control_get_type (void);
|
gst_msdkenc_rate_control_get_type (void);
|
||||||
|
|
||||||
|
@ -58,5 +59,9 @@ gst_msdkenc_adaptive_i_get_type (void);
|
||||||
GType
|
GType
|
||||||
gst_msdkenc_adaptive_b_get_type (void);
|
gst_msdkenc_adaptive_b_get_type (void);
|
||||||
|
|
||||||
|
/*========= MSDK VPP Enums =========================*/
|
||||||
|
GType
|
||||||
|
gst_msdkvpp_rotation_get_type (void);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue