rendered paste bodyvoid cb_padadded(GstElement *element, GstPad *pad, gpointer user_data){ GstElement* decode = GST_ELEMENT(user_data); gchar *padname = gst_pad_get_name(pad); g_print("pad %s was created dynamically!\n", padname); if (strcmp(padname, "video_00")==0){ g_print("video pad %s created!\n", padname); if (!gst_pad_is_linked(pad)){ if (!gst_element_link_pads(element, padname, decode, "sink")) g_print("error while link demux and decode!\n"); } }}void btn3GP_clicked_cb(GtkWidget* button, gpointer data){ gchar *filepath = "/var/opt/alp/bundles/com.access.apps.gsttest/rsc/1.3gp"; GstElement *pipeline; GstElement *filesrc, *demux, *sink, *decode; GMainLoop *loop; GstBus *bus; gst_init(NULL, NULL); loop = g_main_loop_new(NULL, FALSE); pipeline = gst_pipeline_new("3gpplayer"); bus = gst_pipeline_get_bus(GST_PIPELINE(pipeline)); gst_bus_add_watch(bus, my_bus_callback, loop); filesrc = gst_element_factory_make("filesrc", "filesrc"); g_object_set(G_OBJECT(filesrc), "location", filepath, NULL); demux = gst_element_factory_make("qtdemux", "demux"); decode = gst_element_factory_make("oki_h263_dec","decode"); sink = gst_element_factory_make("fakesink","sink"); if ((filesrc==NULL) || (demux==NULL) || (decode==NULL) || (sink==NULL)) g_print("error while create element!\n"); g_signal_connect(G_OBJECT(demux), "pad-added", G_CALLBACK(cb_padadded), decode); gst_bin_add_many(GST_BIN(pipeline), filesrc, demux, decode, sink, NULL); if (!gst_element_link_many(filesrc, demux, NULL)) g_print("error while link filesrc and qtdemux!\n"); if (!gst_element_link_many(decode, sink, NULL)) g_print("error while link!\n"); gst_element_set_state(pipeline, GST_STATE_PLAYING); g_main_loop_run(loop); //clean up gst_element_set_state(pipeline, GST_STATE_NULL); gst_object_unref(GST_OBJECT(pipeline));}