static void gst_gl_mixer_bin_class_init (GstGLMixerBinClass * klass) { GObjectClass *gobject_class = (GObjectClass *) klass; GstElementClass *element_class = GST_ELEMENT_CLASS (klass); GstCaps *upload_caps; g_type_class_add_private (klass, sizeof (GstGLMixerBinPrivate)); GST_DEBUG_CATEGORY_INIT (GST_CAT_DEFAULT, "glmixerbin", 0, "opengl mixer bin"); element_class->request_new_pad = gst_gl_mixer_bin_request_new_pad; element_class->release_pad = gst_gl_mixer_bin_release_pad; element_class->change_state = gst_gl_mixer_bin_change_state; gobject_class->get_property = gst_gl_mixer_bin_get_property; gobject_class->set_property = gst_gl_mixer_bin_set_property; gobject_class->dispose = GST_DEBUG_FUNCPTR (gst_gl_mixer_bin_dispose); g_object_class_install_property (gobject_class, PROP_MIXER, g_param_spec_object ("mixer", "GL mixer element", "The GL mixer chain to use", GST_TYPE_ELEMENT, GST_PARAM_MUTABLE_READY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_LATENCY, g_param_spec_int64 ("latency", "Buffer latency", "Additional latency in live mode to allow upstream " "to take longer to produce buffers for the current " "position", 0, (G_MAXLONG == G_MAXINT64) ? G_MAXINT64 : (G_MAXLONG * GST_SECOND - 1), DEFAULT_LATENCY, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); /** * GstMixerBin::create-element: * @object: the #GstGLMixerBin * * Will be emitted when we need the processing element/s that this bin will use * * Returns: a new #GstElement */ gst_gl_mixer_bin_signals[SIGNAL_CREATE_ELEMENT] = g_signal_new ("create-element", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_generic, GST_TYPE_ELEMENT, 0); gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&src_factory)); upload_caps = gst_gl_upload_get_input_template_caps (); gst_element_class_add_pad_template (element_class, gst_pad_template_new ("sink_%u", GST_PAD_SINK, GST_PAD_REQUEST, upload_caps)); gst_caps_unref (upload_caps); }
static void gst_gl_sink_bin_class_init (GstGLSinkBinClass * klass) { GObjectClass *gobject_class; GstElementClass *element_class; GstCaps *upload_caps; gobject_class = (GObjectClass *) klass; element_class = GST_ELEMENT_CLASS (klass); element_class->change_state = gst_gl_sink_bin_change_state; gobject_class->set_property = gst_gl_sink_bin_set_property; gobject_class->get_property = gst_gl_sink_bin_get_property; 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_SINK, g_param_spec_object ("sink", "GL sink element", "The GL sink chain to use", GST_TYPE_ELEMENT, GST_PARAM_MUTABLE_READY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); /** * GstGLSinkBin::create-element: * @object: the #GstGLSinkBin * * Will be emitted when we need the processing element/s that this bin will use * * Returns: a new #GstElement */ gst_gl_sink_bin_signals[SIGNAL_CREATE_ELEMENT] = g_signal_new ("create-element", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_generic, GST_TYPE_ELEMENT, 0); gst_element_class_set_metadata (element_class, "GL Sink Bin", "Sink/Video", "Infrastructure to process GL textures", "Matthew Waters <*****@*****.**>"); upload_caps = gst_gl_upload_get_input_template_caps (); gst_element_class_add_pad_template (element_class, gst_pad_template_new ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, upload_caps)); gst_caps_unref (upload_caps); }
static void gst_gl_sink_bin_class_init (GstGLSinkBinClass * klass) { GObjectClass *gobject_class; GstElementClass *element_class; GstCaps *upload_caps; gobject_class = (GObjectClass *) klass; element_class = GST_ELEMENT_CLASS (klass); element_class->change_state = gst_gl_sink_bin_change_state; gobject_class->set_property = gst_gl_sink_bin_set_property; gobject_class->get_property = gst_gl_sink_bin_get_property; 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_SINK, g_param_spec_object ("sink", "GL sink element", "The GL sink chain to use", GST_TYPE_ELEMENT, GST_PARAM_MUTABLE_READY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); /* base sink */ g_object_class_install_property (gobject_class, PROP_SYNC, g_param_spec_boolean ("sync", "Sync", "Sync on the clock", DEFAULT_SYNC, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_MAX_LATENESS, g_param_spec_int64 ("max-lateness", "Max Lateness", "Maximum number of nanoseconds that a buffer can be late before it " "is dropped (-1 unlimited)", -1, G_MAXINT64, DEFAULT_MAX_LATENESS, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_QOS, g_param_spec_boolean ("qos", "Qos", "Generate Quality-of-Service events upstream", DEFAULT_QOS, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_ASYNC, g_param_spec_boolean ("async", "Async", "Go asynchronously to PAUSED", DEFAULT_ASYNC, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_TS_OFFSET, g_param_spec_int64 ("ts-offset", "TS Offset", "Timestamp offset in nanoseconds", G_MININT64, G_MAXINT64, DEFAULT_TS_OFFSET, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_ENABLE_LAST_SAMPLE, g_param_spec_boolean ("enable-last-sample", "Enable Last Buffer", "Enable the last-sample property", DEFAULT_ENABLE_LAST_SAMPLE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_LAST_SAMPLE, g_param_spec_boxed ("last-sample", "Last Sample", "The last sample received in the sink", GST_TYPE_SAMPLE, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_BLOCKSIZE, g_param_spec_uint ("blocksize", "Block size", "Size in bytes to pull per buffer (0 = default)", 0, G_MAXUINT, DEFAULT_BLOCKSIZE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_RENDER_DELAY, g_param_spec_uint64 ("render-delay", "Render Delay", "Additional render delay of the sink in nanoseconds", 0, G_MAXUINT64, DEFAULT_RENDER_DELAY, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_THROTTLE_TIME, g_param_spec_uint64 ("throttle-time", "Throttle time", "The time to keep between rendered buffers (0 = disabled)", 0, G_MAXUINT64, DEFAULT_THROTTLE_TIME, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_MAX_BITRATE, g_param_spec_uint64 ("max-bitrate", "Max Bitrate", "The maximum bits per second to render (0 = disabled)", 0, G_MAXUINT64, DEFAULT_MAX_BITRATE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); /* colorbalance */ g_object_class_install_property (gobject_class, PROP_CONTRAST, g_param_spec_double ("contrast", "Contrast", "contrast", 0.0, 2.0, DEFAULT_PROP_CONTRAST, GST_PARAM_CONTROLLABLE | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_BRIGHTNESS, g_param_spec_double ("brightness", "Brightness", "brightness", -1.0, 1.0, DEFAULT_PROP_BRIGHTNESS, GST_PARAM_CONTROLLABLE | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_HUE, g_param_spec_double ("hue", "Hue", "hue", -1.0, 1.0, DEFAULT_PROP_HUE, GST_PARAM_CONTROLLABLE | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_SATURATION, g_param_spec_double ("saturation", "Saturation", "saturation", 0.0, 2.0, DEFAULT_PROP_SATURATION, GST_PARAM_CONTROLLABLE | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); /** * GstGLSinkBin::create-element: * @object: the #GstGLSinkBin * * Will be emitted when we need the processing element/s that this bin will use * * Returns: a new #GstElement */ gst_gl_sink_bin_signals[SIGNAL_CREATE_ELEMENT] = g_signal_new ("create-element", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_generic, GST_TYPE_ELEMENT, 0); gst_element_class_set_metadata (element_class, "GL Sink Bin", "Sink/Video", "Infrastructure to process GL textures", "Matthew Waters <*****@*****.**>"); upload_caps = gst_gl_upload_get_input_template_caps (); gst_element_class_add_pad_template (element_class, gst_pad_template_new ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, upload_caps)); gst_caps_unref (upload_caps); }