/* get stream_ducking */
pa_assert_se((sd = pa_hashmap_get(m->stream_duckings, (const void*)id)));
+ sd->duration = duration;
+ sd->ratio = ratio;
+ sd->set_vol = PA_VOLUME_NORM * ratio;
+
if (enable) {
snprintf(sd->vol_key, VOLUME_KEY_LENGTH, "stream_ducking_%u_%s", id, target_stream);
snprintf(sd->target_role, STREAM_ROLE_STR_MAX, "%s", target_stream);
- sd->duration = duration;
- sd->set_vol = PA_VOLUME_NORM * ratio;
}
/* set volume ramp factor to target stream */
if (!enable) {
memset(&sd->target_role, 0, sizeof(sd->target_role));
memset(&sd->vol_key, 0, sizeof(sd->vol_key));
- sd->duration = 0;
- sd->set_vol = PA_VOLUME_NORM;
}
pa_log_info("ducking stream count(%d)", sd->ducking_stream_count);
pa_log_info(" - remove sd(%p), trigger_index(%u)", sd, idx);
PA_IDXSET_FOREACH(stream, sd->idx_ducking_streams, ducking_idx) {
+ hal_ducking_activation_info ducking_activation_info;
+
pa_log_info(" -- remove volume ramp, key(%s) from remained stream(idx:%u)", sd->vol_key, stream->index);
pa_sink_input_remove_volume_factor(stream, sd->vol_key);
pa_sink_input_remove_volume_ramp_factor(stream, sd->vol_key, true);
+
+ /* notify ducking activation */
+ ducking_activation_info.target_role = sd->target_role;
+ ducking_activation_info.duration = sd->duration;
+ ducking_activation_info.ratio = 1.0;
+ ducking_activation_info.is_activated = false;
+
+ pa_hal_interface_notify_ducking_activation_changed(m->hal, &ducking_activation_info);
}
pa_idxset_free(sd->idx_ducking_streams, NULL);