void pa_source_output_cb(pa_context *c, const pa_source_output_info *i, int eol, void *userdata) { if (eol > 0) { return; } char buf[1024]; const char *prop_key = NULL; void *prop_state = NULL; printf("index: %d\n", i->index); printf("name: %s\n", i->name); printf("module: %d\n", i->owner_module); printf("client: %d\n", i->client); printf("source: %d\n", i->source); printf("volume: channels:%d, min:%d, max:%d\n", i->volume.channels, pa_cvolume_min(&i->volume), pa_cvolume_max(&i->volume)); printf("resample_method: %s", i->resample_method); printf("driver: %s\n", i->driver); printf("mute: %d\n", i->mute); printf("corked: %d\n", i->corked); printf("has_volume: %d\n", i->has_volume); printf("volume_writable: %d\n", i->volume_writable); while ((prop_key=pa_proplist_iterate(i->proplist, &prop_state))) { printf(" %s: %s\n", prop_key, pa_proplist_gets(i->proplist, prop_key)); } printf("format_info: %s\n", pa_format_info_snprint(buf, 1000, i->format)); printf("------------------------------\n"); }
pa_volume_t pa_cvolume_min_mask(const pa_cvolume *a, const pa_channel_map *cm, pa_channel_position_mask_t mask) { pa_volume_t m = PA_VOLUME_MAX; unsigned c; pa_assert(a); if (!cm) return pa_cvolume_min(a); pa_return_val_if_fail(pa_cvolume_compatible_with_channel_map(a, cm), PA_VOLUME_MUTED); for (c = 0; c < a->channels; c++) { if (!(PA_CHANNEL_POSITION_MASK(cm->map[c]) & mask)) continue; if (a->values[c] < m) m = a->values[c]; } return m; }