summaryrefslogtreecommitdiffstats
path: root/ext/pulse/pulsesink.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/pulse/pulsesink.c')
-rw-r--r--ext/pulse/pulsesink.c34
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;