mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-17 11:45:25 +00:00
yadif: Add mode property
Copy mode from deinterlace element. Isn't actually implemented in yadif, every frame is deinterlaced, so effectively mode=1.
This commit is contained in:
parent
e5e7fccd03
commit
e614bd037e
2 changed files with 46 additions and 4 deletions
|
@ -100,9 +100,12 @@ static GstFlowReturn gst_yadif_transform_ip (GstBaseTransform * trans,
|
|||
|
||||
enum
|
||||
{
|
||||
PROP_0
|
||||
PROP_0,
|
||||
PROP_MODE
|
||||
};
|
||||
|
||||
#define DEFAULT_MODE GST_DEINTERLACE_MODE_AUTO
|
||||
|
||||
/* pad templates */
|
||||
|
||||
static GstStaticPadTemplate gst_yadif_sink_template =
|
||||
|
@ -121,6 +124,26 @@ GST_STATIC_PAD_TEMPLATE ("src",
|
|||
",interlace-mode=(string)progressive")
|
||||
);
|
||||
|
||||
#define GST_TYPE_DEINTERLACE_MODES (gst_deinterlace_modes_get_type ())
|
||||
static GType
|
||||
gst_deinterlace_modes_get_type (void)
|
||||
{
|
||||
static GType deinterlace_modes_type = 0;
|
||||
|
||||
static const GEnumValue modes_types[] = {
|
||||
{GST_DEINTERLACE_MODE_AUTO, "Auto detection", "auto"},
|
||||
{GST_DEINTERLACE_MODE_INTERLACED, "Force deinterlacing", "interlaced"},
|
||||
{GST_DEINTERLACE_MODE_DISABLED, "Run in passthrough mode", "disabled"},
|
||||
{0, NULL, NULL},
|
||||
};
|
||||
|
||||
if (!deinterlace_modes_type) {
|
||||
deinterlace_modes_type =
|
||||
g_enum_register_static ("GstYadifModes", modes_types);
|
||||
}
|
||||
return deinterlace_modes_type;
|
||||
}
|
||||
|
||||
|
||||
/* class initialization */
|
||||
|
||||
|
@ -198,6 +221,13 @@ gst_yadif_class_init (GstYadifClass * klass)
|
|||
base_transform_class->transform_ip =
|
||||
GST_DEBUG_FUNCPTR (gst_yadif_transform_ip);
|
||||
|
||||
g_object_class_install_property (gobject_class, PROP_MODE,
|
||||
g_param_spec_enum ("mode", "Deinterlace Mode",
|
||||
"Deinterlace mode",
|
||||
GST_TYPE_DEINTERLACE_MODES,
|
||||
DEFAULT_MODE,
|
||||
G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS));
|
||||
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -215,9 +245,12 @@ void
|
|||
gst_yadif_set_property (GObject * object, guint property_id,
|
||||
const GValue * value, GParamSpec * pspec)
|
||||
{
|
||||
/* GstYadif *yadif = GST_YADIF (object); */
|
||||
GstYadif *yadif = GST_YADIF (object);
|
||||
|
||||
switch (property_id) {
|
||||
case PROP_MODE:
|
||||
yadif->mode = g_value_get_enum (value);
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
||||
break;
|
||||
|
@ -228,9 +261,12 @@ void
|
|||
gst_yadif_get_property (GObject * object, guint property_id,
|
||||
GValue * value, GParamSpec * pspec)
|
||||
{
|
||||
/* GstYadif *yadif = GST_YADIF (object); */
|
||||
GstYadif *yadif = GST_YADIF (object);
|
||||
|
||||
switch (property_id) {
|
||||
case PROP_MODE:
|
||||
g_value_set_enum (value, yadif->mode);
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
||||
break;
|
||||
|
|
|
@ -35,6 +35,12 @@ G_BEGIN_DECLS
|
|||
typedef struct _GstYadif GstYadif;
|
||||
typedef struct _GstYadifClass GstYadifClass;
|
||||
|
||||
typedef enum {
|
||||
GST_DEINTERLACE_MODE_AUTO,
|
||||
GST_DEINTERLACE_MODE_INTERLACED,
|
||||
GST_DEINTERLACE_MODE_DISABLED
|
||||
} GstDeinterlaceMode;
|
||||
|
||||
struct _GstYadif
|
||||
{
|
||||
GstBaseTransform base_yadif;
|
||||
|
@ -42,7 +48,7 @@ struct _GstYadif
|
|||
GstPad *sinkpad;
|
||||
GstPad *srcpad;
|
||||
|
||||
int mode;
|
||||
GstDeinterlaceMode mode;
|
||||
|
||||
GstVideoInfo video_info;
|
||||
|
||||
|
|
Loading…
Reference in a new issue