signalprocessor: port to 0.11

This commit is contained in:
Wim Taymans 2011-10-04 13:33:53 +02:00
parent 395430d350
commit 458cb1b37c

View file

@ -165,17 +165,38 @@ gst_signal_processor_pad_get_type (void)
return type; return type;
} }
static void static GstElementClass *parent_class = NULL;
_do_init (GType object_type)
static void gst_signal_processor_class_init (GstSignalProcessorClass * klass);
static void gst_signal_processor_init (GstSignalProcessor * self,
GstSignalProcessorClass * klass);
GType
gst_signal_processor_get_type (void)
{ {
GST_DEBUG_CATEGORY_INIT (gst_signal_processor_debug, "signalprocessor", 0, static volatile gsize signal_processor_type = 0;
"signalprocessor baseclass");
if (g_once_init_enter (&signal_processor_type)) {
GType _type;
static const GTypeInfo signal_processor_info = {
sizeof (GstSignalProcessorClass),
NULL,
NULL,
(GClassInitFunc) gst_signal_processor_class_init,
NULL,
NULL,
sizeof (GstSignalProcessor),
0,
(GInstanceInitFunc) gst_signal_processor_init,
};
_type = g_type_register_static (GST_TYPE_ELEMENT,
"GstSignalProcessor", &signal_processor_info, G_TYPE_FLAG_ABSTRACT);
g_once_init_leave (&signal_processor_type, _type);
}
return signal_processor_type;
} }
GST_BOILERPLATE_FULL (GstSignalProcessor, gst_signal_processor, GstElement,
GST_TYPE_ELEMENT, _do_init);
static void gst_signal_processor_finalize (GObject * object); static void gst_signal_processor_finalize (GObject * object);
static gboolean gst_signal_processor_src_activate_pull (GstPad * pad, static gboolean gst_signal_processor_src_activate_pull (GstPad * pad,
gboolean active); gboolean active);
@ -192,12 +213,6 @@ static GstFlowReturn gst_signal_processor_chain (GstPad * pad,
static gboolean gst_signal_processor_setcaps (GstPad * pad, GstCaps * caps); static gboolean gst_signal_processor_setcaps (GstPad * pad, GstCaps * caps);
static void
gst_signal_processor_base_init (gpointer g_class)
{
/* NOP */
}
static void static void
gst_signal_processor_class_init (GstSignalProcessorClass * klass) gst_signal_processor_class_init (GstSignalProcessorClass * klass)
{ {
@ -207,6 +222,8 @@ gst_signal_processor_class_init (GstSignalProcessorClass * klass)
gobject_class = G_OBJECT_CLASS (klass); gobject_class = G_OBJECT_CLASS (klass);
gstelement_class = GST_ELEMENT_CLASS (klass); gstelement_class = GST_ELEMENT_CLASS (klass);
parent_class = g_type_class_peek_parent (klass);
gobject_class->finalize = GST_DEBUG_FUNCPTR (gst_signal_processor_finalize); gobject_class->finalize = GST_DEBUG_FUNCPTR (gst_signal_processor_finalize);
gstelement_class->change_state = gstelement_class->change_state =
@ -218,6 +235,9 @@ gst_signal_processor_class_init (GstSignalProcessorClass * klass)
GST_DEBUG_REGISTER_FUNCPTR (gst_signal_processor_sink_activate_push); GST_DEBUG_REGISTER_FUNCPTR (gst_signal_processor_sink_activate_push);
GST_DEBUG_REGISTER_FUNCPTR (gst_signal_processor_getrange); GST_DEBUG_REGISTER_FUNCPTR (gst_signal_processor_getrange);
GST_DEBUG_REGISTER_FUNCPTR (gst_signal_processor_src_activate_pull); GST_DEBUG_REGISTER_FUNCPTR (gst_signal_processor_src_activate_pull);
GST_DEBUG_CATEGORY_INIT (gst_signal_processor_debug, "signalprocessor", 0,
"signalprocessor baseclass");
} }
static void static void
@ -234,8 +254,6 @@ gst_signal_processor_add_pad_from_template (GstSignalProcessor * self,
GST_SIGNAL_PROCESSOR_PAD (pad)->channels = GST_SIGNAL_PROCESSOR_PAD (pad)->channels =
GST_SIGNAL_PROCESSOR_PAD_TEMPLATE (templ)->channels; GST_SIGNAL_PROCESSOR_PAD_TEMPLATE (templ)->channels;
gst_pad_set_setcaps_function (pad, gst_signal_processor_setcaps);
if (templ->direction == GST_PAD_SINK) { if (templ->direction == GST_PAD_SINK) {
GST_DEBUG_OBJECT (pad, "added new sink pad"); GST_DEBUG_OBJECT (pad, "added new sink pad");
@ -583,16 +601,27 @@ gst_signal_processor_event (GstPad * pad, GstEvent * event)
bclass->event (self, event); bclass->event (self, event);
switch (GST_EVENT_TYPE (event)) { switch (GST_EVENT_TYPE (event)) {
case GST_EVENT_CAPS:
{
GstCaps *caps;
gst_event_parse_caps (event, &caps);
ret = gst_signal_processor_setcaps (pad, caps);
gst_event_unref (event);
break;
}
case GST_EVENT_FLUSH_START: case GST_EVENT_FLUSH_START:
ret = gst_pad_event_default (pad, event);
break; break;
case GST_EVENT_FLUSH_STOP: case GST_EVENT_FLUSH_STOP:
/* clear errors now */ /* clear errors now */
self->flow_state = GST_FLOW_OK; self->flow_state = GST_FLOW_OK;
ret = gst_pad_event_default (pad, event);
break; break;
default: default:
ret = gst_pad_event_default (pad, event);
break; break;
} }
ret = gst_pad_event_default (pad, event);
gst_object_unref (self); gst_object_unref (self);
@ -693,7 +722,7 @@ gst_signal_processor_prepare (GstSignalProcessor * self, guint nframes)
srcpad = (GstSignalProcessorPad *) srcs->data; srcpad = (GstSignalProcessorPad *) srcs->data;
if (sinkpad->channels == 1 && sinkpad->channels == srcpad->channels if (sinkpad->channels == 1 && sinkpad->channels == srcpad->channels
&& GST_BUFFER_SIZE (sinkpad->pen) == && gst_buffer_get_size (sinkpad->pen) ==
samples_avail * sizeof (gfloat)) { samples_avail * sizeof (gfloat)) {
/* reusable, yay */ /* reusable, yay */
g_assert (sinkpad->samples_avail == samples_avail); g_assert (sinkpad->samples_avail == samples_avail);
@ -714,24 +743,18 @@ gst_signal_processor_prepare (GstSignalProcessor * self, guint nframes)
/* now allocate for any remaining outputs */ /* now allocate for any remaining outputs */
while (srcs) { while (srcs) {
GstSignalProcessorPad *srcpad; GstSignalProcessorPad *srcpad;
GstFlowReturn ret;
srcpad = (GstSignalProcessorPad *) srcs->data; srcpad = (GstSignalProcessorPad *) srcs->data;
ret = gst_pad_alloc_buffer_and_set_caps (GST_PAD (srcpad), srcpad->pen =
GST_CLOCK_TIME_NONE, gst_buffer_new_allocate (NULL,
samples_avail * srcpad->channels * sizeof (gfloat), self->caps, samples_avail * srcpad->channels * sizeof (gfloat), 0);
&srcpad->pen);
if (ret != GST_FLOW_OK) { if (srcpad->channels > 1) {
GST_INFO_OBJECT (self,
"allocating buffer for %u samples, %u channels failed", samples_avail,
srcpad->channels);
self->flow_state = ret;
return 0;
} else if (srcpad->channels > 1) {
GstSignalProcessorGroup *group = &self->group_out[out_group_index++]; GstSignalProcessorGroup *group = &self->group_out[out_group_index++];
group->interleaved_buffer = (gfloat *) GST_BUFFER_DATA (srcpad->pen); group->interleaved_buffer =
(gfloat *) gst_buffer_map (srcpad->pen, NULL, NULL,
GST_MAP_READWRITE);
if (!group->buffer || group->channels < srcpad->channels if (!group->buffer || group->channels < srcpad->channels
|| group->nframes < samples_avail) || group->nframes < samples_avail)
group->buffer = group->buffer =
@ -741,7 +764,9 @@ gst_signal_processor_prepare (GstSignalProcessor * self, guint nframes)
group->nframes = samples_avail; group->nframes = samples_avail;
self->pending_out++; self->pending_out++;
} else { } else {
self->audio_out[srcpad->index] = (gfloat *) GST_BUFFER_DATA (srcpad->pen); self->audio_out[srcpad->index] =
(gfloat *) gst_buffer_map (srcpad->pen, NULL, NULL,
GST_MAP_READWRITE);
self->pending_out++; self->pending_out++;
} }
@ -841,15 +866,16 @@ gst_signal_processor_pen_buffer (GstSignalProcessor * self, GstPad * pad,
GstBuffer * buffer) GstBuffer * buffer)
{ {
GstSignalProcessorPad *spad = (GstSignalProcessorPad *) pad; GstSignalProcessorPad *spad = (GstSignalProcessorPad *) pad;
gsize size;
if (spad->pen) if (spad->pen)
goto had_buffer; goto had_buffer;
/* keep the reference */ /* keep the reference */
spad->pen = buffer; spad->pen = buffer;
spad->data = (gfloat *) GST_BUFFER_DATA (buffer); spad->data =
spad->samples_avail = (gfloat *) gst_buffer_map (buffer, &size, NULL, GST_MAP_READWRITE);
GST_BUFFER_SIZE (buffer) / sizeof (float) / spad->channels; spad->samples_avail = size / sizeof (float) / spad->channels;
g_assert (self->pending_in != 0); g_assert (self->pending_in != 0);
@ -882,6 +908,7 @@ gst_signal_processor_flush (GstSignalProcessor * self)
GstSignalProcessorPad *spad = (GstSignalProcessorPad *) pads->data; GstSignalProcessorPad *spad = (GstSignalProcessorPad *) pads->data;
if (spad->pen) { if (spad->pen) {
gst_buffer_unmap (spad->pen, spad->data, -1);
gst_buffer_unref (spad->pen); gst_buffer_unref (spad->pen);
spad->pen = NULL; spad->pen = NULL;
spad->data = NULL; spad->data = NULL;