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:
David Schleef 2013-02-07 15:42:54 -08:00
parent e5e7fccd03
commit e614bd037e
2 changed files with 46 additions and 4 deletions

View file

@ -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;

View file

@ -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;