I have made this pipeline and im trying to convert it to c code
<http://gstreamer-devel.966125.n4.nabble.com/file/t378976/pipeline.png> this is my current code : #include <gst/gst.h> #include <iostream> GMainLoop* _loop; GstElement* _pipeline; static gboolean print_field (GQuark field, const GValue * value, gpointer pfx) { gchar *str = gst_value_serialize (value); g_print ("%s %15s: %s\n", (gchar *) pfx, g_quark_to_string (field), str); g_free (str); return TRUE; } void link_two_elements(GstElement* src_element, GstElement* sink_element) { if(!gst_element_link(src_element, sink_element)) g_debug("Error linking %s to %s", gst_element_get_name(src_element), gst_element_get_name(sink_element)); } static gboolean bus_call (G_GNUC_UNUSED GstBus *bus, GstMessage *msg, gpointer data) { GMainLoop *loop = (GMainLoop *) data; switch (GST_MESSAGE_TYPE (msg)) { case GST_MESSAGE_EOS: g_print ("End of stream\n"); g_main_loop_quit (loop); break; case GST_MESSAGE_ERROR: { gchar *debug; GError *error; gst_message_parse_error (msg, &error, &debug); g_free (debug); g_printerr ("Error: %s\n", error->message); g_error_free (error); g_main_loop_quit (loop); break; } default: break; } return TRUE; } static void print_caps (const GstCaps * caps, const gchar * pfx) { guint i; g_return_if_fail (caps != NULL); if (gst_caps_is_any (caps)) { g_print ("%sANY\n", pfx); return; } if (gst_caps_is_empty (caps)) { g_print ("%sEMPTY\n", pfx); return; } for (i = 0; i < gst_caps_get_size (caps); i++) { GstStructure *structure = gst_caps_get_structure (caps, i); g_print ("%s%s\n", pfx, gst_structure_get_name (structure)); gst_structure_foreach (structure, print_field, (gpointer) pfx); } } static void print_pad_capabilities (GstElement *element, gchar *pad_name) { GstPad *pad = NULL; GstCaps *caps = NULL; /* Retrieve pad */ pad = gst_element_get_static_pad (element, pad_name); if (!pad) { g_printerr ("Could not retrieve pad '%s'\n", pad_name); return; } /* Retrieve negotiated caps (or acceptable caps if negotiation is not finished yet) */ caps = gst_pad_get_current_caps (pad); if (!caps) caps = gst_pad_query_caps (pad, NULL); /* Print and free */ g_print ("Caps for the %s pad:\n", pad_name); print_caps (caps, " "); gst_caps_unref (caps); gst_object_unref (pad); } static void cb_new_pad (GstElement *element, GstPad *pad, gpointer data) { gchar *name; GstElement *other = data; name = gst_pad_get_name (pad); g_print ("A new pad %s was created for %s\n", name, gst_element_get_name(element)); g_free (name); g_print ("element %s will be linked to %s\n", gst_element_get_name(element), gst_element_get_name(other)); gst_element_link(element, other); } int _channels=0; void il_new_pad (GstElement *decodebin, GstPad *pad, gpointer data) { GstElement* element=0; std::cout<<_channels; if (_pipeline) { GstElement *queue, *aconv, *ares, *appsink; queue = gst_element_factory_make("queue", NULL); aconv = gst_element_factory_make("audioconvert", NULL); appsink = gst_element_factory_make("alsasink", NULL); gst_bin_add_many (GST_BIN (_pipeline), queue, aconv, appsink, NULL); link_two_elements(queue, aconv); link_two_elements(aconv,appsink); g_object_set(G_OBJECT (appsink), "sync", FALSE, NULL); element=queue; gst_element_sync_state_with_parent(element); ++_channels; } GstCaps *caps; GstStructure *str; GstPad *audiopad; /* only link once */ audiopad = gst_element_get_static_pad (element, "sink"); if (GST_PAD_IS_LINKED (audiopad)) { g_object_unref (audiopad); } /* check media type */ caps = gst_pad_query_caps (pad,NULL); print_caps(caps, " "); str = gst_caps_get_structure (caps, 0); if (!g_strrstr (gst_structure_get_name (str), "audio")) { //std::cerr<<"won't connect!"<<std::endl; gst_caps_unref (caps); gst_object_unref (audiopad); } gst_caps_unref (caps); /* link'n'play */ gst_pad_link (pad, audiopad); } gint main (gint argc, gchar *argv[]) { GstElement *source, *decodebin, *audio_convert, *audio_resample, *deint,*capsfilter; GstBus* bus; gst_init (&argc, &argv); if (_loop) { g_main_loop_quit(_loop); g_main_loop_unref(_loop); } _loop = g_main_loop_new (NULL, FALSE); /* Create gstreamer elements */ if (_pipeline) { gst_element_set_state (_pipeline, GST_STATE_NULL); gst_object_unref (GST_OBJECT (_pipeline)); _pipeline=0; } _pipeline = gst_pipeline_new("decode_to_app"); source = gst_element_factory_make("filesrc", "filesrc"); decodebin = gst_element_factory_make("decodebin", "decode_bin"); audio_convert = gst_element_factory_make("audioconvert","audio-convert"); audio_resample= gst_element_factory_make("audioresample","audio-resample"); deint =gst_element_factory_make("deinterleave", "deint"); capsfilter = gst_element_factory_make ("capsfilter", NULL); if (!_pipeline || !source || !decodebin || !audio_convert || !deint) { //std::cerr<<"Elements could not be created. Exiting."<<std::endl; } /* Set up the pipeline */ // GstCaps *caps = gst_caps_new_simple ("audio/x-raw", "format", G_TYPE_STRING, "S16LE", "layout",G_TYPE_STRING, "interleaved", "rate", G_TYPE_INT, (int)44100, "channels", G_TYPE_INT, (int)6, NULL); GstCaps *caps = gst_caps_from_string("audio/x-raw, layout=(string)interleaved, rate=(int)44100, format=(string)S16LE, channels=(int)6, channel-mask=(bitmask)0x000000000000003f"); g_object_set (capsfilter, "caps", caps, NULL); print_caps(caps, " "); g_object_set(G_OBJECT (source), "location", "/home/arion/Downloads/test2.mp3", NULL); /* we add a message handler */ bus = gst_pipeline_get_bus (GST_PIPELINE (_pipeline)); gst_bus_add_watch (bus, bus_call, _loop); gst_object_unref (bus); /* we add all elements into the pipeline */ gst_bin_add_many (GST_BIN (_pipeline), source, decodebin, audio_convert,audio_resample, deint,capsfilter, NULL); /* we link all the elements together */ link_two_elements(source, decodebin); gst_element_link (decodebin, capsfilter); link_two_elements(audio_resample, audio_convert); link_two_elements(audio_convert,deint); g_signal_connect (decodebin, "pad-added", G_CALLBACK (cb_new_pad), audio_resample); g_signal_connect (deint, "pad-added", G_CALLBACK (il_new_pad), 0); /* Set the pipeline to "playing" state*/ gst_element_set_state (_pipeline, GST_STATE_PLAYING); /* Iterate */ g_print ("Running...\n"); g_main_loop_run (_loop); /* Out of the main loop, clean up nicely */ g_print ("Returned, stopping listening\n"); gst_element_set_state (_pipeline, GST_STATE_NULL); g_print ("Deleting pipeline\n"); gst_object_unref (GST_OBJECT (_pipeline)); } My main problem is that i can not convert my 2 channel audio to 6 channel audio, i just got 2 could you help me please -- Sent from: http://gstreamer-devel.966125.n4.nabble.com/ _______________________________________________ gstreamer-devel mailing list [hidden email] https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel |
Free forum by Nabble | Edit this page |