diff options
Diffstat (limited to 'ext')
| -rw-r--r-- | ext/pulse/pulsesink.c | 34 | 
1 files changed, 20 insertions, 14 deletions
diff --git a/ext/pulse/pulsesink.c b/ext/pulse/pulsesink.c index dd47c336..1fe2b72d 100644 --- a/ext/pulse/pulsesink.c +++ b/ext/pulse/pulsesink.c @@ -730,6 +730,10 @@ gst_pulseringbuffer_acquire (GstRingBuffer * buf, GstRingBufferSpec * spec)      pa_threaded_mainloop_wait (psink->mainloop);    } +  /* After we passed the volume off of to PA we never want to set it +     again, since it is PA's job to save/restore volumes.  */ +  psink->volume_set = psink->mute_set = FALSE; +    GST_LOG_OBJECT (psink, "stream is acquired now");    /* get the actual buffering properties now */ @@ -1527,8 +1531,8 @@ gst_pulsesink_class_init (GstPulseSinkClass * klass)    g_object_class_install_property (gobject_class,        PROP_VOLUME,        g_param_spec_double ("volume", "Volume", -          "Volume of this stream, 1.0=100%", 0.0, MAX_VOLUME, DEFAULT_VOLUME, -          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); +          "Linear volume of this stream, 1.0=100%", 0.0, MAX_VOLUME, +          DEFAULT_VOLUME, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));    g_object_class_install_property (gobject_class,        PROP_MUTE,        g_param_spec_boolean ("mute", "Mute", @@ -1588,10 +1592,10 @@ gst_pulsesink_init (GstPulseSink * pulsesink, GstPulseSinkClass * klass)    pulsesink->device = NULL;    pulsesink->device_description = NULL; -  pulsesink->volume = 1.0; +  pulsesink->volume = DEFAULT_VOLUME;    pulsesink->volume_set = FALSE; -  pulsesink->mute = FALSE; +  pulsesink->mute = DEFAULT_MUTE;    pulsesink->mute_set = FALSE;    pulsesink->notify = 0; @@ -1654,9 +1658,6 @@ gst_pulsesink_set_volume (GstPulseSink * psink, gdouble volume)    GST_DEBUG_OBJECT (psink, "setting volume to %f", volume); -  psink->volume = volume; -  psink->volume_set = TRUE; -    pbuf = GST_PULSERING_BUFFER_CAST (GST_BASE_AUDIO_SINK (psink)->ringbuffer);    if (pbuf == NULL || pbuf->stream == NULL)      goto no_buffer; @@ -1683,6 +1684,9 @@ unlock:    /* ERRORS */  no_buffer:    { +    psink->volume = volume; +    psink->volume_set = TRUE; +      GST_DEBUG_OBJECT (psink, "we have no ringbuffer");      goto unlock;    } @@ -1711,9 +1715,6 @@ gst_pulsesink_set_mute (GstPulseSink * psink, gboolean mute)    GST_DEBUG_OBJECT (psink, "setting mute state to %d", mute); -  psink->mute = mute; -  psink->mute_set = TRUE; -    pbuf = GST_PULSERING_BUFFER_CAST (GST_BASE_AUDIO_SINK (psink)->ringbuffer);    if (pbuf == NULL || pbuf->stream == NULL)      goto no_buffer; @@ -1738,6 +1739,9 @@ unlock:    /* ERRORS */  no_buffer:    { +    psink->mute = mute; +    psink->mute_set = TRUE; +      GST_DEBUG_OBJECT (psink, "we have no ringbuffer");      goto unlock;    } @@ -1788,7 +1792,7 @@ gst_pulsesink_get_volume (GstPulseSink * psink)  {    GstPulseRingBuffer *pbuf;    pa_operation *o = NULL; -  gdouble v; +  gdouble v = DEFAULT_VOLUME;    uint32_t idx;    pa_threaded_mainloop_lock (psink->mainloop); @@ -1810,11 +1814,12 @@ gst_pulsesink_get_volume (GstPulseSink * psink)        goto unlock;    } +  v = psink->volume; +  unlock:    if (o)      pa_operation_unref (o); -  v = psink->volume;    pa_threaded_mainloop_unlock (psink->mainloop);    if (v > MAX_VOLUME) { @@ -1850,7 +1855,7 @@ gst_pulsesink_get_mute (GstPulseSink * psink)    GstPulseRingBuffer *pbuf;    pa_operation *o = NULL;    uint32_t idx; -  gboolean mute; +  gboolean mute = FALSE;    pa_threaded_mainloop_lock (psink->mainloop); @@ -1871,11 +1876,12 @@ gst_pulsesink_get_mute (GstPulseSink * psink)        goto unlock;    } +  mute = psink->mute; +  unlock:    if (o)      pa_operation_unref (o); -  mute = psink->mute;    pa_threaded_mainloop_unlock (psink->mainloop);    return mute;  | 
