void xfce_mixer_track_combo_set_soundcard (XfceMixerTrackCombo *combo, GstElement *card) { XfceMixerTrackType type; GtkTreeIter tree_iter; const GList *iter; GList *cards; gchar *label; gint counter; gint active_index = 0; g_return_if_fail (IS_XFCE_MIXER_TRACK_COMBO (combo)); /* Remember card. If the card is invalid, use the first one available */ if (GST_IS_MIXER (card)) combo->card = card; else { cards = xfce_mixer_get_cards (); if (G_LIKELY (g_list_length (cards) > 0)) combo->card = g_list_first (cards)->data; } /* Clear the list store data */ gtk_list_store_clear (combo->list_store); for (iter = gst_mixer_list_tracks (GST_MIXER (combo->card)), counter = 0; iter != NULL; iter = g_list_next (iter)) { type = xfce_mixer_track_type_new (iter->data); if (type == XFCE_MIXER_TRACK_TYPE_PLAYBACK || type == XFCE_MIXER_TRACK_TYPE_CAPTURE) { g_object_get (GST_MIXER_TRACK (iter->data), "label", &label, NULL); gtk_list_store_append (combo->list_store, &tree_iter); gtk_list_store_set (combo->list_store, &tree_iter, NAME_COLUMN, label, TRACK_COLUMN, GST_MIXER_TRACK (iter->data), -1); g_free (label); if (G_UNLIKELY (combo->track != NULL && combo->track == GST_MIXER_TRACK (iter->data))) active_index = counter; ++counter; } } gtk_combo_box_set_active (GTK_COMBO_BOX (combo), active_index); }
static void gst_mixer_track_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec) { GstMixerTrack *mixer_track; mixer_track = GST_MIXER_TRACK (object); switch (prop_id) { case ARG_LABEL: g_value_set_string (value, mixer_track->label); break; case ARG_UNTRANSLATED_LABEL: g_value_set_string (value, (const gchar *) g_object_get_data (G_OBJECT (mixer_track), MIXER_TRACK_OBJECT_DATA_KEY_UNTRANSLATED_LABEL)); break; case ARG_MIN_VOLUME: g_value_set_int (value, mixer_track->min_volume); break; case ARG_MAX_VOLUME: g_value_set_int (value, mixer_track->max_volume); break; case ARG_FLAGS: g_value_set_uint (value, (guint32) mixer_track->flags); break; case ARG_NUM_CHANNELS: g_value_set_int (value, mixer_track->num_channels); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } }
static void gst_dasf_src_dispose (GObject* object) { GstDasfSrc* self = GST_DASF_SRC (object); G_OBJECT_CLASS (parent_class)->dispose (object); GSList* l; for (l = self->tracks; l != NULL; l = l->next) { g_object_unref (GST_MIXER_TRACK (l->data)); } if (self->tracks != NULL) { g_slist_free (self->tracks); self->tracks = NULL; } GST_DEBUG ("GOO component refcount = %d", G_OBJECT (self->peer_element)->ref_count); g_object_unref (self->peer_element); self->component = NULL; }
static void gst_mixer_track_dispose (GObject * object) { GstMixerTrack *channel = GST_MIXER_TRACK (object); if (channel->label) { g_free (channel->label); channel->label = NULL; } if (parent_class->dispose) parent_class->dispose (object); }
static void gst_dasf_sink_dispose (GObject* object) { GstDasfSink* self = GST_DASF_SINK (object); GstDasfSinkPrivate* priv = GST_DASF_SINK_GET_PRIVATE (self); G_OBJECT_CLASS (parent_class)->dispose (object); GSList* l; for (l = self->tracks; l != NULL; l = l->next) { g_object_unref (GST_MIXER_TRACK (l->data)); } if (self->tracks != NULL) { g_slist_free (self->tracks); self->tracks = NULL; } if (G_LIKELY (self->clock)) { GST_DEBUG ("Unrefing clock component clock refcount %d -> %d", G_OBJECT(self->clock)->ref_count, (G_OBJECT(self->clock)->ref_count - 1)); g_object_unref (self->clock); } if (G_LIKELY (self->factory)) { GST_DEBUG ("GOO factory = %d", G_OBJECT (self->factory)->ref_count); GST_DEBUG ("unrefing factory"); g_object_unref (self->factory); } if (self->component) { GST_DEBUG ("GOO component = %d", G_OBJECT (self->component)->ref_count); GST_DEBUG ("unrefing component"); g_object_unref (self->component); } }
void gst_sunaudiomixer_ctrl_set_option (GstSunAudioMixerCtrl * mixer, GstMixerOptions * options, gchar * value) { struct audio_info audioinfo; GstMixerTrack *track; GstSunAudioMixerOptions *opts; GQuark q; int i; g_return_if_fail (mixer != NULL); g_return_if_fail (mixer->mixer_fd != -1); g_return_if_fail (value != NULL); g_return_if_fail (GST_IS_SUNAUDIO_MIXER_OPTIONS (options)); track = GST_MIXER_TRACK (options); opts = GST_SUNAUDIO_MIXER_OPTIONS (options); if (opts->track_num != GST_SUNAUDIO_TRACK_RECSRC) { g_warning ("set_option not supported on track %s", track->label); return; } q = g_quark_try_string (value); if (q == 0) { g_warning ("unknown option '%s'", value); return; } for (i = 0; i < 8; i++) { if (opts->names[i] == q) { break; } } if (((1 << (i)) & opts->avail) == 0) { g_warning ("Record port %s not available", g_quark_to_string (q)); return; } AUDIO_INITINFO (&audioinfo); audioinfo.record.port = (1 << (i)); if (ioctl (mixer->mixer_fd, AUDIO_SETINFO, &audioinfo) < 0) { g_warning ("Error setting audio record port"); } }
static void gst_mixer_track_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec) { GstMixerTrack *mixer_track; mixer_track = GST_MIXER_TRACK (object); switch (prop_id) { case ARG_UNTRANSLATED_LABEL: g_object_set_data_full (G_OBJECT (mixer_track), MIXER_TRACK_OBJECT_DATA_KEY_UNTRANSLATED_LABEL, g_value_dup_string (value), (GDestroyNotify) g_free); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } }
const gchar * gst_sunaudiomixer_ctrl_get_option (GstSunAudioMixerCtrl * mixer, GstMixerOptions * options) { GstMixerTrack *track; GstSunAudioMixerOptions *opts; struct audio_info audioinfo; int i; g_return_val_if_fail (mixer != NULL, NULL); g_return_val_if_fail (mixer->fd != -1, NULL); g_return_val_if_fail (GST_IS_SUNAUDIO_MIXER_OPTIONS (options), NULL); track = GST_MIXER_TRACK (options); opts = GST_SUNAUDIO_MIXER_OPTIONS (options); g_return_val_if_fail (opts->track_num == GST_SUNAUDIO_TRACK_RECSRC, NULL); if (ioctl (mixer->mixer_fd, AUDIO_GETINFO, &audioinfo) < 0) { g_warning ("Error getting audio device settings"); return (NULL); } for (i = 0; i < 8; i++) { if ((1 << i) == audioinfo.record.port) { const gchar *s = g_quark_to_string (opts->names[i]); GST_DEBUG_OBJECT (mixer, "Getting value for option %d: %s", opts->track_num, s); return (s); } } GST_DEBUG_OBJECT (mixer, "Unable to get value for option %d", opts->track_num); g_warning ("Record port value %d seems illegal", audioinfo.record.port); return (NULL); }
GstMixerOptions * gst_sunaudiomixer_options_new (GstSunAudioMixerCtrl * mixer, gint track_num) { GstMixerOptions *opts; GstSunAudioMixerOptions *sun_opts; GstMixerTrack *track; const gchar *label; gint i; struct audio_info audioinfo; if ((mixer == NULL) || (mixer->mixer_fd == -1)) { g_warning ("mixer not initialized"); return NULL; } if (track_num != GST_SUNAUDIO_TRACK_RECSRC) { g_warning ("invalid options track"); return (NULL); } label = N_("Record Source"); opts = g_object_new (GST_TYPE_SUNAUDIO_MIXER_OPTIONS, "untranslated-label", label, NULL); sun_opts = GST_SUNAUDIO_MIXER_OPTIONS (opts); track = GST_MIXER_TRACK (opts); GST_DEBUG_OBJECT (opts, "New mixer options, track %d: %s", track_num, GST_STR_NULL (label)); /* save off names for the record sources */ sun_opts->names[0] = g_quark_from_string (_("Microphone")); sun_opts->names[1] = g_quark_from_string (_("Line In")); sun_opts->names[2] = g_quark_from_string (_("Internal CD")); sun_opts->names[3] = g_quark_from_string (_("SPDIF In")); sun_opts->names[4] = g_quark_from_string (_("AUX 1 In")); sun_opts->names[5] = g_quark_from_string (_("AUX 2 In")); sun_opts->names[6] = g_quark_from_string (_("Codec Loopback")); sun_opts->names[7] = g_quark_from_string (_("SunVTS Loopback")); /* set basic information */ track->label = g_strdup (_(label)); track->num_channels = 0; track->min_volume = 0; track->max_volume = 0; track->flags = GST_MIXER_TRACK_INPUT | GST_MIXER_TRACK_WHITELIST | GST_MIXER_TRACK_NO_RECORD; if (ioctl (mixer->mixer_fd, AUDIO_GETINFO, &audioinfo) < 0) { g_warning ("Error getting audio device settings"); g_object_unref (G_OBJECT (sun_opts)); return NULL; } sun_opts->avail = audioinfo.record.avail_ports; sun_opts->track_num = track_num; for (i = 0; i < 8; i++) { if ((1 << i) & audioinfo.record.avail_ports) { const char *s = g_quark_to_string (sun_opts->names[i]); opts->values = g_list_append (opts->values, g_strdup (s)); GST_DEBUG_OBJECT (opts, "option for track %d: %s", track_num, GST_STR_NULL (s)); } } return opts; }