[gst-devel] Mixer plugin

Lee Brown leejr at linuxsoftwareconsultants.com
Fri Mar 16 09:15:36 CET 2001

On Fri, 16 Mar 2001, Simon Per Soren Kagedal wrote:
> Hi,
> I'm writing a mixer plugin for GStreamer, and I've run into some
> issues that I would like to ask for ideas about.  
> Basic Idea: A filter that takes m input audio streams (sinks) and
> mixes to n sources, by adding together the data.  For simplicity, I'll
> assume here that all streams are mono audio/raw data of the same
> format.  Then, to mix stereo data, one would have to use channel
> splitters/mergers.  It would be convinient though to let all in/out
> streams have any number of channels, and probably more efficient.
> Problems/Issues:
> 1. Setting "Panning" Values
> For each sink i=1..m, you should be able to set (and get) how much of
> it's signal should be sent to each source j=1..n.
> So how do I do this?  gtk_object_set/get is the only interface I know
> of for setting properties of elements in a plugin, and as far as I
> know, there is no way to access "subproperties" except by registering
> one argument type for every g_strdup_printf("mix%d%d",i,j).  This idea
> doesn't appeal to me very much.  I would like both the sinks and the
> sources to be "hotpluggable", and then you would have to add and
> remove lots of argument types when streams come and go.
> So..  any other ideas or is this the way I have to go?  

I think you want:

struct audio_level{
	int sink;
	int source;
	float level; // er, whatever

struct gst_mixer_element {
	struct gst_element;
	GList* audio_levels;

void gst_mixer_set_audio_level(
	gst_mixer_element e, 
	int sink, 
	int source, 
	float level	);

float gst_mixer_get_audio_level(
	gst_mixer_element e, 
	int sink, 
	int source );
// end

Forgive my ignorance, whats wrong with this?

Lee Brown Jr.

More information about the gstreamer-devel mailing list