static void gst_rg_volume_class_init (GstRgVolumeClass * klass) { GObjectClass *gobject_class; GstElementClass *element_class; GstBinClass *bin_class; gobject_class = (GObjectClass *) klass; gobject_class->set_property = gst_rg_volume_set_property; gobject_class->get_property = gst_rg_volume_get_property; gobject_class->dispose = gst_rg_volume_dispose; /** * GstRgVolume:album-mode: * * Whether to prefer album gain over track gain. * * If set to %TRUE, use album gain instead of track gain if both are * available. This keeps the relative loudness levels of tracks from the same * album intact. * * If set to %FALSE, track mode is used instead. This effectively leads to * more extensive normalization. * * If album mode is enabled but the album gain tag is absent in the stream, * the track gain is used instead. If both gain tags are missing, the value * of the <link linkend="GstRgVolume--fallback-gain">fallback-gain</link> * property is used instead. */ g_object_class_install_property (gobject_class, PROP_ALBUM_MODE, g_param_spec_boolean ("album-mode", "Album mode", "Prefer album over track gain", DEFAULT_ALBUM_MODE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); /** * GstRgVolume:headroom: * * Extra headroom [dB]. This controls the amount by which the output can * exceed digital full scale. * * Only set this to a value greater than 0.0 if signal compression/limiting of * a suitable form is applied to the output (or output is brought into the * correct range by some other transformation). * * This element internally uses a volume element, which also supports * operating on integer audio formats. These formats do not allow exceeding * digital full scale. If extra headroom is used, make sure that the raw * audio data format is floating point (F32). Otherwise, * clipping distortion might be introduced as part of the volume adjustment * itself. */ g_object_class_install_property (gobject_class, PROP_HEADROOM, g_param_spec_double ("headroom", "Headroom", "Extra headroom [dB]", 0., 60., DEFAULT_HEADROOM, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); /** * GstRgVolume:pre-amp: * * Additional gain to apply globally [dB]. This controls the trade-off * between uniformity of normalization and utilization of available dynamic * range. * * Note that the default value is 0 dB because the ReplayGain reference value * was adjusted by +6 dB (from 83 to 89 dB). At the time of this writing, the * <ulink url="http://replaygain.org">webpage</ulink> is still outdated and * does not reflect this change however. Where the original proposal states * that a proper default pre-amp value is +6 dB, this translates to the used 0 * dB. */ g_object_class_install_property (gobject_class, PROP_PRE_AMP, g_param_spec_double ("pre-amp", "Pre-amp", "Extra gain [dB]", -60., 60., DEFAULT_PRE_AMP, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); /** * GstRgVolume:fallback-gain: * * Fallback gain [dB] for streams missing ReplayGain tags. */ g_object_class_install_property (gobject_class, PROP_FALLBACK_GAIN, g_param_spec_double ("fallback-gain", "Fallback gain", "Gain for streams missing tags [dB]", -60., 60., DEFAULT_FALLBACK_GAIN, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); /** * GstRgVolume:result-gain: * * Applied gain [dB]. This gain is applied to processed buffer data. * * This is set to the <link linkend="GstRgVolume--target-gain">target * gain</link> if amplification by that amount can be applied safely. * "Safely" means that the volume adjustment does not inflict clipping * distortion. Should this not be the case, the result gain is set to an * appropriately reduced value (by applying peak normalization). The proposed * standard calls this "clipping prevention". * * The difference between target and result gain reflects the necessary amount * of reduction. Applications can make use of this information to temporarily * reduce the <link linkend="GstRgVolume--pre-amp">pre-amp</link> for * subsequent streams, as recommended by the ReplayGain standard. * * Note that target and result gain differing for a great majority of streams * indicates a problem: What happens in this case is that most streams receive * peak normalization instead of amplification by the ideal replay gain. To * prevent this, the <link linkend="GstRgVolume--pre-amp">pre-amp</link> has * to be lowered and/or a limiter has to be used which facilitates the use of * <link linkend="GstRgVolume--headroom">headroom</link>. */ g_object_class_install_property (gobject_class, PROP_RESULT_GAIN, g_param_spec_double ("result-gain", "Result-gain", "Applied gain [dB]", -120., 120., 0., G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); /** * GstRgVolume:target-gain: * * Applicable gain [dB]. This gain is supposed to be applied. * * Depending on the value of the <link * linkend="GstRgVolume--album-mode">album-mode</link> property and the * presence of ReplayGain tags in the stream, this is set according to one of * these simple formulas: * * <itemizedlist> * <listitem><link linkend="GstRgVolume--pre-amp">pre-amp</link> + album gain * of the stream</listitem> * <listitem><link linkend="GstRgVolume--pre-amp">pre-amp</link> + track gain * of the stream</listitem> * <listitem><link linkend="GstRgVolume--pre-amp">pre-amp</link> + <link * linkend="GstRgVolume--fallback-gain">fallback gain</link></listitem> * </itemizedlist> */ g_object_class_install_property (gobject_class, PROP_TARGET_GAIN, g_param_spec_double ("target-gain", "Target-gain", "Applicable gain [dB]", -120., 120., 0., G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); element_class = (GstElementClass *) klass; element_class->change_state = GST_DEBUG_FUNCPTR (gst_rg_volume_change_state); bin_class = (GstBinClass *) klass; /* Setting these to NULL makes gst_bin_add and _remove refuse to let anyone * mess with our internals. */ bin_class->add_element = NULL; bin_class->remove_element = NULL; 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, "ReplayGain volume", "Filter/Effect/Audio", "Apply ReplayGain volume adjustment", "Ren\xc3\xa9 Stadler <*****@*****.**>"); GST_DEBUG_CATEGORY_INIT (gst_rg_volume_debug, "rgvolume", 0, "ReplayGain volume element"); }
static void gst_video_rate_class_init (GstVideoRateClass * klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GstElementClass *element_class = GST_ELEMENT_CLASS (klass); GstBaseTransformClass *base_class = GST_BASE_TRANSFORM_CLASS (klass); object_class->set_property = gst_video_rate_set_property; object_class->get_property = gst_video_rate_get_property; base_class->set_caps = GST_DEBUG_FUNCPTR (gst_video_rate_setcaps); base_class->transform_caps = GST_DEBUG_FUNCPTR (gst_video_rate_transform_caps); base_class->transform_ip = GST_DEBUG_FUNCPTR (gst_video_rate_transform_ip); base_class->sink_event = GST_DEBUG_FUNCPTR (gst_video_rate_sink_event); base_class->start = GST_DEBUG_FUNCPTR (gst_video_rate_start); base_class->stop = GST_DEBUG_FUNCPTR (gst_video_rate_stop); base_class->fixate_caps = GST_DEBUG_FUNCPTR (gst_video_rate_fixate_caps); base_class->query = GST_DEBUG_FUNCPTR (gst_video_rate_query); g_object_class_install_property (object_class, PROP_IN, g_param_spec_uint64 ("in", "In", "Number of input frames", 0, G_MAXUINT64, 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (object_class, PROP_OUT, g_param_spec_uint64 ("out", "Out", "Number of output frames", 0, G_MAXUINT64, 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); pspec_duplicate = g_param_spec_uint64 ("duplicate", "Duplicate", "Number of duplicated frames", 0, G_MAXUINT64, 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_DUP, pspec_duplicate); pspec_drop = g_param_spec_uint64 ("drop", "Drop", "Number of dropped frames", 0, G_MAXUINT64, 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_DROP, pspec_drop); g_object_class_install_property (object_class, PROP_SILENT, g_param_spec_boolean ("silent", "silent", "Don't emit notify for dropped and duplicated frames", DEFAULT_SILENT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (object_class, PROP_NEW_PREF, g_param_spec_double ("new-pref", "New Pref", "Value indicating how much to prefer new frames (unused)", 0.0, 1.0, DEFAULT_NEW_PREF, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); /** * GstVideoRate:skip-to-first: * * Don't produce buffers before the first one we receive. */ g_object_class_install_property (object_class, PROP_SKIP_TO_FIRST, g_param_spec_boolean ("skip-to-first", "Skip to first buffer", "Don't produce buffers before the first one we receive", DEFAULT_SKIP_TO_FIRST, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); /** * GstVideoRate:drop-only: * * Only drop frames, no duplicates are produced. */ g_object_class_install_property (object_class, PROP_DROP_ONLY, g_param_spec_boolean ("drop-only", "Only Drop", "Only drop frames, no duplicates are produced", DEFAULT_DROP_ONLY, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); /** * GstVideoRate:average-period: * * Arrange for maximum framerate by dropping frames beyond a certain framerate, * where the framerate is calculated using a moving average over the * configured. */ g_object_class_install_property (object_class, PROP_AVERAGE_PERIOD, g_param_spec_uint64 ("average-period", "Period over which to average", "Period over which to average the framerate (in ns) (0 = disabled)", 0, G_MAXINT64, DEFAULT_AVERAGE_PERIOD, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); /** * GstVideoRate:max-rate: * * maximum framerate to pass through */ g_object_class_install_property (object_class, PROP_MAX_RATE, g_param_spec_int ("max-rate", "maximum framerate", "Maximum framerate allowed to pass through " "(in frames per second, implies drop-only)", 1, G_MAXINT, DEFAULT_MAX_RATE, G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS)); gst_element_class_set_static_metadata (element_class, "Video rate adjuster", "Filter/Effect/Video", "Drops/duplicates/adjusts timestamps on video frames to make a perfect stream", "Wim Taymans <*****@*****.**>"); gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&gst_video_rate_sink_template)); gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&gst_video_rate_src_template)); }
/* initialize the plugin's class */ static void gst_dvbsrc_class_init (GstDvbSrcClass * klass) { GObjectClass *gobject_class; GstElementClass *gstelement_class; GstBaseSrcClass *gstbasesrc_class; GstPushSrcClass *gstpushsrc_class; gobject_class = (GObjectClass *) klass; gstelement_class = (GstElementClass *) klass; gstbasesrc_class = (GstBaseSrcClass *) klass; gstpushsrc_class = (GstPushSrcClass *) klass; gobject_class->set_property = gst_dvbsrc_set_property; gobject_class->get_property = gst_dvbsrc_get_property; gobject_class->finalize = gst_dvbsrc_finalize; gstelement_class->change_state = GST_DEBUG_FUNCPTR (gst_dvbsrc_change_state); gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&ts_src_factory)); gst_element_class_set_metadata (gstelement_class, "DVB Source", "Source/Video", "Digital Video Broadcast Source", "P2P-VCR, C-Lab, University of Paderborn," "Zaheer Abbas Merali <zaheerabbas at merali dot org>"); gstbasesrc_class->start = GST_DEBUG_FUNCPTR (gst_dvbsrc_start); gstbasesrc_class->stop = GST_DEBUG_FUNCPTR (gst_dvbsrc_stop); gstbasesrc_class->unlock = GST_DEBUG_FUNCPTR (gst_dvbsrc_unlock); gstbasesrc_class->unlock_stop = GST_DEBUG_FUNCPTR (gst_dvbsrc_unlock_stop); gstbasesrc_class->is_seekable = GST_DEBUG_FUNCPTR (gst_dvbsrc_is_seekable); gstbasesrc_class->get_size = GST_DEBUG_FUNCPTR (gst_dvbsrc_get_size); gstpushsrc_class->create = GST_DEBUG_FUNCPTR (gst_dvbsrc_create); g_object_class_install_property (gobject_class, ARG_DVBSRC_ADAPTER, g_param_spec_int ("adapter", "The adapter device number", "The adapter device number (eg. 0 for adapter0)", 0, 16, DEFAULT_ADAPTER, G_PARAM_READWRITE)); g_object_class_install_property (gobject_class, ARG_DVBSRC_FRONTEND, g_param_spec_int ("frontend", "The frontend device number", "The frontend device number (eg. 0 for frontend0)", 0, 16, DEFAULT_FRONTEND, G_PARAM_READWRITE)); g_object_class_install_property (gobject_class, ARG_DVBSRC_FREQUENCY, g_param_spec_uint ("frequency", "frequency", "Frequency", 0, G_MAXUINT, DEFAULT_FREQUENCY, G_PARAM_READWRITE)); g_object_class_install_property (gobject_class, ARG_DVBSRC_POLARITY, g_param_spec_string ("polarity", "polarity", "Polarity [vhHV] (DVB-S)", DEFAULT_POLARITY, G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); g_object_class_install_property (gobject_class, ARG_DVBSRC_PIDS, g_param_spec_string ("pids", "pids", "Colon seperated list of pids (eg. 110:120)", DEFAULT_PIDS, G_PARAM_WRITABLE)); g_object_class_install_property (gobject_class, ARG_DVBSRC_SYM_RATE, g_param_spec_uint ("symbol-rate", "symbol rate", "Symbol Rate (DVB-S, DVB-C)", 0, G_MAXUINT, DEFAULT_SYMBOL_RATE, G_PARAM_READWRITE)); g_object_class_install_property (gobject_class, ARG_DVBSRC_TUNE, g_param_spec_pointer ("tune", "tune", "Atomically tune to channel. (For Apps)", G_PARAM_WRITABLE)); g_object_class_install_property (gobject_class, ARG_DVBSRC_DISEQC_SRC, g_param_spec_int ("diseqc-source", "diseqc source", "DISEqC selected source (-1 disabled) (DVB-S)", -1, 7, DEFAULT_DISEQC_SRC, G_PARAM_READWRITE)); /* DVB-T, additional properties */ g_object_class_install_property (gobject_class, ARG_DVBSRC_BANDWIDTH, g_param_spec_enum ("bandwidth", "bandwidth", "Bandwidth (DVB-T)", GST_TYPE_DVBSRC_BANDWIDTH, DEFAULT_BANDWIDTH, G_PARAM_READWRITE)); g_object_class_install_property (gobject_class, ARG_DVBSRC_CODE_RATE_HP, g_param_spec_enum ("code-rate-hp", "code-rate-hp", "High Priority Code Rate (DVB-T, DVB-S and DVB-C)", GST_TYPE_DVBSRC_CODE_RATE, DEFAULT_CODE_RATE_HP, G_PARAM_READWRITE)); g_object_class_install_property (gobject_class, ARG_DVBSRC_CODE_RATE_LP, g_param_spec_enum ("code-rate-lp", "code-rate-lp", "Low Priority Code Rate (DVB-T)", GST_TYPE_DVBSRC_CODE_RATE, DEFAULT_CODE_RATE_LP, G_PARAM_READWRITE)); /* FIXME: should the property be called 'guard-interval' then? */ g_object_class_install_property (gobject_class, ARG_DVBSRC_GUARD, g_param_spec_enum ("guard", "guard", "Guard Interval (DVB-T)", GST_TYPE_DVBSRC_GUARD, DEFAULT_GUARD, G_PARAM_READWRITE)); g_object_class_install_property (gobject_class, ARG_DVBSRC_MODULATION, g_param_spec_enum ("modulation", "modulation", "Modulation (DVB-T and DVB-C)", GST_TYPE_DVBSRC_MODULATION, DEFAULT_MODULATION, G_PARAM_READWRITE)); /* FIXME: property should be named 'transmission-mode' */ g_object_class_install_property (gobject_class, ARG_DVBSRC_TRANSMISSION_MODE, g_param_spec_enum ("trans-mode", "trans-mode", "Transmission Mode (DVB-T)", GST_TYPE_DVBSRC_TRANSMISSION_MODE, DEFAULT_TRANSMISSION_MODE, G_PARAM_READWRITE)); g_object_class_install_property (gobject_class, ARG_DVBSRC_HIERARCHY_INF, g_param_spec_enum ("hierarchy", "hierarchy", "Hierarchy Information (DVB-T)", GST_TYPE_DVBSRC_HIERARCHY, DEFAULT_HIERARCHY, G_PARAM_READWRITE)); g_object_class_install_property (gobject_class, ARG_DVBSRC_INVERSION, g_param_spec_enum ("inversion", "inversion", "Inversion Information (DVB-T and DVB-C)", GST_TYPE_DVBSRC_INVERSION, DEFAULT_INVERSION, G_PARAM_READWRITE)); g_object_class_install_property (gobject_class, ARG_DVBSRC_STATS_REPORTING_INTERVAL, g_param_spec_uint ("stats-reporting-interval", "stats-reporting-interval", "The number of reads before reporting frontend stats", 0, G_MAXUINT, DEFAULT_STATS_REPORTING_INTERVAL, G_PARAM_READWRITE)); g_object_class_install_property (gobject_class, ARG_DVBSRC_TIMEOUT, g_param_spec_uint64 ("timeout", "Timeout", "Post a message after timeout microseconds (0 = disabled)", 0, G_MAXUINT64, DEFAULT_TIMEOUT, G_PARAM_READWRITE)); g_object_class_install_property (gobject_class, ARG_DVBSRC_DVB_BUFFER_SIZE, g_param_spec_uint ("dvb-buffer-size", "dvb-buffer-size", "The kernel buffer size used by the DVB api", 0, G_MAXUINT, DEFAULT_DVB_BUFFER_SIZE, G_PARAM_READWRITE)); }
static void gst_theora_dec_class_init (GstTheoraDecClass * klass) { GObjectClass *gobject_class = G_OBJECT_CLASS (klass); GstElementClass *element_class = GST_ELEMENT_CLASS (klass); GstVideoDecoderClass *video_decoder_class = GST_VIDEO_DECODER_CLASS (klass); gobject_class->set_property = theora_dec_set_property; gobject_class->get_property = theora_dec_get_property; if (gst_theora_dec_ctl_is_supported (TH_DECCTL_SET_TELEMETRY_MV)) { g_object_class_install_property (gobject_class, PROP_TELEMETRY_MV, g_param_spec_int ("visualize-motion-vectors", "Visualize motion vectors", "Show motion vector selection overlaid on image. " "Value gives a mask for motion vector (MV) modes to show", 0, 0xffff, THEORA_DEF_TELEMETRY_MV, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); } if (gst_theora_dec_ctl_is_supported (TH_DECCTL_SET_TELEMETRY_MBMODE)) { g_object_class_install_property (gobject_class, PROP_TELEMETRY_MBMODE, g_param_spec_int ("visualize-macroblock-modes", "Visualize macroblock modes", "Show macroblock mode selection overlaid on image. " "Value gives a mask for macroblock (MB) modes to show", 0, 0xffff, THEORA_DEF_TELEMETRY_MBMODE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); } if (gst_theora_dec_ctl_is_supported (TH_DECCTL_SET_TELEMETRY_QI)) { g_object_class_install_property (gobject_class, PROP_TELEMETRY_QI, g_param_spec_int ("visualize-quantization-modes", "Visualize adaptive quantization modes", "Show adaptive quantization mode selection overlaid on image. " "Value gives a mask for quantization (QI) modes to show", 0, 0xffff, THEORA_DEF_TELEMETRY_QI, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); } if (gst_theora_dec_ctl_is_supported (TH_DECCTL_SET_TELEMETRY_BITS)) { /* FIXME: make this a boolean instead? The value scales the bars so * they're less wide. Default is to use full width, and anything else * doesn't seem particularly useful, since the smaller bars just disappear * then (they almost disappear for a value of 2 already). */ g_object_class_install_property (gobject_class, PROP_TELEMETRY_BITS, g_param_spec_int ("visualize-bit-usage", "Visualize bitstream usage breakdown", "Sets the bitstream breakdown visualization mode. " "Values influence the width of the bit usage bars to show", 0, 0xff, THEORA_DEF_TELEMETRY_BITS, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); } gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&theora_dec_src_factory)); gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&theora_dec_sink_factory)); gst_element_class_set_static_metadata (element_class, "Theora video decoder", "Codec/Decoder/Video", "decode raw theora streams to raw YUV video", "Benjamin Otte <*****@*****.**>, Wim Taymans <*****@*****.**>"); video_decoder_class->start = GST_DEBUG_FUNCPTR (theora_dec_start); video_decoder_class->stop = GST_DEBUG_FUNCPTR (theora_dec_stop); video_decoder_class->reset = GST_DEBUG_FUNCPTR (theora_dec_reset); video_decoder_class->set_format = GST_DEBUG_FUNCPTR (theora_dec_set_format); video_decoder_class->parse = GST_DEBUG_FUNCPTR (theora_dec_parse); video_decoder_class->handle_frame = GST_DEBUG_FUNCPTR (theora_dec_handle_frame); video_decoder_class->decide_allocation = GST_DEBUG_FUNCPTR (theora_dec_decide_allocation); GST_DEBUG_CATEGORY_INIT (theoradec_debug, "theoradec", 0, "Theora decoder"); }