static void gst_merger_init (GstMerger * merger) { int res; merger->sinkl_pad = gst_pad_new_from_static_template (&sinkl_factory, "sink_l"); gst_pad_set_event_function (merger->sinkl_pad, GST_DEBUG_FUNCPTR (gst_merger_event_sinkl)); gst_pad_set_chain_function (merger->sinkl_pad, GST_DEBUG_FUNCPTR (gst_merger_chain_sinkl)); gst_element_add_pad (GST_ELEMENT (merger), merger->sinkl_pad); merger->sinkr_pad = gst_pad_new_from_static_template (&sinkr_factory, "sink_r"); gst_pad_set_event_function (merger->sinkr_pad, GST_DEBUG_FUNCPTR (gst_merger_event_sinkr)); gst_pad_set_chain_function (merger->sinkr_pad, GST_DEBUG_FUNCPTR (gst_merger_chain_sinkr)); gst_element_add_pad (GST_ELEMENT (merger), merger->sinkr_pad); merger->srcv_pad = gst_pad_new_from_static_template (&srcv_factory, "srcv"); gst_pad_set_event_function (merger->srcv_pad, GST_DEBUG_FUNCPTR (gst_merger_event_srcv)); gst_element_add_pad (GST_ELEMENT (merger), merger->srcv_pad); merger->task = gst_task_new ((GstTaskFunction) process_video, merger, NULL); g_cond_init (&merger->task_cond); g_mutex_init (&merger->task_lock); g_rec_mutex_init (&merger->task_mutex); gst_task_set_lock (merger->task, &merger->task_mutex); }
static void start_eos_task (GstAmlVdec *amlvdec) { if (! amlvdec->eos_task) { amlvdec->eos_task = gst_task_new ((GstTaskFunction) gst_amlvdec_polling_eos, amlvdec,NULL); gst_task_set_lock (amlvdec->eos_task, &amlvdec->eos_lock); } gst_task_start (amlvdec->eos_task); }
static void gst_hls_demux_init (GstHLSDemux * demux) { /* sink pad */ demux->sinkpad = gst_pad_new_from_static_template (&sinktemplate, "sink"); gst_pad_set_chain_function (demux->sinkpad, GST_DEBUG_FUNCPTR (gst_hls_demux_chain)); gst_pad_set_event_function (demux->sinkpad, GST_DEBUG_FUNCPTR (gst_hls_demux_sink_event)); gst_element_add_pad (GST_ELEMENT (demux), demux->sinkpad); /* Downloader */ demux->downloader = gst_uri_downloader_new (); demux->do_typefind = TRUE; /* Properties */ demux->fragments_cache = DEFAULT_FRAGMENTS_CACHE; demux->bitrate_limit = DEFAULT_BITRATE_LIMIT; demux->connection_speed = DEFAULT_CONNECTION_SPEED; demux->queue = g_queue_new (); /* Updates task */ g_rec_mutex_init (&demux->updates_lock); demux->updates_task = gst_task_new ((GstTaskFunction) gst_hls_demux_updates_loop, demux, NULL); gst_task_set_lock (demux->updates_task, &demux->updates_lock); g_mutex_init (&demux->updates_timed_lock); /* Streaming task */ g_rec_mutex_init (&demux->stream_lock); demux->stream_task = gst_task_new ((GstTaskFunction) gst_hls_demux_stream_loop, demux, NULL); gst_task_set_lock (demux->stream_task, &demux->stream_lock); }
void gst_curl_multi_context_ref (GstCurlMultiContext * thiz) { g_mutex_lock (&thiz->mutex); if (thiz->refcount == 0) { /* Set up various in-task properties */ /* set up curl */ thiz->multi_handle = curl_multi_init (); curl_multi_setopt (thiz->multi_handle, CURLMOPT_PIPELINING, 1); #ifdef CURLMOPT_MAX_HOST_CONNECTIONS curl_multi_setopt (thiz->multi_handle, CURLMOPT_MAX_HOST_CONNECTIONS, 1); #endif /* Start the thread */ #if GST_CHECK_VERSION(1,0,0) thiz->task = gst_task_new ( (GstTaskFunction) gst_curl_multi_context_loop, (gpointer) thiz, NULL); #else thiz->task = gst_task_create ( (GstTaskFunction) gst_curl_multi_context_loop, (gpointer) thiz); #endif gst_task_set_lock (thiz->task, &thiz->task_rec_mutex); if (gst_task_start (thiz->task) == FALSE) { /* * This is a pretty critical failure and is not recoverable, so commit * sudoku and run away. */ GST_ERROR ("Couldn't start curl_multi task! Aborting."); abort (); } GST_INFO ("Curl multi loop has been correctly initialised!"); } thiz->refcount++; g_mutex_unlock (&thiz->mutex); }
static void dvb_base_bin_init (DvbBaseBin * dvbbasebin) { DvbBaseBinStream *stream; GstPad *ghost, *pad; int i; dvbbasebin->dvbsrc = gst_element_factory_make ("dvbsrc", NULL); dvbbasebin->buffer_queue = gst_element_factory_make ("queue", NULL); dvbbasebin->tsparse = gst_element_factory_make ("tsparse", NULL); g_object_set (dvbbasebin->buffer_queue, "max-size-buffers", 0, "max-size-bytes", 0, "max-size-time", (guint64) 0, NULL); gst_bin_add_many (GST_BIN (dvbbasebin), dvbbasebin->dvbsrc, dvbbasebin->buffer_queue, dvbbasebin->tsparse, NULL); gst_element_link_many (dvbbasebin->dvbsrc, dvbbasebin->buffer_queue, dvbbasebin->tsparse, NULL); /* Proxy dvbsrc signals */ g_signal_connect (dvbbasebin->dvbsrc, "tuning-start", G_CALLBACK (tuning_start_signal_cb), dvbbasebin); g_signal_connect (dvbbasebin->dvbsrc, "tuning-done", G_CALLBACK (tuning_done_signal_cb), dvbbasebin); g_signal_connect (dvbbasebin->dvbsrc, "tuning-fail", G_CALLBACK (tuning_fail_signal_cb), dvbbasebin); /* Expose tsparse source pad */ if (dvbbasebin->tsparse != NULL) { pad = gst_element_get_static_pad (dvbbasebin->tsparse, "src"); ghost = gst_ghost_pad_new ("src", pad); } else { ghost = gst_ghost_pad_new_no_target ("src", GST_PAD_SRC); } gst_element_add_pad (GST_ELEMENT (dvbbasebin), ghost); dvbbasebin->programs = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, dvb_base_bin_program_destroy); dvbbasebin->streams = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, g_free); dvbbasebin->pmtlist = NULL; dvbbasebin->pmtlist_changed = FALSE; dvbbasebin->disposed = FALSE; dvb_base_bin_reset (dvbbasebin); /* add PAT, CAT, NIT, SDT, EIT, TDT to pids filter for dvbsrc */ i = 0; while (initial_pids[i] >= 0) { stream = dvb_base_bin_add_stream (dvbbasebin, (guint16) initial_pids[i]); dvb_base_bin_ref_stream (stream); i++; } dvb_base_bin_rebuild_filter (dvbbasebin); g_rec_mutex_init (&dvbbasebin->lock); dvbbasebin->task = gst_task_new ((GstTaskFunction) dvb_base_bin_task, dvbbasebin, NULL); gst_task_set_lock (dvbbasebin->task, &dvbbasebin->lock); dvbbasebin->poll = gst_poll_new_timer (); }
static void gst_decklink_src_init (GstDecklinkSrc * decklinksrc) { GstDecklinkSrcClass *decklinksrc_class; decklinksrc_class = GST_DECKLINK_SRC_GET_CLASS (decklinksrc); g_rec_mutex_init (&decklinksrc->task_mutex); decklinksrc->task = gst_task_new (gst_decklink_src_task, decklinksrc, NULL); gst_task_set_lock (decklinksrc->task, &decklinksrc->task_mutex); decklinksrc->audiosrcpad = gst_pad_new_from_static_template (&gst_decklink_src_audio_src_template, "audiosrc"); gst_pad_set_query_function (decklinksrc->audiosrcpad, GST_DEBUG_FUNCPTR (gst_decklink_src_audio_src_query)); gst_element_add_pad (GST_ELEMENT (decklinksrc), decklinksrc->audiosrcpad); decklinksrc->videosrcpad = gst_pad_new_from_template (gst_element_class_get_pad_template (GST_ELEMENT_CLASS (decklinksrc_class), "videosrc"), "videosrc"); gst_pad_set_query_function (decklinksrc->videosrcpad, GST_DEBUG_FUNCPTR (gst_decklink_src_video_src_query)); gst_element_add_pad (GST_ELEMENT (decklinksrc), decklinksrc->videosrcpad); g_cond_init (&decklinksrc->cond); g_mutex_init (&decklinksrc->mutex); /* FIXME: turn this into a property? */ decklinksrc->copy_data = TRUE; decklinksrc->mode = GST_DECKLINK_MODE_NTSC; decklinksrc->connection = GST_DECKLINK_CONNECTION_SDI; decklinksrc->audio_connection = GST_DECKLINK_AUDIO_CONNECTION_AUTO; decklinksrc->device = 0; decklinksrc->stop = FALSE; decklinksrc->dropped_frames = 0; decklinksrc->dropped_frames_old = 0; decklinksrc->frame_num = -1; /* -1 so will be 0 after incrementing */ #ifdef _MSC_VER g_mutex_init (&decklinksrc->com_init_lock); g_mutex_init (&decklinksrc->com_deinit_lock); g_cond_init (&decklinksrc->com_initialized); g_cond_init (&decklinksrc->com_uninitialize); g_cond_init (&decklinksrc->com_uninitialized); g_mutex_lock (&decklinksrc->com_init_lock); /* create the COM initialization thread */ g_thread_create ((GThreadFunc) gst_decklink_src_com_thread, decklinksrc, FALSE, NULL); /* wait until the COM thread signals that COM has been initialized */ g_cond_wait (&decklinksrc->com_initialized, &decklinksrc->com_init_lock); g_mutex_unlock (&decklinksrc->com_init_lock); #endif /* _MSC_VER */ GST_DEBUG_CATEGORY_INIT (gst_decklink_src_debug_category, "decklinksrc", 0, "debug category for decklinksrc element"); }