static void gst_rtmp_src_class_init (GstRTMPSrcClass * klass) { GObjectClass *gobject_class; GstElementClass *gstelement_class; GstBaseSrcClass *gstbasesrc_class; GstPushSrcClass *gstpushsrc_class; gobject_class = G_OBJECT_CLASS (klass); gstelement_class = GST_ELEMENT_CLASS (klass); gstbasesrc_class = GST_BASE_SRC_CLASS (klass); gstpushsrc_class = GST_PUSH_SRC_CLASS (klass); gobject_class->finalize = gst_rtmp_src_finalize; gobject_class->set_property = gst_rtmp_src_set_property; gobject_class->get_property = gst_rtmp_src_get_property; /* properties */ g_object_class_install_property (gobject_class, PROP_LOCATION, g_param_spec_string ("location", "RTMP Location", "Location of the RTMP url to read", DEFAULT_LOCATION, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&srctemplate)); gst_element_class_set_static_metadata (gstelement_class, "RTMP Source", "Source/File", "Read RTMP streams", "Bastien Nocera <*****@*****.**>, " "Sebastian Dröge <*****@*****.**>"); gstbasesrc_class->start = GST_DEBUG_FUNCPTR (gst_rtmp_src_start); gstbasesrc_class->stop = GST_DEBUG_FUNCPTR (gst_rtmp_src_stop); gstbasesrc_class->is_seekable = GST_DEBUG_FUNCPTR (gst_rtmp_src_is_seekable); gstbasesrc_class->prepare_seek_segment = GST_DEBUG_FUNCPTR (gst_rtmp_src_prepare_seek_segment); gstbasesrc_class->do_seek = GST_DEBUG_FUNCPTR (gst_rtmp_src_do_seek); gstpushsrc_class->create = GST_DEBUG_FUNCPTR (gst_rtmp_src_create); gstbasesrc_class->query = GST_DEBUG_FUNCPTR (gst_rtmp_src_query); GST_DEBUG_CATEGORY_INIT (rtmpsrc_debug, "rtmpsrc", 0, "RTMP Source"); }
static gboolean gst_ladspa_source_type_query (GstBaseSrc * base, GstQuery * query) { GstLADSPASource *ladspa = GST_LADSPA_SOURCE (base); gboolean res = FALSE; switch (GST_QUERY_TYPE (query)) { case GST_QUERY_CONVERT: { GstFormat src_fmt, dest_fmt; gint64 src_val, dest_val; gst_query_parse_convert (query, &src_fmt, &src_val, &dest_fmt, &dest_val); if (!gst_audio_info_convert (&ladspa->info, src_fmt, src_val, dest_fmt, &dest_val)) { GST_DEBUG_OBJECT (ladspa, "query failed"); return FALSE; } gst_query_set_convert (query, src_fmt, src_val, dest_fmt, dest_val); res = TRUE; break; } case GST_QUERY_SCHEDULING: { /* if we can operate in pull mode */ gst_query_set_scheduling (query, GST_SCHEDULING_FLAG_SEEKABLE, 1, -1, 0); gst_query_add_scheduling_mode (query, GST_PAD_MODE_PUSH); if (ladspa->can_activate_pull) gst_query_add_scheduling_mode (query, GST_PAD_MODE_PULL); res = TRUE; break; } default: res = GST_BASE_SRC_CLASS (gst_ladspa_source_type_parent_class)->query (base, query); break; } return res; }
static void gst_linsys_sdi_src_class_init (GstLinsysSdiSrcClass * klass) { GObjectClass *gobject_class = G_OBJECT_CLASS (klass); GstBaseSrcClass *base_src_class = GST_BASE_SRC_CLASS (klass); GST_DEBUG_CATEGORY_INIT (gst_linsys_sdi_src_debug, "linsyssdisrc", 0, "FIXME"); gobject_class->set_property = gst_linsys_sdi_src_set_property; gobject_class->get_property = gst_linsys_sdi_src_get_property; gobject_class->dispose = gst_linsys_sdi_src_dispose; gobject_class->finalize = gst_linsys_sdi_src_finalize; base_src_class->get_caps = GST_DEBUG_FUNCPTR (gst_linsys_sdi_src_get_caps); base_src_class->set_caps = GST_DEBUG_FUNCPTR (gst_linsys_sdi_src_set_caps); if (0) base_src_class->negotiate = GST_DEBUG_FUNCPTR (gst_linsys_sdi_src_negotiate); base_src_class->newsegment = GST_DEBUG_FUNCPTR (gst_linsys_sdi_src_newsegment); base_src_class->start = GST_DEBUG_FUNCPTR (gst_linsys_sdi_src_start); base_src_class->stop = GST_DEBUG_FUNCPTR (gst_linsys_sdi_src_stop); base_src_class->get_times = GST_DEBUG_FUNCPTR (gst_linsys_sdi_src_get_times); base_src_class->get_size = GST_DEBUG_FUNCPTR (gst_linsys_sdi_src_get_size); base_src_class->is_seekable = GST_DEBUG_FUNCPTR (gst_linsys_sdi_src_is_seekable); base_src_class->unlock = GST_DEBUG_FUNCPTR (gst_linsys_sdi_src_unlock); base_src_class->event = GST_DEBUG_FUNCPTR (gst_linsys_sdi_src_event); base_src_class->create = GST_DEBUG_FUNCPTR (gst_linsys_sdi_src_create); if (0) base_src_class->do_seek = GST_DEBUG_FUNCPTR (gst_linsys_sdi_src_do_seek); base_src_class->query = GST_DEBUG_FUNCPTR (gst_linsys_sdi_src_query); base_src_class->check_get_range = GST_DEBUG_FUNCPTR (gst_linsys_sdi_src_check_get_range); base_src_class->fixate = GST_DEBUG_FUNCPTR (gst_linsys_sdi_src_fixate); base_src_class->unlock_stop = GST_DEBUG_FUNCPTR (gst_linsys_sdi_src_unlock_stop); base_src_class->prepare_seek_segment = GST_DEBUG_FUNCPTR (gst_linsys_sdi_src_prepare_seek_segment); g_object_class_install_property (gobject_class, PROP_DEVICE, g_param_spec_string ("device", "Device", "device to transmit data on", DEFAULT_DEVICE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); }
static void gst_v4l2src_class_init (GstV4l2SrcClass * klass) { GObjectClass *gobject_class; GstElementClass *element_class; GstBaseSrcClass *basesrc_class; GstPushSrcClass *pushsrc_class; gobject_class = G_OBJECT_CLASS (klass); element_class = GST_ELEMENT_CLASS (klass); basesrc_class = GST_BASE_SRC_CLASS (klass); pushsrc_class = GST_PUSH_SRC_CLASS (klass); gobject_class->dispose = gst_v4l2src_dispose; gobject_class->finalize = (GObjectFinalizeFunc) gst_v4l2src_finalize; gobject_class->set_property = gst_v4l2src_set_property; gobject_class->get_property = gst_v4l2src_get_property; element_class->change_state = gst_v4l2src_change_state; gst_v4l2_object_install_properties_helper (gobject_class, DEFAULT_PROP_DEVICE); g_object_class_install_property (gobject_class, PROP_QUEUE_SIZE, g_param_spec_uint ("queue-size", "Queue size", "Number of buffers to be enqueud in the driver in streaming mode", GST_V4L2_MIN_BUFFERS, GST_V4L2_MAX_BUFFERS, PROP_DEF_QUEUE_SIZE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_ALWAYS_COPY, g_param_spec_boolean ("always-copy", "Always Copy", "If the buffer will or not be used directly from mmap", PROP_DEF_ALWAYS_COPY, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); basesrc_class->get_caps = GST_DEBUG_FUNCPTR (gst_v4l2src_get_caps); basesrc_class->set_caps = GST_DEBUG_FUNCPTR (gst_v4l2src_set_caps); basesrc_class->start = GST_DEBUG_FUNCPTR (gst_v4l2src_start); basesrc_class->unlock = GST_DEBUG_FUNCPTR (gst_v4l2src_unlock); basesrc_class->unlock_stop = GST_DEBUG_FUNCPTR (gst_v4l2src_unlock_stop); basesrc_class->stop = GST_DEBUG_FUNCPTR (gst_v4l2src_stop); basesrc_class->query = GST_DEBUG_FUNCPTR (gst_v4l2src_query); basesrc_class->fixate = GST_DEBUG_FUNCPTR (gst_v4l2src_fixate); basesrc_class->negotiate = GST_DEBUG_FUNCPTR (gst_v4l2src_negotiate); pushsrc_class->create = GST_DEBUG_FUNCPTR (gst_v4l2src_create); }
static void gst_spot_src_class_init (GstSpotSrcClass * klass) { GObjectClass *gobject_class; GstBaseSrcClass *gstbasesrc_class; gobject_class = G_OBJECT_CLASS (klass); gstbasesrc_class = GST_BASE_SRC_CLASS (klass); gobject_class->set_property = gst_spot_src_set_property; gobject_class->get_property = gst_spot_src_get_property; gobject_class->finalize = GST_DEBUG_FUNCPTR (gst_spot_src_finalize); gstbasesrc_class->start = GST_DEBUG_FUNCPTR (gst_spot_src_start); gstbasesrc_class->stop = GST_DEBUG_FUNCPTR (gst_spot_src_stop); gstbasesrc_class->unlock = GST_DEBUG_FUNCPTR (gst_spot_src_unlock); gstbasesrc_class->unlock_stop = GST_DEBUG_FUNCPTR (gst_spot_src_unlock_stop); gstbasesrc_class->is_seekable = GST_DEBUG_FUNCPTR (gst_spot_src_is_seekable); gstbasesrc_class->get_size = GST_DEBUG_FUNCPTR (gst_spot_src_get_size); gstbasesrc_class->create = GST_DEBUG_FUNCPTR (gst_spot_src_create); gstbasesrc_class->query = GST_DEBUG_FUNCPTR (gst_spot_src_query); g_object_class_install_property (gobject_class, ARG_USER, g_param_spec_string ("user", "Username", "Username for premium spotify account", DEFAULT_USER, G_PARAM_READWRITE)); g_object_class_install_property (gobject_class, ARG_PASS, g_param_spec_string ("pass", "Password", "Password for premium spotify account", DEFAULT_PASS, G_PARAM_READWRITE)); g_object_class_install_property (gobject_class, ARG_URI, g_param_spec_string ("uri", "URI", "A URI", "unknown", G_PARAM_READWRITE)); g_object_class_install_property (gobject_class, ARG_BUFFER_TIME, g_param_spec_uint64 ("buffer-time", "buffer time in us", "buffer time in us", 0,BUFFER_TIME_MAX,BUFFER_TIME_DEFAULT, G_PARAM_READWRITE)); gst_spot_signals[SIGNAL_PLAY_TOKEN_LOST] = g_signal_new ("play-token-lost", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_FIRST, 0, NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); }
static void gst_codec_src_class_init (GstCodecSrcClass * klass) { GstPushSrcClass *pushsrc_class = GST_PUSH_SRC_CLASS (klass); GstBaseSrcClass *basesrc_class = GST_BASE_SRC_CLASS (klass); static GstStaticPadTemplate src_templ = GST_STATIC_PAD_TEMPLATE ("src", GST_PAD_SRC, GST_PAD_ALWAYS, GST_STATIC_CAPS ("application/x-codec") ); GstElementClass *element_class = GST_ELEMENT_CLASS (klass); gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&src_templ)); gst_element_class_set_metadata (element_class, "Codec Src", "Source/Video", "yep", "me"); pushsrc_class->create = gst_codec_src_create; basesrc_class->get_caps = gst_codec_src_get_caps; }
static void gst_red_video_src_class_init (GstRedVideoSrcClass * klass) { GstPushSrcClass *pushsrc_class = GST_PUSH_SRC_CLASS (klass); GstBaseSrcClass *basesrc_class = GST_BASE_SRC_CLASS (klass); static GstStaticPadTemplate src_templ = GST_STATIC_PAD_TEMPLATE ("src", GST_PAD_SRC, GST_PAD_ALWAYS, GST_STATIC_CAPS ("video/x-raw, format=(string)I420") ); GstElementClass *element_class = GST_ELEMENT_CLASS (klass); gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&src_templ)); gst_element_class_set_metadata (element_class, "Red Video Src", "Source/Video", "yep", "me"); pushsrc_class->create = gst_red_video_src_create; basesrc_class->get_caps = gst_red_video_src_get_caps; }
static GstCaps * gst_gl_test_src_fixate (GstBaseSrc * bsrc, GstCaps * caps) { GstStructure *structure; GST_DEBUG ("fixate"); caps = gst_caps_make_writable (caps); structure = gst_caps_get_structure (caps, 0); gst_structure_fixate_field_nearest_int (structure, "width", 320); gst_structure_fixate_field_nearest_int (structure, "height", 240); gst_structure_fixate_field_nearest_fraction (structure, "framerate", 30, 1); caps = GST_BASE_SRC_CLASS (parent_class)->fixate (bsrc, caps); return caps; }
static void gst_dtmf_src_class_init (GstDTMFSrcClass * klass) { GObjectClass *gobject_class; GstBaseSrcClass *gstbasesrc_class; GstElementClass *gstelement_class; gobject_class = G_OBJECT_CLASS (klass); gstbasesrc_class = GST_BASE_SRC_CLASS (klass); gstelement_class = GST_ELEMENT_CLASS (klass); GST_DEBUG_CATEGORY_INIT (gst_dtmf_src_debug, "dtmfsrc", 0, "dtmfsrc element"); gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&gst_dtmf_src_template)); gst_element_class_set_metadata (gstelement_class, "DTMF tone generator", "Source/Audio", "Generates DTMF tones", "Youness Alaoui <*****@*****.**>"); gobject_class->finalize = gst_dtmf_src_finalize; gobject_class->set_property = gst_dtmf_src_set_property; gobject_class->get_property = gst_dtmf_src_get_property; g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_INTERVAL, g_param_spec_uint ("interval", "Interval between tone packets", "Interval in ms between two tone packets", MIN_PACKET_INTERVAL, MAX_PACKET_INTERVAL, DEFAULT_PACKET_INTERVAL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); gstelement_class->change_state = GST_DEBUG_FUNCPTR (gst_dtmf_src_change_state); gstelement_class->send_event = GST_DEBUG_FUNCPTR (gst_dtmf_src_send_event); gstbasesrc_class->unlock = GST_DEBUG_FUNCPTR (gst_dtmf_src_unlock); gstbasesrc_class->unlock_stop = GST_DEBUG_FUNCPTR (gst_dtmf_src_unlock_stop); gstbasesrc_class->event = GST_DEBUG_FUNCPTR (gst_dtmf_src_handle_event); gstbasesrc_class->create = GST_DEBUG_FUNCPTR (gst_dtmf_src_create); gstbasesrc_class->negotiate = GST_DEBUG_FUNCPTR (gst_dtmf_src_negotiate); }
static void gst_avdtp_src_class_init (GstAvdtpSrcClass * klass) { GObjectClass *gobject_class = G_OBJECT_CLASS (klass); GstElementClass *element_class = GST_ELEMENT_CLASS (klass); GstBaseSrcClass *basesrc_class = GST_BASE_SRC_CLASS (klass); parent_class = g_type_class_peek_parent (klass); gobject_class->finalize = GST_DEBUG_FUNCPTR (gst_avdtp_src_finalize); gobject_class->set_property = GST_DEBUG_FUNCPTR (gst_avdtp_src_set_property); gobject_class->get_property = GST_DEBUG_FUNCPTR (gst_avdtp_src_get_property); basesrc_class->start = GST_DEBUG_FUNCPTR (gst_avdtp_src_start); basesrc_class->stop = GST_DEBUG_FUNCPTR (gst_avdtp_src_stop); basesrc_class->create = GST_DEBUG_FUNCPTR (gst_avdtp_src_create); basesrc_class->unlock = GST_DEBUG_FUNCPTR (gst_avdtp_src_unlock); basesrc_class->unlock_stop = GST_DEBUG_FUNCPTR (gst_avdtp_src_unlock_stop); basesrc_class->get_caps = GST_DEBUG_FUNCPTR (gst_avdtp_src_getcaps); basesrc_class->query = GST_DEBUG_FUNCPTR (gst_avdtp_src_query); g_object_class_install_property (gobject_class, PROP_TRANSPORT, g_param_spec_string ("transport", "Transport", "Use configured transport", NULL, G_PARAM_READWRITE)); g_object_class_install_property (gobject_class, PROP_TRANSPORT_VOLUME, g_param_spec_uint ("transport-volume", "Transport volume", "Volume of the transport (only valid if transport is acquired)", 0, 127, 127, G_PARAM_READWRITE)); gst_element_class_set_static_metadata (element_class, "Bluetooth AVDTP Source", "Source/Audio/Network/RTP", "Receives audio from an A2DP device", "Arun Raghavan <*****@*****.**>"); GST_DEBUG_CATEGORY_INIT (avdtpsrc_debug, "avdtpsrc", 0, "Bluetooth AVDTP Source"); gst_element_class_add_static_pad_template (element_class, &gst_avdtp_src_template); }
static void gst_pulsesrc_class_init (GstPulseSrcClass * klass) { GObjectClass *gobject_class = G_OBJECT_CLASS (klass); GstAudioSrcClass *gstaudiosrc_class = GST_AUDIO_SRC_CLASS (klass); GstBaseSrcClass *gstbasesrc_class = GST_BASE_SRC_CLASS (klass); GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass); gobject_class->finalize = GST_DEBUG_FUNCPTR (gst_pulsesrc_finalize); gobject_class->set_property = GST_DEBUG_FUNCPTR (gst_pulsesrc_set_property); gobject_class->get_property = GST_DEBUG_FUNCPTR (gst_pulsesrc_get_property); gstelement_class->change_state = GST_DEBUG_FUNCPTR (gst_pulsesrc_change_state); gstbasesrc_class->negotiate = GST_DEBUG_FUNCPTR (gst_pulsesrc_negotiate); gstaudiosrc_class->open = GST_DEBUG_FUNCPTR (gst_pulsesrc_open); gstaudiosrc_class->close = GST_DEBUG_FUNCPTR (gst_pulsesrc_close); gstaudiosrc_class->prepare = GST_DEBUG_FUNCPTR (gst_pulsesrc_prepare); gstaudiosrc_class->unprepare = GST_DEBUG_FUNCPTR (gst_pulsesrc_unprepare); gstaudiosrc_class->read = GST_DEBUG_FUNCPTR (gst_pulsesrc_read); gstaudiosrc_class->delay = GST_DEBUG_FUNCPTR (gst_pulsesrc_delay); gstaudiosrc_class->reset = GST_DEBUG_FUNCPTR (gst_pulsesrc_reset); /* Overwrite GObject fields */ g_object_class_install_property (gobject_class, PROP_SERVER, g_param_spec_string ("server", "Server", "The PulseAudio server to connect to", DEFAULT_SERVER, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_DEVICE, g_param_spec_string ("device", "Device", "The PulseAudio source device to connect to", DEFAULT_DEVICE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_DEVICE_NAME, g_param_spec_string ("device-name", "Device name", "Human-readable name of the sound device", DEFAULT_DEVICE_NAME, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); }
static void gst_fd_src_class_init (GstFdSrcClass * klass) { GObjectClass *gobject_class; GstBaseSrcClass *gstbasesrc_class; GstPushSrcClass *gstpush_src_class; gobject_class = G_OBJECT_CLASS (klass); gstbasesrc_class = GST_BASE_SRC_CLASS (klass); gstpush_src_class = GST_PUSH_SRC_CLASS (klass); gobject_class->set_property = gst_fd_src_set_property; gobject_class->get_property = gst_fd_src_get_property; gobject_class->dispose = gst_fd_src_dispose; g_object_class_install_property (gobject_class, PROP_FD, g_param_spec_int ("fd", "fd", "An open file descriptor to read from", 0, G_MAXINT, DEFAULT_FD, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); /** * GstFdSrc:timeout * * Post a message after timeout microseconds * * Since: 0.10.21 */ g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_TIMEOUT, g_param_spec_uint64 ("timeout", "Timeout", "Post a message after timeout microseconds (0 = disabled)", 0, G_MAXUINT64, DEFAULT_TIMEOUT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); gstbasesrc_class->start = GST_DEBUG_FUNCPTR (gst_fd_src_start); gstbasesrc_class->stop = GST_DEBUG_FUNCPTR (gst_fd_src_stop); gstbasesrc_class->unlock = GST_DEBUG_FUNCPTR (gst_fd_src_unlock); gstbasesrc_class->unlock_stop = GST_DEBUG_FUNCPTR (gst_fd_src_unlock_stop); gstbasesrc_class->is_seekable = GST_DEBUG_FUNCPTR (gst_fd_src_is_seekable); gstbasesrc_class->get_size = GST_DEBUG_FUNCPTR (gst_fd_src_get_size); gstbasesrc_class->do_seek = GST_DEBUG_FUNCPTR (gst_fd_src_do_seek); gstbasesrc_class->query = GST_DEBUG_FUNCPTR (gst_fd_src_query); gstpush_src_class->create = GST_DEBUG_FUNCPTR (gst_fd_src_create); }
static gboolean gst_osx_video_src_query (GstBaseSrc * bsrc, GstQuery * query) { GstOSXVideoSrc *self; gboolean res = FALSE; self = GST_OSX_VIDEO_SRC (bsrc); switch (GST_QUERY_TYPE (query)) { case GST_QUERY_LATENCY: { GstClockTime min_latency, max_latency; gint fps_n, fps_d; fps_n = FRAMERATE; fps_d = 1; /* min latency is the time to capture one frame */ min_latency = gst_util_uint64_scale_int (GST_SECOND, fps_d, fps_n); /* max latency is total duration of the frame buffer */ // FIXME: we don't know what this is, so we'll just say 2 frames max_latency = 2 * min_latency; GST_DEBUG_OBJECT (bsrc, "report latency min %" GST_TIME_FORMAT " max %" GST_TIME_FORMAT, GST_TIME_ARGS (min_latency), GST_TIME_ARGS (max_latency)); /* we are always live, the min latency is 1 frame and the max latency is * the complete buffer of frames. */ gst_query_set_latency (query, TRUE, min_latency, max_latency); res = TRUE; break; } default: res = GST_BASE_SRC_CLASS (parent_class)->query (bsrc, query); break; } return res; }
static void gst_cel_video_src_class_init (GstCelVideoSrcClass * klass) { GObjectClass *gobject_class = G_OBJECT_CLASS (klass); GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass); GstBaseSrcClass *gstbasesrc_class = GST_BASE_SRC_CLASS (klass); GstPushSrcClass *gstpushsrc_class = GST_PUSH_SRC_CLASS (klass); gobject_class->dispose = gst_cel_video_src_dispose; gobject_class->finalize = gst_cel_video_src_finalize; gobject_class->get_property = gst_cel_video_src_get_property; gobject_class->set_property = gst_cel_video_src_set_property; gstelement_class->change_state = gst_cel_video_src_change_state; gstbasesrc_class->get_caps = gst_cel_video_src_get_caps; gstbasesrc_class->set_caps = gst_cel_video_src_set_caps; gstbasesrc_class->start = gst_cel_video_src_start; gstbasesrc_class->stop = gst_cel_video_src_stop; gstbasesrc_class->query = gst_cel_video_src_query; gstbasesrc_class->unlock = gst_cel_video_src_unlock; gstbasesrc_class->unlock_stop = gst_cel_video_src_unlock_stop; gstpushsrc_class->create = gst_cel_video_src_create; g_object_class_install_property (gobject_class, PROP_DEVICE_INDEX, g_param_spec_int ("device-index", "Device Index", "The zero-based device index", -1, G_MAXINT, DEFAULT_DEVICE_INDEX, G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_DO_STATS, g_param_spec_boolean ("do-stats", "Enable statistics", "Enable logging of statistics", DEFAULT_DO_STATS, G_PARAM_CONSTRUCT | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_FPS, g_param_spec_int ("fps", "Frames per second", "Last measured framerate, if statistics are enabled", -1, G_MAXINT, -1, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); GST_DEBUG_CATEGORY_INIT (gst_cel_video_src_debug, "celvideosrc", 0, "iOS Celestial video source"); }
static GstCaps * gst_rpi_cam_src_fixate (GstBaseSrc * basesrc, GstCaps * caps) { GstStructure *structure; gint i; GST_DEBUG_OBJECT (basesrc, "fixating caps %" GST_PTR_FORMAT, caps); caps = gst_caps_make_writable (caps); for (i = 0; i < gst_caps_get_size (caps); ++i) { structure = gst_caps_get_structure (caps, i); /* Fixate to 1920x1080 resolution if possible */ gst_structure_fixate_field_nearest_int (structure, "width", 1920); gst_structure_fixate_field_nearest_int (structure, "height", 1080); gst_structure_fixate_field_nearest_fraction (structure, "framerate", 30, 1); gst_structure_fixate_field (structure, "format"); } GST_DEBUG_OBJECT (basesrc, "fixated caps %" GST_PTR_FORMAT, caps); caps = GST_BASE_SRC_CLASS (parent_class)->fixate (basesrc, caps); return caps; }
static void gst_flite_src_class_init (GstFliteSrcClass * klass) { GObjectClass *gobject_class; GstElementClass *gstelement_class; GstBaseSrcClass *gstbasesrc_class; gobject_class = G_OBJECT_CLASS (klass); gstelement_class = GST_ELEMENT_CLASS (klass); gstbasesrc_class = GST_BASE_SRC_CLASS (klass); gobject_class->set_property = gst_flite_src_set_property; gobject_class->get_property = gst_flite_src_get_property; g_object_class_install_property (gobject_class, PROP_LOCATION, g_param_spec_string ("location", "File Location", "Location of the file to read", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | GST_PARAM_MUTABLE_READY)); gobject_class->finalize = gst_flite_src_finalize; gst_element_class_set_static_metadata (gstelement_class, "File Source", "Source/File", "Read from arbitrary point in a file", "Erik Walthinsen <*****@*****.**>"); gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&srctemplate)); gstbasesrc_class->start = GST_DEBUG_FUNCPTR (gst_flite_src_start); gstbasesrc_class->stop = GST_DEBUG_FUNCPTR (gst_flite_src_stop); gstbasesrc_class->is_seekable = GST_DEBUG_FUNCPTR (gst_flite_src_is_seekable); gstbasesrc_class->get_size = GST_DEBUG_FUNCPTR (gst_flite_src_get_size); gstbasesrc_class->fill = GST_DEBUG_FUNCPTR (gst_flite_src_fill); if (sizeof (off_t) < 8) { GST_LOG ("No large file support, sizeof (off_t) = %" G_GSIZE_FORMAT "!", sizeof (off_t)); } }
static void gst_mio_video_src_class_init (GstMIOVideoSrcClass * klass) { GObjectClass *gobject_class = G_OBJECT_CLASS (klass); GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass); GstBaseSrcClass *gstbasesrc_class = GST_BASE_SRC_CLASS (klass); GstPushSrcClass *gstpushsrc_class = GST_PUSH_SRC_CLASS (klass); gobject_class->finalize = gst_mio_video_src_finalize; gobject_class->get_property = gst_mio_video_src_get_property; gobject_class->set_property = gst_mio_video_src_set_property; gstelement_class->change_state = gst_mio_video_src_change_state; gstbasesrc_class->get_caps = gst_mio_video_src_get_caps; gstbasesrc_class->set_caps = gst_mio_video_src_set_caps; gstbasesrc_class->start = gst_mio_video_src_start; gstbasesrc_class->stop = gst_mio_video_src_stop; gstbasesrc_class->query = gst_mio_video_src_query; gstbasesrc_class->unlock = gst_mio_video_src_unlock; gstbasesrc_class->unlock_stop = gst_mio_video_src_unlock_stop; gstpushsrc_class->create = gst_mio_video_src_create; g_object_class_install_property (gobject_class, PROP_DEVICE_UID, g_param_spec_string ("device-uid", "Device UID", "Unique ID of the desired device", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_DEVICE_NAME, g_param_spec_string ("device-name", "Device Name", "Name of the desired device", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_DEVICE_INDEX, g_param_spec_int ("device-index", "Device Index", "Zero-based device index of the desired device", -1, G_MAXINT, DEFAULT_DEVICE_INDEX, G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS)); GST_DEBUG_CATEGORY_INIT (gst_mio_video_src_debug, "miovideosrc", 0, "Mac OS X CoreMedia video source"); }
static void gst_cutter_test_runner_class_init (GstCutterTestRunnerClass * klass) { GObjectClass *gobject_class = G_OBJECT_CLASS(klass); GstElementClass *element_class = GST_ELEMENT_CLASS(klass); GstBaseSrcClass *base_src_class = GST_BASE_SRC_CLASS(klass); GParamSpec *spec; parent_class = g_type_class_peek_parent(klass); gobject_class->dispose = dispose; gobject_class->set_property = set_property; gobject_class->get_property = get_property; element_class->change_state = change_state; base_src_class->start = start; base_src_class->stop = stop; base_src_class->is_seekable = is_seekable; base_src_class->create = create; spec = g_param_spec_string("test-directory", "Test directory", "The directory name in which test cases are stored", NULL, G_PARAM_READWRITE); g_object_class_install_property(gobject_class, ARG_TEST_DIRECTORY, spec); g_type_class_add_private(gobject_class, sizeof(GstCutterTestRunnerPrivate)); GST_DEBUG_CATEGORY_INIT(cutter_test_runner_debug, "cutter-test", 0, "Cutter test elements"); gst_element_class_add_pad_template(element_class, gst_static_pad_template_get(&cutter_test_runner_src_template_factory)); gst_element_class_set_metadata(element_class, "Cutter test runner", "Cutter test runner", "Cutter test runner", "g新部 Hiroyuki Ikezoe <*****@*****.**>"); }
static gboolean gst_app_src_do_negotiate (GstBaseSrc * basesrc) { GstAppSrc *appsrc = GST_APP_SRC_CAST (basesrc); GstAppSrcPrivate *priv = appsrc->priv; gboolean result; GstCaps *caps; GST_OBJECT_LOCK (basesrc); caps = priv->caps ? gst_caps_ref (priv->caps) : NULL; GST_OBJECT_UNLOCK (basesrc); if (caps) { result = gst_base_src_set_caps (basesrc, caps); gst_caps_unref (caps); } else { result = GST_BASE_SRC_CLASS (parent_class)->negotiate (basesrc); } return result; }
static gboolean gst_file_src_query (GstBaseSrc * basesrc, GstQuery * query) { gboolean ret = FALSE; GstFileSrc *src = GST_FILE_SRC (basesrc); switch (GST_QUERY_TYPE (query)) { case GST_QUERY_URI: gst_query_set_uri (query, src->uri); ret = TRUE; break; default: ret = FALSE; break; } if (!ret) ret = GST_BASE_SRC_CLASS (parent_class)->query (basesrc, query); return ret; }
static gboolean gst_gnome_vfs_src_query (GstBaseSrc * basesrc, GstQuery * query) { gboolean ret = FALSE; GstGnomeVFSSrc *src = GST_GNOME_VFS_SRC (basesrc); switch (GST_QUERY_TYPE (query)) { case GST_QUERY_URI: gst_query_set_uri (query, src->uri_name); ret = TRUE; break; default: ret = FALSE; break; } if (!ret) ret = GST_BASE_SRC_CLASS (parent_class)->query (basesrc, query); return ret; }
static gboolean gst_soup_http_src_query (GstBaseSrc * bsrc, GstQuery * query) { GstSoupHTTPSrc *src = GST_SOUP_HTTP_SRC (bsrc); gboolean ret; switch (GST_QUERY_TYPE (query)) { case GST_QUERY_URI: gst_query_set_uri (query, src->location); ret = TRUE; break; default: ret = FALSE; break; } if (!ret) ret = GST_BASE_SRC_CLASS (parent_class)->query (bsrc, query); return ret; }
static void gst_wasapi_src_class_init (GstWasapiSrcClass * klass) { GObjectClass *gobject_class = G_OBJECT_CLASS (klass); GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass); GstBaseSrcClass *gstbasesrc_class = GST_BASE_SRC_CLASS (klass); GstPushSrcClass *gstpushsrc_class = GST_PUSH_SRC_CLASS (klass); gobject_class->dispose = gst_wasapi_src_dispose; gobject_class->finalize = gst_wasapi_src_finalize; gstelement_class->provide_clock = gst_wasapi_src_provide_clock; gstbasesrc_class->start = gst_wasapi_src_start; gstbasesrc_class->stop = gst_wasapi_src_stop; gstbasesrc_class->query = gst_wasapi_src_query; gstpushsrc_class->create = gst_wasapi_src_create; GST_DEBUG_CATEGORY_INIT (gst_wasapi_src_debug, "wasapisrc", 0, "Windows audio session API source"); }
static GstCaps * gst_aravis_fixate_caps (GstBaseSrc * bsrc, GstCaps * caps) { GstAravis *gst_aravis = GST_ARAVIS (bsrc); GstStructure *structure; gint width; gint height; double frame_rate; arv_camera_get_region (gst_aravis->camera, NULL, NULL, &width, &height); frame_rate = arv_camera_get_frame_rate (gst_aravis->camera); structure = gst_caps_get_structure (caps, 0); gst_structure_fixate_field_nearest_int (structure, "width", width); gst_structure_fixate_field_nearest_int (structure, "height", height); gst_structure_fixate_field_nearest_fraction (structure, "framerate", (double) (0.5 + frame_rate), 1); GST_LOG_OBJECT (gst_aravis, "Fixate caps"); return GST_BASE_SRC_CLASS(gst_aravis_parent_class)->fixate(bsrc, caps); }
static void gst_multi_file_src_class_init (GstMultiFileSrcClass * klass) { GObjectClass *gobject_class = G_OBJECT_CLASS (klass); GstPushSrcClass *gstpushsrc_class = GST_PUSH_SRC_CLASS (klass); GstBaseSrcClass *gstbasesrc_class = GST_BASE_SRC_CLASS (klass); gobject_class->set_property = gst_multi_file_src_set_property; gobject_class->get_property = gst_multi_file_src_get_property; g_object_class_install_property (gobject_class, ARG_LOCATION, g_param_spec_string ("location", "File Location", "Pattern to create file names of input files. File names are " "created by calling sprintf() with the pattern and the current " "index.", DEFAULT_LOCATION, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, ARG_INDEX, g_param_spec_int ("index", "File Index", "Index to use with location property to create file names. The " "index is incremented by one for each buffer read.", 0, INT_MAX, DEFAULT_INDEX, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, ARG_CAPS, g_param_spec_boxed ("caps", "Caps", "Caps describing the format of the data.", GST_TYPE_CAPS, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); gobject_class->dispose = gst_multi_file_src_dispose; gstbasesrc_class->get_caps = gst_multi_file_src_getcaps; gstbasesrc_class->query = gst_multi_file_src_query; gstpushsrc_class->create = gst_multi_file_src_create; if (sizeof (off_t) < 8) { GST_LOG ("No large file support, sizeof (off_t) = %" G_GSIZE_FORMAT, sizeof (off_t)); } }
/* this function is a bit of a last resort */ static GstCaps * gst_v4l2src_fixate (GstBaseSrc * basesrc, GstCaps * caps) { GstStructure *structure; gint i; GST_DEBUG_OBJECT (basesrc, "fixating caps %" GST_PTR_FORMAT, caps); caps = gst_caps_make_writable (caps); for (i = 0; i < gst_caps_get_size (caps); ++i) { structure = gst_caps_get_structure (caps, i); /* We are fixating to a reasonable 320x200 resolution and the maximum framerate resolution for that size */ if (gst_structure_has_field (structure, "width")) gst_structure_fixate_field_nearest_int (structure, "width", 320); if (gst_structure_has_field (structure, "height")) gst_structure_fixate_field_nearest_int (structure, "height", 200); if (gst_structure_has_field (structure, "framerate")) gst_structure_fixate_field_nearest_fraction (structure, "framerate", G_MAXINT, 1); if (gst_structure_has_field (structure, "format")) gst_structure_fixate_field (structure, "format"); if (gst_structure_has_field (structure, "interlace-mode")) gst_structure_fixate_field (structure, "interlace-mode"); } GST_DEBUG_OBJECT (basesrc, "fixated caps %" GST_PTR_FORMAT, caps); caps = GST_BASE_SRC_CLASS (parent_class)->fixate (basesrc, caps); return caps; }
static gboolean gst_decklink_audio_src_query (GstBaseSrc * bsrc, GstQuery * query) { GstDecklinkAudioSrc *self = GST_DECKLINK_AUDIO_SRC_CAST (bsrc); gboolean ret = TRUE; switch (GST_QUERY_TYPE (query)) { case GST_QUERY_LATENCY:{ if (self->input) { g_mutex_lock (&self->input->lock); if (self->input->mode) { GstClockTime min, max; min = gst_util_uint64_scale_ceil (GST_SECOND, self->input->mode->fps_d, self->input->mode->fps_n); max = self->buffer_size * min; gst_query_set_latency (query, TRUE, min, max); ret = TRUE; } else { ret = FALSE; } g_mutex_unlock (&self->input->lock); } else { ret = FALSE; } break; } default: ret = GST_BASE_SRC_CLASS (parent_class)->query (bsrc, query); break; } return ret; }
static gboolean gst_decklink_video_src_query (GstBaseSrc * bsrc, GstQuery * query) { GstDecklinkVideoSrc *self = GST_DECKLINK_VIDEO_SRC_CAST (bsrc); gboolean ret = TRUE; switch (GST_QUERY_TYPE (query)) { case GST_QUERY_LATENCY:{ if (self->input) { GstClockTime min, max; const GstDecklinkMode *mode; g_mutex_lock (&self->lock); if (self->caps_mode != GST_DECKLINK_MODE_AUTO) mode = gst_decklink_get_mode (self->caps_mode); else mode = gst_decklink_get_mode (self->mode); g_mutex_unlock (&self->lock); min = gst_util_uint64_scale_ceil (GST_SECOND, mode->fps_d, mode->fps_n); max = self->buffer_size * min; gst_query_set_latency (query, TRUE, min, max); ret = TRUE; } else { ret = FALSE; } break; } default: ret = GST_BASE_SRC_CLASS (parent_class)->query (bsrc, query); break; } return ret; }
static GstCaps * gst_dshowvideosrc_src_fixate (GstBaseSrc * bsrc, GstCaps * caps) { /* If there is no desired video size, set default video size to device preffered video size */ GstDshowVideoSrc *src = GST_DSHOWVIDEOSRC (bsrc); GstStructure *structure = gst_caps_get_structure (caps, 0); guint i = 0; gint res = -1; for (; i < gst_caps_get_size (src->caps) && res == -1; i++) { GstCaps *capstmp = gst_caps_copy_nth (src->caps, i); if (gst_caps_is_subset (caps, capstmp)) { res = i; } gst_caps_unref (capstmp); } if (res != -1) { GList *type_pin_mediatype = g_list_nth (src->pins_mediatypes, res); if (type_pin_mediatype) { GstCapturePinMediaType *pin_mediatype = (GstCapturePinMediaType *) type_pin_mediatype->data; gst_structure_fixate_field_nearest_int (structure, "width", pin_mediatype->defaultWidth); gst_structure_fixate_field_nearest_int (structure, "height", pin_mediatype->defaultHeight); gst_structure_fixate_field_nearest_fraction (structure, "framerate", pin_mediatype->defaultFPS, 1); } } caps = GST_BASE_SRC_CLASS (gst_dshowvideosrc_parent_class)->fixate(bsrc, caps); return caps; }
static gboolean gst_v4l2src_decide_allocation (GstBaseSrc * bsrc, GstQuery * query) { GstV4l2Src *src = GST_V4L2SRC (bsrc); gboolean ret = TRUE; if (src->pending_set_fmt) { GstCaps *caps = gst_pad_get_current_caps (GST_BASE_SRC_PAD (bsrc)); if (!gst_v4l2_object_stop (src->v4l2object)) return FALSE; ret = gst_v4l2src_set_format (src, caps); gst_caps_unref (caps); src->pending_set_fmt = FALSE; } if (ret) { ret = gst_v4l2_object_decide_allocation (src->v4l2object, query); if (ret) ret = GST_BASE_SRC_CLASS (parent_class)->decide_allocation (bsrc, query); } if (ret) { if (!gst_buffer_pool_set_active (src->v4l2object->pool, TRUE)) goto activate_failed; } return ret; activate_failed: { GST_ELEMENT_ERROR (src, RESOURCE, SETTINGS, (_("Failed to allocate required memory.")), ("Buffer pool activation failed")); return FALSE; } }