/* GstBaseTransform vmethod implementations */ static GstFlowReturn gst_audio_invert_transform_ip (GstBaseTransform * base, GstBuffer * buf) { GstAudioInvert *filter = GST_AUDIO_INVERT (base); guint num_samples; GstClockTime timestamp, stream_time; GstMapInfo map; timestamp = GST_BUFFER_TIMESTAMP (buf); stream_time = gst_segment_to_stream_time (&base->segment, GST_FORMAT_TIME, timestamp); GST_DEBUG_OBJECT (filter, "sync to %" GST_TIME_FORMAT, GST_TIME_ARGS (timestamp)); if (GST_CLOCK_TIME_IS_VALID (stream_time)) gst_object_sync_values (GST_OBJECT (filter), stream_time); if (G_UNLIKELY (GST_BUFFER_FLAG_IS_SET (buf, GST_BUFFER_FLAG_GAP))) return GST_FLOW_OK; gst_buffer_map (buf, &map, GST_MAP_READWRITE); num_samples = map.size / GST_AUDIO_FILTER_BPS (filter); filter->process (filter, map.data, num_samples); gst_buffer_unmap (buf, &map); return GST_FLOW_OK; }
/* GstBaseTransform vmethod implementations */ static GstFlowReturn gst_audio_invert_transform_ip (GstBaseTransform * base, GstBuffer * buf) { GstAudioInvert *filter = GST_AUDIO_INVERT (base); guint num_samples; GstClockTime timestamp, stream_time; timestamp = GST_BUFFER_TIMESTAMP (buf); stream_time = gst_segment_to_stream_time (&base->segment, GST_FORMAT_TIME, timestamp); GST_DEBUG_OBJECT (filter, "sync to %" GST_TIME_FORMAT, GST_TIME_ARGS (timestamp)); if (GST_CLOCK_TIME_IS_VALID (stream_time)) gst_object_sync_values (G_OBJECT (filter), stream_time); num_samples = GST_BUFFER_SIZE (buf) / (GST_AUDIO_FILTER (filter)->format.width / 8); if (gst_base_transform_is_passthrough (base) || G_UNLIKELY (GST_BUFFER_FLAG_IS_SET (buf, GST_BUFFER_FLAG_GAP))) return GST_FLOW_OK; filter->process (filter, GST_BUFFER_DATA (buf), num_samples); return GST_FLOW_OK; }