mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-11 16:55:23 +00:00
Added caps proxying and bufferpool passing to identity so that
Original commit message from CVS: Added caps proxying and bufferpool passing to identity so that -launch disksrc ! mad ! identity ! osssink works.
This commit is contained in:
parent
0b7ec5c86f
commit
31427072e3
4 changed files with 104 additions and 8 deletions
|
@ -44,6 +44,7 @@ enum {
|
||||||
ARG_0,
|
ARG_0,
|
||||||
ARG_LOOP_BASED,
|
ARG_LOOP_BASED,
|
||||||
ARG_SLEEP_TIME,
|
ARG_SLEEP_TIME,
|
||||||
|
ARG_SILENT,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -92,23 +93,59 @@ gst_identity_class_init (GstIdentityClass *klass)
|
||||||
GTK_ARG_READWRITE, ARG_LOOP_BASED);
|
GTK_ARG_READWRITE, ARG_LOOP_BASED);
|
||||||
gtk_object_add_arg_type ("GstIdentity::sleep_time", GTK_TYPE_UINT,
|
gtk_object_add_arg_type ("GstIdentity::sleep_time", GTK_TYPE_UINT,
|
||||||
GTK_ARG_READWRITE, ARG_SLEEP_TIME);
|
GTK_ARG_READWRITE, ARG_SLEEP_TIME);
|
||||||
|
gtk_object_add_arg_type ("GstIdentity::silent", GTK_TYPE_BOOL,
|
||||||
|
GTK_ARG_READWRITE, ARG_SILENT);
|
||||||
|
|
||||||
gtkobject_class->set_arg = gst_identity_set_arg;
|
gtkobject_class->set_arg = gst_identity_set_arg;
|
||||||
gtkobject_class->get_arg = gst_identity_get_arg;
|
gtkobject_class->get_arg = gst_identity_get_arg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static GstBufferPool*
|
||||||
|
gst_identity_get_bufferpool (GstPad *pad)
|
||||||
|
{
|
||||||
|
GstIdentity *identity;
|
||||||
|
|
||||||
|
identity = GST_IDENTITY (gst_pad_get_parent (pad));
|
||||||
|
|
||||||
|
return gst_pad_get_bufferpool (identity->srcpad);
|
||||||
|
}
|
||||||
|
|
||||||
|
static GstPadNegotiateReturn
|
||||||
|
gst_identity_negotiate_src (GstPad *pad, GstCaps **caps, gpointer *data)
|
||||||
|
{
|
||||||
|
GstIdentity *identity;
|
||||||
|
|
||||||
|
identity = GST_IDENTITY (gst_pad_get_parent (pad));
|
||||||
|
|
||||||
|
return gst_pad_negotiate_proxy (pad, identity->sinkpad, caps);
|
||||||
|
}
|
||||||
|
|
||||||
|
static GstPadNegotiateReturn
|
||||||
|
gst_identity_negotiate_sink (GstPad *pad, GstCaps **caps, gpointer *data)
|
||||||
|
{
|
||||||
|
GstIdentity *identity;
|
||||||
|
|
||||||
|
identity = GST_IDENTITY (gst_pad_get_parent (pad));
|
||||||
|
|
||||||
|
return gst_pad_negotiate_proxy (pad, identity->srcpad, caps);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_identity_init (GstIdentity *identity)
|
gst_identity_init (GstIdentity *identity)
|
||||||
{
|
{
|
||||||
identity->sinkpad = gst_pad_new ("sink", GST_PAD_SINK);
|
identity->sinkpad = gst_pad_new ("sink", GST_PAD_SINK);
|
||||||
gst_element_add_pad (GST_ELEMENT (identity), identity->sinkpad);
|
gst_element_add_pad (GST_ELEMENT (identity), identity->sinkpad);
|
||||||
gst_pad_set_chain_function (identity->sinkpad, gst_identity_chain);
|
gst_pad_set_chain_function (identity->sinkpad, gst_identity_chain);
|
||||||
|
gst_pad_set_bufferpool_function (identity->sinkpad, gst_identity_get_bufferpool);
|
||||||
|
gst_pad_set_negotiate_function (identity->sinkpad, gst_identity_negotiate_sink);
|
||||||
|
|
||||||
identity->srcpad = gst_pad_new ("src", GST_PAD_SRC);
|
identity->srcpad = gst_pad_new ("src", GST_PAD_SRC);
|
||||||
gst_element_add_pad (GST_ELEMENT (identity), identity->srcpad);
|
gst_element_add_pad (GST_ELEMENT (identity), identity->srcpad);
|
||||||
|
gst_pad_set_negotiate_function (identity->srcpad, gst_identity_negotiate_src);
|
||||||
|
|
||||||
identity->loop_based = FALSE;
|
identity->loop_based = FALSE;
|
||||||
identity->sleep_time = 10000;
|
identity->sleep_time = 0;
|
||||||
|
identity->silent = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -121,11 +158,14 @@ gst_identity_chain (GstPad *pad, GstBuffer *buf)
|
||||||
g_return_if_fail (buf != NULL);
|
g_return_if_fail (buf != NULL);
|
||||||
|
|
||||||
identity = GST_IDENTITY (gst_pad_get_parent (pad));
|
identity = GST_IDENTITY (gst_pad_get_parent (pad));
|
||||||
g_print("identity: ******* (%s:%s)i \n",GST_DEBUG_PAD_NAME(pad));
|
|
||||||
|
if (!identity->silent)
|
||||||
|
g_print("identity: ******* (%s:%s)i \n",GST_DEBUG_PAD_NAME(pad));
|
||||||
|
|
||||||
gst_pad_push (identity->srcpad, buf);
|
gst_pad_push (identity->srcpad, buf);
|
||||||
|
|
||||||
usleep (identity->sleep_time);
|
if (identity->sleep_time)
|
||||||
|
usleep (identity->sleep_time);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -145,7 +185,8 @@ gst_identity_loop (GstElement *element)
|
||||||
|
|
||||||
gst_pad_push (identity->srcpad, buf);
|
gst_pad_push (identity->srcpad, buf);
|
||||||
|
|
||||||
usleep (identity->sleep_time);
|
if (identity->sleep_time)
|
||||||
|
usleep (identity->sleep_time);
|
||||||
|
|
||||||
} while (!GST_ELEMENT_IS_COTHREAD_STOPPING(element));
|
} while (!GST_ELEMENT_IS_COTHREAD_STOPPING(element));
|
||||||
}
|
}
|
||||||
|
@ -175,6 +216,9 @@ gst_identity_set_arg (GtkObject *object, GtkArg *arg, guint id)
|
||||||
case ARG_SLEEP_TIME:
|
case ARG_SLEEP_TIME:
|
||||||
identity->sleep_time = GTK_VALUE_UINT (*arg);
|
identity->sleep_time = GTK_VALUE_UINT (*arg);
|
||||||
break;
|
break;
|
||||||
|
case ARG_SILENT:
|
||||||
|
identity->silent = GTK_VALUE_BOOL (*arg);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -195,6 +239,9 @@ static void gst_identity_get_arg(GtkObject *object,GtkArg *arg,guint id) {
|
||||||
case ARG_SLEEP_TIME:
|
case ARG_SLEEP_TIME:
|
||||||
GTK_VALUE_UINT (*arg) = identity->sleep_time;
|
GTK_VALUE_UINT (*arg) = identity->sleep_time;
|
||||||
break;
|
break;
|
||||||
|
case ARG_SILENT:
|
||||||
|
GTK_VALUE_BOOL (*arg) = identity->silent;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
arg->type = GTK_TYPE_INVALID;
|
arg->type = GTK_TYPE_INVALID;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -60,6 +60,7 @@ struct _GstIdentity {
|
||||||
gboolean loop_based;
|
gboolean loop_based;
|
||||||
|
|
||||||
guint sleep_time;
|
guint sleep_time;
|
||||||
|
gboolean silent;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _GstIdentityClass {
|
struct _GstIdentityClass {
|
||||||
|
|
|
@ -44,6 +44,7 @@ enum {
|
||||||
ARG_0,
|
ARG_0,
|
||||||
ARG_LOOP_BASED,
|
ARG_LOOP_BASED,
|
||||||
ARG_SLEEP_TIME,
|
ARG_SLEEP_TIME,
|
||||||
|
ARG_SILENT,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -92,23 +93,59 @@ gst_identity_class_init (GstIdentityClass *klass)
|
||||||
GTK_ARG_READWRITE, ARG_LOOP_BASED);
|
GTK_ARG_READWRITE, ARG_LOOP_BASED);
|
||||||
gtk_object_add_arg_type ("GstIdentity::sleep_time", GTK_TYPE_UINT,
|
gtk_object_add_arg_type ("GstIdentity::sleep_time", GTK_TYPE_UINT,
|
||||||
GTK_ARG_READWRITE, ARG_SLEEP_TIME);
|
GTK_ARG_READWRITE, ARG_SLEEP_TIME);
|
||||||
|
gtk_object_add_arg_type ("GstIdentity::silent", GTK_TYPE_BOOL,
|
||||||
|
GTK_ARG_READWRITE, ARG_SILENT);
|
||||||
|
|
||||||
gtkobject_class->set_arg = gst_identity_set_arg;
|
gtkobject_class->set_arg = gst_identity_set_arg;
|
||||||
gtkobject_class->get_arg = gst_identity_get_arg;
|
gtkobject_class->get_arg = gst_identity_get_arg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static GstBufferPool*
|
||||||
|
gst_identity_get_bufferpool (GstPad *pad)
|
||||||
|
{
|
||||||
|
GstIdentity *identity;
|
||||||
|
|
||||||
|
identity = GST_IDENTITY (gst_pad_get_parent (pad));
|
||||||
|
|
||||||
|
return gst_pad_get_bufferpool (identity->srcpad);
|
||||||
|
}
|
||||||
|
|
||||||
|
static GstPadNegotiateReturn
|
||||||
|
gst_identity_negotiate_src (GstPad *pad, GstCaps **caps, gpointer *data)
|
||||||
|
{
|
||||||
|
GstIdentity *identity;
|
||||||
|
|
||||||
|
identity = GST_IDENTITY (gst_pad_get_parent (pad));
|
||||||
|
|
||||||
|
return gst_pad_negotiate_proxy (pad, identity->sinkpad, caps);
|
||||||
|
}
|
||||||
|
|
||||||
|
static GstPadNegotiateReturn
|
||||||
|
gst_identity_negotiate_sink (GstPad *pad, GstCaps **caps, gpointer *data)
|
||||||
|
{
|
||||||
|
GstIdentity *identity;
|
||||||
|
|
||||||
|
identity = GST_IDENTITY (gst_pad_get_parent (pad));
|
||||||
|
|
||||||
|
return gst_pad_negotiate_proxy (pad, identity->srcpad, caps);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_identity_init (GstIdentity *identity)
|
gst_identity_init (GstIdentity *identity)
|
||||||
{
|
{
|
||||||
identity->sinkpad = gst_pad_new ("sink", GST_PAD_SINK);
|
identity->sinkpad = gst_pad_new ("sink", GST_PAD_SINK);
|
||||||
gst_element_add_pad (GST_ELEMENT (identity), identity->sinkpad);
|
gst_element_add_pad (GST_ELEMENT (identity), identity->sinkpad);
|
||||||
gst_pad_set_chain_function (identity->sinkpad, gst_identity_chain);
|
gst_pad_set_chain_function (identity->sinkpad, gst_identity_chain);
|
||||||
|
gst_pad_set_bufferpool_function (identity->sinkpad, gst_identity_get_bufferpool);
|
||||||
|
gst_pad_set_negotiate_function (identity->sinkpad, gst_identity_negotiate_sink);
|
||||||
|
|
||||||
identity->srcpad = gst_pad_new ("src", GST_PAD_SRC);
|
identity->srcpad = gst_pad_new ("src", GST_PAD_SRC);
|
||||||
gst_element_add_pad (GST_ELEMENT (identity), identity->srcpad);
|
gst_element_add_pad (GST_ELEMENT (identity), identity->srcpad);
|
||||||
|
gst_pad_set_negotiate_function (identity->srcpad, gst_identity_negotiate_src);
|
||||||
|
|
||||||
identity->loop_based = FALSE;
|
identity->loop_based = FALSE;
|
||||||
identity->sleep_time = 10000;
|
identity->sleep_time = 0;
|
||||||
|
identity->silent = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -121,11 +158,14 @@ gst_identity_chain (GstPad *pad, GstBuffer *buf)
|
||||||
g_return_if_fail (buf != NULL);
|
g_return_if_fail (buf != NULL);
|
||||||
|
|
||||||
identity = GST_IDENTITY (gst_pad_get_parent (pad));
|
identity = GST_IDENTITY (gst_pad_get_parent (pad));
|
||||||
g_print("identity: ******* (%s:%s)i \n",GST_DEBUG_PAD_NAME(pad));
|
|
||||||
|
if (!identity->silent)
|
||||||
|
g_print("identity: ******* (%s:%s)i \n",GST_DEBUG_PAD_NAME(pad));
|
||||||
|
|
||||||
gst_pad_push (identity->srcpad, buf);
|
gst_pad_push (identity->srcpad, buf);
|
||||||
|
|
||||||
usleep (identity->sleep_time);
|
if (identity->sleep_time)
|
||||||
|
usleep (identity->sleep_time);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -145,7 +185,8 @@ gst_identity_loop (GstElement *element)
|
||||||
|
|
||||||
gst_pad_push (identity->srcpad, buf);
|
gst_pad_push (identity->srcpad, buf);
|
||||||
|
|
||||||
usleep (identity->sleep_time);
|
if (identity->sleep_time)
|
||||||
|
usleep (identity->sleep_time);
|
||||||
|
|
||||||
} while (!GST_ELEMENT_IS_COTHREAD_STOPPING(element));
|
} while (!GST_ELEMENT_IS_COTHREAD_STOPPING(element));
|
||||||
}
|
}
|
||||||
|
@ -175,6 +216,9 @@ gst_identity_set_arg (GtkObject *object, GtkArg *arg, guint id)
|
||||||
case ARG_SLEEP_TIME:
|
case ARG_SLEEP_TIME:
|
||||||
identity->sleep_time = GTK_VALUE_UINT (*arg);
|
identity->sleep_time = GTK_VALUE_UINT (*arg);
|
||||||
break;
|
break;
|
||||||
|
case ARG_SILENT:
|
||||||
|
identity->silent = GTK_VALUE_BOOL (*arg);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -195,6 +239,9 @@ static void gst_identity_get_arg(GtkObject *object,GtkArg *arg,guint id) {
|
||||||
case ARG_SLEEP_TIME:
|
case ARG_SLEEP_TIME:
|
||||||
GTK_VALUE_UINT (*arg) = identity->sleep_time;
|
GTK_VALUE_UINT (*arg) = identity->sleep_time;
|
||||||
break;
|
break;
|
||||||
|
case ARG_SILENT:
|
||||||
|
GTK_VALUE_BOOL (*arg) = identity->silent;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
arg->type = GTK_TYPE_INVALID;
|
arg->type = GTK_TYPE_INVALID;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -60,6 +60,7 @@ struct _GstIdentity {
|
||||||
gboolean loop_based;
|
gboolean loop_based;
|
||||||
|
|
||||||
guint sleep_time;
|
guint sleep_time;
|
||||||
|
gboolean silent;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _GstIdentityClass {
|
struct _GstIdentityClass {
|
||||||
|
|
Loading…
Reference in a new issue