static GstSegment * gst_timidity_get_segment (GstTimidity * timidity, GstFormat format, gboolean update) { gint64 start, stop, time; GstSegment *segment = gst_segment_new (); gst_timidity_src_convert (timidity, timidity->o_segment->format, timidity->o_segment->start, &format, &start); if (timidity->o_segment->stop == GST_CLOCK_TIME_NONE) { stop = GST_CLOCK_TIME_NONE; } else { gst_timidity_src_convert (timidity, timidity->o_segment->format, timidity->o_segment->stop, &format, &stop); } gst_timidity_src_convert (timidity, timidity->o_segment->format, timidity->o_segment->time, &format, &time); gst_segment_set_newsegment_full (segment, update, timidity->o_segment->rate, timidity->o_segment->applied_rate, format, start, stop, time); segment->last_stop = time; return segment; }
static GstFlowReturn gst_dtls_enc_push (GstDtlsEnc * self, GstBuffer * buffer) { GstDtlsBase *base = GST_DTLS_BASE (self); GstEvent *segment_event, *caps_event; gchar *stream_id; stream_id = gst_pad_get_stream_id (base->srcpad); if (stream_id == NULL) { stream_id = gst_pad_get_stream_id (base->sinkpad); if (stream_id == NULL) { stream_id = gst_pad_create_stream_id (base->srcpad, GST_ELEMENT (base), NULL); } gst_pad_push_event (base->srcpad, gst_event_new_stream_start (stream_id)); } g_free (stream_id); caps_event = gst_pad_get_sticky_event (base->srcpad, GST_EVENT_CAPS, 0); if (caps_event == NULL) { GstCaps *caps = gst_caps_from_string ("application/x-dtls"); caps_event = gst_event_new_caps (caps); gst_caps_unref (caps); gst_pad_push_event (base->srcpad, caps_event); } else { gst_event_unref (caps_event); } segment_event = gst_pad_get_sticky_event (base->srcpad, GST_EVENT_SEGMENT, 0); if (segment_event == NULL) { GstSegment *segment = gst_segment_new (); gst_segment_init (segment, GST_FORMAT_BYTES); segment_event = gst_event_new_segment (segment); gst_segment_free (segment); gst_pad_push_event (base->srcpad, segment_event); } else { gst_event_unref (segment_event); } GST_OBJECT_LOCK (self); if (self->src_buffer && self->running_thread == g_thread_self ()) { g_assert (gst_buffer_get_size (buffer) != 181); gst_buffer_copy_into (buffer, self->src_buffer, GST_BUFFER_COPY_METADATA, 0, -1); } GST_OBJECT_UNLOCK (self); return gst_pad_push (base->srcpad, buffer); }
static void gst_dshowaudiodec_init (GstDshowAudioDec * adec, GstDshowAudioDecClass * adec_class) { GstElementClass *element_class = GST_ELEMENT_GET_CLASS (adec); /* setup pads */ adec->sinkpad = gst_pad_new_from_template (gst_element_class_get_pad_template (element_class, "sink"), "sink"); gst_pad_set_setcaps_function (adec->sinkpad, gst_dshowaudiodec_sink_setcaps); gst_pad_set_event_function (adec->sinkpad, gst_dshowaudiodec_sink_event); gst_pad_set_chain_function (adec->sinkpad, gst_dshowaudiodec_chain); gst_element_add_pad (GST_ELEMENT (adec), adec->sinkpad); adec->srcpad = gst_pad_new_from_template (gst_element_class_get_pad_template (element_class, "src"), "src"); gst_element_add_pad (GST_ELEMENT (adec), adec->srcpad); adec->fakesrc = NULL; adec->fakesink = NULL; adec->decfilter = 0; adec->filtergraph = 0; adec->mediafilter = 0; adec->timestamp = GST_CLOCK_TIME_NONE; adec->segment = gst_segment_new (); adec->setup = FALSE; adec->depth = 0; adec->bitrate = 0; adec->block_align = 0; adec->channels = 0; adec->rate = 0; adec->layer = 0; adec->codec_data = NULL; adec->last_ret = GST_FLOW_OK; adec->com_init_lock = g_mutex_new(); adec->com_deinit_lock = g_mutex_new(); adec->com_initialized = g_cond_new(); adec->com_uninitialize = g_cond_new(); adec->com_uninitialized = g_cond_new(); g_mutex_lock (adec->com_init_lock); /* create the COM initialization thread */ g_thread_create ((GThreadFunc)gst_dshowaudiodec_com_thread, adec, FALSE, NULL); /* wait until the COM thread signals that COM has been initialized */ g_cond_wait (adec->com_initialized, adec->com_init_lock); g_mutex_unlock (adec->com_init_lock); }
static void gst_dshowvideodec_init (GstDshowVideoDec * vdec, GstDshowVideoDecClass * vdec_class) { GstElementClass *element_class = GST_ELEMENT_GET_CLASS (vdec); /* setup pads */ vdec->sinkpad = gst_pad_new_from_template (gst_element_class_get_pad_template (element_class, "sink"), "sink"); gst_pad_set_setcaps_function (vdec->sinkpad, gst_dshowvideodec_sink_setcaps); gst_pad_set_event_function (vdec->sinkpad, gst_dshowvideodec_sink_event); gst_pad_set_chain_function (vdec->sinkpad, gst_dshowvideodec_chain); gst_element_add_pad (GST_ELEMENT (vdec), vdec->sinkpad); vdec->srcpad = gst_pad_new_from_template (gst_element_class_get_pad_template (element_class, "src"), "src"); /* needed to implement caps negociation on our src pad */ /* gst_pad_set_getcaps_function (vdec->srcpad, gst_dshowvideodec_src_getcaps); gst_pad_set_setcaps_function (vdec->srcpad, gst_dshowvideodec_src_setcaps);*/ gst_element_add_pad (GST_ELEMENT (vdec), vdec->srcpad); vdec->fakesrc = NULL; vdec->fakesink = NULL; vdec->decfilter = NULL; vdec->last_ret = GST_FLOW_OK; vdec->filtergraph = NULL; vdec->mediafilter = NULL; vdec->srccaps = NULL; vdec->segment = gst_segment_new (); vdec->setup = FALSE; vdec->com_init_lock = g_mutex_new(); vdec->com_deinit_lock = g_mutex_new(); vdec->com_initialized = g_cond_new(); vdec->com_uninitialize = g_cond_new(); vdec->com_uninitialized = g_cond_new(); g_mutex_lock (vdec->com_init_lock); /* create the COM initialization thread */ g_thread_create ((GThreadFunc)gst_dshowvideodec_com_thread, vdec, FALSE, NULL); /* wait until the COM thread signals that COM has been initialized */ g_cond_wait (vdec->com_initialized, vdec->com_init_lock); g_mutex_unlock (vdec->com_init_lock); }
static void gst_dshowaudiodec_init (GstDshowAudioDec * adec, GstDshowAudioDecClass * adec_class) { GstElementClass *element_class = GST_ELEMENT_GET_CLASS (adec); HRESULT hr; /* setup pads */ adec->sinkpad = gst_pad_new_from_template (gst_element_class_get_pad_template (element_class, "sink"), "sink"); gst_pad_set_setcaps_function (adec->sinkpad, gst_dshowaudiodec_sink_setcaps); gst_pad_set_event_function (adec->sinkpad, gst_dshowaudiodec_sink_event); gst_pad_set_chain_function (adec->sinkpad, gst_dshowaudiodec_chain); gst_element_add_pad (GST_ELEMENT (adec), adec->sinkpad); adec->srcpad = gst_pad_new_from_template (gst_element_class_get_pad_template (element_class, "src"), "src"); gst_element_add_pad (GST_ELEMENT (adec), adec->srcpad); adec->fakesrc = NULL; adec->fakesink = NULL; adec->decfilter = 0; adec->filtergraph = 0; adec->mediafilter = 0; adec->timestamp = GST_CLOCK_TIME_NONE; adec->segment = gst_segment_new (); adec->setup = FALSE; adec->depth = 0; adec->bitrate = 0; adec->block_align = 0; adec->channels = 0; adec->rate = 0; adec->layer = 0; adec->codec_data = NULL; adec->last_ret = GST_FLOW_OK; hr = CoInitialize (0); if (SUCCEEDED(hr)) { adec->comInitialized = TRUE; } }
static void gst_smart_encoder_init (GstSmartEncoder * smart_encoder) { smart_encoder->sinkpad = gst_pad_new_from_static_template (&sink_template, "sink"); gst_pad_set_chain_function (smart_encoder->sinkpad, gst_smart_encoder_chain); gst_pad_set_event_function (smart_encoder->sinkpad, smart_encoder_sink_event); gst_pad_set_query_function (smart_encoder->sinkpad, smart_encoder_sink_query); gst_element_add_pad (GST_ELEMENT (smart_encoder), smart_encoder->sinkpad); smart_encoder->srcpad = gst_pad_new_from_static_template (&src_template, "src"); gst_pad_use_fixed_caps (smart_encoder->srcpad); gst_element_add_pad (GST_ELEMENT (smart_encoder), smart_encoder->srcpad); smart_encoder->segment = gst_segment_new (); smart_encoder_reset (smart_encoder); }
static void gst_dshowvideodec_init (GstDshowVideoDec * vdec, GstDshowVideoDecClass * vdec_class) { GstElementClass *element_class = GST_ELEMENT_GET_CLASS (vdec); HRESULT hr; /* setup pads */ vdec->sinkpad = gst_pad_new_from_template (gst_element_class_get_pad_template (element_class, "sink"), "sink"); gst_pad_set_setcaps_function (vdec->sinkpad, gst_dshowvideodec_sink_setcaps); gst_pad_set_event_function (vdec->sinkpad, gst_dshowvideodec_sink_event); gst_pad_set_chain_function (vdec->sinkpad, gst_dshowvideodec_chain); gst_element_add_pad (GST_ELEMENT (vdec), vdec->sinkpad); vdec->srcpad = gst_pad_new_from_template (gst_element_class_get_pad_template (element_class, "src"), "src"); /* needed to implement caps negociation on our src pad */ /* gst_pad_set_getcaps_function (vdec->srcpad, gst_dshowvideodec_src_getcaps); gst_pad_set_setcaps_function (vdec->srcpad, gst_dshowvideodec_src_setcaps);*/ gst_element_add_pad (GST_ELEMENT (vdec), vdec->srcpad); vdec->fakesrc = NULL; vdec->fakesink = NULL; vdec->decfilter = NULL; vdec->last_ret = GST_FLOW_OK; vdec->filtergraph = NULL; vdec->mediafilter = NULL; vdec->srccaps = NULL; vdec->segment = gst_segment_new (); vdec->setup = FALSE; hr = CoInitialize (0); if (SUCCEEDED(hr)) { vdec->comInitialized = TRUE; } }
static void gst_dshowvideodec_init (GstDshowVideoDec * vdec, GstDshowVideoDecClass * vdec_class) { GstElementClass *element_class = GST_ELEMENT_GET_CLASS (vdec); /* setup pads */ vdec->sinkpad = gst_pad_new_from_template (gst_element_class_get_pad_template (element_class, "sink"), "sink"); gst_pad_set_setcaps_function (vdec->sinkpad, gst_dshowvideodec_sink_setcaps); gst_pad_set_event_function (vdec->sinkpad, gst_dshowvideodec_sink_event); gst_pad_set_chain_function (vdec->sinkpad, gst_dshowvideodec_chain); gst_element_add_pad (GST_ELEMENT (vdec), vdec->sinkpad); vdec->srcpad = gst_pad_new_from_template (gst_element_class_get_pad_template (element_class, "src"), "src"); /* needed to implement caps negociation on our src pad */ /* gst_pad_set_getcaps_function (vdec->srcpad, gst_dshowvideodec_src_getcaps); gst_pad_set_setcaps_function (vdec->srcpad, gst_dshowvideodec_src_setcaps);*/ gst_element_add_pad (GST_ELEMENT (vdec), vdec->srcpad); vdec->srcfilter = NULL; vdec->decfilter = NULL; vdec->sinkfilter = NULL; vdec->last_ret = GST_FLOW_OK; vdec->filtergraph = NULL; vdec->mediafilter = NULL; vdec->gstdshowsrcfilter = NULL; vdec->srccaps = NULL; vdec->segment = gst_segment_new (); CoInitializeEx (NULL, COINIT_MULTITHREADED); }
static void gst_dvdec_init (GstDVDec * dvdec, GstDVDecClass * g_class) { dvdec->sinkpad = gst_pad_new_from_static_template (&sink_temp, "sink"); gst_pad_set_setcaps_function (dvdec->sinkpad, GST_DEBUG_FUNCPTR (gst_dvdec_sink_setcaps)); gst_pad_set_chain_function (dvdec->sinkpad, gst_dvdec_chain); gst_pad_set_event_function (dvdec->sinkpad, gst_dvdec_sink_event); gst_element_add_pad (GST_ELEMENT (dvdec), dvdec->sinkpad); dvdec->srcpad = gst_pad_new_from_static_template (&src_temp, "src"); gst_pad_use_fixed_caps (dvdec->srcpad); gst_element_add_pad (GST_ELEMENT (dvdec), dvdec->srcpad); dvdec->framerate_numerator = 0; dvdec->framerate_denominator = 0; dvdec->wide = FALSE; dvdec->drop_factor = 1; dvdec->clamp_luma = FALSE; dvdec->clamp_chroma = FALSE; dvdec->quality = DV_DEFAULT_QUALITY; dvdec->segment = gst_segment_new (); }