policy: Add skip routine for the specific name of a stream 02/45802/2 accepted/tizen/mobile/20150813.011846 accepted/tizen/tv/20150813.011902 accepted/tizen/wearable/20150813.011929 submit/tizen/20150811.122753 submit/tizen/20150812.065628
authorSangchul Lee <sc11.lee@samsung.com>
Tue, 11 Aug 2015 10:18:51 +0000 (19:18 +0900)
committerSangchul Lee <sc11.lee@samsung.com>
Tue, 11 Aug 2015 10:35:23 +0000 (19:35 +0900)
There are streams that need to be skipped processing in stream-manager.
Fix bug regarding setting device state in module-policy.c.

[Version] 5.0-32
[Profile] Common
[Issue Type] Enhance codes

Change-Id: Ib95f60f14e6e7098561cf9c3277b97dca225cb46
Signed-off-by: Sangchul Lee <sc11.lee@samsung.com>
packaging/pulseaudio.spec
src/modules/tizen/module-policy.c
src/modules/tizen/stream-manager.c

index 926bdb5..b7d7b17 100644 (file)
@@ -11,7 +11,7 @@
 Name:             pulseaudio
 Summary:          Improved Linux sound server
 Version:          5.0
-Release:          31
+Release:          32
 Group:            Multimedia/Audio
 License:          GPL-2.0+ and LGPL-2.1+
 URL:              http://pulseaudio.org
index e9b8bb6..2a371bc 100644 (file)
@@ -677,7 +677,7 @@ static pa_hook_result_t route_change_hook_cb(pa_core *c, pa_stream_manager_hook_
                 PA_IDXSET_FOREACH(_device, conn_devices, conn_idx) {
                     if (device == _device)
                         continue;
-                    pa_device_manager_set_device_state(device, DM_DEVICE_STATE_DEACTIVATED);
+                    pa_device_manager_set_device_state(_device, DM_DEVICE_STATE_DEACTIVATED);
                 }
 
                 /* Move sink-inputs/source-outputs if needed */
index 9e2e5a8..0eef256 100644 (file)
@@ -296,6 +296,13 @@ static pa_dbus_interface_info stream_manager_interface_info = {
 #endif
 
 #define STREAM_MANAGER_CLIENT_NAME "SOUND_MANAGER_STREAM_INFO"
+#define DEFAULT_ROLE "media"
+#define SKIP_ROLE "skip"
+
+/* There are some streams to be skipped.
+ * In other words, we do not care about streams that have a name of listed as below */
+#define NAME_FOR_SKIP_MAX 1
+const char* stream_manager_media_names_for_skip[NAME_FOR_SKIP_MAX] = {"pulsesink probe"};
 
 #define STREAM_FOCUS_NONE     "0"
 #define STREAM_FOCUS_PLAYBACK "1"
@@ -1383,6 +1390,40 @@ static void deinit_stream_map (pa_stream_manager *m) {
     return;
 }
 
+static pa_bool_t check_name_to_skip(pa_stream_manager *m, process_command_type_t command, stream_type_t type, void *stream) {
+    pa_bool_t ret = FALSE;
+    const char *name = NULL;
+    const char *role = NULL;
+    int i = 0;
+
+    pa_assert(m);
+    pa_assert(stream);
+
+    if (command == PROCESS_COMMAND_PREPARE) {
+        name = pa_proplist_gets(GET_STREAM_NEW_PROPLIST(stream, type), PA_PROP_MEDIA_NAME);
+        if (name) {
+            for (i = 0; i < NAME_FOR_SKIP_MAX; i++)
+                if (pa_streq(name, stream_manager_media_names_for_skip[i])) {
+                    ret = TRUE;
+                    pa_proplist_sets(GET_STREAM_NEW_PROPLIST(stream, type), PA_PROP_MEDIA_ROLE, SKIP_ROLE);
+                    break;
+                }
+            pa_log_info("name is [%s], skip(%d)", name, ret);
+        }
+    } else {
+        if (command == PROCESS_COMMAND_CHANGE_ROUTE_BY_STREAM_STARTED_WITH_NEW_DATA ||
+            command == PROCESS_COMMAND_UPDATE_VOLUME)
+            role = pa_proplist_gets(GET_STREAM_NEW_PROPLIST(stream, type), PA_PROP_MEDIA_ROLE);
+        else
+            role = pa_proplist_gets(GET_STREAM_PROPLIST(stream, type), PA_PROP_MEDIA_ROLE);
+
+        if (role && pa_streq(role, "skip"))
+            ret = TRUE;
+    }
+
+    return ret;
+}
+
 static pa_bool_t check_role_to_skip(pa_stream_manager *m, const char *role) {
     pa_bool_t ret = TRUE;
     stream_info *s = NULL;
@@ -1902,6 +1943,11 @@ static process_stream_result_t process_stream(stream_type_t type, void *stream,
     pa_assert(stream);
     pa_assert(m);
 
+    if (check_name_to_skip(m, command, type, stream)) {
+        result = PROCESS_STREAM_RESULT_SKIP;
+        goto FAILURE;
+    }
+
     if (command == PROCESS_COMMAND_PREPARE) {
         if (type == STREAM_SINK_INPUT) {
             /* Parse request formats for samplerate, channel, format infomation */
@@ -1932,9 +1978,8 @@ static process_stream_result_t process_stream(stream_type_t type, void *stream,
         role = pa_proplist_gets(GET_STREAM_NEW_PROPLIST(stream, type), PA_PROP_MEDIA_ROLE);
         if (!role) {
             /* set default value for role and priority */
-            #define DEFAULT_ROLE "media"
             role = DEFAULT_ROLE;
-            pa_proplist_sets(GET_STREAM_NEW_PROPLIST(stream, type), PA_PROP_MEDIA_ROLE, DEFAULT_ROLE);
+            pa_proplist_sets(GET_STREAM_NEW_PROPLIST(stream, type), PA_PROP_MEDIA_ROLE, role);
             pa_log_warn("role is null, set default to [%s]", role);
         } else {
             /* skip roles */