static void gst_play_sink_video_convert_init (GstPlaySinkVideoConvert * self) { GstPlaySinkConvertBin *cbin = GST_PLAY_SINK_CONVERT_BIN (self); cbin->audio = FALSE; gst_play_sink_video_convert_add_conversion_elements (self); gst_play_sink_convert_bin_cache_converter_caps (cbin); }
static void gst_play_sink_audio_convert_init (GstPlaySinkAudioConvert * self) { GstPlaySinkConvertBin *cbin = GST_PLAY_SINK_CONVERT_BIN (self); cbin->audio = TRUE; /* FIXME: Only create this on demand but for now we need * it to always exist because of playsink's volume proxying * logic. */ self->volume = gst_element_factory_make ("volume", "volume"); if (self->volume) gst_object_ref_sink (self->volume); gst_play_sink_audio_convert_add_conversion_elements (self); gst_play_sink_convert_bin_cache_converter_caps (cbin); }
static void gst_play_sink_audio_convert_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec) { GstPlaySinkAudioConvert *self = GST_PLAY_SINK_AUDIO_CONVERT_CAST (object); gboolean v, changed = FALSE; GST_PLAY_SINK_CONVERT_BIN_LOCK (self); switch (prop_id) { case PROP_USE_CONVERTERS: v = g_value_get_boolean (value); if (v != self->use_converters) { self->use_converters = v; changed = TRUE; } break; case PROP_USE_VOLUME: v = g_value_get_boolean (value); if (v != self->use_volume) { self->use_volume = v; changed = TRUE; } break; default: break; } if (changed) { GstPlaySinkConvertBin *cbin = GST_PLAY_SINK_CONVERT_BIN (self); GST_DEBUG_OBJECT (self, "Rebuilding converter bin"); gst_play_sink_convert_bin_remove_elements (cbin); gst_play_sink_audio_convert_add_conversion_elements (self); gst_play_sink_convert_bin_add_identity (cbin); gst_play_sink_convert_bin_cache_converter_caps (cbin); } GST_PLAY_SINK_CONVERT_BIN_UNLOCK (self); }