static gboolean gst_audio_filter_template_setup (GstAudioFilter * filter, const GstAudioInfo * info) { GstAudioFilterTemplate *filter_template; GstAudioFormat fmt; gint chans, rate; filter_template = GST_AUDIO_FILTER_TEMPLATE (filter); rate = GST_AUDIO_INFO_RATE (info); chans = GST_AUDIO_INFO_CHANNELS (info); fmt = GST_AUDIO_INFO_FORMAT (info); GST_INFO_OBJECT (filter_template, "format %d (%s), rate %d, %d channels", fmt, GST_AUDIO_INFO_NAME (info), rate, chans); /* if any setup needs to be done (like memory allocated), do it here */ /* The audio filter base class also saves the audio info in * GST_AUDIO_FILTER_INFO(filter) so it's automatically available * later from there as well */ return TRUE; }
static gboolean gst_audio_filter_template_setup (GstAudioFilter * filter, GstRingBufferSpec * spec) { GstAudioFilterTemplate *audio_filter_template; audio_filter_template = GST_AUDIO_FILTER_TEMPLATE (filter); /* if any setup needs to be done, do it here */ return TRUE; /* it's all good */ }
static void gst_audio_filter_template_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec) { GstAudioFilterTemplate *filter = GST_AUDIO_FILTER_TEMPLATE (object); GST_OBJECT_LOCK (filter); switch (prop_id) { default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } GST_OBJECT_UNLOCK (filter); }
static GstFlowReturn gst_audio_filter_template_filter_inplace (GstBaseTransform * base_transform, GstBuffer * buf) { GstAudioFilterTemplate *audio_filter_template; GstAudioFilter *audiofilter; audiofilter = GST_AUDIO_FILTER (base_transform); audio_filter_template = GST_AUDIO_FILTER_TEMPLATE (base_transform); /* do something interesting here. This simply copies the source * to the destination. */ return GST_FLOW_OK; }
static GstFlowReturn gst_audio_filter_template_filter (GstBaseTransform * base_transform, GstBuffer * inbuf, GstBuffer * outbuf) { GstAudioFilterTemplate *audio_filter_template; GstAudioFilter *audiofilter; audiofilter = GST_AUDIO_FILTER (base_transform); audio_filter_template = GST_AUDIO_FILTER_TEMPLATE (base_transform); /* do something interesting here. This simply copies the source * to the destination. */ memcpy (GST_BUFFER_DATA (outbuf), GST_BUFFER_DATA (inbuf), GST_BUFFER_SIZE (inbuf)); return GST_FLOW_OK; }
static GstFlowReturn gst_audio_filter_template_filter_inplace (GstBaseTransform * base_transform, GstBuffer * buf) { GstAudioFilterTemplate *filter = GST_AUDIO_FILTER_TEMPLATE (base_transform); GstFlowReturn flow = GST_FLOW_OK; GstMapInfo map; GST_LOG_OBJECT (filter, "transform buffer in place"); /* FIXME: do something interesting here. Doing nothing means the input * buffer is simply pushed out as is without any modification */ if (gst_buffer_map (buf, &map, GST_MAP_READWRITE)) { #if 0 switch (GST_AUDIO_FILTER_FORMAT (filter)) { case GST_AUDIO_FORMAT_S16LE: case GST_AUDIO_FORMAT_S16BE: { gint16 *samples = map.data; guint n_samples = map.size / sizeof (gint16); guint i; for (i = 0; i < n; ++n) { samples[i] = samples[i]; } break; } default: g_warning ("Unexpected audio format %s!", GST_AUDIO_INFO_NAME (GST_AUDIO_FILTER_INFO(filter))); flow = GST_FLOW_ERROR; break; } #endif gst_buffer_unmap (buf, &map); } return flow; }
static GstFlowReturn gst_audio_filter_template_filter (GstBaseTransform * base_transform, GstBuffer * inbuf, GstBuffer * outbuf) { GstAudioFilterTemplate *filter = GST_AUDIO_FILTER_TEMPLATE (base_transform); GstMapInfo map_in; GstMapInfo map_out; GST_LOG_OBJECT (filter, "transform buffer"); /* FIXME: do something interesting here. We simply copy the input data * to the output buffer for now. */ if (gst_buffer_map (inbuf, &map_in, GST_MAP_READ)) { if (gst_buffer_map (outbuf, &map_out, GST_MAP_WRITE)) { g_assert (map_out.size == map_in.size); memcpy (map_out.data, map_in.data, map_out.size); gst_buffer_unmap (outbuf, &map_out); } gst_buffer_unmap (inbuf, &map_in); } return GST_FLOW_OK; }