tizen-device: add sample spec and return it for connected device list 14/282614/10
authorSeungbae Shin <seungbae.shin@samsung.com>
Thu, 6 Oct 2022 11:38:53 +0000 (20:38 +0900)
committerSeungbae Shin <seungbae.shin@samsung.com>
Wed, 19 Oct 2022 09:27:28 +0000 (18:27 +0900)
[Version] 15.0.30
[Issue Type] Feature

Change-Id: I6a541a0d71f2924e778989c999a67b7b7310bf0f

packaging/pulseaudio-modules-tizen.spec
src/device-manager-dbus.c
src/tizen-device.c
src/tizen-device.h

index e29fb34..aad852b 100644 (file)
@@ -2,7 +2,7 @@
 
 Name:             pulseaudio-modules-tizen
 Summary:          Pulseaudio modules for Tizen
-Version:          15.0.29
+Version:          15.0.30
 Release:          0
 Group:            Multimedia/Audio
 License:          LGPL-2.1+
index 7752ce6..c5ae84c 100644 (file)
@@ -64,7 +64,7 @@
     " <interface name=\"" DBUS_INTERFACE_DEVICE_MANAGER "\">\n"                             \
     "  <method name=\"GetConnectedDeviceList\">\n"                                          \
     "   <arg name=\"mask_flags\" direction=\"in\" type=\"i\"/>\n"                           \
-    "   <arg name=\"ConnectedDeviceList\" direction=\"out\" type=\"a(isiisii)\"/>\n"        \
+    "   <arg name=\"ConnectedDeviceList\" direction=\"out\" type=\"a(isiisiibiii)\"/>\n"    \
     "  </method>\n"                                                                         \
     "  <method name=\"GetDeviceById\">\n"                                                   \
     "   <arg name=\"device_id\" direction=\"in\" type=\"i\"/>\n"                            \
@@ -698,6 +698,8 @@ static void array_iter_append(DBusMessageIter *array_iter, pa_idxset *device_lis
     dbus_bool_t is_running;
     pa_tz_device *device;
     DBusMessageIter device_iter;
+    const pa_sample_spec *spec = NULL;
+    dbus_int32_t format, samplerate, channels;
 
     pa_assert(array_iter);
 
@@ -710,10 +712,16 @@ static void array_iter_append(DBusMessageIter *array_iter, pa_idxset *device_lis
         direction = pa_tz_device_get_direction(device);
         type = pa_tz_device_get_type(device);
         name = pa_tz_device_get_name(device);
-        vendor_id = (dbus_int32_t) pa_tz_device_get_vendor_id(device);
-        product_id = (dbus_int32_t) pa_tz_device_get_product_id(device);
-        product_id = (dbus_int32_t) pa_tz_device_get_product_id(device);
-        is_running = (dbus_bool_t) pa_tz_device_is_running(device);
+        vendor_id = (dbus_int32_t)pa_tz_device_get_vendor_id(device);
+        product_id = (dbus_int32_t)pa_tz_device_get_product_id(device);
+        product_id = (dbus_int32_t)pa_tz_device_get_product_id(device);
+        is_running = (dbus_bool_t)pa_tz_device_is_running(device);
+
+        spec = pa_tz_device_get_sample_spec(device);
+        format = (dbus_int32_t)spec->format;
+        samplerate = (dbus_int32_t)spec->rate;
+        channels = (dbus_int32_t)spec->channels;
+
         if (device_is_match_with_mask(device, mask)) {
             simple_device_dump(PA_LOG_INFO, "[MATCH]", device_id, type, name, direction, state);
             pa_assert_se(dbus_message_iter_open_container(array_iter, DBUS_TYPE_STRUCT, NULL, &device_iter));
@@ -725,6 +733,10 @@ static void array_iter_append(DBusMessageIter *array_iter, pa_idxset *device_lis
             dbus_message_iter_append_basic(&device_iter, DBUS_TYPE_INT32, &vendor_id);
             dbus_message_iter_append_basic(&device_iter, DBUS_TYPE_INT32, &product_id);
             dbus_message_iter_append_basic(&device_iter, DBUS_TYPE_BOOLEAN, &is_running);
+            dbus_message_iter_append_basic(&device_iter, DBUS_TYPE_INT32, &format);
+            dbus_message_iter_append_basic(&device_iter, DBUS_TYPE_INT32, &samplerate);
+            dbus_message_iter_append_basic(&device_iter, DBUS_TYPE_INT32, &channels);
+
             pa_assert_se(dbus_message_iter_close_container(array_iter, &device_iter));
         } else {
             simple_device_dump(PA_LOG_INFO, "[UNMATCH]", device_id, type, name, direction, state);
@@ -774,7 +786,7 @@ static void handle_get_connected_device_list(DBusConnection *conn, DBusMessage *
     pa_log_info("Get connected device list (mask : %d)", mask);
 
     dbus_message_iter_init_append(reply, &msg_iter);
-    pa_assert_se(dbus_message_iter_open_container(&msg_iter, DBUS_TYPE_ARRAY, "(isiisiib)", &array_iter));
+    pa_assert_se(dbus_message_iter_open_container(&msg_iter, DBUS_TYPE_ARRAY, "(isiisiibiii)", &array_iter));
 
 #ifndef __TIZEN_TV_EXTERNAL_BT_SCO__
     array_iter_append(&array_iter, dm->device_list, mask);
index 0f8a481..b40503a 100644 (file)
@@ -462,6 +462,8 @@ pa_tz_device* pa_tz_device_new(pa_tz_device_new_data *data) {
     pa_sink *sink;
     pa_source *source;
 
+    char spec_str[PA_SAMPLE_SPEC_SNPRINT_MAX] = { 0, };
+
     pa_assert(data);
 
     if (_check_valid_device_new_data(data) < 0) {
@@ -469,25 +471,19 @@ pa_tz_device* pa_tz_device_new(pa_tz_device_new_data *data) {
         return NULL;
     }
 
-    device = pa_xmalloc(sizeof(pa_tz_device));
+    device = pa_xmalloc0(sizeof(pa_tz_device));
+
     device->list = data->list;
     device->comm = data->comm;
     device->dbus_conn = data->dbus_conn;
 
     device->id = device_id_max_g++;
     device->type = pa_xstrdup(data->type);
-    if (data->name)
-        device->name = pa_xstrdup(data->name);
-    else
-        device->name = pa_xstrdup(data->type);
+    device->name = pa_xstrdup(data->name ? data->name : data->type);
     device->system_id = pa_xstrdup(data->system_id);
     device->vendor_id = data->vendor_id;
     device->product_id = data->product_id;
 
-    pa_log_info("New device type(%s) id(%u) name(%s) system_id(%s) vendor_id(%04x) product_id(%04x)",
-            device->type, device->id, device->name, pa_strempty(device->system_id),
-            device->vendor_id, device->product_id);
-
     device->playback_devices = data->playback_pcms;
     device->capture_devices = data->capture_pcms;
     device->direction = data->direction;
@@ -500,12 +496,22 @@ pa_tz_device* pa_tz_device_new(pa_tz_device_new_data *data) {
     device->is_running = false;
     device->specified_stream_role = pa_xstrdup("none");
 
-    if ((sink = device_get_sink(device, NULL)))
+    if ((sink = device_get_sink(device, NULL))) {
         sink->device_item = device;
-    if ((source = device_get_source(device, NULL)))
+        device->sample_spec = &sink->sample_spec;
+    }
+    if ((source = device_get_source(device, NULL))) {
         source->device_item = device;
+        device->sample_spec = &source->sample_spec;
+    }
+    pa_sample_spec_snprint(spec_str, sizeof(spec_str), device->sample_spec);
+
+    pa_log_info("New device: type(%s) spec(%s) id(%u) name(%s) system_id(%s) vendor_id(%04x) product_id(%04x)",
+            device->type, spec_str, device->id, device->name,
+            pa_strempty(device->system_id), device->vendor_id, device->product_id);
 
     pa_idxset_put(device->list, device, NULL);
+
     notify_device_connection_changed(device, true);
 
     pa_tz_device_dump_info(device, PA_LOG_INFO);
@@ -780,6 +786,12 @@ bool pa_tz_device_is_use_internal_codec(pa_tz_device *device) {
     return device->use_internal_codec;
 }
 
+const pa_sample_spec* pa_tz_device_get_sample_spec(pa_tz_device *device) {
+    pa_assert(device);
+
+    return device->sample_spec;
+}
+
 bool pa_tz_device_is_all_suspended(pa_tz_device *device) {
     pa_sink *sink;
     pa_source *source;
index a809eed..1d22ea0 100644 (file)
@@ -64,6 +64,9 @@ struct pa_tz_device {
     bool sco_opened;
 #endif
 
+    /* mirrors to the corresponding sink/source sample spec */
+    const pa_sample_spec *sample_spec;
+
     /* Devices are contained in this list */
     pa_idxset *list;
 
@@ -152,6 +155,7 @@ char* pa_tz_device_get_system_id(pa_tz_device *device);
 dm_device_direction_t pa_tz_device_get_direction(pa_tz_device *device);
 pa_usec_t pa_tz_device_get_creation_time(pa_tz_device *device);
 bool pa_tz_device_is_use_internal_codec(pa_tz_device *device);
+const pa_sample_spec* pa_tz_device_get_sample_spec(pa_tz_device *device);
 bool pa_tz_device_is_all_suspended(pa_tz_device *device);
 pa_intset* pa_tz_device_get_stream_list(pa_tz_device *device);