-void pa_source_set_volume(pa_source *source, const pa_cvolume *volume);
-void pa_source_set_soft_volume(pa_source *s, const pa_cvolume *volume);
-const pa_cvolume *pa_source_get_volume(pa_source *source, pa_bool_t force_refresh);
-void pa_source_set_mute(pa_source *source, pa_bool_t mute);
-pa_bool_t pa_source_get_mute(pa_source *source, pa_bool_t force_refresh);
+/* Use this instead of checking s->flags & PA_SOURCE_FLAT_VOLUME directly. */
+bool pa_source_flat_volume_enabled(pa_source *s);
+
+/* Get the master source when sharing volumes */
+pa_source *pa_source_get_master(pa_source *s);
+
+/* Is the source in passthrough mode? (that is, is this a monitor source for a sink
+ * that has a passthrough sink input connected to it. */
+bool pa_source_is_passthrough(pa_source *s);
+/* These should be called when a source enters/leaves passthrough mode */
+void pa_source_enter_passthrough(pa_source *s);
+void pa_source_leave_passthrough(pa_source *s);
+
+void pa_source_set_volume(pa_source *source, const pa_cvolume *volume, bool sendmsg, bool save);
+const pa_cvolume *pa_source_get_volume(pa_source *source, bool force_refresh);
+
+void pa_source_set_mute(pa_source *source, bool mute, bool save);
+bool pa_source_get_mute(pa_source *source, bool force_refresh);
+
+bool pa_source_update_proplist(pa_source *s, pa_update_mode_t mode, pa_proplist *p);
+
+int pa_source_set_port(pa_source *s, const char *name, bool save);
+void pa_source_set_mixer_dirty(pa_source *s, bool is_dirty);
+
+int pa_source_update_rate(pa_source *s, uint32_t rate, bool passthrough);