And finish off the formatting stuff
This commit is contained in:
@ -1,3 +1,4 @@
|
||||
/* vim: set sw=3 ts=3 sts=3 expandtab: */
|
||||
#include <gst/gst.h>
|
||||
|
||||
GstElement *pipeline, *audio;
|
||||
@ -5,135 +6,135 @@ GstElement *pipeline, *audio;
|
||||
static gboolean
|
||||
bus_call(GstBus *bus, GstMessage *msg, gpointer data)
|
||||
{
|
||||
GMainLoop *loop = (GMainLoop *) data;
|
||||
GMainLoop *loop = (GMainLoop *) data;
|
||||
|
||||
switch (GST_MESSAGE_TYPE(msg))
|
||||
{
|
||||
case GST_MESSAGE_EOS:
|
||||
{
|
||||
g_print("EOS\n");
|
||||
g_main_loop_quit(loop);
|
||||
break;
|
||||
}
|
||||
case GST_MESSAGE_ERROR:
|
||||
{
|
||||
gchar *debug;
|
||||
GError *err;
|
||||
switch (GST_MESSAGE_TYPE(msg))
|
||||
{
|
||||
case GST_MESSAGE_EOS:
|
||||
{
|
||||
g_print("EOS\n");
|
||||
g_main_loop_quit(loop);
|
||||
break;
|
||||
}
|
||||
case GST_MESSAGE_ERROR:
|
||||
{
|
||||
gchar *debug;
|
||||
GError *err;
|
||||
|
||||
gst_message_parse_error(msg, &err, &debug);
|
||||
g_free(debug);
|
||||
gst_message_parse_error(msg, &err, &debug);
|
||||
g_free(debug);
|
||||
|
||||
g_print("%s\n", err->message);
|
||||
g_error_free(err);
|
||||
g_print("%s\n", err->message);
|
||||
g_error_free(err);
|
||||
|
||||
g_main_loop_quit(loop);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
g_main_loop_quit(loop);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
cb_newpad (GstElement *decodebin, GstPad *pad, gboolean last, gpointer data)
|
||||
{
|
||||
GstCaps *caps;
|
||||
GstStructure *str;
|
||||
GstPad *audiopad;
|
||||
GstCaps *caps;
|
||||
GstStructure *str;
|
||||
GstPad *audiopad;
|
||||
|
||||
audiopad = gst_element_get_static_pad (audio, "sink");
|
||||
if (GST_PAD_IS_LINKED (audiopad))
|
||||
{
|
||||
g_object_unref (audiopad);
|
||||
return;
|
||||
}
|
||||
audiopad = gst_element_get_static_pad (audio, "sink");
|
||||
if (GST_PAD_IS_LINKED (audiopad))
|
||||
{
|
||||
g_object_unref (audiopad);
|
||||
return;
|
||||
}
|
||||
|
||||
caps = gst_pad_get_caps (pad);
|
||||
str = gst_caps_get_structure (caps, 0);
|
||||
if (!g_strrstr (gst_structure_get_name (str), "audio"))
|
||||
{
|
||||
gst_caps_unref (caps);
|
||||
gst_object_unref (audiopad);
|
||||
return;
|
||||
}
|
||||
gst_caps_unref (caps);
|
||||
caps = gst_pad_get_caps (pad);
|
||||
str = gst_caps_get_structure (caps, 0);
|
||||
if (!g_strrstr (gst_structure_get_name (str), "audio"))
|
||||
{
|
||||
gst_caps_unref (caps);
|
||||
gst_object_unref (audiopad);
|
||||
return;
|
||||
}
|
||||
gst_caps_unref (caps);
|
||||
|
||||
gst_pad_link (pad, audiopad);
|
||||
gst_pad_link (pad, audiopad);
|
||||
}
|
||||
|
||||
int
|
||||
main (int argc, char ** argv)
|
||||
{
|
||||
GMainLoop *loop;
|
||||
GstElement *src, *dec, *conv, *resample, *filter, *sink;
|
||||
GstCaps *filtercaps;
|
||||
GstPad *audiopad;
|
||||
GstBus *bus;
|
||||
gchar *path, *filename;
|
||||
GMainLoop *loop;
|
||||
GstElement *src, *dec, *conv, *resample, *filter, *sink;
|
||||
GstCaps *filtercaps;
|
||||
GstPad *audiopad;
|
||||
GstBus *bus;
|
||||
gchar *path, *filename;
|
||||
|
||||
gst_init (&argc, &argv);
|
||||
loop = g_main_loop_new (NULL, FALSE);
|
||||
gst_init (&argc, &argv);
|
||||
loop = g_main_loop_new (NULL, FALSE);
|
||||
|
||||
if (argc != 2)
|
||||
{
|
||||
g_print ("Error: no supplied file!\n");
|
||||
return 1;
|
||||
}
|
||||
if (argc != 2)
|
||||
{
|
||||
g_print ("Error: no supplied file!\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
pipeline = gst_pipeline_new ("pipeline");
|
||||
pipeline = gst_pipeline_new ("pipeline");
|
||||
|
||||
bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
|
||||
gst_bus_add_watch (bus, bus_call, loop);
|
||||
gst_object_unref (bus);
|
||||
bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
|
||||
gst_bus_add_watch (bus, bus_call, loop);
|
||||
gst_object_unref (bus);
|
||||
|
||||
src = gst_element_factory_make ("filesrc", NULL);
|
||||
g_object_set (G_OBJECT (src), "location", argv[1], NULL);
|
||||
dec = gst_element_factory_make ("decodebin", NULL);
|
||||
g_signal_connect (dec, "new-decoded-pad", G_CALLBACK (cb_newpad), NULL);
|
||||
gst_bin_add_many (GST_BIN (pipeline), src, dec, NULL);
|
||||
gst_element_link (src, dec);
|
||||
src = gst_element_factory_make ("filesrc", NULL);
|
||||
g_object_set (G_OBJECT (src), "location", argv[1], NULL);
|
||||
dec = gst_element_factory_make ("decodebin", NULL);
|
||||
g_signal_connect (dec, "new-decoded-pad", G_CALLBACK (cb_newpad), NULL);
|
||||
gst_bin_add_many (GST_BIN (pipeline), src, dec, NULL);
|
||||
gst_element_link (src, dec);
|
||||
|
||||
audio = gst_bin_new ("audiobin");
|
||||
conv = gst_element_factory_make ("audioconvert", NULL);
|
||||
audio = gst_bin_new ("audiobin");
|
||||
conv = gst_element_factory_make ("audioconvert", NULL);
|
||||
|
||||
/* Here's the bit of magic */
|
||||
resample = gst_element_factory_make("audioresample", NULL);
|
||||
filter = gst_element_factory_make("capsfilter", NULL);
|
||||
filtercaps = gst_caps_new_full(gst_structure_new("audio/x-raw-int",
|
||||
"channels", G_TYPE_INT, 2,
|
||||
"width", G_TYPE_INT, 16,
|
||||
"depth", G_TYPE_INT, 16,
|
||||
"endianness", G_TYPE_INT, 1234,
|
||||
"rate", G_TYPE_INT, 44100,
|
||||
"signed", G_TYPE_BOOLEAN, TRUE,
|
||||
NULL), NULL);
|
||||
g_object_set(GST_OBJECT(filter), "caps", filtercaps, NULL);
|
||||
gst_caps_unref(filtercaps);
|
||||
/* Here's the bit of magic */
|
||||
resample = gst_element_factory_make("audioresample", NULL);
|
||||
filter = gst_element_factory_make("capsfilter", NULL);
|
||||
filtercaps = gst_caps_new_full(gst_structure_new("audio/x-raw-int",
|
||||
"channels", G_TYPE_INT, 2,
|
||||
"width", G_TYPE_INT, 16,
|
||||
"depth", G_TYPE_INT, 16,
|
||||
"endianness", G_TYPE_INT, 1234,
|
||||
"rate", G_TYPE_INT, 44100,
|
||||
"signed", G_TYPE_BOOLEAN, TRUE,
|
||||
NULL), NULL);
|
||||
g_object_set(GST_OBJECT(filter), "caps", filtercaps, NULL);
|
||||
gst_caps_unref(filtercaps);
|
||||
|
||||
audiopad = gst_element_get_static_pad(conv, "sink");
|
||||
sink = gst_element_factory_make ("filesink", NULL);
|
||||
|
||||
/* Generate filename */
|
||||
filename = g_path_get_basename(argv[1]);
|
||||
path = g_strconcat("/tmp/ecdb/", filename, ".wav", NULL);
|
||||
g_object_set(G_OBJECT(sink), "location", path, NULL);
|
||||
audiopad = gst_element_get_static_pad(conv, "sink");
|
||||
sink = gst_element_factory_make ("filesink", NULL);
|
||||
|
||||
/* Generate filename */
|
||||
filename = g_path_get_basename(argv[1]);
|
||||
path = g_strconcat("/tmp/ecdb/", filename, ".wav", NULL);
|
||||
g_object_set(G_OBJECT(sink), "location", path, NULL);
|
||||
|
||||
free(filename);
|
||||
free(path);
|
||||
free(filename);
|
||||
free(path);
|
||||
|
||||
gst_bin_add_many(GST_BIN (audio), conv, resample, filter, sink, NULL);
|
||||
gst_element_link_many(conv, resample, filter, sink, NULL);
|
||||
gst_element_add_pad (audio, gst_ghost_pad_new ("sink", audiopad));
|
||||
gst_object_unref (audiopad);
|
||||
gst_bin_add (GST_BIN (pipeline), audio);
|
||||
gst_bin_add_many(GST_BIN (audio), conv, resample, filter, sink, NULL);
|
||||
gst_element_link_many(conv, resample, filter, sink, NULL);
|
||||
gst_element_add_pad (audio, gst_ghost_pad_new ("sink", audiopad));
|
||||
gst_object_unref (audiopad);
|
||||
gst_bin_add (GST_BIN (pipeline), audio);
|
||||
|
||||
gst_element_set_state (pipeline, GST_STATE_PLAYING);
|
||||
g_main_loop_run (loop);
|
||||
gst_element_set_state (pipeline, GST_STATE_PLAYING);
|
||||
g_main_loop_run (loop);
|
||||
|
||||
gst_element_set_state (pipeline, GST_STATE_NULL);
|
||||
gst_object_unref (GST_OBJECT (pipeline));
|
||||
gst_element_set_state (pipeline, GST_STATE_NULL);
|
||||
gst_object_unref (GST_OBJECT (pipeline));
|
||||
|
||||
return 0;
|
||||
return 0;
|
||||
}
|
||||
|
Reference in New Issue
Block a user