mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-09-02 10:13:51 +00:00
intermediate commit
Original commit message from CVS: intermediate commit
This commit is contained in:
parent
83bd7c9c73
commit
3c39b171b0
23 changed files with 0 additions and 1747 deletions
9
test/bindings/.gitignore
vendored
9
test/bindings/.gitignore
vendored
|
@ -1,9 +0,0 @@
|
||||||
Makefile
|
|
||||||
Makefile.in
|
|
||||||
*.o
|
|
||||||
*.lo
|
|
||||||
*.la
|
|
||||||
.deps
|
|
||||||
.libs
|
|
||||||
|
|
||||||
test
|
|
|
@ -1,10 +0,0 @@
|
||||||
noinst_LTLIBRARIES = libcrashtest.la
|
|
||||||
|
|
||||||
libcrashtest_la_SOURCES = dummy.c
|
|
||||||
libcrashtest_la_CFLAGS = $(GLIB_CFLAGS) $(XML_CFLAGS) $(GST_CFLAGS)
|
|
||||||
|
|
||||||
noinst_HEADERS = dummy.h
|
|
||||||
|
|
||||||
noinst_PROGRAMS = test
|
|
||||||
test_LDADD = libcrashtest.la $(GLIB_LIBS)
|
|
||||||
test_CFLAGS = $(GLIB_CFLAGS) $(XML_CFLAGS) $(GST_CFLAGS)
|
|
|
@ -1,20 +0,0 @@
|
||||||
#include <dummy.h>
|
|
||||||
|
|
||||||
Dummy *dummy_new() {
|
|
||||||
Dummy *dummy;
|
|
||||||
|
|
||||||
dummy = g_malloc(sizeof(Dummy));
|
|
||||||
|
|
||||||
dummy->flags = 0;
|
|
||||||
dummy->name = NULL;
|
|
||||||
|
|
||||||
return dummy;
|
|
||||||
}
|
|
||||||
|
|
||||||
Dummy *dummy_new_with_name(gchar *name) {
|
|
||||||
Dummy *dummy = dummy_new();
|
|
||||||
|
|
||||||
dummy->name = g_strdup(name);
|
|
||||||
|
|
||||||
return dummy;
|
|
||||||
}
|
|
|
@ -1,19 +0,0 @@
|
||||||
#ifndef __DUMMY_H__
|
|
||||||
#define __DUMMY_H__
|
|
||||||
|
|
||||||
#include <glib.h>
|
|
||||||
|
|
||||||
#define DUMMY(dummy) ((Dummy *)(dummy))
|
|
||||||
|
|
||||||
typedef struct _Dummy Dummy;
|
|
||||||
|
|
||||||
struct _Dummy {
|
|
||||||
gint flags;
|
|
||||||
|
|
||||||
gchar *name;
|
|
||||||
};
|
|
||||||
|
|
||||||
Dummy *dummy_new();
|
|
||||||
Dummy *dummy_new_with_name(gchar *name);
|
|
||||||
|
|
||||||
#endif /* __DUMMY_H__ */
|
|
|
@ -1,11 +0,0 @@
|
||||||
#include <glib.h>
|
|
||||||
#include <dummy.h>
|
|
||||||
|
|
||||||
int main(int argc,char *argv[]) {
|
|
||||||
Dummy *driver,*passenger;
|
|
||||||
|
|
||||||
driver = dummy_new();
|
|
||||||
passenger = dummy_new_with_name("moron");
|
|
||||||
|
|
||||||
g_print("created a couple of dummies, %p and %p\n",driver,passenger);
|
|
||||||
}
|
|
147
test/dvdplay.c
147
test/dvdplay.c
|
@ -1,147 +0,0 @@
|
||||||
#include <gnome.h>
|
|
||||||
#include <gst/gst.h>
|
|
||||||
|
|
||||||
GstPipeline *pipeline;
|
|
||||||
GstElement *v_queue, *a_queue, *v_thread, *a_thread;
|
|
||||||
GtkWidget *appwindow;
|
|
||||||
GtkWidget *gtk_socket;
|
|
||||||
|
|
||||||
void eof(GstElement *src) {
|
|
||||||
g_print("have eos, quitting\n");
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
gboolean idle_func(gpointer data) {
|
|
||||||
gst_bin_iterate(GST_BIN(data));
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
void mpeg2parse_newpad(GstElement *parser,GstPad *pad, GstElement *pipeline) {
|
|
||||||
|
|
||||||
g_print("***** a new pad %s was created\n", gst_pad_get_name(pad));
|
|
||||||
|
|
||||||
if (strncmp(gst_pad_get_name(pad), "video_", 6) == 0) {
|
|
||||||
gst_pad_connect(pad, gst_element_get_pad(v_queue,"sink"));
|
|
||||||
gst_bin_add(GST_BIN(pipeline),v_thread);
|
|
||||||
gst_element_set_state(v_thread,GST_STATE_PLAYING);
|
|
||||||
} else if (strcmp(gst_pad_get_name(pad), "private_stream_1.0") == 0) {
|
|
||||||
gst_pad_connect(pad, gst_element_get_pad(a_queue,"sink"));
|
|
||||||
gst_bin_add(GST_BIN(pipeline),a_thread);
|
|
||||||
gst_element_set_state(a_thread,GST_STATE_PLAYING);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void mpeg2parse_have_size(GstElement *videosink,gint width,gint height) {
|
|
||||||
gtk_widget_set_usize(gtk_socket,width,height);
|
|
||||||
gtk_widget_show_all(appwindow);
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(int argc,char *argv[]) {
|
|
||||||
GstElement *src, *parse;
|
|
||||||
GstElement *v_decode, *show, *color;
|
|
||||||
GstElement *a_decode, *osssink;
|
|
||||||
|
|
||||||
if (argc < 5) {
|
|
||||||
g_print("usage: %s dvdlocation title chapter angle\n", argv[0]);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
gst_init(&argc,&argv);
|
|
||||||
gnome_init("MPEG2 Video player","0.0.1",argc,argv);
|
|
||||||
|
|
||||||
// ***** construct the main pipeline *****
|
|
||||||
pipeline = GST_PIPELINE(gst_pipeline_new("pipeline"));
|
|
||||||
g_return_val_if_fail(pipeline != NULL, -1);
|
|
||||||
|
|
||||||
src = gst_elementfactory_make("dvdsrc","src");
|
|
||||||
g_return_val_if_fail(src != NULL, -1);
|
|
||||||
gtk_object_set(GTK_OBJECT(src),"location",argv[1],NULL);
|
|
||||||
gtk_object_set(GTK_OBJECT(src),"title",atoi(argv[2]),NULL);
|
|
||||||
gtk_object_set(GTK_OBJECT(src),"chapter",atoi(argv[3]),NULL);
|
|
||||||
gtk_object_set(GTK_OBJECT(src),"angle",atoi(argv[4]),NULL);
|
|
||||||
|
|
||||||
parse = gst_elementfactory_make("mpeg2parse","parse");
|
|
||||||
//parse = gst_elementfactory_make("mpeg1parse","parse");
|
|
||||||
g_return_val_if_fail(parse != NULL, -1);
|
|
||||||
|
|
||||||
gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(src));
|
|
||||||
gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(parse));
|
|
||||||
|
|
||||||
gst_element_connect(src,"src",parse,"sink");
|
|
||||||
|
|
||||||
|
|
||||||
// ***** pre-construct the video thread *****
|
|
||||||
v_thread = GST_ELEMENT(gst_thread_new("v_thread"));
|
|
||||||
g_return_val_if_fail(v_thread != NULL, -1);
|
|
||||||
|
|
||||||
v_queue = gst_elementfactory_make("queue","v_queue");
|
|
||||||
g_return_val_if_fail(v_queue != NULL, -1);
|
|
||||||
|
|
||||||
v_decode = gst_elementfactory_make("mpeg2dec","decode_video");
|
|
||||||
g_return_val_if_fail(v_decode != NULL, -1);
|
|
||||||
|
|
||||||
color = gst_elementfactory_make("colorspace","color");
|
|
||||||
g_return_val_if_fail(color != NULL, -1);
|
|
||||||
|
|
||||||
show = gst_elementfactory_make("xvideosink","show");
|
|
||||||
g_return_val_if_fail(show != NULL, -1);
|
|
||||||
|
|
||||||
gst_bin_add(GST_BIN(v_thread),GST_ELEMENT(v_queue));
|
|
||||||
gst_bin_add(GST_BIN(v_thread),GST_ELEMENT(v_decode));
|
|
||||||
gst_bin_add(GST_BIN(v_thread),GST_ELEMENT(color));
|
|
||||||
gst_bin_add(GST_BIN(v_thread),GST_ELEMENT(show));
|
|
||||||
|
|
||||||
gst_element_connect(v_queue,"src",v_decode,"sink");
|
|
||||||
gst_element_connect(v_decode,"src",color,"sink");
|
|
||||||
gst_element_connect(color,"src",show,"sink");
|
|
||||||
|
|
||||||
|
|
||||||
// ***** pre-construct the audio thread *****
|
|
||||||
a_thread = GST_ELEMENT(gst_thread_new("a_thread"));
|
|
||||||
g_return_val_if_fail(a_thread != NULL, -1);
|
|
||||||
|
|
||||||
a_queue = gst_elementfactory_make("queue","a_queue");
|
|
||||||
g_return_val_if_fail(a_queue != NULL, -1);
|
|
||||||
|
|
||||||
a_decode = gst_elementfactory_make("a52dec","decode_audio");
|
|
||||||
g_return_val_if_fail(a_decode != NULL, -1);
|
|
||||||
|
|
||||||
osssink = gst_elementfactory_make("osssink","osssink");
|
|
||||||
g_return_val_if_fail(osssink != NULL, -1);
|
|
||||||
|
|
||||||
gst_bin_add(GST_BIN(a_thread),GST_ELEMENT(a_queue));
|
|
||||||
gst_bin_add(GST_BIN(a_thread),GST_ELEMENT(a_decode));
|
|
||||||
gst_bin_add(GST_BIN(a_thread),GST_ELEMENT(osssink));
|
|
||||||
|
|
||||||
gst_element_connect(a_queue,"src",a_decode,"sink");
|
|
||||||
gst_element_connect(a_decode,"src",osssink,"sink");
|
|
||||||
|
|
||||||
|
|
||||||
// ***** construct the GUI *****
|
|
||||||
appwindow = gnome_app_new("DVD Player","DVD Player");
|
|
||||||
|
|
||||||
gtk_socket = gtk_socket_new ();
|
|
||||||
gtk_widget_show (gtk_socket);
|
|
||||||
|
|
||||||
gnome_app_set_contents(GNOME_APP(appwindow),
|
|
||||||
GTK_WIDGET(gtk_socket));
|
|
||||||
|
|
||||||
gtk_widget_realize (gtk_socket);
|
|
||||||
gtk_socket_steal (GTK_SOCKET (gtk_socket),
|
|
||||||
gst_util_get_int_arg (GTK_OBJECT(show), "xid"));
|
|
||||||
|
|
||||||
gtk_signal_connect(GTK_OBJECT(parse),"new_pad",mpeg2parse_newpad, pipeline);
|
|
||||||
gtk_signal_connect(GTK_OBJECT(src),"eos",GTK_SIGNAL_FUNC(eof),NULL);
|
|
||||||
gtk_signal_connect(GTK_OBJECT(show),"have_size",mpeg2parse_have_size, pipeline);
|
|
||||||
|
|
||||||
g_print("setting to PLAYING state\n");
|
|
||||||
gst_element_set_state(GST_ELEMENT(pipeline),GST_STATE_PLAYING);
|
|
||||||
|
|
||||||
gtk_idle_add(idle_func,pipeline);
|
|
||||||
|
|
||||||
gdk_threads_enter();
|
|
||||||
gtk_main();
|
|
||||||
gdk_threads_leave();
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
101
test/dvshow.c
101
test/dvshow.c
|
@ -1,101 +0,0 @@
|
||||||
#include <gnome.h>
|
|
||||||
#include <gst/gst.h>
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
idle_func (gpointer data)
|
|
||||||
{
|
|
||||||
gst_bin_iterate(GST_BIN(data));
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
main (int argc,char *argv[])
|
|
||||||
{
|
|
||||||
GstElement *bin;
|
|
||||||
GstElement *src;
|
|
||||||
GstElement *dvdec;
|
|
||||||
//GstElement *cspace;
|
|
||||||
GstElement *deint;
|
|
||||||
GstElement *videosink;
|
|
||||||
|
|
||||||
GtkWidget *appwindow;
|
|
||||||
GtkWidget *vbox1;
|
|
||||||
GtkWidget *button;
|
|
||||||
guint32 draw;
|
|
||||||
GtkWidget *gtk_socket;
|
|
||||||
|
|
||||||
|
|
||||||
gst_init(&argc,&argv);
|
|
||||||
|
|
||||||
gnome_init("Videotest","0.0.1",argc,argv);
|
|
||||||
|
|
||||||
bin = gst_pipeline_new("pipeline");
|
|
||||||
|
|
||||||
if (argc == 1) {
|
|
||||||
src = gst_elementfactory_make ("dv1394src", "src");
|
|
||||||
} else {
|
|
||||||
src = gst_elementfactory_make ("filesrc", "src");
|
|
||||||
gtk_object_set(GTK_OBJECT(src),"location",argv[1],"bytesperread",480,NULL);
|
|
||||||
}
|
|
||||||
dvdec = gst_elementfactory_make ("dvdec", "decoder");
|
|
||||||
if (!dvdec) fprintf(stderr,"no dvdec\n"),exit(1);
|
|
||||||
// cspace = gst_elementfactory_make ("colorspace", "cspace");
|
|
||||||
deint = gst_elementfactory_make ("deinterlace", "deinterlace");
|
|
||||||
videosink = gst_elementfactory_make ("xvideosink", "videosink");
|
|
||||||
if (!videosink) fprintf(stderr,"no dvdec\n"),exit(1);
|
|
||||||
gtk_object_set(GTK_OBJECT(videosink),"width",720,"height",576,NULL);
|
|
||||||
|
|
||||||
gst_bin_add(GST_BIN(bin),GST_ELEMENT(src));
|
|
||||||
gst_bin_add(GST_BIN(bin),GST_ELEMENT(dvdec));
|
|
||||||
// gst_bin_add(GST_BIN(bin),GST_ELEMENT(cspace));
|
|
||||||
gst_bin_add(GST_BIN(bin),GST_ELEMENT(videosink));
|
|
||||||
|
|
||||||
gst_element_connect(src,"src",dvdec,"sink");
|
|
||||||
// gst_element_connect(cspace,"src",videosink,"sink");
|
|
||||||
// gst_element_connect(dvdec,"video",cspace,"sink");
|
|
||||||
gst_element_connect(dvdec,"video",deint,"sink");
|
|
||||||
gst_element_connect(deint,"src",videosink,"sink");
|
|
||||||
|
|
||||||
appwindow = gnome_app_new("Videotest","Videotest");
|
|
||||||
|
|
||||||
vbox1 = gtk_vbox_new (FALSE, 0);
|
|
||||||
gtk_widget_show (vbox1);
|
|
||||||
|
|
||||||
button = gtk_button_new_with_label(_("test"));//_with_label (_("chup"));
|
|
||||||
gtk_widget_show (button);
|
|
||||||
gtk_box_pack_start (GTK_BOX (vbox1), button, FALSE, FALSE, 0);
|
|
||||||
|
|
||||||
draw = gst_util_get_int_arg (GTK_OBJECT (videosink), "xid"),
|
|
||||||
|
|
||||||
gtk_socket = gtk_socket_new ();
|
|
||||||
gtk_widget_set_usize(gtk_socket,720,576);
|
|
||||||
gtk_widget_show (gtk_socket);
|
|
||||||
|
|
||||||
gnome_app_set_contents(GNOME_APP(appwindow), vbox1);
|
|
||||||
|
|
||||||
gtk_box_pack_start (GTK_BOX (vbox1),
|
|
||||||
GTK_WIDGET(gtk_socket),
|
|
||||||
TRUE, TRUE, 0);
|
|
||||||
|
|
||||||
gtk_widget_realize (gtk_socket);
|
|
||||||
gtk_socket_steal (GTK_SOCKET (gtk_socket), draw);
|
|
||||||
|
|
||||||
gtk_object_set(GTK_OBJECT(appwindow),"allow_grow",TRUE,NULL);
|
|
||||||
gtk_object_set(GTK_OBJECT(appwindow),"allow_shrink",TRUE,NULL);
|
|
||||||
|
|
||||||
gtk_widget_show_all(appwindow);
|
|
||||||
|
|
||||||
#ifndef GST_DISABLE_LOADSAVE
|
|
||||||
xmlSaveFile("dvshow.xml",gst_xml_write(GST_ELEMENT(bin)));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
gst_element_set_state(GST_ELEMENT(bin),GST_STATE_PLAYING);
|
|
||||||
|
|
||||||
g_idle_add(idle_func,bin);
|
|
||||||
|
|
||||||
gtk_main();
|
|
||||||
|
|
||||||
exit (0);
|
|
||||||
}
|
|
||||||
|
|
104
test/qtest.c
104
test/qtest.c
|
@ -1,104 +0,0 @@
|
||||||
#include <glib.h>
|
|
||||||
#include <gst/gst.h>
|
|
||||||
|
|
||||||
extern gboolean _gst_plugin_spew;
|
|
||||||
|
|
||||||
/* we don't need a lock around the application's state yet, since it's 1
|
|
||||||
bit. as it gets more fleshed in, we'll need a lock so the callbacks
|
|
||||||
don't screw around with state unexpectedly */
|
|
||||||
static gboolean playing = TRUE;
|
|
||||||
|
|
||||||
void eof(GstElement *src) {
|
|
||||||
GST_DEBUG(0,"have EOF\n");
|
|
||||||
playing = FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(int argc,char *argv[]) {
|
|
||||||
GstElement *pipeline;
|
|
||||||
GstElement *decodethread;
|
|
||||||
GstElementFactory *srcfactory;
|
|
||||||
GstElement *src;
|
|
||||||
GstElementFactory *decodefactory;
|
|
||||||
GstElement *decode;
|
|
||||||
GstElementFactory *queuefactory;
|
|
||||||
GstElement *queue;
|
|
||||||
GstElement *playthread;
|
|
||||||
GstElementFactory *sinkfactory;
|
|
||||||
GstElement *sink;
|
|
||||||
|
|
||||||
gst_init(&argc,&argv);
|
|
||||||
|
|
||||||
/* first create the main pipeline */
|
|
||||||
pipeline = GST_ELEMENT(gst_pipeline_new("pipeline"));
|
|
||||||
|
|
||||||
/* then the decode thread, source, and decoder */
|
|
||||||
decodethread = gst_thread_new("decodethread");
|
|
||||||
|
|
||||||
srcfactory = gst_elementfactory_find("filesrc");
|
|
||||||
src = gst_elementfactory_create(srcfactory,"src");
|
|
||||||
g_object_set(G_OBJECT(src),"location",argv[1],NULL);
|
|
||||||
gst_bin_add(GST_BIN(decodethread),GST_ELEMENT(src));
|
|
||||||
|
|
||||||
_gst_plugin_spew = TRUE;
|
|
||||||
|
|
||||||
if (argc > 2)
|
|
||||||
gst_plugin_load(argv[2]);
|
|
||||||
else
|
|
||||||
gst_plugin_load_all();
|
|
||||||
decodefactory = gst_elementfactory_find("mpg123");
|
|
||||||
decode = gst_elementfactory_create(decodefactory,"decode");
|
|
||||||
gst_bin_add(GST_BIN(decodethread),GST_ELEMENT(decode));
|
|
||||||
gst_element_add_ghost_pad(GST_ELEMENT(decodethread),
|
|
||||||
gst_element_get_pad(decode,"src"),"src");
|
|
||||||
|
|
||||||
gst_pad_connect(gst_element_get_pad(src,"src"),
|
|
||||||
gst_element_get_pad(decode,"sink"));
|
|
||||||
|
|
||||||
/* then the play thread and sink */
|
|
||||||
playthread = gst_thread_new("playthread");
|
|
||||||
|
|
||||||
sinkfactory = gst_elementfactory_find("osssink");
|
|
||||||
sink = gst_elementfactory_create(sinkfactory,"sink");
|
|
||||||
gst_bin_add(GST_BIN(playthread),GST_ELEMENT(sink));
|
|
||||||
gst_element_add_ghost_pad(GST_ELEMENT(playthread),
|
|
||||||
gst_element_get_pad(sink,"sink"),"sink");
|
|
||||||
|
|
||||||
/* create the queue */
|
|
||||||
queuefactory = gst_elementfactory_find("queue");
|
|
||||||
queue = gst_elementfactory_create(queuefactory,"queue");
|
|
||||||
|
|
||||||
/* add threads to the main pipeline */
|
|
||||||
gst_bin_add(GST_BIN(pipeline),decodethread);
|
|
||||||
gst_bin_add(GST_BIN(pipeline),queue);
|
|
||||||
gst_bin_add(GST_BIN(pipeline),playthread);
|
|
||||||
|
|
||||||
gst_pad_connect(gst_element_get_pad(decodethread,"src"),
|
|
||||||
// gst_element_get_pad(queue,"sink"));
|
|
||||||
// gst_pad_connect(gst_element_get_pad(queue,"src"),
|
|
||||||
gst_element_get_pad(playthread,"sink"));
|
|
||||||
|
|
||||||
g_signal_connect(G_OBJECT(src),"eof",
|
|
||||||
G_CALLBACK(eof),NULL);
|
|
||||||
|
|
||||||
g_print("\nsetting up the decode thread to *NOT* thread\n");
|
|
||||||
// gtk_object_set(GTK_OBJECT(decodethread),"create_thread",TRUE,NULL);
|
|
||||||
g_object_set(G_OBJECT(playthread),"create_thread",FALSE,NULL);
|
|
||||||
|
|
||||||
g_print("\neverything's built, setting it up to be runnable\n");
|
|
||||||
gst_element_set_state(GST_ELEMENT(pipeline),GST_STATE_READY);
|
|
||||||
|
|
||||||
g_print("\nok, runnable, hitting 'play'...\n");
|
|
||||||
gst_element_set_state(GST_ELEMENT(pipeline),GST_STATE_PLAYING);
|
|
||||||
|
|
||||||
g_print("\niterating on %p and %p\n",decodethread,playthread);
|
|
||||||
while (playing) {
|
|
||||||
gst_bin_iterate(GST_BIN(playthread));
|
|
||||||
/* buffers got wedged in the queue, unstick them */
|
|
||||||
// while (((GstQueue *)queue)->buffers_queued)
|
|
||||||
// gst_connection_push(GST_CONNECTION(queue));
|
|
||||||
// gst_thread_iterate(GST_THREAD(playthread));
|
|
||||||
// g_print("stuffed and unstuck the queue\n");
|
|
||||||
// sleep(1);
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
|
@ -1,40 +0,0 @@
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <glib.h>
|
|
||||||
#include <gst/gst.h>
|
|
||||||
|
|
||||||
int main(int argc,char *argv[]) {
|
|
||||||
int fd;
|
|
||||||
GstElement *pipeline, *osssrc, *fdsink;
|
|
||||||
GstElementFactory *osssrcfactory, *fdsinkfactory;
|
|
||||||
|
|
||||||
gst_init(&argc,&argv);
|
|
||||||
|
|
||||||
pipeline = GST_ELEMENT(gst_pipeline_new("pipeline"));
|
|
||||||
|
|
||||||
osssrcfactory = gst_elementfactory_find("osssrc");
|
|
||||||
osssrc = gst_elementfactory_create(osssrcfactory,"osssrc");
|
|
||||||
|
|
||||||
fd = open(argv[1],O_CREAT|O_RDWR);
|
|
||||||
|
|
||||||
fdsinkfactory = gst_elementfactory_find("fdsink");
|
|
||||||
fdsink = gst_elementfactory_create(fdsinkfactory,"fdsink");
|
|
||||||
g_object_set(G_OBJECT(fdsink),"fd",fd);
|
|
||||||
|
|
||||||
/* add objects to the main pipeline */
|
|
||||||
gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(osssrc));
|
|
||||||
gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(fdsink));
|
|
||||||
|
|
||||||
/* connect src to sink */
|
|
||||||
gst_pad_connect(gst_element_get_pad(osssrc,"src"),
|
|
||||||
gst_element_get_pad(fdsink,"sink"));
|
|
||||||
|
|
||||||
g_print("\nok, runnable, hitting 'play'...\n");
|
|
||||||
gst_element_set_state(GST_ELEMENT(pipeline),GST_STATE_PLAYING);
|
|
||||||
|
|
||||||
while(1) {
|
|
||||||
gst_bin_iterate(GST_BIN(pipeline));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,153 +0,0 @@
|
||||||
#include <stdio.h>
|
|
||||||
#include <math.h>
|
|
||||||
#include <gtk/gtk.h>
|
|
||||||
#include <gst/gst.h>
|
|
||||||
#include <gst/control/control.h>
|
|
||||||
|
|
||||||
static gint quit_live(GtkWidget *window, GdkEventAny *e, gpointer data) {
|
|
||||||
gtk_main_quit();
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void dynparm_log_value_changed(GtkAdjustment *adj,GstDParam *dparam) {
|
|
||||||
GValue **point;
|
|
||||||
g_return_if_fail(dparam != NULL);
|
|
||||||
g_return_if_fail(GST_IS_DPARAM (dparam));
|
|
||||||
|
|
||||||
point = GST_DPARAM_GET_POINT(dparam, 0LL);
|
|
||||||
|
|
||||||
GST_DPARAM_LOCK(dparam);
|
|
||||||
g_print("setting value from %f to %f\n", g_value_get_float(point[0]), (gfloat)exp(adj->value));
|
|
||||||
g_value_set_float(point[0], (gfloat)exp(adj->value));
|
|
||||||
GST_DPARAM_READY_FOR_UPDATE(dparam) = TRUE;
|
|
||||||
GST_DPARAM_UNLOCK(dparam);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void dynparm_value_changed(GtkAdjustment *adj,GstDParam *dparam) {
|
|
||||||
GValue **point;
|
|
||||||
g_return_if_fail(dparam != NULL);
|
|
||||||
g_return_if_fail(GST_IS_DPARAM (dparam));
|
|
||||||
|
|
||||||
point = GST_DPARAM_GET_POINT(dparam, 0LL);
|
|
||||||
|
|
||||||
GST_DPARAM_LOCK(dparam);
|
|
||||||
g_print("setting value from %f to %f\n", g_value_get_float(point[0]), adj->value);
|
|
||||||
g_value_set_float(point[0], adj->value);
|
|
||||||
GST_DPARAM_READY_FOR_UPDATE(dparam) = TRUE;
|
|
||||||
GST_DPARAM_UNLOCK(dparam);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int main(int argc,char *argv[]) {
|
|
||||||
GtkWidget *window;
|
|
||||||
GtkWidget *hbox;
|
|
||||||
GtkAdjustment *volume_adj;
|
|
||||||
GtkAdjustment *freq_adj;
|
|
||||||
GtkWidget *volume_slider;
|
|
||||||
GtkWidget *freq_slider;
|
|
||||||
|
|
||||||
GstElement *thread, *sinesrc, *osssink;
|
|
||||||
GstDParamManager *dpman;
|
|
||||||
GstDParam *volume;
|
|
||||||
GstDParam *freq;
|
|
||||||
GstDParamSpec *spec;
|
|
||||||
|
|
||||||
GValue **vals;
|
|
||||||
|
|
||||||
gtk_init(&argc,&argv);
|
|
||||||
gst_init(&argc,&argv);
|
|
||||||
gst_control_init(&argc,&argv);
|
|
||||||
|
|
||||||
/***** construct the pipeline *****/
|
|
||||||
|
|
||||||
g_print("creating elements\n");
|
|
||||||
thread = gst_thread_new("live-example");
|
|
||||||
sinesrc = gst_elementfactory_make("sinesrc","sine-source");
|
|
||||||
osssink = gst_elementfactory_make("osssink","sound-sink");
|
|
||||||
gst_bin_add(GST_BIN(thread),sinesrc);
|
|
||||||
gst_bin_add(GST_BIN(thread),osssink);
|
|
||||||
gst_element_connect(sinesrc,"src",osssink,"sink");
|
|
||||||
g_object_set(G_OBJECT(osssink),"fragment",0x00180008,NULL);
|
|
||||||
g_object_set(G_OBJECT(sinesrc),"buffersize",64,NULL);
|
|
||||||
|
|
||||||
dpman = gst_dpman_get_manager (sinesrc);
|
|
||||||
|
|
||||||
freq = gst_dparam_smooth_new(G_TYPE_FLOAT);
|
|
||||||
vals = GST_DPARAM_GET_POINT(freq, 0LL);
|
|
||||||
|
|
||||||
g_value_set_float(vals[0], 10.0);
|
|
||||||
|
|
||||||
// this defines the maximum slope that this
|
|
||||||
// param can change. This says that in 50ms
|
|
||||||
// the value can change by a maximum of one semitone
|
|
||||||
// (the log of one semitone is 0.693)
|
|
||||||
g_value_set_float(vals[1], 0.693);
|
|
||||||
g_value_set_float(vals[2], 50000000.0);
|
|
||||||
|
|
||||||
// set the default update period to 0.5ms, or 2000Hz
|
|
||||||
GST_DPARAM_DEFAULT_UPDATE_PERIOD(freq) = 2000000LL;
|
|
||||||
|
|
||||||
volume = gst_dparam_smooth_new(G_TYPE_FLOAT);
|
|
||||||
vals = GST_DPARAM_GET_POINT(volume, 0LL);
|
|
||||||
|
|
||||||
// this defines the maximum slope that this
|
|
||||||
// param can change. This says that in 10ms
|
|
||||||
// the value can change by a maximum of 0.2
|
|
||||||
g_value_set_float(vals[1], 0.2);
|
|
||||||
g_value_set_float(vals[2], 10000000.0);
|
|
||||||
|
|
||||||
// set the default update period to 0.5ms, or 2000Hz
|
|
||||||
GST_DPARAM_DEFAULT_UPDATE_PERIOD(volume) = 2000000LL;
|
|
||||||
|
|
||||||
g_assert(gst_dpman_attach_dparam (dpman, "volume", volume));
|
|
||||||
g_assert(gst_dpman_attach_dparam (dpman, "freq", freq));
|
|
||||||
|
|
||||||
gst_dpman_set_mode(dpman, "synchronous");
|
|
||||||
|
|
||||||
/***** set up the GUI *****/
|
|
||||||
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
|
||||||
gtk_window_set_default_size(GTK_WINDOW(window), 80, 400);
|
|
||||||
g_signal_connect(window,"delete_event",GTK_SIGNAL_FUNC(quit_live),NULL);
|
|
||||||
hbox = gtk_hbox_new(TRUE,0);
|
|
||||||
gtk_container_add(GTK_CONTAINER(window),hbox);
|
|
||||||
|
|
||||||
spec = gst_dpman_get_dparam_spec (dpman, "volume");
|
|
||||||
volume_adj = (GtkAdjustment*)gtk_adjustment_new(g_value_get_float(spec->default_val),
|
|
||||||
g_value_get_float(spec->min_val),
|
|
||||||
g_value_get_float(spec->max_val), 0.1, 0.01, 0.01);
|
|
||||||
volume_slider = gtk_vscale_new(volume_adj);
|
|
||||||
gtk_scale_set_digits(GTK_SCALE(volume_slider), 2);
|
|
||||||
gtk_box_pack_start(GTK_BOX(hbox),volume_slider,TRUE,TRUE,0);
|
|
||||||
|
|
||||||
spec = gst_dpman_get_dparam_spec (dpman, "freq");
|
|
||||||
freq_adj = (GtkAdjustment*)gtk_adjustment_new((gfloat)log(g_value_get_float(spec->default_val)),
|
|
||||||
(gfloat)log(g_value_get_float(spec->min_val)),
|
|
||||||
(gfloat)log(g_value_get_float(spec->max_val)), 0.1, 0.01, 0.01);
|
|
||||||
freq_slider = gtk_vscale_new(freq_adj);
|
|
||||||
gtk_scale_set_digits(GTK_SCALE(freq_slider), 2);
|
|
||||||
gtk_box_pack_start(GTK_BOX(hbox),freq_slider,TRUE,TRUE,0);
|
|
||||||
|
|
||||||
|
|
||||||
/***** set up the handlers and such *****/
|
|
||||||
//gtk_signal_connect(volume_adj,"value-changed",GTK_SIGNAL_FUNC(volume_changed),sinesrc);
|
|
||||||
g_signal_connect(volume_adj,"value-changed",
|
|
||||||
GTK_SIGNAL_FUNC(dynparm_value_changed),
|
|
||||||
volume);
|
|
||||||
|
|
||||||
g_signal_connect(freq_adj,"value-changed",
|
|
||||||
GTK_SIGNAL_FUNC(dynparm_log_value_changed),
|
|
||||||
freq);
|
|
||||||
gtk_adjustment_value_changed(volume_adj);
|
|
||||||
gtk_adjustment_value_changed(freq_adj);
|
|
||||||
|
|
||||||
g_print("starting pipeline\n");
|
|
||||||
|
|
||||||
/***** start everything up *****/
|
|
||||||
gst_element_set_state(thread,GST_STATE_PLAYING);
|
|
||||||
|
|
||||||
|
|
||||||
gtk_widget_show_all(window);
|
|
||||||
gtk_main();
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
|
@ -1,82 +0,0 @@
|
||||||
#include <gnome.h>
|
|
||||||
#include <gst/gst.h>
|
|
||||||
|
|
||||||
extern gboolean _gst_plugin_spew;
|
|
||||||
|
|
||||||
void spectrum_chain(GstPad *pad,GstBuffer *buf);
|
|
||||||
gboolean idle_func(gpointer data);
|
|
||||||
|
|
||||||
GtkWidget *drawingarea;
|
|
||||||
|
|
||||||
int main(int argc,char *argv[]) {
|
|
||||||
GstElement *bin;
|
|
||||||
GstElementFactory *srcfactory;
|
|
||||||
GstElement *src;
|
|
||||||
GstElementFactory *spectrumfactory;
|
|
||||||
GstElement *spectrum;
|
|
||||||
GstPad *spectrumpad;
|
|
||||||
|
|
||||||
GtkWidget *appwindow;
|
|
||||||
|
|
||||||
_gst_plugin_spew = TRUE;
|
|
||||||
|
|
||||||
gst_init(&argc,&argv);
|
|
||||||
gst_plugin_load("libgstspectrum.so");
|
|
||||||
gnome_init("Spectrum","0.0.1",argc,argv);
|
|
||||||
|
|
||||||
bin = gst_bin_new("bin");
|
|
||||||
|
|
||||||
srcfactory = gst_elementfactory_find("osssrc");
|
|
||||||
spectrumfactory = gst_elementfactory_find("gstspectrum");
|
|
||||||
|
|
||||||
src = gst_elementfactory_create(srcfactory,"src");
|
|
||||||
gtk_object_set(GTK_OBJECT(src),"bytes_per_read",(gulong)1024,NULL);
|
|
||||||
spectrum = gst_elementfactory_create(spectrumfactory,"spectrum");
|
|
||||||
gtk_object_set(GTK_OBJECT(spectrum),"width",256,NULL);
|
|
||||||
|
|
||||||
|
|
||||||
gst_bin_add(GST_BIN(bin),GST_ELEMENT(src));
|
|
||||||
gst_bin_add(GST_BIN(bin),GST_ELEMENT(spectrum));
|
|
||||||
|
|
||||||
gst_pad_connect(gst_element_get_pad(src,"src"),
|
|
||||||
gst_element_get_pad(spectrum,"sink"));
|
|
||||||
|
|
||||||
spectrumpad = gst_pad_new("sink",GST_PAD_SINK);
|
|
||||||
gst_pad_set_chain_function(spectrumpad,spectrum_chain);
|
|
||||||
|
|
||||||
gst_pad_connect(gst_element_get_pad(spectrum,"src"),spectrumpad);
|
|
||||||
|
|
||||||
appwindow = gnome_app_new("spectrum","Spectrum");
|
|
||||||
drawingarea = gtk_drawing_area_new();
|
|
||||||
gtk_drawing_area_size(GTK_DRAWING_AREA(drawingarea),256,32);
|
|
||||||
gnome_app_set_contents(GNOME_APP(appwindow),drawingarea);
|
|
||||||
gtk_widget_show_all(appwindow);
|
|
||||||
|
|
||||||
gst_element_set_state(GST_ELEMENT(bin),GST_STATE_READY);
|
|
||||||
gst_element_set_state(GST_ELEMENT(bin),GST_STATE_PLAYING);
|
|
||||||
|
|
||||||
g_idle_add(idle_func,src);
|
|
||||||
|
|
||||||
gtk_main();
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void spectrum_chain(GstPad *pad,GstBuffer *buf) {
|
|
||||||
gint i;
|
|
||||||
guchar *data = buf->data;
|
|
||||||
|
|
||||||
gdk_draw_rectangle(drawingarea->window,drawingarea->style->black_gc,
|
|
||||||
TRUE,0,0,GST_BUFFER_SIZE(buf),25);
|
|
||||||
for (i=0;i<GST_BUFFER_SIZE(buf);i++) {
|
|
||||||
gdk_draw_rectangle(drawingarea->window,drawingarea->style->white_gc,
|
|
||||||
TRUE,i,32-data[i],1,data[i]);
|
|
||||||
}
|
|
||||||
gst_buffer_unref(buf);
|
|
||||||
}
|
|
||||||
|
|
||||||
gboolean idle_func(gpointer data) {
|
|
||||||
//gst_src_push(GST_SRC(data));
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
|
@ -1,72 +0,0 @@
|
||||||
#include <gst/gst.h>
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include "mem.h"
|
|
||||||
|
|
||||||
extern gboolean _gst_plugin_spew;
|
|
||||||
|
|
||||||
GstPipeline *teardown_create_pipeline() {
|
|
||||||
GstPipeline *pipeline;
|
|
||||||
GstElementFactory *srcfactory, *sinkfactory;
|
|
||||||
GstElement *src, *sink;
|
|
||||||
GstPad *srcpad, *sinkpad;
|
|
||||||
|
|
||||||
pipeline = GST_PIPELINE (gst_pipeline_new("pipeline"));
|
|
||||||
g_return_val_if_fail(pipeline != NULL, NULL);
|
|
||||||
|
|
||||||
srcfactory = gst_elementfactory_find("fakesrc");
|
|
||||||
g_return_val_if_fail(srcfactory != NULL, NULL);
|
|
||||||
sinkfactory = gst_elementfactory_find("fakesink");
|
|
||||||
g_return_val_if_fail(sinkfactory != NULL, NULL);
|
|
||||||
src = gst_elementfactory_create(srcfactory,"src");
|
|
||||||
g_return_val_if_fail(src != NULL, NULL);
|
|
||||||
sink = gst_elementfactory_create(sinkfactory,"sink");
|
|
||||||
g_return_val_if_fail(sink != NULL, NULL);
|
|
||||||
|
|
||||||
gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(src));
|
|
||||||
gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(sink));
|
|
||||||
|
|
||||||
srcpad = gst_element_get_pad(src,"src");
|
|
||||||
g_return_val_if_fail(srcpad != NULL, NULL);
|
|
||||||
sinkpad = gst_element_get_pad(sink,"sink");
|
|
||||||
g_return_val_if_fail(srcpad != NULL, NULL);
|
|
||||||
|
|
||||||
gst_pad_connect(srcpad,sinkpad);
|
|
||||||
|
|
||||||
return GST_PIPELINE(pipeline);
|
|
||||||
}
|
|
||||||
|
|
||||||
void teardown_destroy_pipeline(GstPipeline *pipeline) {
|
|
||||||
gst_element_destroy(pipeline);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int main(int argc,char *argv[]) {
|
|
||||||
GstElement *pipeline, *src;
|
|
||||||
int i,max = 1;
|
|
||||||
long usage1,usage2;
|
|
||||||
|
|
||||||
// _gst_plugin_spew = TRUE;
|
|
||||||
|
|
||||||
gst_init(&argc,&argv);
|
|
||||||
|
|
||||||
if (argc == 2)
|
|
||||||
max = atoi(argv[1]);
|
|
||||||
|
|
||||||
usage1 = vmsize();
|
|
||||||
for (i=0;i<max;i++) {
|
|
||||||
pipeline = GST_ELEMENT (teardown_create_pipeline());
|
|
||||||
src = gst_bin_get_by_name(GST_BIN(pipeline),"src");
|
|
||||||
// g_print("got source %p, pushing",src);
|
|
||||||
// for (j=0;j<max;j++) {
|
|
||||||
// gst_src_push(GST_SRC(src));
|
|
||||||
// g_print(".");
|
|
||||||
// }
|
|
||||||
// g_print("\n");
|
|
||||||
teardown_destroy_pipeline(GST_PIPELINE (pipeline));
|
|
||||||
}
|
|
||||||
usage2 = vmsize();
|
|
||||||
g_print("uses %ld bytes\n",usage2-usage1);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
|
@ -1,86 +0,0 @@
|
||||||
#include <gtk/gtk.h>
|
|
||||||
#include <gst/gst.h>
|
|
||||||
|
|
||||||
void play (GtkButton *button, gpointer data)
|
|
||||||
{
|
|
||||||
gtk_signal_emit_by_name(GTK_OBJECT(data), "play");
|
|
||||||
}
|
|
||||||
|
|
||||||
void reset (GtkButton *button, gpointer data)
|
|
||||||
{
|
|
||||||
gtk_signal_emit_by_name(GTK_OBJECT(data), "reset");
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
|
||||||
{
|
|
||||||
guint channels;
|
|
||||||
GtkWidget *window, *vbox, *play_button, *reset_button, *quit_button;
|
|
||||||
GstElement *filesrc, *mad, *stereo2mono, *pod, *osssink, *pipeline;
|
|
||||||
|
|
||||||
gst_init (&argc, &argv);
|
|
||||||
gtk_init (&argc, &argv);
|
|
||||||
|
|
||||||
if (argc!=2) {
|
|
||||||
g_print("usage: %s <mp3-filename>\n", argv[0]);
|
|
||||||
exit(-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
filesrc = gst_elementfactory_make("filesrc", "filesrc");
|
|
||||||
mad = gst_elementfactory_make("mad", "mad");
|
|
||||||
pod = gst_elementfactory_make("playondemand", "playondemand");
|
|
||||||
osssink = gst_elementfactory_make("osssink", "osssink");
|
|
||||||
|
|
||||||
gtk_object_set(GTK_OBJECT(filesrc), "location", argv[1], NULL);
|
|
||||||
gtk_object_set(GTK_OBJECT(osssink), "fragment", 0x00180008, NULL);
|
|
||||||
gtk_object_get(GTK_OBJECT(osssink), "channels", &channels, NULL);
|
|
||||||
|
|
||||||
pipeline = gst_pipeline_new("app");
|
|
||||||
|
|
||||||
gst_bin_add(GST_BIN(pipeline), filesrc);
|
|
||||||
gst_bin_add(GST_BIN(pipeline), mad);
|
|
||||||
gst_bin_add(GST_BIN(pipeline), pod);
|
|
||||||
gst_bin_add(GST_BIN(pipeline), osssink);
|
|
||||||
|
|
||||||
gst_element_connect(filesrc, "src", mad, "sink");
|
|
||||||
gst_element_connect(pod, "src", osssink, "sink");
|
|
||||||
|
|
||||||
if (channels != 2) {
|
|
||||||
gst_element_connect(mad, "src", pod, "sink");
|
|
||||||
} else {
|
|
||||||
stereo2mono = gst_elementfactory_make("stereo2mono", "stereo2mono");
|
|
||||||
gst_bin_add(GST_BIN(pipeline), stereo2mono);
|
|
||||||
gst_element_connect(mad, "src", stereo2mono, "sink");
|
|
||||||
gst_element_connect(stereo2mono, "src", pod, "sink");
|
|
||||||
}
|
|
||||||
|
|
||||||
gst_element_set_state(pipeline, GST_STATE_PLAYING);
|
|
||||||
|
|
||||||
/* initialize gui elements ... */
|
|
||||||
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
|
||||||
vbox = gtk_vbox_new(FALSE, 0);
|
|
||||||
play_button = gtk_button_new_with_label("play");
|
|
||||||
reset_button = gtk_button_new_with_label("reset");
|
|
||||||
quit_button = gtk_button_new_with_label("quit");
|
|
||||||
|
|
||||||
/* do the packing stuff ... */
|
|
||||||
gtk_window_set_default_size(GTK_WINDOW(window), 96, 96);
|
|
||||||
gtk_container_add(GTK_CONTAINER(window), vbox);
|
|
||||||
gtk_box_pack_start(GTK_BOX(vbox), play_button, FALSE, FALSE, 2);
|
|
||||||
gtk_box_pack_start(GTK_BOX(vbox), reset_button, FALSE, FALSE, 2);
|
|
||||||
gtk_box_pack_start(GTK_BOX(vbox), quit_button, FALSE, FALSE, 2);
|
|
||||||
|
|
||||||
/* connect things ... */
|
|
||||||
gtk_signal_connect(GTK_OBJECT(play_button), "clicked", play, pod);
|
|
||||||
gtk_signal_connect(GTK_OBJECT(reset_button), "clicked", reset, pod);
|
|
||||||
gtk_signal_connect(GTK_OBJECT(quit_button), "clicked", gtk_main_quit, NULL);
|
|
||||||
|
|
||||||
/* show the gui. */
|
|
||||||
gtk_widget_show(play_button);
|
|
||||||
gtk_widget_show(reset_button);
|
|
||||||
gtk_widget_show(quit_button);
|
|
||||||
gtk_widget_show(vbox);
|
|
||||||
gtk_widget_show(window);
|
|
||||||
gtk_idle_add((GtkFunction)gst_bin_iterate, pipeline);
|
|
||||||
|
|
||||||
gtk_main();
|
|
||||||
}
|
|
|
@ -1,67 +0,0 @@
|
||||||
#include <gtk/gtk.h>
|
|
||||||
#include <gst/gst.h>
|
|
||||||
|
|
||||||
void set_speed (GtkAdjustment *adj, gpointer data)
|
|
||||||
{
|
|
||||||
GstElement *speed = GST_ELEMENT(data);
|
|
||||||
gtk_object_set(GTK_OBJECT(speed), "speed", adj->value, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
|
||||||
{
|
|
||||||
GtkWidget *window, *vbox, *hscale, *button;
|
|
||||||
GstElement *filesrc, *mad, *stereo2mono, *speed, *osssink, *pipeline;
|
|
||||||
|
|
||||||
gst_init (&argc, &argv);
|
|
||||||
gtk_init (&argc, &argv);
|
|
||||||
|
|
||||||
if (argc!=2) {
|
|
||||||
g_print("usage: %s <your.mp3>\n", argv[0]);
|
|
||||||
exit(-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
|
||||||
gtk_window_set_default_size(GTK_WINDOW(window), 400, 80);
|
|
||||||
vbox = gtk_vbox_new(FALSE, 0);
|
|
||||||
gtk_widget_show(vbox);
|
|
||||||
hscale = gtk_hscale_new(GTK_ADJUSTMENT(gtk_adjustment_new(1.0, 0.01, 4.0,
|
|
||||||
0.1, 0.0, 0.0)));
|
|
||||||
gtk_scale_set_digits(GTK_SCALE(hscale), 2);
|
|
||||||
gtk_range_set_update_policy(GTK_RANGE(hscale), GTK_UPDATE_CONTINUOUS);
|
|
||||||
button = gtk_button_new_with_label("quit");
|
|
||||||
gtk_container_add(GTK_CONTAINER(window), vbox);
|
|
||||||
gtk_box_pack_start(GTK_BOX(vbox), hscale, TRUE, TRUE, 2);
|
|
||||||
gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 2);
|
|
||||||
gtk_widget_show(hscale);
|
|
||||||
gtk_signal_connect(GTK_OBJECT(button), "clicked", gtk_main_quit, NULL);
|
|
||||||
gtk_widget_show(button);
|
|
||||||
|
|
||||||
filesrc = gst_elementfactory_make("filesrc", "filesrc");
|
|
||||||
mad = gst_elementfactory_make("mad", "mad");
|
|
||||||
stereo2mono = gst_elementfactory_make("stereo2mono", "stereo2mono");
|
|
||||||
speed = gst_elementfactory_make("speed", "speed");
|
|
||||||
osssink = gst_elementfactory_make("osssink", "osssink");
|
|
||||||
gtk_object_set(GTK_OBJECT(osssink), "fragment", 0x00180008, NULL);
|
|
||||||
|
|
||||||
gtk_signal_connect(GTK_OBJECT(gtk_range_get_adjustment(GTK_RANGE(hscale))),
|
|
||||||
"value_changed", set_speed, speed);
|
|
||||||
|
|
||||||
pipeline = gst_pipeline_new("app");
|
|
||||||
gst_bin_add(GST_BIN(pipeline), filesrc);
|
|
||||||
gst_bin_add(GST_BIN(pipeline), mad);
|
|
||||||
gst_bin_add(GST_BIN(pipeline), stereo2mono);
|
|
||||||
gst_bin_add(GST_BIN(pipeline), speed);
|
|
||||||
gst_bin_add(GST_BIN(pipeline), osssink);
|
|
||||||
gst_element_connect(filesrc, "src", mad, "sink");
|
|
||||||
gst_element_connect(mad, "src", stereo2mono, "sink");
|
|
||||||
gst_element_connect(stereo2mono, "src", speed, "sink");
|
|
||||||
gst_element_connect(speed, "src", osssink, "sink");
|
|
||||||
gtk_object_set(GTK_OBJECT(filesrc), "location", argv[1], NULL);
|
|
||||||
|
|
||||||
gst_element_set_state(pipeline, GST_STATE_PLAYING);
|
|
||||||
|
|
||||||
gtk_widget_show(window);
|
|
||||||
gtk_idle_add((GtkFunction)gst_bin_iterate, pipeline);
|
|
||||||
|
|
||||||
gtk_main();
|
|
||||||
}
|
|
|
@ -1,63 +0,0 @@
|
||||||
#include <gst/gst.h>
|
|
||||||
|
|
||||||
int main(int argc,char *argv[]) {
|
|
||||||
GstType *mp3type;
|
|
||||||
GList *factories;
|
|
||||||
GstElement *src;
|
|
||||||
GList *padlist;
|
|
||||||
|
|
||||||
gst_init(&argc,&argv);
|
|
||||||
gst_plugin_load_all();
|
|
||||||
|
|
||||||
bin = gst_bin_new("bin");
|
|
||||||
|
|
||||||
filesrc = gst_filesrc_new("filesrc");
|
|
||||||
g_print("created filesrc\n");
|
|
||||||
if (argc == 2)
|
|
||||||
gst_filesrc_set_filename(filesrc,argv[1]);
|
|
||||||
else
|
|
||||||
gst_filesrc_set_filename(filesrc,"Thank_you_very_much.au");
|
|
||||||
g_print("loaded file '%s'\n",gst_filesrc_get_filename(filesrc));
|
|
||||||
|
|
||||||
|
|
||||||
/* now it's time to get the parser */
|
|
||||||
autype = gst_type_get_by_mime("audio/au");
|
|
||||||
factories = gst_type_get_sinks(autype);
|
|
||||||
if (factories != NULL)
|
|
||||||
parsefactory = GST_ELEMENTFACTORY(factories->data);
|
|
||||||
else {
|
|
||||||
g_print("sorry, can't find anyone registered to sink 'au'\n");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
parse = gst_elementfactory_create(parsefactory,"parser");
|
|
||||||
if (parse == NULL) {
|
|
||||||
g_print("sorry, couldn't create parser\n");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
osssink = gst_osssink_new("osssink");
|
|
||||||
|
|
||||||
gtk_signal_connect(GTK_OBJECT(filesrc),"eof",
|
|
||||||
GTK_SIGNAL_FUNC(eof),NULL);
|
|
||||||
|
|
||||||
/* add objects to the main pipeline */
|
|
||||||
gst_bin_add(GST_BIN(bin),GST_OBJECT(filesrc));
|
|
||||||
gst_bin_add(GST_BIN(bin),GST_OBJECT(parse));
|
|
||||||
gst_bin_add(GST_BIN(bin),GST_OBJECT(osssink));
|
|
||||||
|
|
||||||
/* connect src to sink */
|
|
||||||
gst_pad_connect(gst_element_get_pad(filesrc,"src"),
|
|
||||||
gst_element_get_pad(parse,"sink"));
|
|
||||||
gst_pad_connect(gst_element_get_pad(parse,"src"),
|
|
||||||
gst_element_get_pad(osssink,"sink"));
|
|
||||||
|
|
||||||
while(1)
|
|
||||||
gst_filesrc_push(GST_SRC(filesrc));
|
|
||||||
|
|
||||||
gst_object_destroy(GST_OBJECT(osssink));
|
|
||||||
gst_object_destroy(GST_OBJECT(parse));
|
|
||||||
gst_object_destroy(GST_OBJECT(filesrc));
|
|
||||||
gst_object_destroy(GST_OBJECT(bin));
|
|
||||||
}
|
|
||||||
|
|
44
test/types.c
44
test/types.c
|
@ -1,44 +0,0 @@
|
||||||
#include <glib.h>
|
|
||||||
#include <gst/gst.h>
|
|
||||||
|
|
||||||
extern gboolean _gst_plugin_spew;
|
|
||||||
|
|
||||||
GstTypeFactory testfactory = { "test/test", ".tst", NULL };
|
|
||||||
|
|
||||||
int main(int argc,char *argv[]) {
|
|
||||||
guint16 id;
|
|
||||||
GstType *type;
|
|
||||||
GstElementFactory *element;
|
|
||||||
GList *types, *elements;
|
|
||||||
|
|
||||||
// _gst_plugin_spew = TRUE;
|
|
||||||
|
|
||||||
gst_init(&argc,&argv);
|
|
||||||
// gst_plugin_load_all();
|
|
||||||
gst_plugin_load("libgstparseau.so");
|
|
||||||
gst_plugin_load("libgstparsewav.so");
|
|
||||||
gst_plugin_load("libgstxa.so");
|
|
||||||
gst_plugin_load("libstereo.so");
|
|
||||||
gst_plugin_load("libvolume.so");
|
|
||||||
gst_plugin_load("libsmoothwave.so");
|
|
||||||
gst_plugin_load("libgstspectrum.so");
|
|
||||||
gst_plugin_load("libsynaesthesia.so");
|
|
||||||
gst_plugin_load("libvumeter.so");
|
|
||||||
|
|
||||||
id = gst_type_register(&testfactory);
|
|
||||||
|
|
||||||
types = gst_type_get_list();
|
|
||||||
while (types) {
|
|
||||||
type = (GstType *)types->data;
|
|
||||||
g_print("%d: have type '%s'\n",type->id,type->mime);
|
|
||||||
types = g_list_next(types);
|
|
||||||
}
|
|
||||||
|
|
||||||
elements = gst_elementfactory_get_list();
|
|
||||||
while (elements) {
|
|
||||||
element = (GstElementFactory *)elements->data;
|
|
||||||
g_print("%d: have elementfactory '%s': \"%s\"\n",element->type,
|
|
||||||
element->name,element->details->longname);
|
|
||||||
elements = g_list_next(elements);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,80 +0,0 @@
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <glib.h>
|
|
||||||
#include <gst/gst.h>
|
|
||||||
|
|
||||||
int main(int argc,char *argv[]) {
|
|
||||||
int fd;
|
|
||||||
GstPipeline *pipeline;
|
|
||||||
GstElement *osssrc, *videosrc, *fdsink, *encoder, *compress, *video_queue, *video_thread;
|
|
||||||
GstElementFactory *osssrcfactory, *fdsinkfactory, *encoderfactory, *compressfactory;
|
|
||||||
GstElementFactory *videosrcfactory;
|
|
||||||
|
|
||||||
gst_init(&argc,&argv);
|
|
||||||
|
|
||||||
gst_plugin_load("v4lsrc");
|
|
||||||
gst_plugin_load("aviencoder");
|
|
||||||
gst_plugin_load("jpeg");
|
|
||||||
|
|
||||||
pipeline = GST_PIPELINE (gst_pipeline_new("pipeline"));
|
|
||||||
|
|
||||||
osssrcfactory = gst_elementfactory_find("osssrc");
|
|
||||||
osssrc = gst_elementfactory_create(osssrcfactory,"osssrc");
|
|
||||||
|
|
||||||
videosrcfactory = gst_elementfactory_find("v4lsrc");
|
|
||||||
videosrc = gst_elementfactory_create(videosrcfactory,"videosrc");
|
|
||||||
compressfactory = gst_elementfactory_find("jpegenc");
|
|
||||||
compress = gst_elementfactory_create(compressfactory,"jpegenc");
|
|
||||||
encoderfactory = gst_elementfactory_find("aviencoder");
|
|
||||||
encoder = gst_elementfactory_create(encoderfactory,"aviencoder");
|
|
||||||
g_object_set(G_OBJECT(videosrc),"width",320,"height",240,NULL);
|
|
||||||
g_object_set(G_OBJECT(videosrc),"format",9,NULL);
|
|
||||||
|
|
||||||
g_object_set(G_OBJECT(encoder),"video","00:I420",NULL);
|
|
||||||
|
|
||||||
fd = open(argv[1],O_CREAT|O_RDWR|O_TRUNC);
|
|
||||||
|
|
||||||
fdsinkfactory = gst_elementfactory_find("fdsink");
|
|
||||||
fdsink = gst_elementfactory_create(fdsinkfactory,"fdsink");
|
|
||||||
g_object_set(G_OBJECT(fdsink),"fd",fd,NULL);
|
|
||||||
|
|
||||||
gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(videosrc));
|
|
||||||
|
|
||||||
/* add objects to the main pipeline */
|
|
||||||
video_thread = gst_thread_new("video_thread");
|
|
||||||
g_return_val_if_fail(video_thread != NULL, -1);
|
|
||||||
gst_bin_add(GST_BIN(video_thread),GST_ELEMENT(compress));
|
|
||||||
gst_bin_add(GST_BIN(video_thread),GST_ELEMENT(encoder));
|
|
||||||
gst_bin_add(GST_BIN(video_thread),GST_ELEMENT(fdsink));
|
|
||||||
|
|
||||||
|
|
||||||
/* connect src to sink */
|
|
||||||
gst_element_add_ghost_pad(GST_ELEMENT(video_thread),
|
|
||||||
// gst_element_get_pad(compress,"sink"));
|
|
||||||
//gst_pad_connect(gst_element_get_pad(compress,"src"),
|
|
||||||
gst_element_get_pad(encoder,"video_00"),"video_00");
|
|
||||||
gst_pad_connect(gst_element_get_pad(encoder,"src"),
|
|
||||||
gst_element_get_pad(fdsink,"sink"));
|
|
||||||
|
|
||||||
|
|
||||||
// construct queue and connect everything in the main pipeline
|
|
||||||
video_queue = gst_elementfactory_make("queue","video_queue");
|
|
||||||
g_object_set(G_OBJECT(video_queue),"max_level",30,NULL);
|
|
||||||
gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(video_queue));
|
|
||||||
gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(video_thread));
|
|
||||||
gst_pad_connect(gst_element_get_pad(videosrc, "src"),
|
|
||||||
gst_element_get_pad(video_queue,"sink"));
|
|
||||||
gst_pad_connect(gst_element_get_pad(video_queue,"src"),
|
|
||||||
gst_element_get_pad(video_thread,"video_00"));
|
|
||||||
|
|
||||||
g_object_set(G_OBJECT(video_thread),"create_thread",TRUE,NULL);
|
|
||||||
g_print("\neverything's built, setting it up to be runnable\n");
|
|
||||||
gst_element_set_state(GST_ELEMENT(pipeline),GST_STATE_READY);
|
|
||||||
g_print("\nok, runnable, hitting 'play'...\n");
|
|
||||||
gst_element_set_state(GST_ELEMENT(pipeline),GST_STATE_PLAYING);
|
|
||||||
|
|
||||||
while(1)
|
|
||||||
gst_bin_iterate(GST_BIN(pipeline));
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,81 +0,0 @@
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <glib.h>
|
|
||||||
#include <gst/gst.h>
|
|
||||||
|
|
||||||
int main(int argc,char *argv[]) {
|
|
||||||
int fd;
|
|
||||||
GstPipeline *pipeline;
|
|
||||||
GstElement *osssrc, *videosrc, *fdsink, *encoder, *compress, *video_queue, *video_thread;
|
|
||||||
GstElementFactory *osssrcfactory, *fdsinkfactory, *encoderfactory, *compressfactory;
|
|
||||||
GstElementFactory *videosrcfactory;
|
|
||||||
|
|
||||||
gst_init(&argc,&argv);
|
|
||||||
|
|
||||||
gst_plugin_load("v4lsrc");
|
|
||||||
gst_plugin_load("aviencoder");
|
|
||||||
gst_plugin_load("wincodec");
|
|
||||||
|
|
||||||
pipeline = GST_PIPELINE (gst_pipeline_new("pipeline"));
|
|
||||||
|
|
||||||
osssrcfactory = gst_elementfactory_find("osssrc");
|
|
||||||
osssrc = gst_elementfactory_create(osssrcfactory,"osssrc");
|
|
||||||
|
|
||||||
videosrcfactory = gst_elementfactory_find("v4lsrc");
|
|
||||||
videosrc = gst_elementfactory_create(videosrcfactory,"videosrc");
|
|
||||||
compressfactory = gst_elementfactory_find("winenc");
|
|
||||||
compress = gst_elementfactory_create(compressfactory,"winenc");
|
|
||||||
g_assert(compress != NULL);
|
|
||||||
encoderfactory = gst_elementfactory_find("aviencoder");
|
|
||||||
encoder = gst_elementfactory_create(encoderfactory,"aviencoder");
|
|
||||||
g_object_set(G_OBJECT(videosrc),"width",320,"height",240,NULL);
|
|
||||||
g_object_set(G_OBJECT(videosrc),"format",5,NULL);
|
|
||||||
|
|
||||||
g_object_set(G_OBJECT(encoder),"video","00:DIV3",NULL);
|
|
||||||
|
|
||||||
fd = open(argv[1],O_CREAT|O_RDWR|O_TRUNC);
|
|
||||||
|
|
||||||
fdsinkfactory = gst_elementfactory_find("fdsink");
|
|
||||||
fdsink = gst_elementfactory_create(fdsinkfactory,"fdsink");
|
|
||||||
g_object_set(G_OBJECT(fdsink),"fd",fd,NULL);
|
|
||||||
|
|
||||||
gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(videosrc));
|
|
||||||
|
|
||||||
/* add objects to the main pipeline */
|
|
||||||
video_thread = gst_thread_new("video_thread");
|
|
||||||
g_return_val_if_fail(video_thread != NULL, -1);
|
|
||||||
gst_bin_add(GST_BIN(video_thread),GST_ELEMENT(compress));
|
|
||||||
gst_bin_add(GST_BIN(video_thread),GST_ELEMENT(encoder));
|
|
||||||
gst_bin_add(GST_BIN(video_thread),GST_ELEMENT(fdsink));
|
|
||||||
|
|
||||||
|
|
||||||
/* connect src to sink */
|
|
||||||
gst_element_add_ghost_pad(GST_ELEMENT(video_thread),
|
|
||||||
gst_element_get_pad(compress,"sink"),"sink");
|
|
||||||
gst_pad_connect(gst_element_get_pad(compress,"src"),
|
|
||||||
gst_element_get_pad(encoder,"video_00"));
|
|
||||||
gst_pad_connect(gst_element_get_pad(encoder,"src"),
|
|
||||||
gst_element_get_pad(fdsink,"sink"));
|
|
||||||
|
|
||||||
|
|
||||||
// construct queue and connect everything in the main pipeline
|
|
||||||
video_queue = gst_elementfactory_make("queue","video_queue");
|
|
||||||
g_object_set(G_OBJECT(video_queue),"max_level",30,NULL);
|
|
||||||
gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(video_queue));
|
|
||||||
gst_bin_add(GST_BIN(pipeline),GST_ELEMENT(video_thread));
|
|
||||||
gst_pad_connect(gst_element_get_pad(videosrc, "src"),
|
|
||||||
gst_element_get_pad(video_queue,"sink"));
|
|
||||||
gst_pad_connect(gst_element_get_pad(video_queue,"src"),
|
|
||||||
gst_element_get_pad(video_thread,"sink"));
|
|
||||||
|
|
||||||
g_object_set(G_OBJECT(video_thread),"create_thread",TRUE,NULL);
|
|
||||||
g_print("\neverything's built, setting it up to be runnable\n");
|
|
||||||
gst_element_set_state(GST_ELEMENT(pipeline),GST_STATE_READY);
|
|
||||||
g_print("\nok, runnable, hitting 'play'...\n");
|
|
||||||
gst_element_set_state(GST_ELEMENT(pipeline),GST_STATE_PLAYING);
|
|
||||||
|
|
||||||
while(1)
|
|
||||||
gst_bin_iterate(GST_BIN(pipeline));
|
|
||||||
}
|
|
||||||
|
|
234
test/video2mp1.c
234
test/video2mp1.c
|
@ -1,234 +0,0 @@
|
||||||
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <glib.h>
|
|
||||||
#include <gst/gst.h>
|
|
||||||
#include <gnome.h>
|
|
||||||
|
|
||||||
static void
|
|
||||||
gst_play_have_type (GstElement *sink, GstElement *sink2, gpointer data)
|
|
||||||
{
|
|
||||||
GST_DEBUG (0,"GstPipeline: play have type %p\n", (gboolean *)data);
|
|
||||||
|
|
||||||
*(gboolean *)data = TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
gboolean
|
|
||||||
idle_func (gpointer data)
|
|
||||||
{
|
|
||||||
return gst_bin_iterate (GST_BIN (data));
|
|
||||||
}
|
|
||||||
|
|
||||||
static GstCaps*
|
|
||||||
gst_play_typefind (GstBin *bin, GstElement *element)
|
|
||||||
{
|
|
||||||
gboolean found = FALSE;
|
|
||||||
GstElement *typefind;
|
|
||||||
GstCaps *caps = NULL;
|
|
||||||
|
|
||||||
GST_DEBUG (0,"GstPipeline: typefind for element \"%s\" %p\n",
|
|
||||||
GST_ELEMENT_NAME(element), &found);
|
|
||||||
|
|
||||||
typefind = gst_elementfactory_make ("typefind", "typefind");
|
|
||||||
g_return_val_if_fail (typefind != NULL, FALSE);
|
|
||||||
|
|
||||||
gtk_signal_connect (GTK_OBJECT (typefind), "have_type",
|
|
||||||
GTK_SIGNAL_FUNC (gst_play_have_type), &found);
|
|
||||||
|
|
||||||
gst_pad_connect (gst_element_get_pad (element, "src"),
|
|
||||||
gst_element_get_pad (typefind, "sink"));
|
|
||||||
|
|
||||||
gst_bin_add (bin, typefind);
|
|
||||||
|
|
||||||
gst_element_set_state (GST_ELEMENT (bin), GST_STATE_PLAYING);
|
|
||||||
|
|
||||||
// push a buffer... the have_type signal handler will set the found flag
|
|
||||||
gst_bin_iterate (bin);
|
|
||||||
|
|
||||||
gst_element_set_state (GST_ELEMENT (bin), GST_STATE_NULL);
|
|
||||||
|
|
||||||
caps = gst_pad_get_caps (gst_element_get_pad (element, "src"));
|
|
||||||
|
|
||||||
gst_pad_disconnect (gst_element_get_pad (element, "src"),
|
|
||||||
gst_element_get_pad (typefind, "sink"));
|
|
||||||
gst_bin_remove (bin, typefind);
|
|
||||||
|
|
||||||
return caps;
|
|
||||||
}
|
|
||||||
|
|
||||||
static GstElement*
|
|
||||||
get_video_encoder_bin (void)
|
|
||||||
{
|
|
||||||
GstElement *bin;
|
|
||||||
GstElement *encoder, *queue, *colorspace, *videoscale;
|
|
||||||
|
|
||||||
bin = gst_bin_new ("video_encoder_bin");
|
|
||||||
|
|
||||||
colorspace = gst_elementfactory_make ("colorspace", "colorspace");
|
|
||||||
g_assert (colorspace != NULL);
|
|
||||||
videoscale = gst_elementfactory_make ("videoscale", "videoscale");
|
|
||||||
g_assert (videoscale != NULL);
|
|
||||||
gtk_object_set (GTK_OBJECT (videoscale), "width", 352, "height", 288, NULL);
|
|
||||||
encoder = gst_elementfactory_make ("mpeg2enc", "video_encoder");
|
|
||||||
g_assert (encoder != NULL);
|
|
||||||
queue = gst_elementfactory_make ("queue", "video_encoder_queue");
|
|
||||||
g_assert (queue != NULL);
|
|
||||||
|
|
||||||
gst_bin_add (GST_BIN (bin), colorspace);
|
|
||||||
gst_bin_add (GST_BIN (bin), videoscale);
|
|
||||||
gst_bin_add (GST_BIN (bin), encoder);
|
|
||||||
gst_bin_add (GST_BIN (bin), queue);
|
|
||||||
|
|
||||||
gst_element_connect (colorspace, "src", videoscale, "sink");
|
|
||||||
gst_element_connect (videoscale, "src", encoder, "sink");
|
|
||||||
gst_element_connect (encoder, "src", queue, "sink");
|
|
||||||
|
|
||||||
gst_element_add_ghost_pad (bin, gst_element_get_pad (colorspace, "sink"), "sink");
|
|
||||||
gst_element_add_ghost_pad (bin, gst_element_get_pad (queue, "src"), "src");
|
|
||||||
|
|
||||||
return bin;
|
|
||||||
}
|
|
||||||
|
|
||||||
static GstElement*
|
|
||||||
get_audio_encoder_bin (void)
|
|
||||||
{
|
|
||||||
GstElement *bin;
|
|
||||||
GstElement *encoder, *queue;
|
|
||||||
|
|
||||||
bin = gst_bin_new ("audio_encoder_bin");
|
|
||||||
|
|
||||||
encoder = gst_elementfactory_make ("mpegaudio", "audio_encoder");
|
|
||||||
g_assert (encoder != NULL);
|
|
||||||
queue = gst_elementfactory_make ("queue", "audio_encoder_queue");
|
|
||||||
g_assert (queue != NULL);
|
|
||||||
|
|
||||||
gst_bin_add (GST_BIN (bin), encoder);
|
|
||||||
gst_bin_add (GST_BIN (bin), queue);
|
|
||||||
|
|
||||||
gst_element_connect (encoder, "src", queue, "sink");
|
|
||||||
|
|
||||||
gst_element_add_ghost_pad (bin, gst_element_get_pad (encoder, "sink"), "sink");
|
|
||||||
gst_element_add_ghost_pad (bin, gst_element_get_pad (queue, "src"), "src");
|
|
||||||
|
|
||||||
return bin;
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(int argc,char *argv[])
|
|
||||||
{
|
|
||||||
GstElement *filesrc, *audio_enc, *video_enc;
|
|
||||||
GstElement *muxthread_video, *muxer, *fdsink_video;
|
|
||||||
GstElement *muxthread_audio, *fdsink_audio;
|
|
||||||
GstElement *bin;
|
|
||||||
GstCaps *srccaps;
|
|
||||||
GstElement *new_element;
|
|
||||||
GstAutoplug *autoplug;
|
|
||||||
gint fd_video;
|
|
||||||
gint fd_audio;
|
|
||||||
|
|
||||||
g_thread_init(NULL);
|
|
||||||
gst_init(&argc,&argv);
|
|
||||||
gnome_init("autoplug","0.0.1", argc,argv);
|
|
||||||
|
|
||||||
if (argc != 4) {
|
|
||||||
g_print("usage: %s <in_filename> <out_video> <out_audio>\n", argv[0]);
|
|
||||||
exit(-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* create a new bin to hold the elements */
|
|
||||||
bin = gst_pipeline_new("pipeline");
|
|
||||||
g_assert(bin != NULL);
|
|
||||||
|
|
||||||
/* create a disk reader */
|
|
||||||
filesrc = gst_elementfactory_make("filesrc", "disk_source");
|
|
||||||
g_assert(filesrc != NULL);
|
|
||||||
gtk_object_set(GTK_OBJECT(filesrc),"location", argv[1],NULL);
|
|
||||||
|
|
||||||
gst_bin_add (GST_BIN (bin), filesrc);
|
|
||||||
|
|
||||||
srccaps = gst_play_typefind (GST_BIN (bin), filesrc);
|
|
||||||
|
|
||||||
if (!srccaps) {
|
|
||||||
g_print ("could not autoplug, unknown media type...\n");
|
|
||||||
exit (-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
audio_enc = get_audio_encoder_bin();
|
|
||||||
video_enc = get_video_encoder_bin();
|
|
||||||
|
|
||||||
autoplug = gst_autoplugfactory_make ("staticrender");
|
|
||||||
g_assert (autoplug != NULL);
|
|
||||||
|
|
||||||
new_element = gst_autoplug_to_renderers (autoplug,
|
|
||||||
srccaps,
|
|
||||||
video_enc,
|
|
||||||
audio_enc,
|
|
||||||
NULL);
|
|
||||||
|
|
||||||
if (!new_element) {
|
|
||||||
g_print ("could not autoplug, no suitable codecs found...\n");
|
|
||||||
exit (-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
gst_object_ref (GST_OBJECT (filesrc));
|
|
||||||
gst_bin_remove (GST_BIN (bin), filesrc);
|
|
||||||
gst_object_destroy (GST_OBJECT (bin));
|
|
||||||
|
|
||||||
// FIXME hack, reparent the filesrc so the scheduler doesn't break
|
|
||||||
bin = gst_pipeline_new("pipeline");
|
|
||||||
|
|
||||||
gst_bin_add (GST_BIN (bin), filesrc);
|
|
||||||
gst_bin_add (GST_BIN (bin), new_element);
|
|
||||||
|
|
||||||
gst_element_connect (filesrc, "src", new_element, "sink");
|
|
||||||
|
|
||||||
muxer = gst_elementfactory_make ("system_encode", "muxer");
|
|
||||||
g_assert (muxer != NULL);
|
|
||||||
|
|
||||||
if (gst_bin_get_by_name (GST_BIN (new_element), "video_encoder_bin")) {
|
|
||||||
muxthread_video = gst_thread_new("thread_video");
|
|
||||||
|
|
||||||
fdsink_video = gst_elementfactory_make ("fdsink", "fdsink_video");
|
|
||||||
g_assert (fdsink_video != NULL);
|
|
||||||
fd_video = open (argv[2], O_CREAT|O_RDWR|O_TRUNC);
|
|
||||||
gtk_object_set (GTK_OBJECT (fdsink_video), "fd", fd_video, NULL);
|
|
||||||
|
|
||||||
gst_element_connect (video_enc, "src", fdsink_video, "sink");
|
|
||||||
gst_bin_add (GST_BIN (muxthread_video), fdsink_video);
|
|
||||||
|
|
||||||
gst_bin_add (GST_BIN (bin), muxthread_video);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (gst_bin_get_by_name (GST_BIN (new_element), "audio_encoder_bin")) {
|
|
||||||
muxthread_audio = gst_thread_new("thread_audio");
|
|
||||||
|
|
||||||
fdsink_audio = gst_elementfactory_make ("fdsink", "fdsink_audio");
|
|
||||||
g_assert (fdsink_audio != NULL);
|
|
||||||
fd_audio = open (argv[3], O_CREAT|O_RDWR|O_TRUNC);
|
|
||||||
gtk_object_set (GTK_OBJECT (fdsink_audio), "fd", fd_audio, NULL);
|
|
||||||
|
|
||||||
gst_element_connect (audio_enc, "src", fdsink_audio, "sink");
|
|
||||||
gst_bin_add (GST_BIN (muxthread_audio), fdsink_audio);
|
|
||||||
|
|
||||||
gst_bin_add (GST_BIN (bin), muxthread_audio);
|
|
||||||
}
|
|
||||||
|
|
||||||
//gtk_object_set (GTK_OBJECT (muxer), "video", "00", NULL);
|
|
||||||
//gtk_object_set (GTK_OBJECT (muxer), "audio", "00", NULL);
|
|
||||||
|
|
||||||
/* start playing */
|
|
||||||
gst_element_set_state(GST_ELEMENT(bin), GST_STATE_PLAYING);
|
|
||||||
|
|
||||||
gtk_idle_add(idle_func, bin);
|
|
||||||
|
|
||||||
gst_main();
|
|
||||||
|
|
||||||
/* stop the bin */
|
|
||||||
gst_element_set_state(GST_ELEMENT(bin), GST_STATE_NULL);
|
|
||||||
|
|
||||||
gst_pipeline_destroy(bin);
|
|
||||||
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
|
|
112
test/videotest.c
112
test/videotest.c
|
@ -1,112 +0,0 @@
|
||||||
#include <gnome.h>
|
|
||||||
#include <gst/gst.h>
|
|
||||||
|
|
||||||
extern gboolean _gst_plugin_spew;
|
|
||||||
|
|
||||||
gboolean idle_func(gpointer data);
|
|
||||||
|
|
||||||
GstElement *videosink;
|
|
||||||
GstElement *videosink2;
|
|
||||||
GstElement *src;
|
|
||||||
|
|
||||||
int main(int argc,char *argv[]) {
|
|
||||||
GstElement *bin;
|
|
||||||
GstElement *tee;
|
|
||||||
GstElementFactory *srcfactory;
|
|
||||||
GstElementFactory *videosinkfactory;
|
|
||||||
|
|
||||||
GtkWidget *appwindow;
|
|
||||||
GtkWidget *appwindow2;
|
|
||||||
GtkWidget *vbox1;
|
|
||||||
GtkWidget *button;
|
|
||||||
GtkWidget *draw;
|
|
||||||
GtkWidget *draw2;
|
|
||||||
|
|
||||||
|
|
||||||
//_gst_plugin_spew = TRUE;
|
|
||||||
gst_init(&argc,&argv);
|
|
||||||
|
|
||||||
gnome_init("Videotest","0.0.1",argc,argv);
|
|
||||||
|
|
||||||
bin = gst_bin_new("bin");
|
|
||||||
|
|
||||||
srcfactory = gst_elementfactory_find("v4lsrc");
|
|
||||||
g_return_val_if_fail(srcfactory != NULL,-1);
|
|
||||||
videosinkfactory = gst_elementfactory_find("videosink");
|
|
||||||
g_return_val_if_fail(videosinkfactory != NULL,-1);
|
|
||||||
|
|
||||||
src = gst_elementfactory_create(srcfactory,"src");
|
|
||||||
gtk_object_set(GTK_OBJECT(src),"format",3,NULL);
|
|
||||||
gtk_object_set(GTK_OBJECT(src),"width",320,"height",240,NULL);
|
|
||||||
|
|
||||||
videosink = gst_elementfactory_create(videosinkfactory,"videosink");
|
|
||||||
gtk_object_set(GTK_OBJECT(videosink),"xv_enabled",FALSE,NULL);
|
|
||||||
gtk_object_set(GTK_OBJECT(videosink),"width",320,"height",240,NULL);
|
|
||||||
|
|
||||||
videosink2 = gst_elementfactory_create(videosinkfactory,"videosink2");
|
|
||||||
gtk_object_set(GTK_OBJECT(videosink2),"xv_enabled",FALSE,NULL);
|
|
||||||
gtk_object_set(GTK_OBJECT(videosink2),"width",320,"height",240,NULL);
|
|
||||||
|
|
||||||
tee = gst_elementfactory_make ("tee", "tee");
|
|
||||||
|
|
||||||
gst_bin_add(GST_BIN(bin),GST_ELEMENT(src));
|
|
||||||
gst_bin_add(GST_BIN(bin),GST_ELEMENT(tee));
|
|
||||||
gst_bin_add(GST_BIN(bin),GST_ELEMENT(videosink));
|
|
||||||
gst_bin_add(GST_BIN(bin),GST_ELEMENT(videosink2));
|
|
||||||
|
|
||||||
gst_pad_connect(gst_element_get_pad(src,"src"),
|
|
||||||
gst_element_get_pad(tee,"sink"));
|
|
||||||
gst_pad_connect(gst_element_request_pad_by_name (tee,"src%d"),
|
|
||||||
gst_element_get_pad(videosink,"sink"));
|
|
||||||
gst_pad_connect(gst_element_request_pad_by_name (tee,"src%d"),
|
|
||||||
gst_element_get_pad(videosink2,"sink"));
|
|
||||||
|
|
||||||
appwindow = gnome_app_new("Videotest","Videotest");
|
|
||||||
appwindow2 = gnome_app_new("Videotest2","Videotest2");
|
|
||||||
|
|
||||||
vbox1 = gtk_vbox_new (FALSE, 0);
|
|
||||||
gtk_widget_show (vbox1);
|
|
||||||
|
|
||||||
button = gtk_button_new_with_label(_("test"));//_with_label (_("chup"));
|
|
||||||
gtk_widget_show (button);
|
|
||||||
gtk_box_pack_start (GTK_BOX (vbox1), button, FALSE, FALSE, 0);
|
|
||||||
//gtk_widget_set_usize (button, 50, 50);
|
|
||||||
//gtk_widget_set_usize (button, 0, 0);
|
|
||||||
|
|
||||||
draw = gst_util_get_pointer_arg(GTK_OBJECT(videosink),"widget"),
|
|
||||||
gtk_box_pack_start (GTK_BOX (vbox1),
|
|
||||||
draw,
|
|
||||||
TRUE, TRUE, 0);
|
|
||||||
gtk_widget_show (draw);
|
|
||||||
|
|
||||||
draw2 = gst_util_get_pointer_arg(GTK_OBJECT(videosink2),"widget"),
|
|
||||||
gtk_widget_show (draw2);
|
|
||||||
|
|
||||||
gnome_app_set_contents(GNOME_APP(appwindow), vbox1);
|
|
||||||
|
|
||||||
gnome_app_set_contents(GNOME_APP(appwindow2), draw2);
|
|
||||||
|
|
||||||
gtk_object_set(GTK_OBJECT(appwindow),"allow_grow",TRUE,NULL);
|
|
||||||
gtk_object_set(GTK_OBJECT(appwindow),"allow_shrink",TRUE,NULL);
|
|
||||||
|
|
||||||
gtk_widget_show_all(appwindow);
|
|
||||||
gtk_widget_show_all(appwindow2);
|
|
||||||
|
|
||||||
gst_element_set_state(GST_ELEMENT(bin),GST_STATE_PLAYING);
|
|
||||||
|
|
||||||
gtk_object_set(GTK_OBJECT(src),"bright",32000,"contrast", 32000,NULL);
|
|
||||||
|
|
||||||
//gtk_object_set(GTK_OBJECT(src),"tune",133250,NULL);
|
|
||||||
g_idle_add(idle_func,bin);
|
|
||||||
|
|
||||||
gtk_main();
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
gboolean idle_func(gpointer data) {
|
|
||||||
//static int i=0;
|
|
||||||
//g_print("pushing %d\n",i++);
|
|
||||||
gst_bin_iterate(GST_BIN(data));
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
|
@ -1,85 +0,0 @@
|
||||||
#include <gnome.h>
|
|
||||||
#include <gst/gst.h>
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
idle_func (gpointer data)
|
|
||||||
{
|
|
||||||
gst_bin_iterate(GST_BIN(data));
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
main (int argc,char *argv[])
|
|
||||||
{
|
|
||||||
GstElement *bin;
|
|
||||||
GstElement *src;
|
|
||||||
GstElement *videosink;
|
|
||||||
|
|
||||||
GtkWidget *appwindow;
|
|
||||||
GtkWidget *vbox1;
|
|
||||||
GtkWidget *button;
|
|
||||||
guint32 draw;
|
|
||||||
GtkWidget *gtk_socket;
|
|
||||||
|
|
||||||
|
|
||||||
gst_init(&argc,&argv);
|
|
||||||
|
|
||||||
gnome_init("Videotest","0.0.1",argc,argv);
|
|
||||||
|
|
||||||
bin = gst_pipeline_new("pipeline");
|
|
||||||
|
|
||||||
src = gst_elementfactory_make ("v4lsrc", "src");
|
|
||||||
gtk_object_set(GTK_OBJECT(src),"format",9,NULL);
|
|
||||||
gtk_object_set(GTK_OBJECT(src),"width",320,"height",240,NULL);
|
|
||||||
//gtk_object_set(GTK_OBJECT(src),"width",100,"height",100,NULL);
|
|
||||||
|
|
||||||
videosink = gst_elementfactory_make ("xvideosink", "videosink");
|
|
||||||
gtk_object_set(GTK_OBJECT(videosink),"width",320,"height",240,NULL);
|
|
||||||
|
|
||||||
gst_bin_add(GST_BIN(bin),GST_ELEMENT(src));
|
|
||||||
gst_bin_add(GST_BIN(bin),GST_ELEMENT(videosink));
|
|
||||||
|
|
||||||
gst_pad_connect(gst_element_get_pad(src,"src"),
|
|
||||||
gst_element_get_pad(videosink,"sink"));
|
|
||||||
|
|
||||||
appwindow = gnome_app_new("Videotest","Videotest");
|
|
||||||
|
|
||||||
vbox1 = gtk_vbox_new (FALSE, 0);
|
|
||||||
gtk_widget_show (vbox1);
|
|
||||||
|
|
||||||
button = gtk_button_new_with_label(_("test"));//_with_label (_("chup"));
|
|
||||||
gtk_widget_show (button);
|
|
||||||
gtk_box_pack_start (GTK_BOX (vbox1), button, FALSE, FALSE, 0);
|
|
||||||
|
|
||||||
draw = gst_util_get_int_arg (GTK_OBJECT (videosink), "xid"),
|
|
||||||
|
|
||||||
gtk_socket = gtk_socket_new ();
|
|
||||||
gtk_widget_show (gtk_socket);
|
|
||||||
|
|
||||||
gnome_app_set_contents(GNOME_APP(appwindow), vbox1);
|
|
||||||
|
|
||||||
gtk_box_pack_start (GTK_BOX (vbox1),
|
|
||||||
GTK_WIDGET(gtk_socket),
|
|
||||||
TRUE, TRUE, 0);
|
|
||||||
|
|
||||||
gtk_widget_realize (gtk_socket);
|
|
||||||
gtk_socket_steal (GTK_SOCKET (gtk_socket), draw);
|
|
||||||
|
|
||||||
gtk_object_set(GTK_OBJECT(appwindow),"allow_grow",TRUE,NULL);
|
|
||||||
gtk_object_set(GTK_OBJECT(appwindow),"allow_shrink",TRUE,NULL);
|
|
||||||
|
|
||||||
gtk_widget_show_all(appwindow);
|
|
||||||
|
|
||||||
gst_element_set_state(GST_ELEMENT(bin),GST_STATE_PLAYING);
|
|
||||||
|
|
||||||
gtk_object_set(GTK_OBJECT(src),"bright",32000,"contrast", 32000,NULL);
|
|
||||||
|
|
||||||
//gtk_object_set(GTK_OBJECT(src),"tune",133250,NULL);
|
|
||||||
g_idle_add(idle_func,bin);
|
|
||||||
|
|
||||||
gtk_main();
|
|
||||||
|
|
||||||
exit (0);
|
|
||||||
}
|
|
||||||
|
|
61
test/wave.c
61
test/wave.c
|
@ -1,61 +0,0 @@
|
||||||
#include <gnome.h>
|
|
||||||
#include <gst/gst.h>
|
|
||||||
|
|
||||||
extern gboolean _gst_plugin_spew;
|
|
||||||
|
|
||||||
gboolean idle_func(gpointer data);
|
|
||||||
|
|
||||||
GtkWidget *drawingarea;
|
|
||||||
|
|
||||||
int main(int argc,char *argv[]) {
|
|
||||||
GstElement *bin;
|
|
||||||
GstElementFactory *srcfactory;
|
|
||||||
GstElement *src;
|
|
||||||
GstElementFactory *wavefactory;
|
|
||||||
GstElement *wave;
|
|
||||||
|
|
||||||
GtkWidget *appwindow;
|
|
||||||
|
|
||||||
_gst_plugin_spew = TRUE;
|
|
||||||
|
|
||||||
gst_init(&argc,&argv);
|
|
||||||
gst_plugin_load("libsmoothwave.so");
|
|
||||||
gnome_init("Wave","0.0.1",argc,argv);
|
|
||||||
|
|
||||||
bin = gst_bin_new("bin");
|
|
||||||
|
|
||||||
srcfactory = gst_elementfactory_find("audiosrc");
|
|
||||||
g_return_val_if_fail(srcfactory != NULL, -1);
|
|
||||||
wavefactory = gst_elementfactory_find("smoothwave");
|
|
||||||
g_return_val_if_fail(wavefactory != NULL, -1);
|
|
||||||
|
|
||||||
src = gst_elementfactory_create(srcfactory,"src");
|
|
||||||
gtk_object_set(GTK_OBJECT(src),"bytes_per_read",(gulong)2048,NULL);
|
|
||||||
wave = gst_elementfactory_create(wavefactory,"wave");
|
|
||||||
gtk_object_set(GTK_OBJECT(wave),"width",256,"height",100,NULL);
|
|
||||||
|
|
||||||
|
|
||||||
gst_bin_add(GST_BIN(bin),GST_ELEMENT(src));
|
|
||||||
gst_bin_add(GST_BIN(bin),GST_ELEMENT(wave));
|
|
||||||
|
|
||||||
gst_pad_connect(gst_element_get_pad(src,"src"),
|
|
||||||
gst_element_get_pad(wave,"sink"));
|
|
||||||
|
|
||||||
appwindow = gnome_app_new("wave","Wave");
|
|
||||||
gnome_app_set_contents(GNOME_APP(appwindow),gst_util_get_pointer_arg(GTK_OBJECT(wave),"widget"));
|
|
||||||
gtk_widget_show_all(appwindow);
|
|
||||||
|
|
||||||
gst_element_set_state(GST_ELEMENT(bin),GST_STATE_READY);
|
|
||||||
gst_element_set_state(GST_ELEMENT(bin),GST_STATE_PLAYING);
|
|
||||||
|
|
||||||
g_idle_add(idle_func,bin);
|
|
||||||
|
|
||||||
gtk_main();
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
gboolean idle_func(gpointer data) {
|
|
||||||
gst_bin_iterate(GST_BIN(data));
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
|
@ -1,66 +0,0 @@
|
||||||
#include <gst/gst.h>
|
|
||||||
|
|
||||||
extern gboolean _gst_plugin_spew;
|
|
||||||
|
|
||||||
gboolean idle_func(gpointer data);
|
|
||||||
|
|
||||||
GstElement *src;
|
|
||||||
|
|
||||||
int
|
|
||||||
main (int argc,char *argv[])
|
|
||||||
{
|
|
||||||
GstElement *bin;
|
|
||||||
GstElement *effect;
|
|
||||||
GstElement *osssink;
|
|
||||||
|
|
||||||
gst_init(&argc,&argv);
|
|
||||||
|
|
||||||
bin = gst_bin_new("bin");
|
|
||||||
|
|
||||||
src = gst_elementfactory_make("XMMS_INPUT_mpeg_layer_1/2/3_player_1.2.4", "xmms_plugin");
|
|
||||||
//src = gst_elementfactory_make("XMMS_INPUT_oggvorbis_player_0.1", "xmms_plugin");
|
|
||||||
//src = gst_elementfactory_make("XMMS_INPUT_mikmod_player_1.2.4", "xmms_plugin");
|
|
||||||
//src = gst_elementfactory_make("XMMS_INPUT_tone_generator_1.2.4", "xmms_plugin");
|
|
||||||
g_return_val_if_fail(src != NULL, -1);
|
|
||||||
|
|
||||||
//effect = gst_elementfactory_make("XMMS_EFFECT_voice_removal_plugin_1.2.4", "xmms_effect");
|
|
||||||
effect = gst_elementfactory_make("XMMS_EFFECT_extra_stereo_plugin_1.2.4", "xmms_effect");
|
|
||||||
//effect = gst_elementfactory_make("XMMS_EFFECT_echo_plugin_1.2.4", "xmms_effect");
|
|
||||||
g_return_val_if_fail(effect != NULL, -1);
|
|
||||||
|
|
||||||
g_object_set (G_OBJECT (src), "location", argv[1], NULL);
|
|
||||||
//gtk_object_set (G_OBJECT (src), "filename", "tone://1000", NULL);
|
|
||||||
|
|
||||||
g_print ("Song Info (text:length): %s\n",gst_util_get_string_arg (G_OBJECT (src), "song_info"));
|
|
||||||
//gtk_object_set (G_OBJECT (src), "show_about", TRUE, NULL);
|
|
||||||
//gtk_object_set (G_OBJECT (src), "configure", TRUE, NULL);
|
|
||||||
//gtk_object_set (G_OBJECT (src), "show_file_info", TRUE, NULL);
|
|
||||||
|
|
||||||
osssink = gst_elementfactory_make("osssink", "osssink");
|
|
||||||
g_return_val_if_fail(osssink != NULL, -1);
|
|
||||||
|
|
||||||
gst_bin_add(GST_BIN(bin),GST_ELEMENT(src));
|
|
||||||
gst_bin_add(GST_BIN(bin),GST_ELEMENT(effect));
|
|
||||||
gst_bin_add(GST_BIN(bin),GST_ELEMENT(osssink));
|
|
||||||
|
|
||||||
gst_pad_connect(gst_element_get_pad(src,"src"),
|
|
||||||
gst_element_get_pad(effect,"sink"));
|
|
||||||
gst_pad_connect(gst_element_get_pad(effect,"src"),
|
|
||||||
gst_element_get_pad(osssink,"sink"));
|
|
||||||
|
|
||||||
gst_element_set_state(GST_ELEMENT(bin),GST_STATE_PLAYING);
|
|
||||||
|
|
||||||
g_idle_add(idle_func, bin);
|
|
||||||
|
|
||||||
//gtk_main();
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
gboolean
|
|
||||||
idle_func (gpointer data)
|
|
||||||
{
|
|
||||||
gst_bin_iterate(GST_BIN(data));
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
Loading…
Reference in a new issue