mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-06-06 07:28:53 +00:00
sunaudio: Fix switch setting on some devices. Add debug. Fix a FIXME.
Fix the setting of toggle switches on some broken audio drivers which report that no audio ports are settable by ignoring the mod_port field there. Add some debug statements. Fix a FIXME now that Good relies on a new enough gst-plugins-base.
This commit is contained in:
parent
0fc43060e5
commit
7994f64006
3 changed files with 42 additions and 21 deletions
|
@ -71,6 +71,8 @@ gst_sunaudiomixer_ctrl_open (GstSunAudioMixerCtrl * mixer)
|
||||||
/* Try to set the multiple open flag if we can, but ignore errors */
|
/* Try to set the multiple open flag if we can, but ignore errors */
|
||||||
ioctl (mixer->mixer_fd, AUDIO_MIXER_MULTIPLE_OPEN);
|
ioctl (mixer->mixer_fd, AUDIO_MIXER_MULTIPLE_OPEN);
|
||||||
|
|
||||||
|
GST_DEBUG_OBJECT (mixer, "Opened mixer device %s", mixer->device);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -288,9 +290,9 @@ gst_sunaudiomixer_ctrl_get_volume (GstSunAudioMixerCtrl * mixer,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Likewise reset MUTE */
|
/* Likewise reset MUTE */
|
||||||
if ((sunaudiotrack->track_num == GST_SUNAUDIO_TRACK_OUTPUT &&
|
if ((sunaudiotrack->track_num == GST_SUNAUDIO_TRACK_OUTPUT
|
||||||
audioinfo.output_muted == 1) ||
|
&& audioinfo.output_muted == 1)
|
||||||
(sunaudiotrack->track_num != GST_SUNAUDIO_TRACK_OUTPUT && gain == 0)) {
|
|| (sunaudiotrack->track_num != GST_SUNAUDIO_TRACK_OUTPUT && gain == 0)) {
|
||||||
/*
|
/*
|
||||||
* If MUTE is set, then gain is always 0, so don't bother
|
* If MUTE is set, then gain is always 0, so don't bother
|
||||||
* resetting our internal value.
|
* resetting our internal value.
|
||||||
|
@ -469,13 +471,20 @@ gst_sunaudiomixer_ctrl_set_mute (GstSunAudioMixerCtrl * mixer,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (audioinfo.play.port != ((unsigned) ~0)) {
|
if (audioinfo.play.port != ((unsigned) ~0)) {
|
||||||
/* mask off ports we can't modify */
|
/* mask off ports we can't modify. Hack for broken drivers where mod_ports == 0 */
|
||||||
audioinfo.play.port &= oldinfo.play.mod_ports;
|
if (oldinfo.play.mod_ports != 0) {
|
||||||
/* and add in any that are forced to be on */
|
audioinfo.play.port &= oldinfo.play.mod_ports;
|
||||||
audioinfo.play.port |= (oldinfo.play.port & ~oldinfo.play.mod_ports);
|
/* and add in any that are forced to be on */
|
||||||
|
audioinfo.play.port |= (oldinfo.play.port & ~oldinfo.play.mod_ports);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
g_return_if_fail (mixer->mixer_fd != -1);
|
g_return_if_fail (mixer->mixer_fd != -1);
|
||||||
|
|
||||||
|
if (audioinfo.play.port != (guint) (-1) &&
|
||||||
|
audioinfo.play.port != oldinfo.play.port)
|
||||||
|
GST_LOG_OBJECT (mixer, "Changing play port mask to 0x%08x",
|
||||||
|
audioinfo.play.port);
|
||||||
|
|
||||||
if (ioctl (mixer->mixer_fd, AUDIO_SETINFO, &audioinfo) < 0) {
|
if (ioctl (mixer->mixer_fd, AUDIO_SETINFO, &audioinfo) < 0) {
|
||||||
g_warning ("Error setting audio settings");
|
g_warning ("Error setting audio settings");
|
||||||
return;
|
return;
|
||||||
|
@ -561,10 +570,16 @@ gst_sunaudiomixer_ctrl_get_option (GstSunAudioMixerCtrl * mixer,
|
||||||
|
|
||||||
for (i = 0; i < 8; i++) {
|
for (i = 0; i < 8; i++) {
|
||||||
if ((1 << i) == audioinfo.record.port) {
|
if ((1 << i) == audioinfo.record.port) {
|
||||||
return (g_quark_to_string (opts->names[i]));
|
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);
|
g_warning ("Record port value %d seems illegal", audioinfo.record.port);
|
||||||
return (NULL);
|
return (NULL);
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,6 +40,9 @@
|
||||||
#include "gstsunaudiomixeroptions.h"
|
#include "gstsunaudiomixeroptions.h"
|
||||||
#include "gstsunaudiomixertrack.h"
|
#include "gstsunaudiomixertrack.h"
|
||||||
|
|
||||||
|
GST_DEBUG_CATEGORY_EXTERN (sunaudio_debug);
|
||||||
|
#define GST_CAT_DEFAULT sunaudio_debug
|
||||||
|
|
||||||
static void gst_sunaudiomixer_options_init (GstSunAudioMixerOptions * sun_opts);
|
static void gst_sunaudiomixer_options_init (GstSunAudioMixerOptions * sun_opts);
|
||||||
static void gst_sunaudiomixer_options_class_init (gpointer g_class,
|
static void gst_sunaudiomixer_options_class_init (gpointer g_class,
|
||||||
gpointer class_data);
|
gpointer class_data);
|
||||||
|
@ -110,6 +113,9 @@ gst_sunaudiomixer_options_new (GstSunAudioMixerCtrl * mixer, gint track_num)
|
||||||
sun_opts = GST_SUNAUDIO_MIXER_OPTIONS (opts);
|
sun_opts = GST_SUNAUDIO_MIXER_OPTIONS (opts);
|
||||||
track = GST_MIXER_TRACK (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 */
|
/* save off names for the record sources */
|
||||||
sun_opts->names[0] = g_quark_from_string (_("Microphone"));
|
sun_opts->names[0] = g_quark_from_string (_("Microphone"));
|
||||||
sun_opts->names[1] = g_quark_from_string (_("Line In"));
|
sun_opts->names[1] = g_quark_from_string (_("Line In"));
|
||||||
|
@ -142,6 +148,8 @@ gst_sunaudiomixer_options_new (GstSunAudioMixerCtrl * mixer, gint track_num)
|
||||||
if ((1 << i) & audioinfo.record.avail_ports) {
|
if ((1 << i) & audioinfo.record.avail_ports) {
|
||||||
const char *s = g_quark_to_string (sun_opts->names[i]);
|
const char *s = g_quark_to_string (sun_opts->names[i]);
|
||||||
opts->values = g_list_append (opts->values, g_strdup (s));
|
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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -40,14 +40,17 @@
|
||||||
|
|
||||||
#include "gstsunaudiomixertrack.h"
|
#include "gstsunaudiomixertrack.h"
|
||||||
|
|
||||||
|
GST_DEBUG_CATEGORY_EXTERN (sunaudio_debug);
|
||||||
|
#define GST_CAT_DEFAULT sunaudio_debug
|
||||||
|
|
||||||
#define MASK_BIT_IS_SET(mask, bit) \
|
#define MASK_BIT_IS_SET(mask, bit) \
|
||||||
(mask & (1 << bit))
|
(mask & (1 << bit))
|
||||||
|
|
||||||
G_DEFINE_TYPE (GstSunAudioMixerTrack, gst_sunaudiomixer_track,
|
G_DEFINE_TYPE (GstSunAudioMixerTrack, gst_sunaudiomixer_track,
|
||||||
GST_TYPE_MIXER_TRACK)
|
GST_TYPE_MIXER_TRACK);
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_sunaudiomixer_track_class_init (GstSunAudioMixerTrackClass * klass)
|
gst_sunaudiomixer_track_class_init (GstSunAudioMixerTrackClass * klass)
|
||||||
{
|
{
|
||||||
/* nop */
|
/* nop */
|
||||||
}
|
}
|
||||||
|
@ -77,7 +80,6 @@ gst_sunaudiomixer_track_new (GstSunAudioTrackType track_num)
|
||||||
|
|
||||||
GstSunAudioMixerTrack *sunaudiotrack;
|
GstSunAudioMixerTrack *sunaudiotrack;
|
||||||
GstMixerTrack *track;
|
GstMixerTrack *track;
|
||||||
GObjectClass *klass;
|
|
||||||
const gchar *untranslated_label;
|
const gchar *untranslated_label;
|
||||||
|
|
||||||
if ((guint) track_num < G_N_ELEMENTS (labels))
|
if ((guint) track_num < G_N_ELEMENTS (labels))
|
||||||
|
@ -85,15 +87,11 @@ gst_sunaudiomixer_track_new (GstSunAudioTrackType track_num)
|
||||||
else
|
else
|
||||||
untranslated_label = NULL;
|
untranslated_label = NULL;
|
||||||
|
|
||||||
/* FIXME: remove this check once we depend on -base >= 0.10.12.1 */
|
sunaudiotrack = g_object_new (GST_TYPE_SUNAUDIO_MIXER_TRACK,
|
||||||
klass = G_OBJECT_CLASS (g_type_class_ref (GST_TYPE_SUNAUDIO_MIXER_TRACK));
|
"untranslated-label", untranslated_label, NULL);
|
||||||
if (g_object_class_find_property (klass, "untranslated-label")) {
|
|
||||||
sunaudiotrack = g_object_new (GST_TYPE_SUNAUDIO_MIXER_TRACK,
|
GST_DEBUG_OBJECT (sunaudiotrack, "Creating new mixer track of type %d: %s",
|
||||||
"untranslated-label", untranslated_label, NULL);
|
track_num, GST_STR_NULL (untranslated_label));
|
||||||
} else {
|
|
||||||
sunaudiotrack = g_object_new (GST_TYPE_SUNAUDIO_MIXER_TRACK, NULL);
|
|
||||||
}
|
|
||||||
g_type_class_unref (klass);
|
|
||||||
|
|
||||||
switch (track_num) {
|
switch (track_num) {
|
||||||
case GST_SUNAUDIO_TRACK_OUTPUT:
|
case GST_SUNAUDIO_TRACK_OUTPUT:
|
||||||
|
|
Loading…
Reference in a new issue