static void gst_visual_init (GstVisual * visual) { /* create the sink and src pads */ visual->sinkpad = gst_pad_new_from_static_template (&sink_template, "sink"); gst_pad_set_setcaps_function (visual->sinkpad, gst_visual_sink_setcaps); gst_pad_set_chain_function (visual->sinkpad, gst_visual_chain); gst_pad_set_event_function (visual->sinkpad, gst_visual_sink_event); gst_element_add_pad (GST_ELEMENT (visual), visual->sinkpad); visual->srcpad = gst_pad_new_from_static_template (&src_template, "src"); gst_pad_set_setcaps_function (visual->srcpad, gst_visual_src_setcaps); gst_pad_set_getcaps_function (visual->srcpad, gst_visual_getcaps); gst_pad_set_event_function (visual->srcpad, gst_visual_src_event); gst_pad_set_query_function (visual->srcpad, gst_visual_src_query); gst_element_add_pad (GST_ELEMENT (visual), visual->srcpad); visual->adapter = gst_adapter_new (); }
static void gst_ts_shifter_init (GstTSShifter * ts) { ts->sinkpad = gst_pad_new_from_static_template (&sink_factory, "sink"); gst_pad_set_chain_function (ts->sinkpad, GST_DEBUG_FUNCPTR (gst_ts_shifter_chain)); gst_pad_set_activatemode_function (ts->sinkpad, GST_DEBUG_FUNCPTR (gst_ts_shifter_sink_activate_mode)); gst_pad_set_event_function (ts->sinkpad, GST_DEBUG_FUNCPTR (gst_ts_shifter_handle_sink_event)); gst_element_add_pad (GST_ELEMENT (ts), ts->sinkpad); ts->srcpad = gst_pad_new_from_static_template (&src_factory, "src"); gst_pad_set_activatemode_function (ts->srcpad, GST_DEBUG_FUNCPTR (gst_ts_shifter_src_activate_mode)); gst_pad_set_event_function (ts->srcpad, GST_DEBUG_FUNCPTR (gst_ts_shifter_handle_src_event)); gst_pad_set_query_function (ts->srcpad, GST_DEBUG_FUNCPTR (gst_ts_shifter_handle_src_query)); gst_element_add_pad (GST_ELEMENT (ts), ts->srcpad); /* set default values */ ts->cur_bytes = 0; ts->srcresult = GST_FLOW_FLUSHING; ts->sinkresult = GST_FLOW_FLUSHING; ts->is_eos = FALSE; ts->need_newsegment = TRUE; ts->is_leaking = FALSE; g_mutex_init (&ts->flow_lock); g_cond_init (&ts->buffer_add); ts->allocator_name = NULL; ts->cache = NULL; ts->cache_size = DEFAULT_CACHE_SIZE; GST_DEBUG_OBJECT (ts, "initialized time shifter"); }
static void gst_raw_parse_init (GstRawParse * rp, GstRawParseClass * g_class) { GstPadTemplate *src_pad_template; GstElementClass *element_class = GST_ELEMENT_CLASS (g_class); rp->sinkpad = gst_pad_new_from_static_template (&gst_raw_parse_sink_pad_template, "sink"); gst_pad_set_chain_function (rp->sinkpad, GST_DEBUG_FUNCPTR (gst_raw_parse_chain)); gst_pad_set_event_function (rp->sinkpad, GST_DEBUG_FUNCPTR (gst_raw_parse_sink_event)); gst_pad_set_activate_function (rp->sinkpad, GST_DEBUG_FUNCPTR (gst_raw_parse_sink_activate)); gst_pad_set_activatemode_function (rp->sinkpad, GST_DEBUG_FUNCPTR (gst_raw_parse_sink_activatemode)); gst_element_add_pad (GST_ELEMENT (rp), rp->sinkpad); src_pad_template = gst_element_class_get_pad_template (element_class, "src"); if (src_pad_template) { rp->srcpad = gst_pad_new_from_template (src_pad_template, "src"); } else { g_warning ("Subclass didn't specify a src pad template"); g_assert_not_reached (); } gst_pad_set_event_function (rp->srcpad, GST_DEBUG_FUNCPTR (gst_raw_parse_src_event)); gst_pad_set_query_function (rp->srcpad, GST_DEBUG_FUNCPTR (gst_raw_parse_src_query)); gst_element_add_pad (GST_ELEMENT (rp), rp->srcpad); rp->adapter = gst_adapter_new (); rp->fps_n = 1; rp->fps_d = 0; rp->framesize = 1; gst_raw_parse_reset (rp); }
static void gst_vcd_parse_init (GstVcdParse * vcd, GstVcdParseClass * klass) { vcd->sinkpad = gst_pad_new_from_static_template (&sink_factory, "sink"); gst_pad_set_chain_function (vcd->sinkpad, GST_DEBUG_FUNCPTR (gst_vcd_parse_chain)); gst_pad_set_event_function (vcd->sinkpad, GST_DEBUG_FUNCPTR (gst_vcd_parse_sink_event)); gst_element_add_pad (GST_ELEMENT (vcd), vcd->sinkpad); vcd->srcpad = gst_pad_new_from_static_template (&src_factory, "src"); gst_pad_set_event_function (vcd->srcpad, GST_DEBUG_FUNCPTR (gst_vcd_parse_src_event)); gst_pad_set_query_function (vcd->srcpad, GST_DEBUG_FUNCPTR (gst_vcd_parse_src_query)); gst_pad_use_fixed_caps (vcd->srcpad); gst_pad_set_caps (vcd->srcpad, gst_static_pad_template_get_caps (&src_factory)); gst_element_add_pad (GST_ELEMENT (vcd), vcd->srcpad); }
static void gst_flxdec_init (GstFlxDec * flxdec) { flxdec->sinkpad = gst_pad_new_from_static_template (&sink_factory, "sink"); gst_element_add_pad (GST_ELEMENT (flxdec), flxdec->sinkpad); gst_pad_set_chain_function (flxdec->sinkpad, gst_flxdec_chain); gst_pad_set_event_function (flxdec->sinkpad, gst_flxdec_sink_event_handler); flxdec->srcpad = gst_pad_new_from_static_template (&src_video_factory, "src"); gst_element_add_pad (GST_ELEMENT (flxdec), flxdec->srcpad); gst_pad_set_query_function (flxdec->srcpad, gst_flxdec_src_query_handler); gst_pad_set_event_function (flxdec->srcpad, gst_flxdec_src_event_handler); gst_pad_use_fixed_caps (flxdec->srcpad); flxdec->frame = NULL; flxdec->delta = NULL; flxdec->adapter = gst_adapter_new (); }
static void gst_gme_dec_init (GstGmeDec * gme) { gme->sinkpad = gst_pad_new_from_static_template (&sink_factory, "sink"); /* gst_pad_set_query_function (gme->sinkpad, NULL); */ gst_pad_set_event_function (gme->sinkpad, gst_gme_dec_sink_event); gst_pad_set_chain_function (gme->sinkpad, gst_gme_dec_chain); gst_element_add_pad (GST_ELEMENT (gme), gme->sinkpad); gme->srcpad = gst_pad_new_from_static_template (&src_factory, "src"); gst_pad_set_event_function (gme->srcpad, gst_gme_dec_src_event); gst_pad_set_query_function (gme->srcpad, gst_gme_dec_src_query); gst_pad_use_fixed_caps (gme->srcpad); gst_element_add_pad (GST_ELEMENT (gme), gme->srcpad); gme->adapter = gst_adapter_new (); gme->player = NULL; gme->total_duration = GST_CLOCK_TIME_NONE; gme->initialized = FALSE; }
// quality MUST be within the range of [0-2] int transcode_music(int infd, int quality) { assert(quality >= 0 && (unsigned int)quality < QUALITY_RAW); // Raw not supported yet if(quality == QUALITY_RAW) { quality = 2; } GError* error = NULL; GstElement* pipeline = gst_parse_launch(MUSIC_PIPELINE, &error); if(error != NULL) { fprintf(stderr, "Failed to initialize gstreamer pipeline: %s\n", error->message); return 1; } if(pipeline == NULL) { fprintf(stderr, "Failed to initialize gstreamer plugin"); return 1; } GstElement* src = gst_bin_get_by_name(GST_BIN(pipeline), "src"); GstElement* converter = gst_bin_get_by_name(GST_BIN(pipeline), "converter"); GstPad* converter_sink = gst_element_get_static_pad(converter, "sink"); GstElement* enc = gst_bin_get_by_name(GST_BIN(pipeline), "enc"); GstElement* sink = gst_bin_get_by_name(GST_BIN(pipeline), "sink"); if(src == NULL || converter == NULL || enc == NULL || sink == NULL) { fprintf(stderr, "Failed to select gstreamer elements\n"); return 1; } if(converter_sink == NULL) { fprintf(stderr, "Failed to select converter sink\n"); return 1; } g_object_set(G_OBJECT(src), "fd", infd, NULL); g_object_set(G_OBJECT(enc), "quality", MUSIC_QUALITIES[quality], NULL); g_object_set(G_OBJECT(sink), "fd", 1, NULL); GMainLoop* loop = g_main_loop_new(NULL, false); GstBus* bus = gst_pipeline_get_bus(GST_PIPELINE(pipeline)); gst_bus_add_watch(bus, bus_call, loop); gst_object_unref(bus); // We have to remove any image tags. They're unnecessary, and can cause // libvorbis to crash. gst_pad_set_event_function(converter_sink, remove_image); gst_object_unref(converter_sink); gst_element_set_state(pipeline, GST_STATE_PLAYING); g_main_loop_run(loop); gst_element_set_state(pipeline, GST_STATE_NULL); return 0; }
static void gst_rsvg_dec_init (GstRsvgDec * rsvg, GstRsvgDecClass * klass) { rsvg->sinkpad = gst_pad_new_from_static_template (&sink_factory, "sink"); gst_pad_set_setcaps_function (rsvg->sinkpad, gst_rsvg_dec_sink_set_caps); gst_pad_set_event_function (rsvg->sinkpad, gst_rsvg_dec_sink_event); gst_pad_set_chain_function (rsvg->sinkpad, gst_rsvg_dec_chain); gst_element_add_pad (GST_ELEMENT (rsvg), rsvg->sinkpad); rsvg->srcpad = gst_pad_new_from_static_template (&src_factory, "src"); gst_pad_set_event_function (rsvg->srcpad, gst_rsvg_dec_src_event); gst_pad_set_query_function (rsvg->srcpad, gst_rsvg_dec_src_query); gst_pad_set_query_type_function (rsvg->srcpad, gst_rsvg_dec_src_query_type); gst_pad_set_setcaps_function (rsvg->srcpad, gst_rsvg_dec_src_set_caps); gst_element_add_pad (GST_ELEMENT (rsvg), rsvg->srcpad); rsvg->adapter = gst_adapter_new (); gst_rsvg_dec_reset (rsvg); }
static void gst_spc_dec_init (GstSpcDec * spc, GstSpcDecClass * klass) { spc->sinkpad = gst_pad_new_from_static_template (&sink_factory, "sink"); /* gst_pad_set_query_function (spc->sinkpad, NULL); */ gst_pad_set_event_function (spc->sinkpad, gst_spc_dec_sink_event); gst_pad_set_chain_function (spc->sinkpad, gst_spc_dec_chain); gst_element_add_pad (GST_ELEMENT (spc), spc->sinkpad); spc->srcpad = gst_pad_new_from_static_template (&src_factory, "src"); gst_pad_set_event_function (spc->srcpad, gst_spc_dec_src_event); gst_pad_set_query_function (spc->srcpad, gst_spc_dec_src_query); gst_pad_set_query_type_function (spc->srcpad, gst_spc_dec_src_query_type); gst_pad_use_fixed_caps (spc->srcpad); gst_element_add_pad (GST_ELEMENT (spc), spc->srcpad); spc->buf = NULL; spc->initialized = FALSE; spc_tag_clear (&spc->tag_info); }
static void gst_vdp_vpp_init (GstVdpVideoPostProcess * vpp, GstVdpVideoPostProcessClass * gclass) { GstPadTemplate *src_template, *sink_template; vpp->device = NULL; vpp->mixer = VDP_INVALID_HANDLE; vpp->display = NULL; vpp->force_aspect_ratio = FALSE; vpp->mode = GST_VDP_DEINTERLACE_MODE_AUTO; vpp->method = GST_VDP_DEINTERLACE_METHOD_BOB; vpp->noise_reduction = 0.0; vpp->sharpening = 0.0; /* SRC PAD */ src_template = gst_element_class_get_pad_template (GST_ELEMENT_CLASS (gclass), "src"); vpp->srcpad = GST_PAD (gst_vdp_output_src_pad_new (src_template, "src")); gst_element_add_pad (GST_ELEMENT (vpp), vpp->srcpad); gst_pad_set_event_function (vpp->srcpad, GST_DEBUG_FUNCPTR (gst_vdp_vpp_src_event)); /* SINK PAD */ sink_template = gst_element_class_get_pad_template (GST_ELEMENT_CLASS (gclass), "sink"); vpp->sinkpad = gst_pad_new_from_template (sink_template, "sink"); gst_element_add_pad (GST_ELEMENT (vpp), vpp->sinkpad); gst_pad_set_getcaps_function (vpp->sinkpad, gst_vdp_vpp_sink_getcaps); gst_pad_set_setcaps_function (vpp->sinkpad, gst_vdp_vpp_sink_setcaps); gst_pad_set_chain_function (vpp->sinkpad, GST_DEBUG_FUNCPTR (gst_vdp_vpp_chain)); gst_pad_set_event_function (vpp->sinkpad, GST_DEBUG_FUNCPTR (gst_vdp_vpp_sink_event)); }
static void link_sinks (GstElement * mpegtsmux, GstPad ** src1, GstPad ** src2, GstPad ** src3, TestData * test_data) { GstPad *mux_sink1, *mux_sink2, *mux_sink3; GstCaps *caps; /* link 3 sink pads, 2 video 1 audio */ *src1 = gst_pad_new_from_static_template (&video_src_template, "src1"); gst_pad_set_active (*src1, TRUE); gst_pad_set_element_private (*src1, test_data); gst_pad_set_event_function (*src1, src_event); mux_sink1 = gst_element_get_request_pad (mpegtsmux, "sink_1"); fail_unless (gst_pad_link (*src1, mux_sink1) == GST_PAD_LINK_OK); *src2 = gst_pad_new_from_static_template (&video_src_template, "src2"); gst_pad_set_active (*src2, TRUE); gst_pad_set_element_private (*src2, test_data); gst_pad_set_event_function (*src2, src_event); mux_sink2 = gst_element_get_request_pad (mpegtsmux, "sink_2"); fail_unless (gst_pad_link (*src2, mux_sink2) == GST_PAD_LINK_OK); *src3 = gst_pad_new_from_static_template (&audio_src_template, "src3"); gst_pad_set_active (*src3, TRUE); gst_pad_set_element_private (*src3, test_data); gst_pad_set_event_function (*src3, src_event); mux_sink3 = gst_element_get_request_pad (mpegtsmux, "sink_3"); fail_unless (gst_pad_link (*src3, mux_sink3) == GST_PAD_LINK_OK); caps = gst_caps_new_simple ("video/x-h264", NULL); gst_pad_set_caps (mux_sink1, caps); gst_pad_set_caps (mux_sink2, caps); gst_caps_unref (caps); caps = gst_caps_new_simple ("audio/mpeg", "mpegversion", G_TYPE_INT, 4, NULL); gst_pad_set_caps (mux_sink3, caps); gst_caps_unref (caps); gst_object_unref (mux_sink1); gst_object_unref (mux_sink2); gst_object_unref (mux_sink3); }
static void gst_hls_demux_init (GstHLSDemux * demux, GstHLSDemuxClass * klass) { /* 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); /* fetcher pad */ demux->fetcherpad = gst_pad_new_from_static_template (&fetchertemplate, "sink"); gst_pad_set_chain_function (demux->fetcherpad, GST_DEBUG_FUNCPTR (gst_hls_demux_fetcher_chain)); gst_pad_set_event_function (demux->fetcherpad, GST_DEBUG_FUNCPTR (gst_hls_demux_fetcher_sink_event)); gst_pad_set_element_private (demux->fetcherpad, demux); gst_pad_activate_push (demux->fetcherpad, TRUE); demux->do_typefind = TRUE; /* Properties */ demux->fragments_cache = DEFAULT_FRAGMENTS_CACHE; demux->bitrate_switch_tol = DEFAULT_BITRATE_SWITCH_TOLERANCE; demux->download = gst_adapter_new (); demux->fetcher_bus = gst_bus_new (); gst_bus_set_sync_handler (demux->fetcher_bus, gst_hls_demux_fetcher_bus_handler, demux); demux->thread_cond = g_cond_new (); demux->thread_lock = g_mutex_new (); demux->fetcher_cond = g_cond_new (); demux->fetcher_lock = g_mutex_new (); demux->queue = g_queue_new (); g_static_rec_mutex_init (&demux->task_lock); /* FIXME: This really should be a pad task instead */ demux->task = gst_task_create ((GstTaskFunction) gst_hls_demux_loop, demux); gst_task_set_lock (demux->task, &demux->task_lock); }
static void type_instance_init (GTypeInstance *instance, gpointer g_class) { GstOmxBaseFilter2 *self; GstElementClass *element_class; GstOmxBaseFilter2Class *bclass; int i; char srcname[10]; element_class = GST_ELEMENT_CLASS (g_class); bclass = GST_OMX_BASE_FILTER2_CLASS (g_class); self = GST_OMX_BASE_FILTER2 (instance); GST_LOG_OBJECT (self, "begin"); /* GOmx */ self->gomx = g_omx_core_new (self, g_class); self->in_port = g_omx_core_get_port (self->gomx, "in", 0); self->in_port->omx_allocate = TRUE; self->in_port->share_buffer = FALSE; for (i = 0; i < NUM_OUTPUTS; i++) { sprintf(srcname, "out_%02x", i); self->out_port[i] = g_omx_core_get_port (self->gomx, srcname, 1+i); self->out_port[i]->buffer_alloc = buffer_alloc; self->out_port[i]->omx_allocate = TRUE; self->out_port[i]->share_buffer = FALSE; } self->ready_lock = g_mutex_new (); self->sinkpad = gst_pad_new_from_template (gst_element_class_get_pad_template (element_class, "sink"), "sink"); gst_pad_set_chain_function (self->sinkpad, bclass->pad_chain); gst_pad_set_event_function (self->sinkpad, bclass->pad_event); gst_element_add_pad (GST_ELEMENT (self), self->sinkpad); for (i = 0; i < NUM_OUTPUTS; i++) { sprintf(srcname, "src_%02x", i); self->srcpad[i] = gst_pad_new_from_template (gst_element_class_get_pad_template (element_class, srcname), srcname); gst_pad_set_activatepush_function (self->srcpad[i], activate_push); gst_pad_use_fixed_caps (self->srcpad[i]); gst_element_add_pad (GST_ELEMENT (self), self->srcpad[i]); } self->duration = GST_CLOCK_TIME_NONE; self->input_fields_separately = FALSE; GST_LOG_OBJECT (self, "end"); }
static GstElement * setup_fdsrc (void) { GstElement *fdsrc; GST_DEBUG ("setup_fdsrc"); fdsrc = gst_check_setup_element ("fdsrc"); mysinkpad = gst_check_setup_sink_pad (fdsrc, &sinktemplate, NULL); gst_pad_set_event_function (mysinkpad, event_func); gst_pad_set_active (mysinkpad, TRUE); return fdsrc; }
static void splitmux_part_pad_constructed (GObject * pad) { gst_pad_set_chain_function (GST_PAD (pad), GST_DEBUG_FUNCPTR (splitmux_part_pad_chain)); gst_pad_set_event_function (GST_PAD (pad), GST_DEBUG_FUNCPTR (splitmux_part_pad_event)); gst_pad_set_query_function (GST_PAD (pad), GST_DEBUG_FUNCPTR (splitmux_part_pad_query)); G_OBJECT_CLASS (gst_splitmux_part_pad_parent_class)->constructed (pad); }
static void gst_rtp_base_payload_init (GstRTPBasePayload * rtpbasepayload, gpointer g_class) { GstPadTemplate *templ; GstRTPBasePayloadPrivate *priv; rtpbasepayload->priv = priv = GST_RTP_BASE_PAYLOAD_GET_PRIVATE (rtpbasepayload); templ = gst_element_class_get_pad_template (GST_ELEMENT_CLASS (g_class), "src"); g_return_if_fail (templ != NULL); rtpbasepayload->srcpad = gst_pad_new_from_template (templ, "src"); gst_element_add_pad (GST_ELEMENT (rtpbasepayload), rtpbasepayload->srcpad); templ = gst_element_class_get_pad_template (GST_ELEMENT_CLASS (g_class), "sink"); g_return_if_fail (templ != NULL); rtpbasepayload->sinkpad = gst_pad_new_from_template (templ, "sink"); gst_pad_set_chain_function (rtpbasepayload->sinkpad, gst_rtp_base_payload_chain); gst_pad_set_event_function (rtpbasepayload->sinkpad, gst_rtp_base_payload_sink_event); gst_pad_set_query_function (rtpbasepayload->sinkpad, gst_rtp_base_payload_query); gst_element_add_pad (GST_ELEMENT (rtpbasepayload), rtpbasepayload->sinkpad); rtpbasepayload->mtu = DEFAULT_MTU; rtpbasepayload->pt = DEFAULT_PT; rtpbasepayload->seqnum_offset = DEFAULT_SEQNUM_OFFSET; rtpbasepayload->ssrc = DEFAULT_SSRC; rtpbasepayload->ts_offset = DEFAULT_TIMESTAMP_OFFSET; priv->seqnum_offset_random = (rtpbasepayload->seqnum_offset == -1); priv->ts_offset_random = (rtpbasepayload->ts_offset == -1); priv->ssrc_random = (rtpbasepayload->ssrc == -1); rtpbasepayload->max_ptime = DEFAULT_MAX_PTIME; rtpbasepayload->min_ptime = DEFAULT_MIN_PTIME; rtpbasepayload->priv->perfect_rtptime = DEFAULT_PERFECT_RTPTIME; rtpbasepayload->ptime_multiple = DEFAULT_PTIME_MULTIPLE; rtpbasepayload->priv->base_offset = GST_BUFFER_OFFSET_NONE; rtpbasepayload->priv->base_rtime = GST_BUFFER_OFFSET_NONE; rtpbasepayload->media = NULL; rtpbasepayload->encoding_name = NULL; rtpbasepayload->clock_rate = 0; rtpbasepayload->priv->caps_max_ptime = DEFAULT_MAX_PTIME; rtpbasepayload->priv->prop_max_ptime = DEFAULT_MAX_PTIME; }
static void gst_base_video_encoder_init (GstBaseVideoEncoder * base_video_encoder, GstBaseVideoEncoderClass * klass) { GstPad *pad; GST_DEBUG ("gst_base_video_encoder_init"); pad = GST_BASE_VIDEO_CODEC_SINK_PAD (base_video_encoder); gst_pad_set_chain_function (pad, gst_base_video_encoder_chain); gst_pad_set_event_function (pad, gst_base_video_encoder_sink_event); gst_pad_set_setcaps_function (pad, gst_base_video_encoder_sink_setcaps); //gst_pad_set_query_function (pad, gst_base_video_encoder_sink_query); pad = GST_BASE_VIDEO_CODEC_SRC_PAD (base_video_encoder); gst_pad_set_query_type_function (pad, gst_base_video_encoder_get_query_types); gst_pad_set_query_function (pad, gst_base_video_encoder_src_query); gst_pad_set_event_function (pad, gst_base_video_encoder_src_event); }
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_gdp_depay_init (GstGDPDepay * gdpdepay) { gdpdepay->sinkpad = gst_pad_new_from_static_template (&gdp_depay_sink_template, "sink"); gst_pad_set_chain_function (gdpdepay->sinkpad, GST_DEBUG_FUNCPTR (gst_gdp_depay_chain)); gst_pad_set_event_function (gdpdepay->sinkpad, GST_DEBUG_FUNCPTR (gst_gdp_depay_sink_event)); gst_element_add_pad (GST_ELEMENT (gdpdepay), gdpdepay->sinkpad); gdpdepay->srcpad = gst_pad_new_from_static_template (&gdp_depay_src_template, "src"); gst_pad_set_event_function (gdpdepay->srcpad, GST_DEBUG_FUNCPTR (gst_gdp_depay_src_event)); /* our caps will always be decided by the incoming GDP caps buffers */ gst_pad_use_fixed_caps (gdpdepay->srcpad); gst_element_add_pad (GST_ELEMENT (gdpdepay), gdpdepay->srcpad); gdpdepay->adapter = gst_adapter_new (); }
static void gst_ffmpegscale_init(GstFFMpegScale* scale, GstFFMpegScaleClass* klass) { GstBaseTransform* trans = GST_BASE_TRANSFORM(scale); gst_pad_set_event_function(trans->srcpad, gst_ffmpegscale_handle_src_event); scale->method = DEFAULT_PROP_METHOD; scale->add_borders = FALSE; scale->ctx = NULL; scale->in_pixfmt = PIX_FMT_NONE; scale->out_pixfmt = PIX_FMT_NONE; }
static void gst_type_find_element_init (GstTypeFindElement * typefind) { /* sinkpad */ typefind->sink = gst_pad_new_from_static_template (&type_find_element_sink_template, "sink"); gst_pad_set_activate_function (typefind->sink, GST_DEBUG_FUNCPTR (gst_type_find_element_activate_sink)); gst_pad_set_activatemode_function (typefind->sink, GST_DEBUG_FUNCPTR (gst_type_find_element_activate_sink_mode)); gst_pad_set_chain_function (typefind->sink, GST_DEBUG_FUNCPTR (gst_type_find_element_chain)); gst_pad_set_event_function (typefind->sink, GST_DEBUG_FUNCPTR (gst_type_find_element_sink_event)); GST_PAD_SET_PROXY_ALLOCATION (typefind->sink); gst_element_add_pad (GST_ELEMENT (typefind), typefind->sink); /* srcpad */ typefind->src = gst_pad_new_from_static_template (&type_find_element_src_template, "src"); gst_pad_set_activatemode_function (typefind->src, GST_DEBUG_FUNCPTR (gst_type_find_element_activate_src_mode)); gst_pad_set_getrange_function (typefind->src, GST_DEBUG_FUNCPTR (gst_type_find_element_getrange)); gst_pad_set_event_function (typefind->src, GST_DEBUG_FUNCPTR (gst_type_find_element_src_event)); gst_pad_set_query_function (typefind->src, GST_DEBUG_FUNCPTR (gst_type_find_handle_src_query)); gst_pad_use_fixed_caps (typefind->src); gst_element_add_pad (GST_ELEMENT (typefind), typefind->src); typefind->mode = MODE_TYPEFIND; typefind->caps = NULL; typefind->min_probability = 1; typefind->adapter = gst_adapter_new (); }
static void gst_basertppayload_init (GstBaseRTPPayload * basertppayload, gpointer g_class) { GstPadTemplate *templ; GstBaseRTPPayloadPrivate *priv; basertppayload->priv = priv = GST_BASE_RTP_PAYLOAD_GET_PRIVATE (basertppayload); templ = gst_element_class_get_pad_template (GST_ELEMENT_CLASS (g_class), "src"); g_return_if_fail (templ != NULL); basertppayload->srcpad = gst_pad_new_from_template (templ, "src"); gst_element_add_pad (GST_ELEMENT (basertppayload), basertppayload->srcpad); templ = gst_element_class_get_pad_template (GST_ELEMENT_CLASS (g_class), "sink"); g_return_if_fail (templ != NULL); basertppayload->sinkpad = gst_pad_new_from_template (templ, "sink"); gst_pad_set_setcaps_function (basertppayload->sinkpad, gst_basertppayload_sink_setcaps); gst_pad_set_getcaps_function (basertppayload->sinkpad, gst_basertppayload_sink_getcaps); gst_pad_set_event_function (basertppayload->sinkpad, gst_basertppayload_event); gst_pad_set_chain_function (basertppayload->sinkpad, gst_basertppayload_chain); gst_element_add_pad (GST_ELEMENT (basertppayload), basertppayload->sinkpad); basertppayload->seq_rand = g_rand_new (); basertppayload->ssrc_rand = g_rand_new (); basertppayload->ts_rand = g_rand_new (); basertppayload->mtu = DEFAULT_MTU; basertppayload->pt = DEFAULT_PT; basertppayload->seqnum_offset = DEFAULT_SEQNUM_OFFSET; basertppayload->ssrc = DEFAULT_SSRC; basertppayload->ts_offset = DEFAULT_TIMESTAMP_OFFSET; priv->seqnum_offset_random = (basertppayload->seqnum_offset == -1); priv->ts_offset_random = (basertppayload->ts_offset == -1); priv->ssrc_random = (basertppayload->ssrc == -1); basertppayload->max_ptime = DEFAULT_MAX_PTIME; basertppayload->min_ptime = DEFAULT_MIN_PTIME; basertppayload->media = NULL; basertppayload->encoding_name = NULL; basertppayload->clock_rate = 0; }
static void type_instance_init (GTypeInstance *instance, gpointer g_class) { GstOmxBaseFilter *self; GstElementClass *element_class; element_class = GST_ELEMENT_CLASS (g_class); self = GST_OMX_BASE_FILTER (instance); GST_LOG_OBJECT (self, "begin"); self->use_timestamps = TRUE; /* GOmx */ { GOmxCore *gomx; self->gomx = gomx = g_omx_core_new (); gomx->object = self; } self->ready_lock = g_mutex_new (); self->sinkpad = gst_pad_new_from_template (gst_element_class_get_pad_template (element_class, "sink"), "sink"); gst_pad_set_chain_function (self->sinkpad, pad_chain); gst_pad_set_event_function (self->sinkpad, pad_event); self->srcpad = gst_pad_new_from_template (gst_element_class_get_pad_template (element_class, "src"), "src"); gst_pad_set_activatepush_function (self->srcpad, activate_push); gst_pad_use_fixed_caps (self->srcpad); gst_element_add_pad (GST_ELEMENT (self), self->sinkpad); gst_element_add_pad (GST_ELEMENT (self), self->srcpad); { const char *tmp; tmp = g_type_get_qdata (G_OBJECT_CLASS_TYPE (g_class), g_quark_from_static_string ("library-name")); self->omx_library = g_strdup (tmp); tmp = g_type_get_qdata (G_OBJECT_CLASS_TYPE (g_class), g_quark_from_static_string ("component-name")); self->omx_component = g_strdup (tmp); } GST_LOG_OBJECT (self, "end"); }
static void mpegts_demuxer_add_pad(MpegTSDemuxer *demuxer, GstPad *pad, GstCaps *caps) { GstEvent *caps_event = NULL; gst_pad_set_query_function (pad, mpegts_demuxer_src_query); gst_pad_set_event_function (pad, mpegts_demuxer_src_event); gst_pad_set_active(pad, TRUE); gst_pad_use_fixed_caps (pad); caps_event = gst_event_new_caps(caps); if (caps_event) gst_pad_push_event (pad, caps_event); gst_caps_unref (caps); gst_element_add_pad(GST_ELEMENT(demuxer), pad); }
static void gst_rdt_depay_init (GstRDTDepay * rdtdepay) { rdtdepay->sinkpad = gst_pad_new_from_static_template (&gst_rdt_depay_sink_template, "sink"); gst_pad_set_chain_function (rdtdepay->sinkpad, gst_rdt_depay_chain); gst_pad_set_event_function (rdtdepay->sinkpad, gst_rdt_depay_sink_event); gst_element_add_pad (GST_ELEMENT_CAST (rdtdepay), rdtdepay->sinkpad); rdtdepay->srcpad = gst_pad_new_from_static_template (&gst_rdt_depay_src_template, "src"); gst_element_add_pad (GST_ELEMENT_CAST (rdtdepay), rdtdepay->srcpad); }
static void gst_sctp_dec_init(GstSctpDec *self) { self->sctp_association_id = DEFAULT_GST_SCTP_ASSOCIATION_ID; self->local_sctp_port = DEFAULT_LOCAL_SCTP_PORT; self->sink_pad = gst_pad_new_from_static_template(&sink_template, "sink"); gst_pad_set_chain_function(self->sink_pad, GST_DEBUG_FUNCPTR((GstPadChainFunction) gst_sctp_dec_packet_chain)); gst_pad_set_event_function(self->sink_pad, GST_DEBUG_FUNCPTR((GstPadEventFunction) gst_sctp_dec_packet_event)); gst_element_add_pad(GST_ELEMENT(self), self->sink_pad); }
static void gst_schro_dec_init (GstSchroDec *schro_dec, GstSchroDecClass *klass) { GST_DEBUG ("gst_schro_dec_init"); schro_dec->decoder = schro_decoder_new (); schro_dec->sinkpad = gst_pad_new_from_static_template (&gst_schro_dec_sink_template, "sink"); gst_pad_set_chain_function (schro_dec->sinkpad, gst_schro_dec_chain); gst_pad_set_query_function (schro_dec->sinkpad, gst_schro_dec_sink_query); gst_pad_set_event_function (schro_dec->sinkpad, gst_schro_dec_sink_event); gst_element_add_pad (GST_ELEMENT(schro_dec), schro_dec->sinkpad); schro_dec->srcpad = gst_pad_new_from_static_template (&gst_schro_dec_src_template, "src"); gst_pad_set_query_type_function (schro_dec->srcpad, gst_schro_dec_get_query_types); gst_pad_set_query_function (schro_dec->srcpad, gst_schro_dec_src_query); gst_pad_set_event_function (schro_dec->srcpad, gst_schro_dec_src_event); gst_pad_use_fixed_caps (schro_dec->srcpad); gst_element_add_pad (GST_ELEMENT(schro_dec), schro_dec->srcpad); schro_dec->adapter = gst_adapter_new(); }
static void gst_video_flip_init (GTypeInstance * instance, gpointer g_class) { GstVideoFlip *videoflip = GST_VIDEO_FLIP (instance); GstBaseTransform *btrans = GST_BASE_TRANSFORM (instance); GST_DEBUG_OBJECT (videoflip, "gst_video_flip_init"); videoflip->method = GST_VIDEO_FLIP_METHOD_90R; gst_pad_set_event_function (btrans->srcpad, GST_DEBUG_FUNCPTR (gst_video_flip_handle_src_event)); }
static void gst_sub_parse_init (GstSubParse * subparse) { subparse->sinkpad = gst_pad_new_from_static_template (&sink_templ, "sink"); gst_pad_set_chain_function (subparse->sinkpad, GST_DEBUG_FUNCPTR (gst_sub_parse_chain)); gst_pad_set_event_function (subparse->sinkpad, GST_DEBUG_FUNCPTR (gst_sub_parse_sink_event)); gst_element_add_pad (GST_ELEMENT (subparse), subparse->sinkpad); subparse->srcpad = gst_pad_new_from_static_template (&src_templ, "src"); gst_pad_set_event_function (subparse->srcpad, GST_DEBUG_FUNCPTR (gst_sub_parse_src_event)); gst_element_add_pad (GST_ELEMENT (subparse), subparse->srcpad); subparse->textbuf = g_string_new (NULL); subparse->parser_type = GST_SUB_PARSE_FORMAT_UNKNOWN; subparse->flushing = FALSE; gst_segment_init (&subparse->segment, GST_FORMAT_TIME); subparse->need_segment = TRUE; subparse->encoding = g_strdup (DEFAULT_ENCODING); }
static void gst_ssa_parse_init (GstSsaParse * parse) { parse->sinkpad = gst_pad_new_from_static_template (&sink_templ, "sink"); gst_pad_set_chain_function (parse->sinkpad, GST_DEBUG_FUNCPTR (gst_ssa_parse_chain)); gst_pad_set_event_function (parse->sinkpad, GST_DEBUG_FUNCPTR (gst_ssa_parse_sink_event)); gst_element_add_pad (GST_ELEMENT (parse), parse->sinkpad); parse->srcpad = gst_pad_new_from_static_template (&src_templ, "src"); gst_pad_set_event_function (parse->srcpad, GST_DEBUG_FUNCPTR (gst_ssa_parse_src_event)); gst_element_add_pad (GST_ELEMENT (parse), parse->srcpad); gst_pad_use_fixed_caps (parse->srcpad); gst_pad_set_caps (parse->srcpad, gst_static_pad_template_get_caps (&src_templ)); parse->ini = NULL; parse->framed = FALSE; parse->send_tags = FALSE; }