stream-manager: Deactivate ducking for audio HAL when stream ducking is removed 31/268631/1 accepted/tizen/unified/20220105.120700 submit/tizen/20211228.092154 submit/tizen/20220104.113205
authorJeongmo Yang <jm80.yang@samsung.com>
Tue, 28 Dec 2021 05:36:01 +0000 (14:36 +0900)
committerJeongmo Yang <jm80.yang@samsung.com>
Tue, 28 Dec 2021 08:50:41 +0000 (17:50 +0900)
Previously, deactivation ducking for audio HAL could be missed.

[Version] 13.0.81
[Issue Type] Bug fix

Change-Id: Ide1206dc98f1dd354cb23e6c8cf06361a1d815e3
Signed-off-by: Jeongmo Yang <jm80.yang@samsung.com>
packaging/pulseaudio-modules-tizen.spec
src/stream-manager.c

index 8520637..57aea54 100644 (file)
@@ -1,6 +1,6 @@
 Name:             pulseaudio-modules-tizen
 Summary:          Pulseaudio modules for Tizen
-Version:          13.0.80
+Version:          13.0.81
 Release:          0
 Group:            Multimedia/Audio
 License:          LGPL-2.1+
index 4b8b1a1..e50e13b 100644 (file)
@@ -3673,11 +3673,16 @@ static void subscribe_cb(pa_core *core, pa_subscription_event_type_t t, uint32_t
         if (sd) {
             uint32_t ducking_idx = 0;
             pa_sink_input *stream = NULL;
+            hal_ducking_activation_info ducking_activation_info = {
+                sd->target_role, sd->duration, sd->ratio, false
+            };
 
-            pa_log_info(" - remove sd(%p), trigger_index(%u)", sd, idx);
+            pa_log_info(" - remove sd(%p) state(%d), trigger_index(%u)", sd, sd->state, idx);
+
+            if (sd->state == STREAM_DUCKING_STATE_UNDUCKED || sd->state == STREAM_DUCKING_STATE_UNDUCKING)
+                goto skip_unducking;
 
             PA_IDXSET_FOREACH(stream, sd->idx_ducking_streams, ducking_idx) {
-                hal_ducking_activation_info ducking_activation_info;
                 /* Note: It is added temporarily to find missing index of idx_ducking_streams */
                 if (!pa_idxset_get_by_data(m->core->sink_inputs, stream, NULL)) {
                     pa_log_error("could not find stream(%p), skip it", stream);
@@ -3687,16 +3692,11 @@ static void subscribe_cb(pa_core *core, pa_subscription_event_type_t t, uint32_t
                 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 = sd->ratio;
-                ducking_activation_info.is_activated = false;
-
-                pa_hal_interface_notify_ducking_activation_changed(m->hal, &ducking_activation_info);
             }
 
+            pa_hal_interface_notify_ducking_activation_changed(m->hal, &ducking_activation_info);
+
+        skip_unducking:
             pa_idxset_free(sd->idx_ducking_streams, NULL);
             pa_hashmap_remove(m->stream_duckings, PA_UINT_TO_PTR(idx));
             pa_xfree(sd);