From: Seungbae Shin Date: Thu, 6 Oct 2022 11:38:53 +0000 (+0900) Subject: tizen-device: add sample spec and return it for connected device list X-Git-Tag: accepted/tizen/unified/20221102.020514~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=50300148eeb4274d3f99dd9ed8f06a53d53b7f1d;p=platform%2Fcore%2Fmultimedia%2Fpulseaudio-modules-tizen.git tizen-device: add sample spec and return it for connected device list [Version] 15.0.30 [Issue Type] Feature Change-Id: I6a541a0d71f2924e778989c999a67b7b7310bf0f --- diff --git a/packaging/pulseaudio-modules-tizen.spec b/packaging/pulseaudio-modules-tizen.spec index e29fb34..aad852b 100644 --- a/packaging/pulseaudio-modules-tizen.spec +++ b/packaging/pulseaudio-modules-tizen.spec @@ -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+ diff --git a/src/device-manager-dbus.c b/src/device-manager-dbus.c index 7752ce6..c5ae84c 100644 --- a/src/device-manager-dbus.c +++ b/src/device-manager-dbus.c @@ -64,7 +64,7 @@ " \n" \ " \n" \ " \n" \ - " \n" \ + " \n" \ " \n" \ " \n" \ " \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); diff --git a/src/tizen-device.c b/src/tizen-device.c index 0f8a481..b40503a 100644 --- a/src/tizen-device.c +++ b/src/tizen-device.c @@ -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; diff --git a/src/tizen-device.h b/src/tizen-device.h index a809eed..1d22ea0 100644 --- a/src/tizen-device.h +++ b/src/tizen-device.h @@ -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);