- if (pa_play_memchunk(sink, t, &e->sample_spec, &e->channel_map, &e->memchunk, &r) < 0) {
- pa_xfree(t);
- return -1;
- }
+ if (e->volume_is_set && PA_VOLUME_IS_VALID(volume)) {
+ pa_cvolume_set(&r, e->sample_spec.channels, volume);
+ pa_sw_cvolume_multiply(&r, &r, &e->volume);
+ } else if (e->volume_is_set)
+ r = e->volume;
+ else if (PA_VOLUME_IS_VALID(volume))
+ pa_cvolume_set(&r, e->sample_spec.channels, volume);
+ else
+ pass_volume = FALSE;
+
+ pa_proplist_update(merged, PA_UPDATE_REPLACE, e->proplist);
+
+ if (p)
+ pa_proplist_update(merged, PA_UPDATE_REPLACE, p);