2004-05-16 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ * ext/alsa/gstalsamixer.c: (gst_alsa_mixer_open),
+ (gst_alsa_mixer_close), (gst_alsa_mixer_supported),
+ (gst_alsa_mixer_build_list), (gst_alsa_mixer_free_list),
+ (gst_alsa_mixer_change_state), (gst_alsa_mixer_list_tracks),
+ (gst_alsa_mixer_get_volume), (gst_alsa_mixer_set_volume),
+ (gst_alsa_mixer_set_mute), (gst_alsa_mixer_set_record):
+ Fix for cases where we fail to attach to a mixer.
+
+2004-05-16 Ronald Bultje <rbultje@ronald.bitfreak.net>
+
* gst-libs/gst/riff/riff-read.c: (gst_riff_read_seek):
Don't touch events after not owning them anymore.
* gst/wavparse/gstwavparse.c: (gst_wavparse_base_init),
{
gint err, device;
GstAlsa *alsa = GST_ALSA (mixer);
- gchar *nocomma;
+ gchar *nocomma = NULL;
- mixer->mixer_handle = (snd_mixer_t *) - 1;
+ mixer->mixer_handle = NULL;
/* open and initialize the mixer device */
err = snd_mixer_open (&mixer->mixer_handle, 0);
if (err < 0 || mixer->mixer_handle == NULL) {
GST_ERROR_OBJECT (GST_OBJECT (mixer), "Cannot open mixer device.");
- mixer->mixer_handle = (snd_mixer_t *) - 1;
+ mixer->mixer_handle = NULL;
return FALSE;
}
- nocomma = g_strdup (alsa->device);
+ if (!strncmp (alsa->device, "hw:", 3))
+ nocomma = g_strdup (alsa->device);
+ else if (!strncmp (alsa->device, "plughw:", 7))
+ nocomma = g_strdup (alsa->device + 4);
+ else
+ goto error;
+
if (strchr (nocomma, ','))
strchr (nocomma, ',')[0] = '\0';
error:
snd_mixer_close (mixer->mixer_handle);
- mixer->mixer_handle = (snd_mixer_t *) - 1;
+ mixer->mixer_handle = NULL;
g_free (nocomma);
return FALSE;
}
{
GstAlsa *alsa = GST_ALSA (mixer);
- if (((gint) mixer->mixer_handle) == -1)
+ if (mixer->mixer_handle == NULL)
return;
if (alsa->cardname) {
alsa->cardname = NULL;
}
snd_mixer_close (mixer->mixer_handle);
- mixer->mixer_handle = (snd_mixer_t *) - 1;
+ mixer->mixer_handle = NULL;
}
static void
{
g_assert (iface_type == GST_TYPE_MIXER);
- return (((gint) GST_ALSA_MIXER (iface)->mixer_handle) != -1);
+ return (GST_ALSA_MIXER (iface)->mixer_handle != NULL);
}
static void
const GList *templates;
GstPadDirection dir = GST_PAD_UNKNOWN;
- g_return_if_fail (((gint) mixer->mixer_handle) != -1);
+ g_return_if_fail (mixer->mixer_handle != NULL);
/* find direction */
templates =
static void
gst_alsa_mixer_free_list (GstAlsaMixer * mixer)
{
- g_return_if_fail (((gint) mixer->mixer_handle) != -1);
+ g_return_if_fail (mixer->mixer_handle != NULL);
g_list_foreach (mixer->tracklist, (GFunc) g_object_unref, NULL);
g_list_free (mixer->tracklist);
switch (GST_STATE_TRANSITION (element)) {
case GST_STATE_NULL_TO_READY:
- if (!gst_alsa_mixer_open (this))
- return GST_STATE_FAILURE;
- gst_alsa_mixer_build_list (this);
+ if (gst_alsa_mixer_open (this))
+ gst_alsa_mixer_build_list (this);
break;
case GST_STATE_READY_TO_NULL:
- gst_alsa_mixer_free_list (this);
- gst_alsa_mixer_close (this);
+ if (this->mixer_handle != NULL) {
+ gst_alsa_mixer_free_list (this);
+ gst_alsa_mixer_close (this);
+ }
break;
default:
break;
{
GstAlsaMixer *alsa_mixer = GST_ALSA_MIXER (mixer);
- g_return_val_if_fail (((gint) alsa_mixer->mixer_handle) != -1, NULL);
+ if (!alsa_mixer->mixer_handle)
+ return NULL;
return (const GList *) alsa_mixer->tracklist;
}
GstAlsaMixer *alsa_mixer = GST_ALSA_MIXER (mixer);
GstAlsaMixerTrack *alsa_track = (GstAlsaMixerTrack *) track;
- g_return_if_fail (((gint) alsa_mixer->mixer_handle) != -1);
+ g_return_if_fail (alsa_mixer->mixer_handle != NULL);
if (track->flags & GST_MIXER_TRACK_MUTE) {
for (i = 0; i < track->num_channels; i++)
GstAlsaMixer *alsa_mixer = GST_ALSA_MIXER (mixer);
GstAlsaMixerTrack *alsa_track = (GstAlsaMixerTrack *) track;
- g_return_if_fail (((gint) alsa_mixer->mixer_handle) != -1);
+ g_return_if_fail (alsa_mixer->mixer_handle != NULL);
/* only set the volume with ALSA lib if the track isn't muted. */
if (!(track->flags & GST_MIXER_TRACK_MUTE)) {
GstAlsaMixer *alsa_mixer = GST_ALSA_MIXER (mixer);
GstAlsaMixerTrack *alsa_track = (GstAlsaMixerTrack *) track;
- g_return_if_fail (((gint) alsa_mixer->mixer_handle) != -1);
+ g_return_if_fail (alsa_mixer->mixer_handle != NULL);
if (mute) {
track->flags |= GST_MIXER_TRACK_MUTE;
{
GstAlsaMixer *alsa_mixer = GST_ALSA_MIXER (mixer);
- g_return_if_fail (((gint) alsa_mixer->mixer_handle) != -1);
+ g_return_if_fail (alsa_mixer->mixer_handle != NULL);
if (record) {
track->flags |= GST_MIXER_TRACK_RECORD;