static void gst_opus_enc_class_init (GstOpusEncClass * klass) { GObjectClass *gobject_class; GstAudioEncoderClass *base_class; GstElementClass *gstelement_class; gobject_class = (GObjectClass *) klass; base_class = (GstAudioEncoderClass *) klass; gstelement_class = (GstElementClass *) klass; gobject_class->set_property = gst_opus_enc_set_property; gobject_class->get_property = gst_opus_enc_get_property; gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&src_factory)); gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&sink_factory)); gst_element_class_set_static_metadata (gstelement_class, "Opus audio encoder", "Codec/Encoder/Audio", "Encodes audio in Opus format", "Vincent Penquerc'h <*****@*****.**>"); base_class->start = GST_DEBUG_FUNCPTR (gst_opus_enc_start); base_class->stop = GST_DEBUG_FUNCPTR (gst_opus_enc_stop); base_class->set_format = GST_DEBUG_FUNCPTR (gst_opus_enc_set_format); base_class->handle_frame = GST_DEBUG_FUNCPTR (gst_opus_enc_handle_frame); base_class->sink_event = GST_DEBUG_FUNCPTR (gst_opus_enc_sink_event); base_class->getcaps = GST_DEBUG_FUNCPTR (gst_opus_enc_sink_getcaps); g_object_class_install_property (gobject_class, PROP_AUDIO, g_param_spec_boolean ("audio", "Audio or voice", "Audio or voice", DEFAULT_AUDIO, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_BITRATE, g_param_spec_int ("bitrate", "Encoding Bit-rate", "Specify an encoding bit-rate (in bps).", LOWEST_BITRATE, HIGHEST_BITRATE, DEFAULT_BITRATE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | GST_PARAM_MUTABLE_PLAYING)); g_object_class_install_property (gobject_class, PROP_BANDWIDTH, g_param_spec_enum ("bandwidth", "Band Width", "Audio Band Width", GST_OPUS_ENC_TYPE_BANDWIDTH, DEFAULT_BANDWIDTH, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | GST_PARAM_MUTABLE_PLAYING)); g_object_class_install_property (gobject_class, PROP_FRAME_SIZE, g_param_spec_enum ("frame-size", "Frame Size", "The duration of an audio frame, in ms", GST_OPUS_ENC_TYPE_FRAME_SIZE, DEFAULT_FRAMESIZE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | GST_PARAM_MUTABLE_PLAYING)); g_object_class_install_property (gobject_class, PROP_CBR, g_param_spec_boolean ("cbr", "Constant bit rate", "Constant bit rate", DEFAULT_CBR, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | GST_PARAM_MUTABLE_PLAYING)); g_object_class_install_property (gobject_class, PROP_CONSTRAINED_VBR, g_param_spec_boolean ("constrained-vbr", "Constrained VBR", "Constrained VBR", DEFAULT_CONSTRAINED_VBR, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | GST_PARAM_MUTABLE_PLAYING)); g_object_class_install_property (gobject_class, PROP_COMPLEXITY, g_param_spec_int ("complexity", "Complexity", "Complexity", 0, 10, DEFAULT_COMPLEXITY, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | GST_PARAM_MUTABLE_PLAYING)); g_object_class_install_property (gobject_class, PROP_INBAND_FEC, g_param_spec_boolean ("inband-fec", "In-band FEC", "Enable forward error correction", DEFAULT_INBAND_FEC, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | GST_PARAM_MUTABLE_PLAYING)); g_object_class_install_property (gobject_class, PROP_DTX, g_param_spec_boolean ("dtx", "DTX", "DTX", DEFAULT_DTX, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | GST_PARAM_MUTABLE_PLAYING)); g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_PACKET_LOSS_PERCENT, g_param_spec_int ("packet-loss-percentage", "Loss percentage", "Packet loss percentage", 0, 100, DEFAULT_PACKET_LOSS_PERCENT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | GST_PARAM_MUTABLE_PLAYING)); g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_MAX_PAYLOAD_SIZE, g_param_spec_uint ("max-payload-size", "Max payload size", "Maximum payload size in bytes", 2, 4000, DEFAULT_MAX_PAYLOAD_SIZE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | GST_PARAM_MUTABLE_PLAYING)); gobject_class->finalize = GST_DEBUG_FUNCPTR (gst_opus_enc_finalize); GST_DEBUG_CATEGORY_INIT (opusenc_debug, "opusenc", 0, "Opus encoder"); }
static void gst_euresys_class_init (GstEuresysClass * 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); GST_DEBUG_CATEGORY_INIT (GST_CAT_DEFAULT, "euresyssrc", 0, "Euresys MultiCam source"); gobject_class->set_property = gst_euresys_set_property; gobject_class->get_property = gst_euresys_get_property; gobject_class->dispose = gst_euresys_dispose; /* Install GObject properties */ g_object_class_install_property (gobject_class, PROP_BOARD_INDEX, g_param_spec_int ("board", "Board", "Index of board connected to camera", 0, 15, DEFAULT_PROP_BOARD_INDEX, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE | GST_PARAM_MUTABLE_READY)); g_object_class_install_property (gobject_class, PROP_CAMERA_TYPE, g_param_spec_enum ("camera", "Camera", "Camera type", GST_TYPE_EURESYS_CAMERA, DEFAULT_PROP_CAMERA_TYPE, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE | GST_PARAM_MUTABLE_READY)); g_object_class_install_property (gobject_class, PROP_CONNECTOR, g_param_spec_enum ("connector", "Connector", "Connector where camera is attached", GST_TYPE_EURESYS_CONNECTOR, DEFAULT_PROP_CONNECTOR, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE | GST_PARAM_MUTABLE_READY)); g_object_class_install_property (gobject_class, PROP_COLOR_FORMAT, g_param_spec_enum ("color-format", "Color format", "Color format of the camera", GST_TYPE_EURESYS_COLOR_FORMAT, DEFAULT_PROP_COLOR_FORMAT, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE | GST_PARAM_MUTABLE_READY)); g_object_class_install_property (gobject_class, PROP_PIXEL_TIMING, g_param_spec_enum ("pixel-timing", "Pixel timing", "Pixel timing that produces square or broadcast timing", GST_TYPE_EURESYS_PIXEL_TIMING, DEFAULT_PROP_PIXEL_TIMING, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE | GST_PARAM_MUTABLE_READY)); g_object_class_install_property (gobject_class, PROP_NUM_CAPTURE_BUFFERS, g_param_spec_int ("num-capture-buffers", "Number of capture buffers", "Number of capture buffers", 2, 4095, DEFAULT_PROP_NUM_CAPTURE_BUFFERS, (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS))); gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&gst_euresys_src_template)); gst_element_class_set_static_metadata (gstelement_class, "Euresys MultiCam Video Source", "Source/Video", "Euresys MultiCam framegrabber video source", "Joshua M. Doe <*****@*****.**>"); gstbasesrc_class->start = GST_DEBUG_FUNCPTR (gst_euresys_start); gstbasesrc_class->stop = GST_DEBUG_FUNCPTR (gst_euresys_stop); gstbasesrc_class->get_caps = GST_DEBUG_FUNCPTR (gst_euresys_get_caps); gstbasesrc_class->set_caps = GST_DEBUG_FUNCPTR (gst_euresys_set_caps); gstpushsrc_class->fill = GST_DEBUG_FUNCPTR (gst_euresys_fill); }
static void gst_curl_smtp_sink_class_init (GstCurlSmtpSinkClass * klass) { GObjectClass *gobject_class = G_OBJECT_CLASS (klass); GstBaseSinkClass *gstbasesink_class = (GstBaseSinkClass *) klass; GstCurlBaseSinkClass *gstcurlbasesink_class = (GstCurlBaseSinkClass *) klass; GstElementClass *element_class = GST_ELEMENT_CLASS (klass); GST_DEBUG_CATEGORY_INIT (gst_curl_smtp_sink_debug, "curlsmtpsink", 0, "curl smtp sink element"); GST_DEBUG_OBJECT (klass, "class_init"); gst_element_class_set_static_metadata (element_class, "Curl smtp sink", "Sink/Network", "Upload data over SMTP protocol using libcurl", "Patricia Muscalu <*****@*****.**>"); gstcurlbasesink_class->set_protocol_dynamic_options_unlocked = gst_curl_smtp_sink_set_payload_headers_unlocked; gstcurlbasesink_class->set_options_unlocked = gst_curl_smtp_sink_set_transfer_options_unlocked; gstcurlbasesink_class->set_mime_type = gst_curl_smtp_sink_set_mime_type; gstcurlbasesink_class->prepare_transfer = gst_curl_smtp_sink_prepare_transfer; gstcurlbasesink_class->transfer_data_buffer = gst_curl_smtp_sink_transfer_data_buffer; gstcurlbasesink_class->flush_data_unlocked = gst_curl_smtp_sink_flush_data_unlocked; gstcurlbasesink_class->has_buffered_data_unlocked = gst_curl_smtp_sink_has_buffered_data_unlocked; gstbasesink_class->event = gst_curl_smtp_sink_event; gobject_class->finalize = GST_DEBUG_FUNCPTR (gst_curl_smtp_sink_finalize); gobject_class->set_property = gst_curl_smtp_sink_set_property; gobject_class->get_property = gst_curl_smtp_sink_get_property; g_object_class_install_property (gobject_class, PROP_MAIL_RCPT, g_param_spec_string ("mail-rcpt", "Mail recipient", "Single address that the given mail should get sent to", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_MAIL_FROM, g_param_spec_string ("mail-from", "Mail sender", "Single address that the given mail should get sent from", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_CONTENT_TYPE, g_param_spec_string ("content-type", "Content type", "The mime type of the body of the request", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_SUBJECT, g_param_spec_string ("subject", "UTF-8 encoded mail subject", "Mail subject", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_MESSAGE_BODY, g_param_spec_string ("message-body", "UTF-8 encoded message body", "Message body", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_USE_SSL, g_param_spec_boolean ("use-ssl", "Use SSL", "Use SSL/TLS for the connection", DEFAULT_USE_SSL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_NBR_ATTACHMENTS, g_param_spec_int ("nbr-attachments", "Number attachments", "Number attachments to send", G_MININT, G_MAXINT, DEFAULT_NBR_ATTACHMENTS, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_POP_USER_NAME, g_param_spec_string ("pop-user", "User name", "User name to use for POP server authentication", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_POP_USER_PASSWD, g_param_spec_string ("pop-passwd", "User password", "User password to use for POP server authentication", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_POP_LOCATION, g_param_spec_string ("pop-location", "POP location", "URL POP used for authentication", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); }
static void gst_shape_wipe_init (GstShapeWipe * self, GstShapeWipeClass * g_class) { self->video_sinkpad = gst_pad_new_from_static_template (&video_sink_pad_template, "video_sink"); gst_pad_set_chain_function (self->video_sinkpad, GST_DEBUG_FUNCPTR (gst_shape_wipe_video_sink_chain)); gst_pad_set_event_function (self->video_sinkpad, GST_DEBUG_FUNCPTR (gst_shape_wipe_video_sink_event)); gst_pad_set_setcaps_function (self->video_sinkpad, GST_DEBUG_FUNCPTR (gst_shape_wipe_video_sink_setcaps)); gst_pad_set_getcaps_function (self->video_sinkpad, GST_DEBUG_FUNCPTR (gst_shape_wipe_video_sink_getcaps)); gst_pad_set_bufferalloc_function (self->video_sinkpad, GST_DEBUG_FUNCPTR (gst_shape_wipe_video_sink_bufferalloc)); gst_pad_set_query_function (self->video_sinkpad, GST_DEBUG_FUNCPTR (gst_shape_wipe_video_sink_query)); gst_element_add_pad (GST_ELEMENT (self), self->video_sinkpad); self->mask_sinkpad = gst_pad_new_from_static_template (&mask_sink_pad_template, "mask_sink"); gst_pad_set_chain_function (self->mask_sinkpad, GST_DEBUG_FUNCPTR (gst_shape_wipe_mask_sink_chain)); gst_pad_set_event_function (self->mask_sinkpad, GST_DEBUG_FUNCPTR (gst_shape_wipe_mask_sink_event)); gst_pad_set_setcaps_function (self->mask_sinkpad, GST_DEBUG_FUNCPTR (gst_shape_wipe_mask_sink_setcaps)); gst_pad_set_getcaps_function (self->mask_sinkpad, GST_DEBUG_FUNCPTR (gst_shape_wipe_mask_sink_getcaps)); gst_element_add_pad (GST_ELEMENT (self), self->mask_sinkpad); self->srcpad = gst_pad_new_from_static_template (&src_pad_template, "src"); gst_pad_set_event_function (self->srcpad, GST_DEBUG_FUNCPTR (gst_shape_wipe_src_event)); gst_pad_set_getcaps_function (self->srcpad, GST_DEBUG_FUNCPTR (gst_shape_wipe_src_getcaps)); gst_pad_set_query_function (self->srcpad, GST_DEBUG_FUNCPTR (gst_shape_wipe_src_query)); gst_element_add_pad (GST_ELEMENT (self), self->srcpad); self->mask_mutex = g_mutex_new (); self->mask_cond = g_cond_new (); gst_shape_wipe_reset (self); }
static void gst_jack_audio_sink_class_init (GstJackAudioSinkClass * klass) { GObjectClass *gobject_class; GstElementClass *gstelement_class; GstBaseSinkClass *gstbasesink_class; GstAudioBaseSinkClass *gstaudiobasesink_class; GST_DEBUG_CATEGORY_INIT (gst_jack_audio_sink_debug, "jacksink", 0, "jacksink element"); gobject_class = (GObjectClass *) klass; gstelement_class = (GstElementClass *) klass; gstbasesink_class = (GstBaseSinkClass *) klass; gstaudiobasesink_class = (GstAudioBaseSinkClass *) klass; gobject_class->dispose = gst_jack_audio_sink_dispose; gobject_class->get_property = gst_jack_audio_sink_get_property; gobject_class->set_property = gst_jack_audio_sink_set_property; g_object_class_install_property (gobject_class, PROP_CONNECT, g_param_spec_enum ("connect", "Connect", "Specify how the output ports will be connected", GST_TYPE_JACK_CONNECT, DEFAULT_PROP_CONNECT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_SERVER, g_param_spec_string ("server", "Server", "The Jack server to connect to (NULL = default)", DEFAULT_PROP_SERVER, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); /** * GstJackAudioSink:client-name * * The client name to use. * * Since: 0.10.31 */ g_object_class_install_property (gobject_class, PROP_CLIENT_NAME, g_param_spec_string ("client-name", "Client name", "The client name of the Jack instance (NULL = default)", DEFAULT_PROP_CLIENT_NAME, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_CLIENT, g_param_spec_boxed ("client", "JackClient", "Handle for jack client", GST_TYPE_JACK_CLIENT, GST_PARAM_MUTABLE_READY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); /** * GstJackAudioSink:transport * * The jack transport behaviour for the client. * * Since: 0.10.31 */ g_object_class_install_property (gobject_class, PROP_TRANSPORT, g_param_spec_flags ("transport", "Transport mode", "Jack transport behaviour of the client", GST_TYPE_JACK_TRANSPORT, DEFAULT_PROP_TRANSPORT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); gst_element_class_set_static_metadata (gstelement_class, "Audio Sink (Jack)", "Sink/Audio", "Output audio to a JACK server", "Wim Taymans <*****@*****.**>"); gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&jackaudiosink_sink_factory)); gstbasesink_class->get_caps = GST_DEBUG_FUNCPTR (gst_jack_audio_sink_getcaps); gstaudiobasesink_class->create_ringbuffer = GST_DEBUG_FUNCPTR (gst_jack_audio_sink_create_ringbuffer); /* ref class from a thread-safe context to work around missing bit of * thread-safety in GObject */ g_type_class_ref (GST_TYPE_JACK_RING_BUFFER); gst_jack_audio_client_init (); }
/* initialize the opencvtextoverlay's class */ static void gst_opencv_text_overlay_class_init (GstOpencvTextOverlayClass * klass) { GObjectClass *gobject_class; GstElementClass *element_class = GST_ELEMENT_CLASS (klass); gobject_class = (GObjectClass *) klass; gobject_class->finalize = GST_DEBUG_FUNCPTR (gst_opencv_text_overlay_finalize); gobject_class->set_property = gst_opencv_text_overlay_set_property; gobject_class->get_property = gst_opencv_text_overlay_get_property; g_object_class_install_property (gobject_class, PROP_TEXT, g_param_spec_string ("text", "text", "Text to be display.", DEFAULT_PROP_TEXT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_XPOS, g_param_spec_int ("xpos", "horizontal position", "Sets the Horizontal position", 0, G_MAXINT, DEFAULT_PROP_XPOS, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_YPOS, g_param_spec_int ("ypos", "vertical position", "Sets the Vertical position", 0, G_MAXINT, DEFAULT_PROP_YPOS, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_THICKNESS, g_param_spec_int ("thickness", "font thickness", "Sets the Thickness of Font", 0, G_MAXINT, DEFAULT_PROP_THICKNESS, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_COLOR_R, g_param_spec_int ("colorR", "color -Red ", "Sets the color -R", 0, 255, DEFAULT_PROP_COLOR, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_COLOR_G, g_param_spec_int ("colorG", "color -Green", "Sets the color -G", 0, 255, DEFAULT_PROP_COLOR, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_COLOR_B, g_param_spec_int ("colorB", "color -Blue", "Sets the color -B", 0, 255, DEFAULT_PROP_COLOR, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_HEIGHT, g_param_spec_double ("height", "Height", "Sets the height of fonts", 1.0, 5.0, DEFAULT_HEIGHT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_WIDTH, g_param_spec_double ("width", "Width", "Sets the width of fonts", 1.0, 5.0, DEFAULT_WIDTH, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); gst_element_class_set_static_metadata (element_class, "opencvtextoverlay", "Filter/Effect/Video", "Write text on the top of video", "sreerenj<*****@*****.**>"); gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&src_factory)); gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&sink_factory)); }
static void gst_audio_test_src_class_init (GstAudioTestSrcClass * klass) { GObjectClass *gobject_class; GstElementClass *gstelement_class; GstBaseSrcClass *gstbasesrc_class; gobject_class = (GObjectClass *) klass; gstelement_class = (GstElementClass *) klass; gstbasesrc_class = (GstBaseSrcClass *) klass; gobject_class->set_property = gst_audio_test_src_set_property; gobject_class->get_property = gst_audio_test_src_get_property; gobject_class->finalize = gst_audio_test_src_finalize; g_object_class_install_property (gobject_class, PROP_SAMPLES_PER_BUFFER, g_param_spec_int ("samplesperbuffer", "Samples per buffer", "Number of samples in each outgoing buffer", 1, G_MAXINT, DEFAULT_SAMPLES_PER_BUFFER, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_WAVE, g_param_spec_enum ("wave", "Waveform", "Oscillator waveform", GST_TYPE_AUDIO_TEST_SRC_WAVE, GST_AUDIO_TEST_SRC_WAVE_SINE, G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_FREQ, g_param_spec_double ("freq", "Frequency", "Frequency of test signal", 0.0, 20000.0, DEFAULT_FREQ, G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_VOLUME, g_param_spec_double ("volume", "Volume", "Volume of test signal", 0.0, 1.0, DEFAULT_VOLUME, G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_IS_LIVE, g_param_spec_boolean ("is-live", "Is Live", "Whether to act as a live source", DEFAULT_IS_LIVE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_TIMESTAMP_OFFSET, g_param_spec_int64 ("timestamp-offset", "Timestamp offset", "An offset added to timestamps set on buffers (in ns)", G_MININT64, G_MAXINT64, DEFAULT_TIMESTAMP_OFFSET, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_CAN_ACTIVATE_PUSH, g_param_spec_boolean ("can-activate-push", "Can activate push", "Can activate in push mode", DEFAULT_CAN_ACTIVATE_PUSH, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_CAN_ACTIVATE_PULL, g_param_spec_boolean ("can-activate-pull", "Can activate pull", "Can activate in pull mode", DEFAULT_CAN_ACTIVATE_PULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&gst_audio_test_src_src_template)); gst_element_class_set_static_metadata (gstelement_class, "Audio test source", "Source/Audio", "Creates audio test signals of given frequency and volume", "Stefan Kost <*****@*****.**>"); gstbasesrc_class->set_caps = GST_DEBUG_FUNCPTR (gst_audio_test_src_setcaps); gstbasesrc_class->fixate = GST_DEBUG_FUNCPTR (gst_audio_test_src_fixate); gstbasesrc_class->is_seekable = GST_DEBUG_FUNCPTR (gst_audio_test_src_is_seekable); gstbasesrc_class->do_seek = GST_DEBUG_FUNCPTR (gst_audio_test_src_do_seek); gstbasesrc_class->query = GST_DEBUG_FUNCPTR (gst_audio_test_src_query); gstbasesrc_class->get_times = GST_DEBUG_FUNCPTR (gst_audio_test_src_get_times); gstbasesrc_class->start = GST_DEBUG_FUNCPTR (gst_audio_test_src_start); gstbasesrc_class->stop = GST_DEBUG_FUNCPTR (gst_audio_test_src_stop); gstbasesrc_class->fill = GST_DEBUG_FUNCPTR (gst_audio_test_src_fill); }
static void gnl_object_class_init (GnlObjectClass * klass) { GObjectClass *gobject_class; GstElementClass *gstelement_class; GnlObjectClass *gnlobject_class; gobject_class = (GObjectClass *) klass; gstelement_class = (GstElementClass *) klass; gnlobject_class = (GnlObjectClass *) klass; GST_DEBUG_CATEGORY_INIT (gnlobject, "gnlobject", GST_DEBUG_FG_BLUE | GST_DEBUG_BOLD, "GNonLin Object base class"); gobject_class->set_property = GST_DEBUG_FUNCPTR (gnl_object_set_property); gobject_class->get_property = GST_DEBUG_FUNCPTR (gnl_object_get_property); gobject_class->dispose = GST_DEBUG_FUNCPTR (gnl_object_dispose); gstelement_class->change_state = GST_DEBUG_FUNCPTR (gnl_object_change_state); gnlobject_class->prepare = GST_DEBUG_FUNCPTR (gnl_object_prepare_func); gnlobject_class->cleanup = GST_DEBUG_FUNCPTR (gnl_object_cleanup_func); /** * GnlObject:start * * The start position relative to the parent in nanoseconds. */ properties[PROP_START] = g_param_spec_uint64 ("start", "Start", "The start position relative to the parent (in nanoseconds)", 0, G_MAXUINT64, 0, G_PARAM_READWRITE); g_object_class_install_property (gobject_class, PROP_START, properties[PROP_START]); /** * GnlObject:duration * * The outgoing duration in nanoseconds. */ properties[PROP_DURATION] = g_param_spec_int64 ("duration", "Duration", "Outgoing duration (in nanoseconds)", 0, G_MAXINT64, 0, G_PARAM_READWRITE); g_object_class_install_property (gobject_class, PROP_DURATION, properties[PROP_DURATION]); /** * GnlObject:stop * * The stop position relative to the parent in nanoseconds. * * This value is computed based on the values of start and duration. */ properties[PROP_STOP] = g_param_spec_uint64 ("stop", "Stop", "The stop position relative to the parent (in nanoseconds)", 0, G_MAXUINT64, 0, G_PARAM_READABLE); g_object_class_install_property (gobject_class, PROP_STOP, properties[PROP_STOP]); /** * GnlObject:media_start * * The media start position in nanoseconds. * * Also called 'in-point' in video-editing, this corresponds to * what position in the 'contained' object we should start outputting from. */ properties[PROP_MEDIA_START] = g_param_spec_uint64 ("media_start", "Media start", "The media start position (in nanoseconds)", 0, G_MAXUINT64, GST_CLOCK_TIME_NONE, G_PARAM_READWRITE); g_object_class_install_property (gobject_class, PROP_MEDIA_START, properties[PROP_MEDIA_START]); /** * GnlObject:media_duration * * The media's duration in nanoseconds. * * This correspond to the 'contained' object's duration we will be * outputting for. */ properties[PROP_MEDIA_DURATION] = g_param_spec_int64 ("media_duration", "Media duration", "Duration of the media (in nanoseconds), can be negative", G_MININT64, G_MAXINT64, 0, G_PARAM_READWRITE); g_object_class_install_property (gobject_class, PROP_MEDIA_DURATION, properties[PROP_MEDIA_DURATION]); /** * GnlObject:media_stop * * The media stop position in nanoseconds. * * Also called 'out-point' in video-editing, this corresponds to the * position in the 'contained' object we should output until. * * This value is read-only, and is computed from the media_start and * media_duration property. */ properties[PROP_MEDIA_STOP] = g_param_spec_uint64 ("media_stop", "Media stop", "The media stop position (in nanoseconds)", 0, G_MAXUINT64, GST_CLOCK_TIME_NONE, G_PARAM_READABLE); g_object_class_install_property (gobject_class, PROP_MEDIA_STOP, properties[PROP_MEDIA_STOP]); /** * GnlObject:rate * * The rate applied to the controlled output. * * This is a read-only value computed from duration and media_duration. */ properties[PROP_RATE] = g_param_spec_double ("rate", "Rate", "Playback rate of the media (1.0 : standard forward)", -G_MAXDOUBLE, G_MAXDOUBLE, 1.0, G_PARAM_READABLE); g_object_class_install_property (gobject_class, PROP_RATE, properties[PROP_RATE]); /** * GnlObject:priority * * The priority of the object in the container. * * The highest priority is 0, meaning this object will be selected over * any other between start and stop. * * The lowest priority is G_MAXUINT32. * * Objects whose priority is (-1) will be considered as 'default' objects * in GnlComposition and their start/stop values will be modified as to * fit the whole duration of the composition. */ properties[PROP_PRIORITY] = g_param_spec_uint ("priority", "Priority", "The priority of the object (0 = highest priority)", 0, G_MAXUINT, 0, G_PARAM_READWRITE); g_object_class_install_property (gobject_class, PROP_PRIORITY, properties[PROP_PRIORITY]); /** * GnlObject:active * * Indicates whether this object should be used by its container. * * Set to #TRUE to temporarily disable this object in a #GnlComposition. */ properties[PROP_ACTIVE] = g_param_spec_boolean ("active", "Active", "Use this object in the GnlComposition", TRUE, G_PARAM_READWRITE); g_object_class_install_property (gobject_class, PROP_ACTIVE, properties[PROP_ACTIVE]); /** * GnlObject:caps * * Caps used to filter/choose the output stream. * * If the controlled object produces several stream, you can set this * property to choose a specific stream. * * If nothing is specified then a source pad will be chosen at random. */ properties[PROP_CAPS] = g_param_spec_boxed ("caps", "Caps", "Caps used to filter/choose the output stream", GST_TYPE_CAPS, G_PARAM_READWRITE); g_object_class_install_property (gobject_class, PROP_CAPS, properties[PROP_CAPS]); /** * GnlObject:expandable * * Indicates whether this object should expand to the full duration of its * container #GnlComposition. */ properties[PROP_EXPANDABLE] = g_param_spec_boolean ("expandable", "Expandable", "Expand to the full duration of the container composition", FALSE, G_PARAM_READWRITE); g_object_class_install_property (gobject_class, PROP_EXPANDABLE, properties[PROP_EXPANDABLE]); }
static void gst_shm_sink_class_init (GstShmSinkClass * klass) { GObjectClass *gobject_class; GstElementClass *gstelement_class; GstBaseSinkClass *gstbasesink_class; gobject_class = (GObjectClass *) klass; gstelement_class = (GstElementClass *) klass; gstbasesink_class = (GstBaseSinkClass *) klass; gobject_class->finalize = gst_shm_sink_finalize; gobject_class->set_property = gst_shm_sink_set_property; gobject_class->get_property = gst_shm_sink_get_property; gstbasesink_class->start = GST_DEBUG_FUNCPTR (gst_shm_sink_start); gstbasesink_class->stop = GST_DEBUG_FUNCPTR (gst_shm_sink_stop); gstbasesink_class->render = GST_DEBUG_FUNCPTR (gst_shm_sink_render); gstbasesink_class->event = GST_DEBUG_FUNCPTR (gst_shm_sink_event); gstbasesink_class->unlock = GST_DEBUG_FUNCPTR (gst_shm_sink_unlock); gstbasesink_class->unlock_stop = GST_DEBUG_FUNCPTR (gst_shm_sink_unlock_stop); g_object_class_install_property (gobject_class, PROP_SOCKET_PATH, g_param_spec_string ("socket-path", "Path to the control socket", "The path to the control socket used to control the shared memory" " transport", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_PERMS, g_param_spec_uint ("perms", "Permissions on the shm area", "Permissions to set on the shm area", 0, 07777, DEFAULT_PERMS, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_SHM_SIZE, g_param_spec_uint ("shm-size", "Size of the shm area", "Size of the shared memory area", 0, G_MAXUINT, DEFAULT_SIZE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_WAIT_FOR_CONNECTION, g_param_spec_boolean ("wait-for-connection", "Wait for a connection until rendering", "Block the stream until the shm pipe is connected", DEFAULT_WAIT_FOR_CONNECTION, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_BUFFER_TIME, g_param_spec_int64 ("buffer-time", "Buffer Time of the shm buffer", "Maximum Size of the shm buffer in nanoseconds (-1 to disable)", -1, G_MAXINT64, -1, G_PARAM_CONSTRUCT | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); signals[SIGNAL_CLIENT_CONNECTED] = g_signal_new ("client-connected", GST_TYPE_SHM_SINK, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__INT, G_TYPE_NONE, 1, G_TYPE_INT); signals[SIGNAL_CLIENT_DISCONNECTED] = g_signal_new ("client-disconnected", GST_TYPE_SHM_SINK, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__INT, G_TYPE_NONE, 1, G_TYPE_INT); gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&sinktemplate)); gst_element_class_set_static_metadata (gstelement_class, "Shared Memory Sink", "Sink", "Send data over shared memory to the matching source", "Olivier Crete <*****@*****.**>"); GST_DEBUG_CATEGORY_INIT (shmsink_debug, "shmsink", 0, "Shared Memory Sink"); }
static void gst_frei0r_mixer_init (GstFrei0rMixer * self, GstFrei0rMixerClass * klass) { self->property_cache = gst_frei0r_property_cache_init (klass->properties, klass->n_properties); self->collect = gst_collect_pads_new (); gst_collect_pads_set_function (self->collect, (GstCollectPadsFunction) gst_frei0r_mixer_collected, self); self->src = gst_pad_new_from_template (gst_element_class_get_pad_template (GST_ELEMENT_CLASS (klass), "src"), "src"); gst_pad_set_getcaps_function (self->src, GST_DEBUG_FUNCPTR (gst_frei0r_mixer_get_caps)); gst_pad_set_setcaps_function (self->src, GST_DEBUG_FUNCPTR (gst_frei0r_mixer_set_caps)); gst_pad_set_query_function (self->src, GST_DEBUG_FUNCPTR (gst_frei0r_mixer_src_query)); gst_pad_set_event_function (self->src, GST_DEBUG_FUNCPTR (gst_frei0r_mixer_src_event)); gst_element_add_pad (GST_ELEMENT_CAST (self), self->src); self->sink0 = gst_pad_new_from_template (gst_element_class_get_pad_template (GST_ELEMENT_CLASS (klass), "sink_0"), "sink_0"); gst_pad_set_getcaps_function (self->sink0, GST_DEBUG_FUNCPTR (gst_frei0r_mixer_get_caps)); gst_pad_set_setcaps_function (self->sink0, GST_DEBUG_FUNCPTR (gst_frei0r_mixer_set_caps)); gst_pad_set_query_function (self->sink0, GST_DEBUG_FUNCPTR (gst_frei0r_mixer_sink_query)); gst_collect_pads_add_pad (self->collect, self->sink0, sizeof (GstCollectData)); self->collect_event = (GstPadEventFunction) GST_PAD_EVENTFUNC (self->sink0); gst_pad_set_event_function (self->sink0, GST_DEBUG_FUNCPTR (gst_frei0r_mixer_sink0_event)); gst_element_add_pad (GST_ELEMENT_CAST (self), self->sink0); self->sink1 = gst_pad_new_from_template (gst_element_class_get_pad_template (GST_ELEMENT_CLASS (klass), "sink_1"), "sink_1"); gst_pad_set_getcaps_function (self->sink1, GST_DEBUG_FUNCPTR (gst_frei0r_mixer_get_caps)); gst_pad_set_setcaps_function (self->sink1, GST_DEBUG_FUNCPTR (gst_frei0r_mixer_set_caps)); gst_pad_set_query_function (self->sink0, GST_DEBUG_FUNCPTR (gst_frei0r_mixer_sink_query)); gst_collect_pads_add_pad (self->collect, self->sink1, sizeof (GstCollectData)); gst_element_add_pad (GST_ELEMENT_CAST (self), self->sink1); if (klass->info->plugin_type == F0R_PLUGIN_TYPE_MIXER3) { self->sink2 = gst_pad_new_from_template (gst_element_class_get_pad_template (GST_ELEMENT_CLASS (klass), "sink_2"), "sink_2"); gst_pad_set_getcaps_function (self->sink2, GST_DEBUG_FUNCPTR (gst_frei0r_mixer_get_caps)); gst_pad_set_setcaps_function (self->sink2, GST_DEBUG_FUNCPTR (gst_frei0r_mixer_set_caps)); gst_pad_set_query_function (self->sink0, GST_DEBUG_FUNCPTR (gst_frei0r_mixer_sink_query)); gst_collect_pads_add_pad (self->collect, self->sink2, sizeof (GstCollectData)); gst_element_add_pad (GST_ELEMENT_CAST (self), self->sink2); } }
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); /** * GstV4l2Src::prepare-format: * @v4l2src: the v4l2src instance * @fd: the file descriptor of the current device * @fourcc: the fourcc of the format being set * @width: The width of the video * @height: The height of the video * * This signal gets emitted before calling the v4l2 VIDIOC_S_FMT ioctl * (set format). This allows for any custom configuration of the device to * happen prior to the format being set. * This is mostly useful for UVC H264 encoding cameras which need the H264 * Probe & Commit to happen prior to the normal Probe & Commit. * * Since: 0.10.32 */ gst_v4l2_signals[SIGNAL_PRE_SET_FORMAT] = g_signal_new ("prepare-format", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, NULL, G_TYPE_NONE, 4, G_TYPE_INT, G_TYPE_UINT, G_TYPE_UINT, G_TYPE_UINT); gst_element_class_set_static_metadata (element_class, "Video (video4linux2) Source", "Source/Video", "Reads frames from a Video4Linux2 device", "Edgard Lima <*****@*****.**>, " "Stefan Kost <*****@*****.**>"); gst_element_class_add_pad_template (element_class, gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS, gst_v4l2_object_get_all_caps ())); 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->event = GST_DEBUG_FUNCPTR (gst_v4l2src_event); basesrc_class->negotiate = GST_DEBUG_FUNCPTR (gst_v4l2src_negotiate); basesrc_class->decide_allocation = GST_DEBUG_FUNCPTR (gst_v4l2src_decide_allocation); pushsrc_class->fill = GST_DEBUG_FUNCPTR (gst_v4l2src_fill); klass->v4l2_class_devices = NULL; GST_DEBUG_CATEGORY_INIT (v4l2src_debug, "v4l2src", 0, "V4L2 source element"); }
static void kms_pointer_detector_class_init (KmsPointerDetectorClass * klass) { GObjectClass *gobject_class = G_OBJECT_CLASS (klass); GstBaseTransformClass *base_transform_class = GST_BASE_TRANSFORM_CLASS (klass); GstVideoFilterClass *video_filter_class = GST_VIDEO_FILTER_CLASS (klass); /* Setting up pads and setting metadata should be moved to base_class_init if you intend to subclass this class. */ gst_element_class_add_pad_template (GST_ELEMENT_CLASS (klass), gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS, gst_caps_from_string (VIDEO_SRC_CAPS))); gst_element_class_add_pad_template (GST_ELEMENT_CLASS (klass), gst_pad_template_new ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, gst_caps_from_string (VIDEO_SINK_CAPS))); gst_element_class_set_static_metadata (GST_ELEMENT_CLASS (klass), "Pointer detector element", "Video/Filter", "Detects pointer an raises events with its position", "Francisco Rivero <*****@*****.**>"); gobject_class->set_property = kms_pointer_detector_set_property; gobject_class->get_property = kms_pointer_detector_get_property; gobject_class->dispose = kms_pointer_detector_dispose; gobject_class->finalize = kms_pointer_detector_finalize; base_transform_class->start = GST_DEBUG_FUNCPTR (kms_pointer_detector_start); base_transform_class->stop = GST_DEBUG_FUNCPTR (kms_pointer_detector_stop); video_filter_class->set_info = GST_DEBUG_FUNCPTR (kms_pointer_detector_set_info); video_filter_class->transform_frame_ip = GST_DEBUG_FUNCPTR (kms_pointer_detector_transform_frame_ip); /* Properties initialization */ g_object_class_install_property (gobject_class, PROP_NUM_REGIONS, g_param_spec_int ("num-regions-eval", "num regions eval", "Number of regions evaluated when searching for similar regions", 20, 400, 150, G_PARAM_READWRITE)); g_object_class_install_property (gobject_class, PROP_WINDOW_SCALE, g_param_spec_int ("scale-search-window", "scale search window", "Fix the size of the searching window", 2, 100, 5, G_PARAM_READWRITE)); g_object_class_install_property (gobject_class, PROP_SHOW_DEBUG_INFO, g_param_spec_boolean ("show-debug-region", "show debug region", "show evaluation regions over the image", FALSE, G_PARAM_READWRITE)); g_object_class_install_property (gobject_class, PROP_WINDOWS_LAYOUT, g_param_spec_boxed ("windows-layout", "windows layout", "supply the positions and dimensions of windows into the main window", GST_TYPE_STRUCTURE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_MESSAGE, g_param_spec_boolean ("message", "message", "Put a window-in or window-out message in the bus if " "an object enters o leaves a window", TRUE, G_PARAM_READWRITE)); g_object_class_install_property (gobject_class, PROP_SHOW_WINDOWS_LAYOUT, g_param_spec_boolean ("show-windows-layout", "show windows layout", "show windows layout over the image", TRUE, G_PARAM_READWRITE)); }
static void gst_shout2send_class_init (GstShout2sendClass * klass) { GObjectClass *gobject_class; GstElementClass *gstelement_class; GstBaseSinkClass *gstbasesink_class; gobject_class = (GObjectClass *) klass; gstelement_class = (GstElementClass *) klass; gstbasesink_class = (GstBaseSinkClass *) klass; parent_class = g_type_class_peek_parent (klass); gobject_class->set_property = gst_shout2send_set_property; gobject_class->get_property = gst_shout2send_get_property; gobject_class->finalize = (GObjectFinalizeFunc) gst_shout2send_finalize; g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_IP, g_param_spec_string ("ip", "ip", "ip", DEFAULT_IP, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_PORT, g_param_spec_int ("port", "port", "port", 1, G_MAXUSHORT, DEFAULT_PORT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_PASSWORD, g_param_spec_string ("password", "password", "password", DEFAULT_PASSWORD, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_USERNAME, g_param_spec_string ("username", "username", "username", DEFAULT_USERNAME, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); /* metadata */ g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_PUBLIC, g_param_spec_boolean ("public", "public", "If the stream should be listed on the server's stream directory", DEFAULT_PUBLIC, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_STREAMNAME, g_param_spec_string ("streamname", "streamname", "name of the stream", DEFAULT_STREAMNAME, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_DESCRIPTION, g_param_spec_string ("description", "description", "description", DEFAULT_DESCRIPTION, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_GENRE, g_param_spec_string ("genre", "genre", "genre", DEFAULT_GENRE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_PROTOCOL, g_param_spec_enum ("protocol", "protocol", "Connection Protocol to use", GST_TYPE_SHOUT_PROTOCOL, DEFAULT_PROTOCOL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); /* icecast only */ g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_MOUNT, g_param_spec_string ("mount", "mount", "mount", DEFAULT_MOUNT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_URL, g_param_spec_string ("url", "url", "url", DEFAULT_URL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); /* signals */ gst_shout2send_signals[SIGNAL_CONNECTION_PROBLEM] = g_signal_new ("connection-problem", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_CLEANUP, G_STRUCT_OFFSET (GstShout2sendClass, connection_problem), NULL, NULL, g_cclosure_marshal_VOID__INT, G_TYPE_NONE, 1, G_TYPE_INT); gstbasesink_class->start = GST_DEBUG_FUNCPTR (gst_shout2send_start); gstbasesink_class->stop = GST_DEBUG_FUNCPTR (gst_shout2send_stop); gstbasesink_class->unlock = GST_DEBUG_FUNCPTR (gst_shout2send_unlock); gstbasesink_class->unlock_stop = GST_DEBUG_FUNCPTR (gst_shout2send_unlock_stop); gstbasesink_class->render = GST_DEBUG_FUNCPTR (gst_shout2send_render); gstbasesink_class->event = GST_DEBUG_FUNCPTR (gst_shout2send_event); gstbasesink_class->set_caps = GST_DEBUG_FUNCPTR (gst_shout2send_setcaps); gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&sink_template)); gst_element_class_set_static_metadata (gstelement_class, "Icecast network sink", "Sink/Network", "Sends data to an icecast server", "Wim Taymans <*****@*****.**>, " "Pedro Corte-Real <*****@*****.**>, " "Zaheer Abbas Merali <zaheerabbas at merali dot org>"); GST_DEBUG_CATEGORY_INIT (shout2_debug, "shout2", 0, "shout2send element"); }
GST_DEBUG_FUNCPTR (gst_adder_request_new_pad); gstelement_class->release_pad = GST_DEBUG_FUNCPTR (gst_adder_release_pad); gstelement_class->change_state = GST_DEBUG_FUNCPTR (gst_adder_change_state); } static void gst_adder_init (GstAdder * adder) { GstPadTemplate *template; template = gst_static_pad_template_get (&gst_adder_src_template); adder->srcpad = gst_pad_new_from_template (template, "src"); gst_object_unref (template); gst_pad_set_query_function (adder->srcpad, GST_DEBUG_FUNCPTR (gst_adder_src_query)); gst_pad_set_event_function (adder->srcpad, GST_DEBUG_FUNCPTR (gst_adder_src_event)); GST_PAD_SET_PROXY_CAPS (adder->srcpad); gst_element_add_pad (GST_ELEMENT (adder), adder->srcpad); adder->current_caps = NULL; gst_audio_info_init (&adder->info); adder->padcount = 0; adder->filter_caps = NULL; /* keep track of the sinkpads requested */ adder->collect = gst_collect_pads_new (); gst_collect_pads_set_function (adder->collect, GST_DEBUG_FUNCPTR (gst_adder_collected), adder);
static void gst_curl_base_sink_class_init (GstCurlBaseSinkClass * klass) { GObjectClass *gobject_class = G_OBJECT_CLASS (klass); GstBaseSinkClass *gstbasesink_class = (GstBaseSinkClass *) klass; GstElementClass *element_class = GST_ELEMENT_CLASS (klass); GST_DEBUG_CATEGORY_INIT (gst_curl_base_sink_debug, "curlbasesink", 0, "curl base sink element"); GST_DEBUG_OBJECT (klass, "class_init"); gst_element_class_set_static_metadata (element_class, "Curl base sink", "Sink/Network", "Upload data over the network to a server using libcurl", "Patricia Muscalu <*****@*****.**>"); gstbasesink_class->event = GST_DEBUG_FUNCPTR (gst_curl_base_sink_event); gstbasesink_class->render = GST_DEBUG_FUNCPTR (gst_curl_base_sink_render); gstbasesink_class->start = GST_DEBUG_FUNCPTR (gst_curl_base_sink_start); gstbasesink_class->stop = GST_DEBUG_FUNCPTR (gst_curl_base_sink_stop); gstbasesink_class->unlock = GST_DEBUG_FUNCPTR (gst_curl_base_sink_unlock); gstbasesink_class->unlock_stop = GST_DEBUG_FUNCPTR (gst_curl_base_sink_unlock_stop); gobject_class->finalize = GST_DEBUG_FUNCPTR (gst_curl_base_sink_finalize); gobject_class->set_property = gst_curl_base_sink_set_property; gobject_class->get_property = gst_curl_base_sink_get_property; klass->handle_transfer = handle_transfer; klass->transfer_read_cb = gst_curl_base_sink_transfer_read_cb; klass->transfer_data_buffer = gst_curl_base_sink_transfer_data_buffer; klass->has_buffered_data_unlocked = gst_curl_base_sink_default_has_buffered_data_unlocked; /* FIXME: check against souphttpsrc and use same names for same properties */ g_object_class_install_property (gobject_class, PROP_LOCATION, g_param_spec_string ("location", "Location", "URI location to write to", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_USER_NAME, g_param_spec_string ("user", "User name", "User name to use for server authentication", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_USER_PASSWD, g_param_spec_string ("passwd", "User password", "User password to use for server authentication", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_FILE_NAME, g_param_spec_string ("file-name", "Base file name", "The base file name for the uploaded images", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_TIMEOUT, g_param_spec_int ("timeout", "Timeout", "Number of seconds waiting to write before timeout", 0, G_MAXINT, DEFAULT_TIMEOUT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_QOS_DSCP, g_param_spec_int ("qos-dscp", "QoS diff srv code point", "Quality of Service, differentiated services code point (0 default)", DSCP_MIN, DSCP_MAX, DEFAULT_QOS_DSCP, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); gst_element_class_add_static_pad_template (element_class, &sinktemplate); }
static void gst_input_selector_class_init (GstInputSelectorClass * klass) { GObjectClass *gobject_class = G_OBJECT_CLASS (klass); GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass); parent_class = g_type_class_peek_parent (klass); /* FIXME: remove after confirming it is safe now */ g_type_class_ref (gst_selector_pad_get_type ()); gobject_class->dispose = gst_input_selector_dispose; gobject_class->set_property = gst_input_selector_set_property; gobject_class->get_property = gst_input_selector_get_property; g_object_class_install_property (gobject_class, PROP_N_PADS, g_param_spec_uint ("n-pads", "Number of Pads", "The number of sink pads", 0, G_MAXUINT, 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_ACTIVE_PAD, g_param_spec_object ("active-pad", "Active pad", "The currently active sink pad", GST_TYPE_PAD, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_SELECT_ALL, g_param_spec_boolean ("select-all", "Select all mode", "Forwards data from all input pads", FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); /** * GstInputSelector::block: * @inputselector: the #GstInputSelector * * Block all sink pads in preparation for a switch. Returns the stop time of * the current switch segment, as a running time, or 0 if there is no current * active pad or the current active pad never received data. */ gst_input_selector_signals[SIGNAL_BLOCK] = g_signal_new ("block", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, G_STRUCT_OFFSET (GstInputSelectorClass, block), NULL, NULL, __gst_camerabin_marshal_INT64__VOID, G_TYPE_INT64, 0); /** * GstInputSelector::switch: * @inputselector: the #GstInputSelector * @pad: the pad to switch to * @stop_time: running time at which to close the previous segment, or -1 * to use the running time of the previously active sink pad * @start_time: running time at which to start the new segment, or -1 to * use the running time of the newly active sink pad * * Switch to a new feed. The segment opened by the previously active pad, if * any, will be closed, and a new segment opened before data flows again. * * This signal must be emitted when the element has been blocked via the <link * linkend="GstInputSelector-block">block</link> signal. * * If you have a stream with only one switch element, such as an audio-only * stream, a stream switch should be performed by first emitting the block * signal, and then emitting the switch signal with -1 for the stop and start * time values. * * The intention of the @stop_time and @start_time arguments is to allow * multiple switch elements to switch and maintain stream synchronization. * When switching a stream with multiple feeds, you will need as many switch * elements as you have feeds. For example, a feed with audio and video will * have one switch element between the audio feeds and one for video. * * A switch over multiple switch elements should be performed as follows: * First, emit the <link linkend="GstInputSelector-block">block</link> * signal, collecting the returned values. The maximum running time returned * by block should then be used as the time at which to close the previous * segment. * * Then, query the running times of the new audio and video pads that you will * switch to. Naturally, these pads are on separate switch elements. Take the * minimum running time for those streams and use it for the time at which to * open the new segment. * * If @pad is the same as the current active pad, the element will cancel any * previous block without adjusting segments. * * <note><simpara> * the signal changed from accepting the pad name to the pad object. * </simpara></note> * * Since: 0.10.7 */ gst_input_selector_signals[SIGNAL_SWITCH] = g_signal_new ("switch", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstInputSelectorClass, switch_), NULL, NULL, __gst_camerabin_marshal_VOID__OBJECT_INT64_INT64, G_TYPE_NONE, 3, GST_TYPE_PAD, G_TYPE_INT64, G_TYPE_INT64); gstelement_class->request_new_pad = gst_input_selector_request_new_pad; gstelement_class->release_pad = gst_input_selector_release_pad; gstelement_class->change_state = gst_input_selector_change_state; klass->block = GST_DEBUG_FUNCPTR (gst_input_selector_block); /* note the underscore because switch is a keyword otherwise */ klass->switch_ = GST_DEBUG_FUNCPTR (gst_input_selector_switch); }
static void gst_video_detect_class_init (gpointer klass, gpointer class_data) { GObjectClass *gobject_class; GstBaseTransformClass *trans_class; gobject_class = (GObjectClass *) klass; trans_class = (GstBaseTransformClass *) klass; parent_class = g_type_class_peek_parent (klass); gobject_class->set_property = gst_video_detect_set_property; gobject_class->get_property = gst_video_detect_get_property; g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_MESSAGE, g_param_spec_boolean ("message", "Message", "Post statics messages", DEFAULT_MESSAGE, G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_PATTERN_WIDTH, g_param_spec_int ("pattern-width", "Pattern width", "The width of the pattern markers", 1, G_MAXINT, DEFAULT_PATTERN_WIDTH, G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_PATTERN_HEIGHT, g_param_spec_int ("pattern-height", "Pattern height", "The height of the pattern markers", 1, G_MAXINT, DEFAULT_PATTERN_HEIGHT, G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_PATTERN_COUNT, g_param_spec_int ("pattern-count", "Pattern count", "The number of pattern markers", 0, G_MAXINT, DEFAULT_PATTERN_COUNT, G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_PATTERN_DATA_COUNT, g_param_spec_int ("pattern-data-count", "Pattern data count", "The number of extra data pattern markers", 0, G_MAXINT, DEFAULT_PATTERN_DATA_COUNT, G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_PATTERN_CENTER, g_param_spec_double ("pattern-center", "Pattern center", "The center of the black/white separation (0.0 = lowest, 1.0 highest)", 0.0, 1.0, DEFAULT_PATTERN_CENTER, G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_PATTERN_SENSITIVITY, g_param_spec_double ("pattern-sensitivity", "Pattern sensitivity", "The sensitivity around the center for detecting the markers " "(0.0 = lowest, 1.0 highest)", 0.0, 1.0, DEFAULT_PATTERN_SENSITIVITY, G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_LEFT_OFFSET, g_param_spec_int ("left-offset", "Left Offset", "The offset from the left border where the pattern starts", 0, G_MAXINT, DEFAULT_LEFT_OFFSET, G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_BOTTOM_OFFSET, g_param_spec_int ("bottom-offset", "Bottom Offset", "The offset from the bottom border where the pattern starts", 0, G_MAXINT, DEFAULT_BOTTOM_OFFSET, G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS)); trans_class->set_caps = GST_DEBUG_FUNCPTR (gst_video_detect_set_caps); trans_class->transform_ip = GST_DEBUG_FUNCPTR (gst_video_detect_transform_ip); trans_class->passthrough_on_same_caps = TRUE; GST_DEBUG_CATEGORY_INIT (video_detect_debug, "videodetect", 0, "Video detect"); }
static void gst_fake_sink_class_init (GstFakeSinkClass * klass) { GObjectClass *gobject_class; GstElementClass *gstelement_class; GstBaseSinkClass *gstbase_sink_class; gobject_class = G_OBJECT_CLASS (klass); gstelement_class = GST_ELEMENT_CLASS (klass); gstbase_sink_class = GST_BASE_SINK_CLASS (klass); gobject_class->set_property = gst_fake_sink_set_property; gobject_class->get_property = gst_fake_sink_get_property; gobject_class->finalize = gst_fake_sink_finalize; g_object_class_install_property (gobject_class, PROP_STATE_ERROR, g_param_spec_enum ("state-error", "State Error", "Generate a state change error", GST_TYPE_FAKE_SINK_STATE_ERROR, DEFAULT_STATE_ERROR, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); pspec_last_message = g_param_spec_string ("last-message", "Last Message", "The message describing current status", DEFAULT_LAST_MESSAGE, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (gobject_class, PROP_LAST_MESSAGE, pspec_last_message); g_object_class_install_property (gobject_class, PROP_SIGNAL_HANDOFFS, g_param_spec_boolean ("signal-handoffs", "Signal handoffs", "Send a signal before unreffing the buffer", DEFAULT_SIGNAL_HANDOFFS, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_SILENT, g_param_spec_boolean ("silent", "Silent", "Don't produce last_message events", DEFAULT_SILENT, G_PARAM_READWRITE | GST_PARAM_MUTABLE_PLAYING | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_DUMP, g_param_spec_boolean ("dump", "Dump", "Dump buffer contents to stdout", DEFAULT_DUMP, G_PARAM_READWRITE | GST_PARAM_MUTABLE_PLAYING | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_CAN_ACTIVATE_PUSH, g_param_spec_boolean ("can-activate-push", "Can activate push", "Can activate in push mode", DEFAULT_CAN_ACTIVATE_PUSH, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_CAN_ACTIVATE_PULL, g_param_spec_boolean ("can-activate-pull", "Can activate pull", "Can activate in pull mode", DEFAULT_CAN_ACTIVATE_PULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_NUM_BUFFERS, g_param_spec_int ("num-buffers", "num-buffers", "Number of buffers to accept going EOS", -1, G_MAXINT, DEFAULT_NUM_BUFFERS, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); /** * GstFakeSink::handoff: * @fakesink: the fakesink instance * @buffer: the buffer that just has been received * @pad: the pad that received it * * This signal gets emitted before unreffing the buffer. */ gst_fake_sink_signals[SIGNAL_HANDOFF] = g_signal_new ("handoff", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstFakeSinkClass, handoff), NULL, NULL, g_cclosure_marshal_generic, G_TYPE_NONE, 2, GST_TYPE_BUFFER | G_SIGNAL_TYPE_STATIC_SCOPE, GST_TYPE_PAD); /** * GstFakeSink::preroll-handoff: * @fakesink: the fakesink instance * @buffer: the buffer that just has been received * @pad: the pad that received it * * This signal gets emitted before unreffing the buffer. */ gst_fake_sink_signals[SIGNAL_PREROLL_HANDOFF] = g_signal_new ("preroll-handoff", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstFakeSinkClass, preroll_handoff), NULL, NULL, g_cclosure_marshal_generic, G_TYPE_NONE, 2, GST_TYPE_BUFFER | G_SIGNAL_TYPE_STATIC_SCOPE, GST_TYPE_PAD); gst_element_class_set_static_metadata (gstelement_class, "Fake Sink", "Sink", "Black hole for data", "Erik Walthinsen <*****@*****.**>, " "Wim Taymans <*****@*****.**>, " "Mr. 'frag-me-more' Vanderwingo <*****@*****.**>"); gst_element_class_add_static_pad_template (gstelement_class, &sinktemplate); gstelement_class->change_state = GST_DEBUG_FUNCPTR (gst_fake_sink_change_state); gstbase_sink_class->event = GST_DEBUG_FUNCPTR (gst_fake_sink_event); gstbase_sink_class->preroll = GST_DEBUG_FUNCPTR (gst_fake_sink_preroll); gstbase_sink_class->render = GST_DEBUG_FUNCPTR (gst_fake_sink_render); gstbase_sink_class->query = GST_DEBUG_FUNCPTR (gst_fake_sink_query); }
static void gst_level_class_init (GstLevelClass * klass) { GObjectClass *gobject_class = G_OBJECT_CLASS (klass); GstElementClass *element_class = GST_ELEMENT_CLASS (klass); GstBaseTransformClass *trans_class = GST_BASE_TRANSFORM_CLASS (klass); gobject_class->set_property = gst_level_set_property; gobject_class->get_property = gst_level_get_property; gobject_class->finalize = gst_level_finalize; /** * GstLevel:post-messages * * Post messages on the bus with level information. * * Since: 1.1.0 */ g_object_class_install_property (gobject_class, PROP_POST_MESSAGES, g_param_spec_boolean ("post-messages", "Post Messages", "Whether to post a 'level' element message on the bus for each " "passed interval", TRUE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); /* FIXME(2.0): remove this property */ /** * GstLevel:post-messages * * Post messages on the bus with level information. * * Deprecated: use the #GstLevel:post-messages property */ g_object_class_install_property (gobject_class, PROP_MESSAGE, g_param_spec_boolean ("message", "message", "Post a 'level' message for each passed interval (deprecated)", TRUE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_INTERVAL, g_param_spec_uint64 ("interval", "Interval", "Interval of time between message posts (in nanoseconds)", 1, G_MAXUINT64, GST_SECOND / 10, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_PEAK_TTL, g_param_spec_uint64 ("peak-ttl", "Peak TTL", "Time To Live of decay peak before it falls back (in nanoseconds)", 0, G_MAXUINT64, GST_SECOND / 10 * 3, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_PEAK_FALLOFF, g_param_spec_double ("peak-falloff", "Peak Falloff", "Decay rate of decay peak after TTL (in dB/sec)", 0.0, G_MAXDOUBLE, 10.0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); GST_DEBUG_CATEGORY_INIT (level_debug, "level", 0, "Level calculation"); gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&sink_template_factory)); gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&src_template_factory)); gst_element_class_set_static_metadata (element_class, "Level", "Filter/Analyzer/Audio", "RMS/Peak/Decaying Peak Level messager for audio/raw", "Thomas Vander Stichele <thomas at apestaart dot org>"); trans_class->set_caps = GST_DEBUG_FUNCPTR (gst_level_set_caps); trans_class->start = GST_DEBUG_FUNCPTR (gst_level_start); trans_class->transform_ip = GST_DEBUG_FUNCPTR (gst_level_transform_ip); trans_class->sink_event = GST_DEBUG_FUNCPTR (gst_level_sink_event); trans_class->passthrough_on_same_caps = TRUE; }
static void gst_glimage_sink_class_init (GstGLImageSinkClass * klass) { GObjectClass *gobject_class; GstElementClass *gstelement_class; GstBaseSinkClass *gstbasesink_class; GstVideoSinkClass *gstvideosink_class; GstElementClass *element_class; gobject_class = (GObjectClass *) klass; gstelement_class = (GstElementClass *) klass; gstbasesink_class = (GstBaseSinkClass *) klass; gstvideosink_class = (GstVideoSinkClass *) klass; element_class = GST_ELEMENT_CLASS (klass); gobject_class->set_property = gst_glimage_sink_set_property; gobject_class->get_property = gst_glimage_sink_get_property; g_object_class_install_property (gobject_class, ARG_DISPLAY, g_param_spec_string ("display", "Display", "Display name", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_FORCE_ASPECT_RATIO, g_param_spec_boolean ("force-aspect-ratio", "Force aspect ratio", "When enabled, scaling will respect original aspect ratio", TRUE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_PIXEL_ASPECT_RATIO, gst_param_spec_fraction ("pixel-aspect-ratio", "Pixel Aspect Ratio", "The pixel aspect ratio of the device", 0, 1, G_MAXINT, 1, 1, 1, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_OTHER_CONTEXT, g_param_spec_object ("other-context", "External OpenGL context", "Give an external OpenGL context with which to share textures", GST_GL_TYPE_CONTEXT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_CONTEXT, g_param_spec_object ("context", "OpenGL context", "Get OpenGL context", GST_GL_TYPE_CONTEXT, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); gst_element_class_set_metadata (element_class, "OpenGL video sink", "Sink/Video", "A videosink based on OpenGL", "Julien Isorce <*****@*****.**>"); /** * GstGLImageSink::client-draw: * @object: the #GstGLImageSink * @texture: the #guint id of the texture. * @width: the #guint width of the texture. * @height: the #guint height of the texture. * * Will be emitted before actually drawing the texture. The client should * redraw the surface/contents with the @texture, @width and @height and * and return %TRUE. * * Returns: whether the texture was redrawn by the signal. If not, a * default redraw will occur. */ gst_glimage_sink_signals[CLIENT_DRAW_SIGNAL] = g_signal_new ("client-draw", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_generic, G_TYPE_BOOLEAN, 4, GST_GL_TYPE_CONTEXT, G_TYPE_UINT, G_TYPE_UINT, G_TYPE_UINT); /** * GstGLImageSink::client-reshape: * @object: the #GstGLImageSink * @width: the #guint width of the texture. * @height: the #guint height of the texture. * * The client should resize the surface/window/viewport with the @width and * @height and return %TRUE. * * Returns: whether the content area was resized by the signal. If not, a * default viewport resize will occur. */ gst_glimage_sink_signals[CLIENT_RESHAPE_SIGNAL] = g_signal_new ("client-reshape", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_generic, G_TYPE_BOOLEAN, 3, GST_GL_TYPE_CONTEXT, G_TYPE_UINT, G_TYPE_UINT); gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&gst_glimage_sink_template)); gobject_class->finalize = gst_glimage_sink_finalize; gstelement_class->change_state = gst_glimage_sink_change_state; gstelement_class->set_context = gst_glimage_sink_set_context; gstbasesink_class->query = GST_DEBUG_FUNCPTR (gst_glimage_sink_query); gstbasesink_class->set_caps = gst_glimage_sink_set_caps; gstbasesink_class->get_times = gst_glimage_sink_get_times; gstbasesink_class->prepare = gst_glimage_sink_prepare; gstbasesink_class->propose_allocation = gst_glimage_sink_propose_allocation; gstbasesink_class->stop = gst_glimage_sink_stop; gstvideosink_class->show_frame = GST_DEBUG_FUNCPTR (gst_glimage_sink_show_frame); }
static void gst_mythtv_src_class_init (GstMythtvSrcClass * klass) { GObjectClass *gobject_class; GstPushSrcClass *gstpushsrc_class; GstBaseSrcClass *gstbasesrc_class; gobject_class = (GObjectClass *) klass; gstbasesrc_class = (GstBaseSrcClass *) klass; gstpushsrc_class = (GstPushSrcClass *) klass; gobject_class->set_property = gst_mythtv_src_set_property; gobject_class->get_property = gst_mythtv_src_get_property; gobject_class->finalize = gst_mythtv_src_finalize; g_object_class_install_property (gobject_class, PROP_LOCATION, g_param_spec_string ("location", "Location", "The location. In the form:" "\n\t\t\tmyth://a.com/file.nuv" "\n\t\t\tmyth://a.com:23223/file.nuv" "\n\t\t\tmyth://a.com/?channel=123" "\n\t\t\tmyth://a.com/?channel=Channel%203" "\n\t\t\ta.com/file.nuv - default scheme 'myth'", "", G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_GMYTHTV_VERSION, g_param_spec_int ("mythtv-version", "mythtv-version", "Change MythTV version", 26, 30, 26, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_GMYTHTV_LIVEID, g_param_spec_int ("mythtv-live-id", "mythtv-live-id", "Change MythTV version", 0, 200, GST_GMYTHTV_ID_NUM, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_GMYTHTV_LIVE_CHAINID, g_param_spec_string ("mythtv-live-chainid", "mythtv-live-chainid", "Sets the MythTV chain ID (from TV Chain)", "", G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_GMYTHTV_LIVE, g_param_spec_boolean ("mythtv-live", "mythtv-live", "Enable MythTV Live TV content streaming", FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_GMYTHTV_ENABLE_TIMING_POSITION, g_param_spec_boolean ("mythtv-enable-timing-position", "mythtv-enable-timing-position", "Enable MythTV Live TV content size continuous updating", FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_GMYTHTV_CHANNEL_NUM, g_param_spec_string ("mythtv-channel", "mythtv-channel", "Change MythTV channel number", "", G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); gstbasesrc_class->start = GST_DEBUG_FUNCPTR (gst_mythtv_src_start); gstbasesrc_class->stop = GST_DEBUG_FUNCPTR (gst_mythtv_src_stop); gstbasesrc_class->get_size = GST_DEBUG_FUNCPTR (gst_mythtv_src_get_size); gstbasesrc_class->is_seekable = GST_DEBUG_FUNCPTR (gst_mythtv_src_is_seekable); gstbasesrc_class->do_seek = GST_DEBUG_FUNCPTR (gst_mythtv_src_do_seek); gstpushsrc_class->create = GST_DEBUG_FUNCPTR (gst_mythtv_src_create); GST_DEBUG_CATEGORY_INIT (mythtvsrc_debug, "mythtvsrc", 0, "MythTV Client Source"); }
static void gst_camera_bin_class_init (GstCameraBinClass * klass) { GObjectClass *object_class; GstElementClass *element_class; parent_class = g_type_class_peek_parent (klass); object_class = G_OBJECT_CLASS (klass); element_class = GST_ELEMENT_CLASS (klass); object_class->dispose = gst_camera_bin_dispose; object_class->finalize = gst_camera_bin_finalize; object_class->set_property = gst_camera_bin_set_property; object_class->get_property = gst_camera_bin_get_property; element_class->change_state = GST_DEBUG_FUNCPTR (gst_camera_bin_change_state); klass->start_capture = gst_camera_bin_start_capture; klass->stop_capture = gst_camera_bin_stop_capture; /** * GstCameraBin:mode: * * Set the mode of operation: still image capturing or video recording. */ g_object_class_install_property (object_class, PROP_MODE, g_param_spec_enum ("mode", "Mode", "The capture mode (still image capture or video recording)", GST_TYPE_CAMERABIN_MODE, DEFAULT_MODE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (object_class, PROP_LOCATION, g_param_spec_string ("location", "Location", "Location to save the captured files. A %d might be used on the" "filename as a placeholder for a numeric index of the capture." "Default for images is img_%d and vid_%d for videos", DEFAULT_IMG_LOCATION, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (object_class, PROP_CAMERA_SRC, g_param_spec_object ("camera-src", "Camera source", "The camera source element to be used", GST_TYPE_ELEMENT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (object_class, PROP_IMAGE_CAPTURE_SUPPORTED_CAPS, g_param_spec_boxed ("image-capture-supported-caps", "Image capture supported caps", "Formats supported for capturing images represented as GstCaps", GST_TYPE_CAPS, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (object_class, PROP_VIDEO_CAPTURE_SUPPORTED_CAPS, g_param_spec_boxed ("video-capture-supported-caps", "Video capture supported caps", "Formats supported for capturing videos represented as GstCaps", GST_TYPE_CAPS, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (object_class, PROP_IMAGE_CAPTURE_CAPS, g_param_spec_boxed ("image-capture-caps", "Image capture caps", "Caps for image capture", GST_TYPE_CAPS, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (object_class, PROP_VIDEO_CAPTURE_CAPS, g_param_spec_boxed ("video-capture-caps", "Video capture caps", "Caps for video capture", GST_TYPE_CAPS, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); /** * GstCameraBin::capture-start: * @camera: the camera bin element * * Starts image capture or video recording depending on the Mode. */ camerabin_signals[START_CAPTURE_SIGNAL] = g_signal_new ("start-capture", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, G_STRUCT_OFFSET (GstCameraBinClass, start_capture), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); /** * GstCameraBin::capture-stop: * @camera: the camera bin element */ camerabin_signals[STOP_CAPTURE_SIGNAL] = g_signal_new ("stop-capture", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, G_STRUCT_OFFSET (GstCameraBinClass, stop_capture), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); }
static void gst_v4l2_video_dec_class_init (GstV4l2VideoDecClass * klass) { GstElementClass *element_class; GObjectClass *gobject_class; GstVideoDecoderClass *video_decoder_class; parent_class = g_type_class_peek_parent (klass); element_class = (GstElementClass *) klass; gobject_class = (GObjectClass *) klass; video_decoder_class = (GstVideoDecoderClass *) klass; GST_DEBUG_CATEGORY_INIT (gst_v4l2_video_dec_debug, "v4l2videodec", 0, "V4L2 Video Decoder"); gst_element_class_set_static_metadata (element_class, "V4L2 Video Decoder", "Codec/Decoder/Video", "Decode video streams via V4L2 API", "Nicolas Dufresne <*****@*****.**>"); gobject_class->dispose = GST_DEBUG_FUNCPTR (gst_v4l2_video_dec_dispose); gobject_class->finalize = GST_DEBUG_FUNCPTR (gst_v4l2_video_dec_finalize); gobject_class->set_property = GST_DEBUG_FUNCPTR (gst_v4l2_video_dec_set_property); gobject_class->get_property = GST_DEBUG_FUNCPTR (gst_v4l2_video_dec_get_property); video_decoder_class->open = GST_DEBUG_FUNCPTR (gst_v4l2_video_dec_open); video_decoder_class->close = GST_DEBUG_FUNCPTR (gst_v4l2_video_dec_close); video_decoder_class->start = GST_DEBUG_FUNCPTR (gst_v4l2_video_dec_start); video_decoder_class->stop = GST_DEBUG_FUNCPTR (gst_v4l2_video_dec_stop); video_decoder_class->finish = GST_DEBUG_FUNCPTR (gst_v4l2_video_dec_finish); video_decoder_class->flush = GST_DEBUG_FUNCPTR (gst_v4l2_video_dec_flush); video_decoder_class->set_format = GST_DEBUG_FUNCPTR (gst_v4l2_video_dec_set_format); video_decoder_class->negotiate = GST_DEBUG_FUNCPTR (gst_v4l2_video_dec_negotiate); video_decoder_class->decide_allocation = GST_DEBUG_FUNCPTR (gst_v4l2_video_dec_decide_allocation); /* FIXME propose_allocation or not ? */ video_decoder_class->handle_frame = GST_DEBUG_FUNCPTR (gst_v4l2_video_dec_handle_frame); video_decoder_class->getcaps = GST_DEBUG_FUNCPTR (gst_v4l2_video_dec_sink_getcaps); video_decoder_class->src_query = GST_DEBUG_FUNCPTR (gst_v4l2_video_dec_src_query); video_decoder_class->sink_event = GST_DEBUG_FUNCPTR (gst_v4l2_video_dec_sink_event); element_class->change_state = GST_DEBUG_FUNCPTR (gst_v4l2_video_dec_change_state); gst_v4l2_object_install_m2m_properties_helper (gobject_class); }
static void gst_multi_socket_sink_class_init (GstMultiSocketSinkClass * klass) { GObjectClass *gobject_class; GstElementClass *gstelement_class; GstBaseSinkClass *gstbasesink_class; GstMultiHandleSinkClass *gstmultihandlesink_class; gobject_class = (GObjectClass *) klass; gstelement_class = (GstElementClass *) klass; gstbasesink_class = (GstBaseSinkClass *) klass; gstmultihandlesink_class = (GstMultiHandleSinkClass *) klass; gobject_class->set_property = gst_multi_socket_sink_set_property; gobject_class->get_property = gst_multi_socket_sink_get_property; gobject_class->finalize = gst_multi_socket_sink_finalize; /** * GstMultiSocketSink::add: * @gstmultisocketsink: the multisocketsink element to emit this signal on * @socket: the socket to add to multisocketsink * * Hand the given open socket to multisocketsink to write to. */ gst_multi_socket_sink_signals[SIGNAL_ADD] = g_signal_new ("add", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, G_STRUCT_OFFSET (GstMultiSocketSinkClass, add), NULL, NULL, g_cclosure_marshal_generic, G_TYPE_NONE, 1, G_TYPE_SOCKET); /** * GstMultiSocketSink::add-full: * @gstmultisocketsink: the multisocketsink element to emit this signal on * @socket: the socket to add to multisocketsink * @sync: the sync method to use * @format_min: the format of @value_min * @value_min: the minimum amount of data to burst expressed in * @format_min units. * @format_max: the format of @value_max * @value_max: the maximum amount of data to burst expressed in * @format_max units. * * Hand the given open socket to multisocketsink to write to and * specify the burst parameters for the new connection. */ gst_multi_socket_sink_signals[SIGNAL_ADD_BURST] = g_signal_new ("add-full", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, G_STRUCT_OFFSET (GstMultiSocketSinkClass, add_full), NULL, NULL, g_cclosure_marshal_generic, G_TYPE_NONE, 6, G_TYPE_SOCKET, GST_TYPE_SYNC_METHOD, GST_TYPE_FORMAT, G_TYPE_UINT64, GST_TYPE_FORMAT, G_TYPE_UINT64); /** * GstMultiSocketSink::remove: * @gstmultisocketsink: the multisocketsink element to emit this signal on * @socket: the socket to remove from multisocketsink * * Remove the given open socket from multisocketsink. */ gst_multi_socket_sink_signals[SIGNAL_REMOVE] = g_signal_new ("remove", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, G_STRUCT_OFFSET (GstMultiSocketSinkClass, remove), NULL, NULL, g_cclosure_marshal_generic, G_TYPE_NONE, 1, G_TYPE_SOCKET); /** * GstMultiSocketSink::remove-flush: * @gstmultisocketsink: the multisocketsink element to emit this signal on * @socket: the socket to remove from multisocketsink * * Remove the given open socket from multisocketsink after flushing all * the pending data to the socket. */ gst_multi_socket_sink_signals[SIGNAL_REMOVE_FLUSH] = g_signal_new ("remove-flush", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, G_STRUCT_OFFSET (GstMultiSocketSinkClass, remove_flush), NULL, NULL, g_cclosure_marshal_generic, G_TYPE_NONE, 1, G_TYPE_SOCKET); /** * GstMultiSocketSink::get-stats: * @gstmultisocketsink: the multisocketsink element to emit this signal on * @socket: the socket to get stats of from multisocketsink * * Get statistics about @socket. This function returns a GstStructure. * * Returns: a GstStructure with the statistics. The structure contains * values that represent: total number of bytes sent, time * when the client was added, time when the client was * disconnected/removed, time the client is/was active, last activity * time (in epoch seconds), number of buffers dropped. * All times are expressed in nanoseconds (GstClockTime). */ gst_multi_socket_sink_signals[SIGNAL_GET_STATS] = g_signal_new ("get-stats", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, G_STRUCT_OFFSET (GstMultiSocketSinkClass, get_stats), NULL, NULL, g_cclosure_marshal_generic, GST_TYPE_STRUCTURE, 1, G_TYPE_SOCKET); /** * GstMultiSocketSink::client-added: * @gstmultisocketsink: the multisocketsink element that emitted this signal * @socket: the socket that was added to multisocketsink * * The given socket was added to multisocketsink. This signal will * be emitted from the streaming thread so application should be prepared * for that. */ gst_multi_socket_sink_signals[SIGNAL_CLIENT_ADDED] = g_signal_new ("client-added", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_generic, G_TYPE_NONE, 1, G_TYPE_OBJECT); /** * GstMultiSocketSink::client-removed: * @gstmultisocketsink: the multisocketsink element that emitted this signal * @socket: the socket that is to be removed from multisocketsink * @status: the reason why the client was removed * * The given socket is about to be removed from multisocketsink. This * signal will be emitted from the streaming thread so applications should * be prepared for that. * * @gstmultisocketsink still holds a handle to @socket so it is possible to call * the get-stats signal from this callback. For the same reason it is * not safe to close() and reuse @socket in this callback. */ gst_multi_socket_sink_signals[SIGNAL_CLIENT_REMOVED] = g_signal_new ("client-removed", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_generic, G_TYPE_NONE, 2, G_TYPE_INT, GST_TYPE_CLIENT_STATUS); /** * GstMultiSocketSink::client-socket-removed: * @gstmultisocketsink: the multisocketsink element that emitted this signal * @socket: the socket that was removed from multisocketsink * * The given socket was removed from multisocketsink. This signal will * be emitted from the streaming thread so applications should be prepared * for that. * * In this callback, @gstmultisocketsink has removed all the information * associated with @socket and it is therefore not possible to call get-stats * with @socket. It is however safe to close() and reuse @fd in the callback. */ gst_multi_socket_sink_signals[SIGNAL_CLIENT_SOCKET_REMOVED] = g_signal_new ("client-socket-removed", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_generic, G_TYPE_NONE, 1, G_TYPE_SOCKET); gst_element_class_set_static_metadata (gstelement_class, "Multi socket sink", "Sink/Network", "Send data to multiple sockets", "Thomas Vander Stichele <thomas at apestaart dot org>, " "Wim Taymans <*****@*****.**>, " "Sebastian Dröge <*****@*****.**>"); gstbasesink_class->unlock = GST_DEBUG_FUNCPTR (gst_multi_socket_sink_unlock); gstbasesink_class->unlock_stop = GST_DEBUG_FUNCPTR (gst_multi_socket_sink_unlock_stop); klass->add = GST_DEBUG_FUNCPTR (gst_multi_socket_sink_add); klass->add_full = GST_DEBUG_FUNCPTR (gst_multi_socket_sink_add_full); klass->remove = GST_DEBUG_FUNCPTR (gst_multi_socket_sink_remove); klass->remove_flush = GST_DEBUG_FUNCPTR (gst_multi_socket_sink_remove_flush); klass->get_stats = GST_DEBUG_FUNCPTR (gst_multi_socket_sink_get_stats); gstmultihandlesink_class->emit_client_added = gst_multi_socket_sink_emit_client_added; gstmultihandlesink_class->emit_client_removed = gst_multi_socket_sink_emit_client_removed; gstmultihandlesink_class->stop_pre = GST_DEBUG_FUNCPTR (gst_multi_socket_sink_stop_pre); gstmultihandlesink_class->stop_post = GST_DEBUG_FUNCPTR (gst_multi_socket_sink_stop_post); gstmultihandlesink_class->start_pre = GST_DEBUG_FUNCPTR (gst_multi_socket_sink_start_pre); gstmultihandlesink_class->thread = GST_DEBUG_FUNCPTR (gst_multi_socket_sink_thread); gstmultihandlesink_class->new_client = GST_DEBUG_FUNCPTR (gst_multi_socket_sink_new_client); gstmultihandlesink_class->client_get_fd = GST_DEBUG_FUNCPTR (gst_multi_socket_sink_client_get_fd); gstmultihandlesink_class->client_free = GST_DEBUG_FUNCPTR (gst_multi_socket_sink_client_free); gstmultihandlesink_class->handle_debug = GST_DEBUG_FUNCPTR (gst_multi_socket_sink_handle_debug); gstmultihandlesink_class->handle_hash_key = GST_DEBUG_FUNCPTR (gst_multi_socket_sink_handle_hash_key); gstmultihandlesink_class->hash_adding = GST_DEBUG_FUNCPTR (gst_multi_socket_sink_hash_adding); gstmultihandlesink_class->hash_removing = GST_DEBUG_FUNCPTR (gst_multi_socket_sink_hash_removing); GST_DEBUG_CATEGORY_INIT (multisocketsink_debug, "multisocketsink", 0, "Multi socket sink"); }
static void gst_vaapidecode_class_init (GstVaapiDecodeClass * klass) { GObjectClass *const object_class = G_OBJECT_CLASS (klass); GstElementClass *const element_class = GST_ELEMENT_CLASS (klass); GstVideoDecoderClass *const vdec_class = GST_VIDEO_DECODER_CLASS (klass); GstPadTemplate *pad_template; GstVaapiDecoderMap *map; gchar *name, *longname, *description; GstCaps *caps; GST_DEBUG_CATEGORY_INIT (gst_debug_vaapidecode, GST_PLUGIN_NAME, 0, GST_PLUGIN_DESC); parent_class = g_type_class_peek_parent (klass); gst_vaapi_plugin_base_class_init (GST_VAAPI_PLUGIN_BASE_CLASS (klass)); object_class->finalize = gst_vaapidecode_finalize; vdec_class->open = GST_DEBUG_FUNCPTR (gst_vaapidecode_open); vdec_class->close = GST_DEBUG_FUNCPTR (gst_vaapidecode_close); vdec_class->start = GST_DEBUG_FUNCPTR (gst_vaapidecode_start); vdec_class->stop = GST_DEBUG_FUNCPTR (gst_vaapidecode_stop); vdec_class->set_format = GST_DEBUG_FUNCPTR (gst_vaapidecode_set_format); vdec_class->flush = GST_DEBUG_FUNCPTR (gst_vaapidecode_flush); vdec_class->parse = GST_DEBUG_FUNCPTR (gst_vaapidecode_parse); vdec_class->handle_frame = GST_DEBUG_FUNCPTR (gst_vaapidecode_handle_frame); vdec_class->finish = GST_DEBUG_FUNCPTR (gst_vaapidecode_finish); vdec_class->drain = GST_DEBUG_FUNCPTR (gst_vaapidecode_drain); vdec_class->decide_allocation = GST_DEBUG_FUNCPTR (gst_vaapidecode_decide_allocation); vdec_class->src_query = GST_DEBUG_FUNCPTR (gst_vaapidecode_src_query); vdec_class->sink_query = GST_DEBUG_FUNCPTR (gst_vaapidecode_sink_query); vdec_class->getcaps = GST_DEBUG_FUNCPTR (gst_vaapidecode_sink_getcaps); vdec_class->sink_event = GST_DEBUG_FUNCPTR (gst_vaapidecode_sink_event); map = (GstVaapiDecoderMap *) g_type_get_qdata (G_OBJECT_CLASS_TYPE (klass), GST_VAAPI_DECODE_PARAMS_QDATA); if (map->codec) { name = g_ascii_strup (map->name, -1); longname = g_strdup_printf ("VA-API %s decoder", name); description = g_strdup_printf ("A VA-API based %s video decoder", name); g_free (name); } else { longname = g_strdup ("VA-API decoder"); description = g_strdup (GST_PLUGIN_DESC); } element_class->set_context = gst_vaapi_base_set_context; gst_element_class_set_static_metadata (element_class, longname, "Codec/Decoder/Video/Hardware", description, "Gwenole Beauchesne <*****@*****.**>, " "Halley Zhao <*****@*****.**>, " "Sreerenj Balachandran <*****@*****.**>, " "Wind Yuan <*****@*****.**>"); g_free (longname); g_free (description); if (map->install_properties) map->install_properties (object_class); /* sink pad */ caps = gst_caps_from_string (map->caps_str); pad_template = gst_pad_template_new ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, caps); gst_caps_unref (caps); gst_element_class_add_pad_template (element_class, pad_template); /* src pad */ gst_element_class_add_static_pad_template (element_class, &gst_vaapidecode_src_factory); }
static void gst_mpg123_audio_dec_class_init (GstMpg123AudioDecClass * klass) { GObjectClass *object_class; GstAudioDecoderClass *base_class; GstElementClass *element_class; GstPadTemplate *src_template; int error; GST_DEBUG_CATEGORY_INIT (mpg123_debug, "mpg123", 0, "mpg123 mp3 decoder"); object_class = G_OBJECT_CLASS (klass); base_class = GST_AUDIO_DECODER_CLASS (klass); element_class = GST_ELEMENT_CLASS (klass); object_class->finalize = gst_mpg123_audio_dec_finalize; gst_element_class_set_static_metadata (element_class, "mpg123 mp3 decoder", "Codec/Decoder/Audio", "Decodes mp3 streams using the mpg123 library", "Carlos Rafael Giani <*****@*****.**>"); /* Not using static pad template for srccaps, since the comma-separated list of formats needs to be created depending on whatever mpg123 supports */ { const int *format_list; const long *rates_list; size_t num, i; GString *s; s = g_string_new ("audio/x-raw, "); mpg123_encodings (&format_list, &num); g_string_append (s, "format = { "); for (i = 0; i < num; ++i) { switch (format_list[i]) { case MPG123_ENC_SIGNED_16: g_string_append (s, (i > 0) ? ", " : ""); g_string_append (s, GST_AUDIO_NE (S16)); break; case MPG123_ENC_UNSIGNED_16: g_string_append (s, (i > 0) ? ", " : ""); g_string_append (s, GST_AUDIO_NE (U16)); break; case MPG123_ENC_SIGNED_24: g_string_append (s, (i > 0) ? ", " : ""); g_string_append (s, GST_AUDIO_NE (S24)); break; case MPG123_ENC_UNSIGNED_24: g_string_append (s, (i > 0) ? ", " : ""); g_string_append (s, GST_AUDIO_NE (U24)); break; case MPG123_ENC_SIGNED_32: g_string_append (s, (i > 0) ? ", " : ""); g_string_append (s, GST_AUDIO_NE (S32)); break; case MPG123_ENC_UNSIGNED_32: g_string_append (s, (i > 0) ? ", " : ""); g_string_append (s, GST_AUDIO_NE (U32)); break; case MPG123_ENC_FLOAT_32: g_string_append (s, (i > 0) ? ", " : ""); g_string_append (s, GST_AUDIO_NE (F32)); break; default: GST_DEBUG ("Ignoring mpg123 format %d", format_list[i]); break; } } g_string_append (s, " }, "); mpg123_rates (&rates_list, &num); g_string_append (s, "rate = (int) { "); for (i = 0; i < num; ++i) { g_string_append_printf (s, "%s%lu", (i > 0) ? ", " : "", rates_list[i]); } g_string_append (s, "}, "); g_string_append (s, "channels = (int) [ 1, 2 ], "); g_string_append (s, "layout = (string) interleaved"); src_template = gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS, gst_caps_from_string (s->str)); g_string_free (s, TRUE); } gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&sink_template)); gst_element_class_add_pad_template (element_class, src_template); base_class->start = GST_DEBUG_FUNCPTR (gst_mpg123_audio_dec_start); base_class->stop = GST_DEBUG_FUNCPTR (gst_mpg123_audio_dec_stop); base_class->handle_frame = GST_DEBUG_FUNCPTR (gst_mpg123_audio_dec_handle_frame); base_class->set_format = GST_DEBUG_FUNCPTR (gst_mpg123_audio_dec_set_format); base_class->flush = GST_DEBUG_FUNCPTR (gst_mpg123_audio_dec_flush); error = mpg123_init (); if (G_UNLIKELY (error != MPG123_OK)) GST_ERROR ("Could not initialize mpg123 library: %s", mpg123_plain_strerror (error)); else GST_TRACE ("mpg123 library initialized"); }
static void gst_er_dtls_dec_class_init(GstErDtlsDecClass *klass) { GObjectClass *gobject_class; GstElementClass *element_class; gobject_class = (GObjectClass *) klass; element_class = (GstElementClass *) klass; gobject_class->finalize = GST_DEBUG_FUNCPTR(gst_er_dtls_dec_finalize); gobject_class->dispose = GST_DEBUG_FUNCPTR(gst_er_dtls_dec_dispose); gobject_class->set_property = GST_DEBUG_FUNCPTR(gst_er_dtls_dec_set_property); gobject_class->get_property = GST_DEBUG_FUNCPTR(gst_er_dtls_dec_get_property); element_class->change_state = GST_DEBUG_FUNCPTR(gst_er_dtls_dec_change_state); element_class->request_new_pad = GST_DEBUG_FUNCPTR(gst_er_dtls_dec_request_new_pad); element_class->release_pad = GST_DEBUG_FUNCPTR(gst_er_dtls_dec_release_pad); signals[SIGNAL_ON_KEY_RECEIVED] = g_signal_new("on-key-received", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_generic, G_TYPE_NONE, 0); properties[PROP_CONNECTION_ID] = g_param_spec_string("connection-id", "Connection id", "Every encoder/decoder pair should have the same, unique, connection-id", DEFAULT_CONNECTION_ID, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); properties[PROP_PEM] = g_param_spec_string("pem", "PEM string", "A string containing a X509 certificate and RSA private key in PEM format", DEFAULT_PEM, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); properties[PROP_PEER_PEM] = g_param_spec_string("peer-pem", "Peer PEM string", "The X509 certificate received in the DTLS handshake, in PEM format", DEFAULT_PEER_PEM, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); properties[PROP_DECODER_KEY] = g_param_spec_boxed("decoder-key", "Decoder key", "SRTP key that should be used by the decider", GST_TYPE_CAPS, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); properties[PROP_SRTP_CIPHER] = g_param_spec_uint("srtp-cipher", "SRTP cipher", "The SRTP cipher selected in the DTLS handshake. " "The value will be set to an ErDtlsSrtpCipher.", 0, ER_DTLS_SRTP_CIPHER_AES_128_ICM, DEFAULT_SRTP_CIPHER, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); properties[PROP_SRTP_AUTH] = g_param_spec_uint("srtp-auth", "SRTP authentication", "The SRTP authentication selected in the DTLS handshake. " "The value will be set to an ErDtlsSrtpAuth.", 0, ER_DTLS_SRTP_AUTH_HMAC_SHA1_80, DEFAULT_SRTP_AUTH, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_properties(gobject_class, NUM_PROPERTIES, properties); gst_element_class_add_pad_template(element_class, gst_static_pad_template_get(&src_template)); gst_element_class_add_pad_template(element_class, gst_static_pad_template_get(&sink_template)); gst_element_class_set_static_metadata(element_class, "DTLS Decoder", "Decoder/Network/DTLS", "Decodes DTLS packets", "Patrik Oldsberg [email protected]"); }
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); gchar *clientname; gobject_class->finalize = gst_pulsesrc_finalize; gobject_class->set_property = gst_pulsesrc_set_property; gobject_class->get_property = 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)); clientname = gst_pulse_client_name (); /** * GstPulseSrc:client-name * * The PulseAudio client name to use. */ g_object_class_install_property (gobject_class, PROP_CLIENT_NAME, g_param_spec_string ("client-name", "Client Name", "The PulseAudio client_name_to_use", clientname, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | GST_PARAM_MUTABLE_READY)); g_free (clientname); /** * GstPulseSrc:stream-properties * * List of pulseaudio stream properties. A list of defined properties can be * found in the <ulink href="http://0pointer.de/lennart/projects/pulseaudio/doxygen/proplist_8h.html">pulseaudio api docs</ulink>. * * Below is an example for registering as a music application to pulseaudio. * |[ * GstStructure *props; * * props = gst_structure_from_string ("props,media.role=music", NULL); * g_object_set (pulse, "stream-properties", props, NULL); * gst_structure_free (props); * ]| * * Since: 0.10.26 */ g_object_class_install_property (gobject_class, PROP_STREAM_PROPERTIES, g_param_spec_boxed ("stream-properties", "stream properties", "list of pulseaudio stream properties", GST_TYPE_STRUCTURE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); /** * GstPulseSrc:source-output-index * * The index of the PulseAudio source output corresponding to this element. * * Since: 0.10.31 */ g_object_class_install_property (gobject_class, PROP_SOURCE_OUTPUT_INDEX, g_param_spec_uint ("source-output-index", "source output index", "The index of the PulseAudio source output corresponding to this " "record stream", 0, G_MAXUINT, PA_INVALID_INDEX, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); gst_element_class_set_static_metadata (gstelement_class, "PulseAudio Audio Source", "Source/Audio", "Captures audio from a PulseAudio server", "Lennart Poettering"); gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&pad_template)); /** * GstPulseSrc:volume * * The volume of the record stream. */ g_object_class_install_property (gobject_class, PROP_VOLUME, g_param_spec_double ("volume", "Volume", "Linear volume of this stream, 1.0=100%", 0.0, MAX_VOLUME, DEFAULT_VOLUME, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); /** * GstPulseSrc:mute * * Whether the stream is muted or not. */ g_object_class_install_property (gobject_class, PROP_MUTE, g_param_spec_boolean ("mute", "Mute", "Mute state of this stream", DEFAULT_MUTE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); }
static void ges_pipeline_class_init (GESPipelineClass * klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GstElementClass *element_class = GST_ELEMENT_CLASS (klass); g_type_class_add_private (klass, sizeof (GESPipelinePrivate)); object_class->dispose = ges_pipeline_dispose; object_class->get_property = ges_pipeline_get_property; object_class->set_property = ges_pipeline_set_property; /** * GESPipeline:audio-sink: * * Audio sink for the preview. */ properties[PROP_AUDIO_SINK] = g_param_spec_object ("audio-sink", "Audio Sink", "Audio sink for the preview.", GST_TYPE_ELEMENT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_AUDIO_SINK, properties[PROP_AUDIO_SINK]); /** * GESPipeline:video-sink: * * Video sink for the preview. */ properties[PROP_VIDEO_SINK] = g_param_spec_object ("video-sink", "Video Sink", "Video sink for the preview.", GST_TYPE_ELEMENT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_VIDEO_SINK, properties[PROP_VIDEO_SINK]); /** * GESPipeline:timeline: * * Timeline to use in this pipeline. See also * ges_pipeline_add_timeline() for more info. */ properties[PROP_TIMELINE] = g_param_spec_object ("timeline", "Timeline", "Timeline to use in this pipeline. See also " "ges_pipeline_add_timeline() for more info.", GES_TYPE_TIMELINE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_TIMELINE, properties[PROP_TIMELINE]); /** * GESPipeline:mode: * * Pipeline mode. See ges_pipeline_set_mode() for more * info. */ properties[PROP_MODE] = g_param_spec_flags ("mode", "Mode", "Pipeline mode. See ges_pipeline_set_mode() for more info.", GES_TYPE_PIPELINE_FLAGS, DEFAULT_TIMELINE_MODE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_MODE, properties[PROP_MODE]); element_class->change_state = GST_DEBUG_FUNCPTR (ges_pipeline_change_state); /* TODO : Add state_change handlers * Don't change state if we don't have a timeline */ }
static void gst_xvidenc_class_init (GstXvidEncClass * klass) { GstElementClass *gstelement_class; GObjectClass *gobject_class; GParamSpec *pspec; gobject_class = G_OBJECT_CLASS (klass); gstelement_class = GST_ELEMENT_CLASS (klass); parent_class = g_type_class_peek_parent (klass); GST_DEBUG_CATEGORY_INIT (xvidenc_debug, "xvidenc", 0, "XviD encoder"); gobject_class->finalize = gst_xvidenc_finalize; gobject_class->set_property = gst_xvidenc_set_property; gobject_class->get_property = gst_xvidenc_get_property; /* prop handling */ xvidenc_prop_count = 0; xvidenc_pspec_quark = g_quark_from_static_string ("xvid-enc-param-spec-data"); pspec = g_param_spec_enum ("profile", "Profile", "XviD/MPEG-4 encoding profile", GST_TYPE_XVIDENC_PROFILE, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); gst_xvidenc_add_pspec (gobject_class, pspec, profile); pspec = g_param_spec_enum ("quant-type", "Quantizer Type", "Quantizer type", GST_TYPE_XVIDENC_QUANT_TYPE, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); gst_xvidenc_add_pspec (gobject_class, pspec, quant_type); pspec = g_param_spec_enum ("pass", "Encoding pass/type", "Encoding pass/type", GST_TYPE_XVIDENC_PASS, XVIDENC_CBR, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); gst_xvidenc_add_pspec (gobject_class, pspec, pass); pspec = g_param_spec_int ("bitrate", "Bitrate", "[CBR|PASS2] Target video bitrate (bps)", 0, G_MAXINT, 1800000, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); gst_xvidenc_add_pspec (gobject_class, pspec, bitrate); pspec = g_param_spec_int ("quantizer", "Quantizer", "[QUANT] Quantizer to apply for constant quantizer mode", 2, 31, 2, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); gst_xvidenc_add_pspec (gobject_class, pspec, quant); pspec = g_param_spec_string ("statsfile", "Statistics Filename", "[PASS1|PASS2] Filename to store data for 2-pass encoding", "xvid-stats.log", G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); gst_xvidenc_add_pspec (gobject_class, pspec, filename); pspec = g_param_spec_int ("max-key-interval", "Max. Key Interval", "Maximum number of frames between two keyframes (< 0 is in sec)", -100, G_MAXINT, -10, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); gst_xvidenc_add_pspec (gobject_class, pspec, max_key_interval); pspec = g_param_spec_boolean ("closed-gop", "Closed GOP", "Closed GOP", FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); gst_xvidenc_add_pspec (gobject_class, pspec, closed_gop); pspec = g_param_spec_int ("motion", "ME Quality", "Quality of Motion Estimation", 0, 6, 6, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); gst_xvidenc_add_pspec (gobject_class, pspec, motion); pspec = g_param_spec_boolean ("me-chroma", "ME Chroma", "Enable use of Chroma planes for Motion Estimation", TRUE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); gst_xvidenc_add_pspec (gobject_class, pspec, me_chroma); pspec = g_param_spec_int ("me-vhq", "ME DCT/Frequency", "Extent in which to use DCT to minimize encoding length", 0, 4, 1, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); gst_xvidenc_add_pspec (gobject_class, pspec, me_vhq); pspec = g_param_spec_boolean ("me-quarterpel", "ME Quarterpel", "Use quarter pixel precision for motion vector search", FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); gst_xvidenc_add_pspec (gobject_class, pspec, me_quarterpel); pspec = g_param_spec_boolean ("lumimasking", "Lumimasking", "Enable lumimasking - apply more compression to dark or bright areas", FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); gst_xvidenc_add_pspec (gobject_class, pspec, lumimasking); pspec = g_param_spec_int ("max-bframes", "Max B-Frames", "Maximum B-frames in a row", 0, G_MAXINT, 1, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); gst_xvidenc_add_pspec (gobject_class, pspec, max_bframes); pspec = g_param_spec_int ("bquant-ratio", "B-quantizer ratio", "Ratio in B-frame quantizer computation", 0, 200, 150, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); gst_xvidenc_add_pspec (gobject_class, pspec, bquant_ratio); pspec = g_param_spec_int ("bquant-offset", "B-quantizer offset", "Offset in B-frame quantizer computation", 0, 200, 100, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); gst_xvidenc_add_pspec (gobject_class, pspec, bquant_offset); pspec = g_param_spec_int ("bframe-threshold", "B-Frame Threshold", "Higher threshold yields more chance that B-frame is used", -255, 255, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); gst_xvidenc_add_pspec (gobject_class, pspec, bframe_threshold); pspec = g_param_spec_boolean ("gmc", "Global Motion Compensation", "Allow generation of Sprite Frames for Pan/Zoom/Rotating images", FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); gst_xvidenc_add_pspec (gobject_class, pspec, gmc); pspec = g_param_spec_boolean ("trellis", "Trellis Quantization", "Enable Trellis Quantization", FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); gst_xvidenc_add_pspec (gobject_class, pspec, trellis); pspec = g_param_spec_boolean ("interlaced", "Interlaced Material", "Enable for interlaced video material", FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); gst_xvidenc_add_pspec (gobject_class, pspec, interlaced); pspec = g_param_spec_boolean ("cartoon", "Cartoon Material", "Adjust thresholds for flat looking cartoons", FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); gst_xvidenc_add_pspec (gobject_class, pspec, cartoon); pspec = g_param_spec_boolean ("greyscale", "Disable Chroma", "Do not write chroma data in encoded video", FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); gst_xvidenc_add_pspec (gobject_class, pspec, greyscale); pspec = g_param_spec_boolean ("hqacpred", "High quality AC prediction", "Enable high quality AC prediction", TRUE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); gst_xvidenc_add_pspec (gobject_class, pspec, hqacpred); pspec = g_param_spec_int ("max-iquant", "Max Quant I-Frames", "Upper bound for I-frame quantization", 0, 31, 31, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); gst_xvidenc_add_pspec (gobject_class, pspec, max_iquant); pspec = g_param_spec_int ("min-iquant", "Min Quant I-Frames", "Lower bound for I-frame quantization", 0, 31, 2, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); gst_xvidenc_add_pspec (gobject_class, pspec, min_iquant); pspec = g_param_spec_int ("max-pquant", "Max Quant P-Frames", "Upper bound for P-frame quantization", 0, 31, 31, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); gst_xvidenc_add_pspec (gobject_class, pspec, max_pquant); pspec = g_param_spec_int ("min-pquant", "Min Quant P-Frames", "Lower bound for P-frame quantization", 0, 31, 2, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); gst_xvidenc_add_pspec (gobject_class, pspec, min_pquant); pspec = g_param_spec_int ("max-bquant", "Max Quant B-Frames", "Upper bound for B-frame quantization", 0, 31, 31, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); gst_xvidenc_add_pspec (gobject_class, pspec, max_bquant); pspec = g_param_spec_int ("min-bquant", "Min Quant B-Frames", "Lower bound for B-frame quantization", 0, 31, 2, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); gst_xvidenc_add_pspec (gobject_class, pspec, min_bquant); pspec = g_param_spec_int ("reaction-delay-factor", "Reaction Delay Factor", "[CBR] Reaction delay factor", -1, 100, -1, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); gst_xvidenc_add_pspec (gobject_class, pspec, reaction_delay_factor); pspec = g_param_spec_int ("averaging-period", "Averaging Period", "[CBR] Number of frames for which XviD averages bitrate", -1, 100, -1, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); gst_xvidenc_add_pspec (gobject_class, pspec, averaging_period); pspec = g_param_spec_int ("buffer", "Buffer Size", "[CBR] Size of the video buffers", -1, G_MAXINT, -1, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); gst_xvidenc_add_pspec (gobject_class, pspec, buffer); pspec = g_param_spec_int ("keyframe-boost", "Keyframe boost", "[PASS2] Bitrate boost for keyframes", 0, 100, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); gst_xvidenc_add_pspec (gobject_class, pspec, keyframe_boost); pspec = g_param_spec_int ("curve-compression-high", "Curve Compression High", "[PASS2] Shrink factor for upper part of bitrate curve", 0, 100, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); gst_xvidenc_add_pspec (gobject_class, pspec, curve_compression_high); pspec = g_param_spec_int ("curve-compression-low", "Curve Compression Low", "[PASS2] Growing factor for lower part of bitrate curve", 0, 100, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); gst_xvidenc_add_pspec (gobject_class, pspec, curve_compression_low); pspec = g_param_spec_int ("flow-control-strength", "Flow Control Strength", "[PASS2] Overflow control strength per frame", -1, 100, 5, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); gst_xvidenc_add_pspec (gobject_class, pspec, overflow_control_strength); pspec = g_param_spec_int ("max-overflow-improvement", "Max Overflow Improvement", "[PASS2] Amount in % that flow control can increase frame size compared to ideal curve", -1, 100, 5, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); gst_xvidenc_add_pspec (gobject_class, pspec, max_overflow_improvement); pspec = g_param_spec_int ("max-overflow-degradation", "Max Overflow Degradation", "[PASS2] Amount in % that flow control can decrease frame size compared to ideal curve", -1, 100, 5, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); gst_xvidenc_add_pspec (gobject_class, pspec, max_overflow_degradation); pspec = g_param_spec_int ("keyframe-reduction", "Keyframe Reduction", "[PASS2] Keyframe size reduction in % of those within threshold", -1, 100, 20, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); gst_xvidenc_add_pspec (gobject_class, pspec, kfreduction); pspec = g_param_spec_int ("keyframe-threshold", "Keyframe Threshold", "[PASS2] Distance between keyframes not to be subject to reduction", -1, 100, 1, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); gst_xvidenc_add_pspec (gobject_class, pspec, kfthreshold); pspec = g_param_spec_int ("container-frame-overhead", "Container Frame Overhead", "[PASS2] Average container overhead per frame", -1, 100, -1, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); gst_xvidenc_add_pspec (gobject_class, pspec, container_frame_overhead); gstelement_class->change_state = GST_DEBUG_FUNCPTR (gst_xvidenc_change_state); }