working jack elements (fixed a problem in upstream jack) random other fixen...

Original commit message from CVS:
* working jack elements (fixed a problem in upstream jack)
* random other fixen...
This commit is contained in:
Andy Wingo 2002-06-12 03:32:02 +00:00
parent 9f08fd8e6a
commit db515dbd19
5 changed files with 26 additions and 26 deletions

View File

@ -41,7 +41,7 @@ make_spider_pipeline (const gchar *location, gboolean thread)
v_thread = gst_thread_new ("v_thread"); v_thread = gst_thread_new ("v_thread");
v_queue = gst_element_factory_make ("queue", "v_queue"); v_queue = gst_element_factory_make ("queue", "v_queue");
videosink = gst_element_factory_make ("xvideosink", "v_sink"); videosink = gst_element_factory_make ("videosink", "v_sink");
//g_object_set (G_OBJECT (audiosink), "sync", FALSE, NULL); //g_object_set (G_OBJECT (audiosink), "sync", FALSE, NULL);
g_object_set (G_OBJECT (src), "location", location, NULL); g_object_set (G_OBJECT (src), "location", location, NULL);

View File

@ -400,7 +400,7 @@ gst_jack_loop (GstElement *element)
{ {
GstJack *this; GstJack *this;
GList *pads; GList *pads;
gint len; gint len, peeked_len;
gchar *peeked; gchar *peeked;
gint avail; gint avail;
GstEvent *event; GstEvent *event;
@ -421,7 +421,9 @@ gst_jack_loop (GstElement *element)
if (!pad->bs) if (!pad->bs)
pad->bs = gst_bytestream_new (pad->pad); pad->bs = gst_bytestream_new (pad->pad);
if (gst_bytestream_peek_bytes (pad->bs, (guint8**)&peeked, len) < len) { read:
peeked_len = gst_bytestream_peek_bytes (pad->bs, (guint8**)&peeked, len);
if (peeked_len < len) {
gst_bytestream_get_status(pad->bs, &avail, &event); gst_bytestream_get_status(pad->bs, &avail, &event);
if (event) { if (event) {
g_warning("got an event on jacksink"); g_warning("got an event on jacksink");
@ -430,9 +432,12 @@ gst_jack_loop (GstElement *element)
* me know when this is needed ;) * me know when this is needed ;)
* also, for sample accuracy etc, we should play avail * also, for sample accuracy etc, we should play avail
* bytes, but hey. */ * bytes, but hey. */
gst_element_set_eos(GST_ELEMENT(this)); gst_element_set_eos (element);
gst_event_free (event); gst_event_free (event);
gst_element_yield (element); /* shouldn't return */
return;
} }
goto read;
} else { } else {
/* the element at the top of the chain did not emit an eos /* the element at the top of the chain did not emit an eos
* event. this is a Bug(tm) */ * event. this is a Bug(tm) */
@ -440,8 +445,9 @@ gst_jack_loop (GstElement *element)
} }
} }
memcpy (pad->data, peeked, len);
gst_bytestream_flush (pad->bs, len); memcpy (pad->data, peeked, peeked_len);
gst_bytestream_flush (pad->bs, peeked_len);
} else { } else {
buffer = gst_buffer_new (); buffer = gst_buffer_new ();
GST_BUFFER_DATA (buffer) = pad->data; GST_BUFFER_DATA (buffer) = pad->data;

View File

@ -102,7 +102,7 @@ gst_jack_bin_change_state (GstElement *element)
switch (GST_STATE_PENDING (element)) { switch (GST_STATE_PENDING (element)) {
case GST_STATE_NULL: case GST_STATE_NULL:
g_message ("jack: NULL state"); g_message ("jackbin: NULL state");
if (this->client) { if (this->client) {
g_message ("jack: closing client"); g_message ("jack: closing client");
jack_client_close (this->client); jack_client_close (this->client);
@ -113,7 +113,7 @@ gst_jack_bin_change_state (GstElement *element)
break; break;
case GST_STATE_READY: case GST_STATE_READY:
g_message ("jack: READY"); g_message ("jackbin: READY");
if (!this->client) { if (!this->client) {
if (!(this->client = jack_client_new ("gst-jack"))) { if (!(this->client = jack_client_new ("gst-jack"))) {
g_warning ("jack server not running?"); g_warning ("jack server not running?");
@ -154,24 +154,25 @@ gst_jack_bin_change_state (GstElement *element)
break; break;
case GST_STATE_PAUSED: case GST_STATE_PAUSED:
g_message ("jack: PAUSED"); g_message ("jackbin: PAUSED");
if (!GST_FLAG_IS_SET (GST_OBJECT (this), GST_JACK_OPEN)) { if (!GST_FLAG_IS_SET (GST_OBJECT (this), GST_JACK_OPEN)) {
l = this->src_pads; l = this->src_pads;
while (l) { while (l) {
pad = GST_JACK_PAD (l); pad = GST_JACK_PAD (l);
g_message ("jack: registering pad %s:%s", pad->name, pad->peer_name); g_message ("jack: registering pad %s:%s", pad->name, pad->peer_name);
pad->port = jack_port_register (this->client, pad->name, JACK_DEFAULT_AUDIO_TYPE, JackPortIsInput, 0); pad->port = jack_port_register (this->client, pad->name, JACK_DEFAULT_AUDIO_TYPE, JackPortIsInput|JackPortIsTerminal, 0);
l = g_list_next (l); l = g_list_next (l);
} }
l = this->sink_pads; l = this->sink_pads;
while (l) { while (l) {
pad = GST_JACK_PAD (l); pad = GST_JACK_PAD (l);
g_message ("jack: registering pad %s:%s", pad->name, pad->peer_name); g_message ("jack: registering pad %s:%s", pad->name, pad->peer_name);
pad->port = jack_port_register (this->client, pad->name, JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0); pad->port = jack_port_register (this->client, pad->name, JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput|JackPortIsTerminal, 0);
l = g_list_next (l); l = g_list_next (l);
} }
/* must activate before connecting */
if (!GST_FLAG_IS_SET (GST_OBJECT (this), GST_JACK_ACTIVE)) { if (!GST_FLAG_IS_SET (GST_OBJECT (this), GST_JACK_ACTIVE)) {
g_message ("jack: activating client"); g_message ("jack: activating client");
jack_activate (this->client); jack_activate (this->client);
@ -201,7 +202,7 @@ gst_jack_bin_change_state (GstElement *element)
l = g_list_next (l); l = g_list_next (l);
} }
g_message ("jack: setting OPEN flag"); g_message ("jackbin: setting OPEN flag");
GST_FLAG_SET (GST_OBJECT (this), GST_JACK_OPEN); GST_FLAG_SET (GST_OBJECT (this), GST_JACK_OPEN);
} else { } else {
g_cond_wait (this->cond, this->lock); g_cond_wait (this->cond, this->lock);

View File

@ -10,7 +10,7 @@ libgstspeed_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
noinst_HEADERS = gstspeed.h filter.func noinst_HEADERS = gstspeed.h filter.func
if HAVE_GTK if HAVE_GTK
noinst_PROGRAMS = demo_mp3 noinst_PROGRAMS = demo-mp3
endif endif
demo_mp3_SOURCES = demo-mp3.c demo_mp3_SOURCES = demo-mp3.c

View File

@ -4,7 +4,7 @@
void set_speed (GtkAdjustment *adj, gpointer data) void set_speed (GtkAdjustment *adj, gpointer data)
{ {
GstElement *speed = GST_ELEMENT(data); GstElement *speed = GST_ELEMENT(data);
gtk_object_set(GTK_OBJECT(speed), "speed", adj->value, NULL); g_object_set (speed, "speed", adj->value, NULL);
} }
int main(int argc, char **argv) int main(int argc, char **argv)
@ -41,22 +41,15 @@ int main(int argc, char **argv)
stereo2mono = gst_element_factory_make("stereo2mono", "stereo2mono"); stereo2mono = gst_element_factory_make("stereo2mono", "stereo2mono");
speed = gst_element_factory_make("speed", "speed"); speed = gst_element_factory_make("speed", "speed");
osssink = gst_element_factory_make("osssink", "osssink"); osssink = gst_element_factory_make("osssink", "osssink");
gtk_object_set(GTK_OBJECT(osssink), "fragment", 0x00180008, NULL); g_object_set(osssink, "fragment", 0x00180008, NULL);
gtk_signal_connect(GTK_OBJECT(gtk_range_get_adjustment(GTK_RANGE(hscale))), gtk_signal_connect(GTK_OBJECT(gtk_range_get_adjustment(GTK_RANGE(hscale))),
"value_changed", G_CALLBACK (set_speed), speed); "value_changed", G_CALLBACK (set_speed), speed);
pipeline = gst_pipeline_new("app"); pipeline = gst_pipeline_new("app");
gst_bin_add(GST_BIN(pipeline), filesrc); gst_bin_add_many (GST_BIN(pipeline), filesrc, mad, stereo2mono, speed, osssink, NULL);
gst_bin_add(GST_BIN(pipeline), mad); gst_element_connect_many (filesrc, mad, stereo2mono, speed, osssink, NULL);
gst_bin_add(GST_BIN(pipeline), stereo2mono); g_object_set(G_OBJECT(filesrc), "location", argv[1], NULL);
gst_bin_add(GST_BIN(pipeline), speed);
gst_bin_add(GST_BIN(pipeline), osssink);
gst_element_connect(filesrc, mad);
gst_element_connect(mad, stereo2mono);
gst_element_connect(stereo2mono, speed);
gst_element_connect(speed, osssink);
gtk_object_set(GTK_OBJECT(filesrc), "location", argv[1], NULL);
gst_element_set_state(pipeline, GST_STATE_PLAYING); gst_element_set_state(pipeline, GST_STATE_PLAYING);