data->proplist = pa_proplist_new();
data->volume_writable = true;
- data->volume_factor_items = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
- data->volume_factor_sink_items = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
+ data->volume_factor_items = pa_hashmap_new_full(pa_idxset_string_hash_func, pa_idxset_string_compare_func, NULL,
+ (pa_free_cb_t) volume_factor_entry_free);
+ data->volume_factor_sink_items = pa_hashmap_new_full(pa_idxset_string_hash_func, pa_idxset_string_compare_func, NULL,
+ (pa_free_cb_t) volume_factor_entry_free);
return data;
}
pa_assert(formats);
if (data->req_formats)
- pa_idxset_free(formats, (pa_free_cb_t) pa_format_info_free);
+ pa_idxset_free(data->req_formats, (pa_free_cb_t) pa_format_info_free);
data->req_formats = formats;
pa_format_info_free(data->format);
if (data->volume_factor_items)
- pa_hashmap_free(data->volume_factor_items, (pa_free_cb_t) volume_factor_entry_free);
+ pa_hashmap_free(data->volume_factor_items);
if (data->volume_factor_sink_items)
- pa_hashmap_free(data->volume_factor_sink_items, (pa_free_cb_t) volume_factor_entry_free);
+ pa_hashmap_free(data->volume_factor_sink_items);
pa_proplist_free(data->proplist);
}
pa_return_val_if_fail(sink, -PA_ERR_NOENTITY);
pa_sink_input_new_data_set_sink(data, sink, false);
}
- /* Routing's done, we have a sink. Now let's fix the format and set up the
- * sample spec */
+
+ pa_return_val_if_fail(PA_SINK_IS_LINKED(pa_sink_get_state(data->sink)), -PA_ERR_BADSTATE);
+ pa_return_val_if_fail(!data->sync_base || (data->sync_base->sink == data->sink
+ && pa_sink_input_get_state(data->sync_base) == PA_SINK_INPUT_CORKED),
+ -PA_ERR_INVALID);
+
+ /* Routing's done, we have a sink. Now let's fix the format. */
/* If something didn't pick a format for us, pick the top-most format since
* we assume this is sorted in priority order */
if (pa_format_info_is_pcm(data->format) && pa_channel_map_valid(&map))
pa_sink_input_new_data_set_channel_map(data, &map);
- pa_return_val_if_fail(PA_SINK_IS_LINKED(pa_sink_get_state(data->sink)), -PA_ERR_BADSTATE);
- pa_return_val_if_fail(!data->sync_base || (data->sync_base->sink == data->sink && pa_sink_input_get_state(data->sync_base) == PA_SINK_INPUT_CORKED), -PA_ERR_INVALID);
r = check_passthrough_connection(pa_sink_input_new_data_is_passthrough(data), data->sink);
if (r != PA_OK)
module-suspend-on-idle can resume a sink */
pa_log_info("Trying to change sample rate");
- if (pa_sink_update_rate(data->sink, data->sample_spec.rate, pa_sink_input_new_data_is_passthrough(data)) == true)
+ if (pa_sink_update_rate(data->sink, data->sample_spec.rate, pa_sink_input_new_data_is_passthrough(data)) >= 0)
pa_log_info("Rate changed to %u Hz", data->sink->sample_spec.rate);
}
i->volume_factor_sink_items = data->volume_factor_sink_items;
data->volume_factor_sink_items = NULL;
- volume_factor_from_hashmap(&i->volume_factor_sink, i->volume_factor_sink_items, i->sample_spec.channels);
+ volume_factor_from_hashmap(&i->volume_factor_sink, i->volume_factor_sink_items, i->sink->sample_spec.channels);
i->real_ratio = i->reference_ratio = data->volume;
pa_cvolume_reset(&i->soft_volume, i->sample_spec.channels);
if (PA_SINK_INPUT_IS_LINKED(i->state))
pa_sink_input_unlink(i);
- pa_log_info("Freeing input %u \"%s\"", i->index, pa_strnull(pa_proplist_gets(i->proplist, PA_PROP_MEDIA_NAME)));
+ pa_log_info("Freeing input %u \"%s\"", i->index,
+ i->proplist ? pa_strnull(pa_proplist_gets(i->proplist, PA_PROP_MEDIA_NAME)) : "");
/* Side note: this function must be able to destruct properly any
* kind of sink input in any state, even those which are
pa_idxset_free(i->direct_outputs, NULL);
if (i->thread_info.direct_outputs)
- pa_hashmap_free(i->thread_info.direct_outputs, NULL);
+ pa_hashmap_free(i->thread_info.direct_outputs);
if (i->volume_factor_items)
- pa_hashmap_free(i->volume_factor_items, (pa_free_cb_t) volume_factor_entry_free);
+ pa_hashmap_free(i->volume_factor_items);
if (i->volume_factor_sink_items)
- pa_hashmap_free(i->volume_factor_sink_items, (pa_free_cb_t) volume_factor_entry_free);
+ pa_hashmap_free(i->volume_factor_sink_items);
pa_xfree(i->driver);
pa_xfree(i);
SINK_INPUT_MOVE_FINISH hook */
pa_log_info("Trying to change sample rate");
- if (pa_sink_update_rate(dest, i->sample_spec.rate, pa_sink_input_is_passthrough(i)) == true)
+ if (pa_sink_update_rate(dest, i->sample_spec.rate, pa_sink_input_is_passthrough(i)) >= 0)
pa_log_info("Rate changed to %u Hz", dest->sample_spec.rate);
}