stream-manager: Fix missed notification 64/212664/5
authorJeongmo Yang <jm80.yang@samsung.com>
Mon, 26 Aug 2019 03:46:26 +0000 (12:46 +0900)
committerJeongmo Yang <jm80.yang@samsung.com>
Tue, 27 Aug 2019 06:30:22 +0000 (15:30 +0900)
- When stream ducking is disconnected without deactivation,
  notification for audio-HAL is missed.

[Version] 11.1.69
[Profile] Common
[Issue Type] Bug fix

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

index 266fb6a..54a3670 100644 (file)
@@ -1,6 +1,6 @@
 Name:             pulseaudio-modules-tizen
 Summary:          Pulseaudio modules for Tizen
-Version:          11.1.68
+Version:          11.1.69
 Release:          0
 Group:            Multimedia/Audio
 License:          LGPL-2.1+
index 83c3f8e..0c9a098 100644 (file)
@@ -1811,11 +1811,13 @@ static void handle_activate_ducking(DBusConnection *conn, DBusMessage *msg, void
     /* 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 */
@@ -1850,8 +1852,6 @@ static void handle_activate_ducking(DBusConnection *conn, DBusMessage *msg, void
     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);
index d7449e5..9c0620f 100644 (file)
@@ -203,6 +203,7 @@ typedef struct _stream_ducking {
     uint32_t duration;
     pa_volume_t set_vol;
     pa_idxset *idx_ducking_streams;
+    double ratio;
 } stream_ducking;
 
 typedef struct _filter_info {
index 24b7afe..6a900b4 100644 (file)
@@ -3347,9 +3347,19 @@ static void subscribe_cb(pa_core *core, pa_subscription_event_type_t t, uint32_t
             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);