Set labels on mixer manually. This allows clearer names and - in the future - i18n
Original commit message from CVS: Set labels on mixer manually. This allows clearer names and - in the future - i18n
This commit is contained in:
parent
be6ce4d973
commit
4be82a9ca9
@ -59,9 +59,71 @@ static void gst_ossmixer_set_mute (GstMixer *ossmixer,
|
|||||||
GstMixerTrack *track,
|
GstMixerTrack *track,
|
||||||
gboolean mute);
|
gboolean mute);
|
||||||
|
|
||||||
static const gchar *labels[SOUND_MIXER_NRDEVICES] = SOUND_DEVICE_LABELS;
|
static const gchar **labels = NULL;
|
||||||
static GstMixerTrackClass *parent_class = NULL;
|
static GstMixerTrackClass *parent_class = NULL;
|
||||||
|
|
||||||
|
/* three functions: firstly, OSS has the nasty habit of inserting
|
||||||
|
* spaces in the labels, we want to get rid of them. Secondly,
|
||||||
|
* i18n is impossible with OSS' way of providing us with mixer
|
||||||
|
* labels, so we make a 'given' list of i18n'ed labels. Since
|
||||||
|
* i18n doesn't actually work, we fake it (FIXME). Thirdly, I
|
||||||
|
* personally don't like the "1337" names that OSS gives to their
|
||||||
|
* labels ("Vol", "Mic", "Rec"), I'd rather see full names. */
|
||||||
|
#define _(s) s
|
||||||
|
|
||||||
|
static void
|
||||||
|
fill_labels (void)
|
||||||
|
{
|
||||||
|
gint i, pos;
|
||||||
|
gchar *origs[SOUND_MIXER_NRDEVICES] = SOUND_DEVICE_LABELS;
|
||||||
|
struct {
|
||||||
|
gchar *given, *wanted;
|
||||||
|
} cases[] = {
|
||||||
|
/* Note: this list is simply ripped from soundcard.h. For
|
||||||
|
* some people, some values might be missing (3D surround,
|
||||||
|
* etc.) - feel free to add them. That's the reason why
|
||||||
|
* I'm doing this in such a horribly complicated way. */
|
||||||
|
{ "Vol ", _("Volume") },
|
||||||
|
{ "Bass ", _("Bass") },
|
||||||
|
{ "Trebl", _("Treble") },
|
||||||
|
{ "Synth", _("Synth") },
|
||||||
|
{ "Pcm ", _("PCM") },
|
||||||
|
{ "Spkr ", _("Speaker") },
|
||||||
|
{ "Line ", _("Line-in") },
|
||||||
|
{ "Mic ", _("Microphone") },
|
||||||
|
{ "CD ", _("CD") },
|
||||||
|
{ "Mix ", _("Mixer") },
|
||||||
|
{ "Pcm2 ", _("PCM-2") },
|
||||||
|
{ "Rec ", _("Record") },
|
||||||
|
{ "IGain", _("In-gain") },
|
||||||
|
{ "OGain", _("Out-gain") },
|
||||||
|
{ "Line1", _("Line-1") },
|
||||||
|
{ "Line2", _("Line-2") },
|
||||||
|
{ "Line3", _("Line-3") },
|
||||||
|
{ "Digital1", _("Digital-1") },
|
||||||
|
{ "Digital2", _("Digital-2") },
|
||||||
|
{ "Digital3", _("Digital-3") },
|
||||||
|
{ "PhoneIn", _("Phone-in") },
|
||||||
|
{ "PhoneOut", _("Phone-out") },
|
||||||
|
{ "Video", _("Video") },
|
||||||
|
{ "Radio", _("Radio") },
|
||||||
|
{ "Monitor", _("Monitor") },
|
||||||
|
{ NULL, NULL }
|
||||||
|
};
|
||||||
|
|
||||||
|
labels = g_malloc (sizeof (gchar *) * SOUND_MIXER_NRDEVICES);
|
||||||
|
|
||||||
|
for (i = 0; i < SOUND_MIXER_NRDEVICES; i++) {
|
||||||
|
for (pos = 0; cases[pos].given != NULL; pos++) {
|
||||||
|
if (!strcmp (cases[pos].given, origs[i])) {
|
||||||
|
labels[i] = g_strdup (cases[pos].wanted);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (cases[pos].given == NULL)
|
||||||
|
labels[i] = g_strdup (origs[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
GType
|
GType
|
||||||
gst_ossmixer_track_get_type (void)
|
gst_ossmixer_track_get_type (void)
|
||||||
@ -112,7 +174,10 @@ gst_ossmixer_track_new (GstOssElement *oss,
|
|||||||
{
|
{
|
||||||
GstOssMixerTrack *osstrack;
|
GstOssMixerTrack *osstrack;
|
||||||
GstMixerTrack *track;
|
GstMixerTrack *track;
|
||||||
gint volumes[2];
|
gint volume;
|
||||||
|
|
||||||
|
if (!labels)
|
||||||
|
fill_labels ();
|
||||||
|
|
||||||
osstrack = g_object_new (GST_TYPE_OSSMIXER_TRACK, NULL);
|
osstrack = g_object_new (GST_TYPE_OSSMIXER_TRACK, NULL);
|
||||||
track = GST_MIXER_TRACK (osstrack);
|
track = GST_MIXER_TRACK (osstrack);
|
||||||
@ -124,10 +189,15 @@ gst_ossmixer_track_new (GstOssElement *oss,
|
|||||||
osstrack->track_num = track_num;
|
osstrack->track_num = track_num;
|
||||||
|
|
||||||
/* volume */
|
/* volume */
|
||||||
gst_ossmixer_get_volume (GST_MIXER (oss), track, volumes);
|
if (ioctl(oss->mixer_fd, MIXER_READ (osstrack->track_num), &volume) < 0) {
|
||||||
osstrack->lvol = volumes[0];
|
g_warning("Error getting device (%d) volume: %s",
|
||||||
if (max_chans == 2)
|
osstrack->track_num, strerror(errno));
|
||||||
osstrack->rvol = volumes[1];
|
volume = 0;
|
||||||
|
}
|
||||||
|
osstrack->lvol = (volume & 0xff);
|
||||||
|
if (track->num_channels == 2) {
|
||||||
|
osstrack->rvol = ((volume >> 8) & 0xff);
|
||||||
|
}
|
||||||
|
|
||||||
return track;
|
return track;
|
||||||
}
|
}
|
||||||
@ -199,8 +269,8 @@ gst_ossmixer_get_volume (GstMixer *mixer,
|
|||||||
} else {
|
} else {
|
||||||
/* get */
|
/* get */
|
||||||
if (ioctl(oss->mixer_fd, MIXER_READ (osstrack->track_num), &volume) < 0) {
|
if (ioctl(oss->mixer_fd, MIXER_READ (osstrack->track_num), &volume) < 0) {
|
||||||
g_warning("Error getting recording device (%d) volume (0x%x): %s\n",
|
g_warning("Error getting recording device (%d) volume: %s",
|
||||||
osstrack->track_num, volume, strerror(errno));
|
osstrack->track_num, strerror(errno));
|
||||||
volume = 0;
|
volume = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -233,7 +303,7 @@ gst_ossmixer_set_volume (GstMixer *mixer,
|
|||||||
|
|
||||||
/* set */
|
/* set */
|
||||||
if (ioctl(oss->mixer_fd, MIXER_WRITE (osstrack->track_num), &volume) < 0) {
|
if (ioctl(oss->mixer_fd, MIXER_WRITE (osstrack->track_num), &volume) < 0) {
|
||||||
g_warning("Error setting recording device (%d) volume (0x%x): %s\n",
|
g_warning("Error setting recording device (%d) volume (0x%x): %s",
|
||||||
osstrack->track_num, volume, strerror(errno));
|
osstrack->track_num, volume, strerror(errno));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user