Add the sw_volume_dB parameter 75/297875/3 accepted/tizen/unified/20230830.170616
authorJaechul Lee <jcsing.lee@samsung.com>
Mon, 28 Aug 2023 04:38:03 +0000 (13:38 +0900)
committerJaechul Lee <jcsing.lee@samsung.com>
Tue, 29 Aug 2023 01:25:34 +0000 (10:25 +0900)
The sw_volume_dB parameter is added to tizenaudio-source2.
In addition to this, some logs are added when read function takes more
than 100ms.

[Version] 15.0.54
[Issue Type] Update

Change-Id: Ie76dd586df3427a011ce5ec86bf5dd89cd3b6256
Signed-off-by: Jaechul Lee <jcsing.lee@samsung.com>
packaging/pulseaudio-modules-tizen.spec
src/module-tizenaudio-source2.c
src/tizenaudio-sink2.c
src/tizenaudio-source2.c

index 0141ccfc0edef6ce39acd9ae3021e737a579c827..4c707c68f0e3a85abbc1ff1790db4691a3a2dd6d 100644 (file)
@@ -2,7 +2,7 @@
 
 Name:             pulseaudio-modules-tizen
 Summary:          Pulseaudio modules for Tizen
-Version:          15.0.53
+Version:          15.0.54
 Release:          0
 Group:            Multimedia/Audio
 License:          LGPL-2.1+
index ff1e223b7a4a48c2ebc0ef6dc0cc02c05ccfd616..3ab00e2d1af793346774fbec701156bc111990c8 100644 (file)
@@ -41,7 +41,8 @@ PA_MODULE_USAGE(
         "channel_map=<channel map>"
         "fragments=<number of fragments> "
         "fragment_size=<fragment size> "
-        "rtpoll_timeout=<rtpoll loop timeout>");
+        "rtpoll_timeout=<rtpoll loop timeout>"
+        "sw_volume_dB=<volume based on dB>");
 
 static const char* const valid_modargs[] = {
     "source_name",
@@ -54,6 +55,7 @@ static const char* const valid_modargs[] = {
     "fragments",
     "fragment_size",
     "rtpoll_timeout",
+    "sw_volume_dB",
     NULL
 };
 
index 30071f377773a6c6b098007e230e914326bbe32e..63666b30a450fb0c87cb004ccc82304e733ec1aa 100644 (file)
@@ -635,7 +635,8 @@ pa_sink *pa_tizenaudio_sink2_new(pa_module *m,
     u->sink->set_state_in_io_thread = sink_set_state_in_io_thread_cb;
     u->sink->userdata = u;
 
-    pa_log_info("card(%s) device(%s) fragment_size(%u), fragments(%u)", u->card, u->device, u->frag_size, u->nfrags);
+    pa_log_info("card(%s) device(%s) fragment_size(%u), fragments(%u), rtpoll_timeout(%u)",
+                    u->card, u->device, u->frag_size, u->nfrags, u->rtpoll_timeout);
 
     pa_sink_set_asyncmsgq(u->sink, u->thread_mq.inq);
     pa_sink_set_rtpoll(u->sink, u->rtpoll);
index 9d8b8714daa068a819c2a8ac46f6715933f66b16..912ad92a65387b1d41790e4cb6a5dd56588c5bdf 100644 (file)
@@ -80,6 +80,7 @@ struct userdata {
 
     pa_rtpoll_item *rtpoll_item;
     uint32_t rtpoll_timeout;
+    double sw_volume_dB;
 
     uint64_t read_count;
     pa_usec_t latency_time;
@@ -322,6 +323,8 @@ static int process_render(struct userdata *u) {
     uint32_t avail = 0;
     pa_memchunk chunk;
 
+    pa_usec_t elapsed;
+
     pa_assert(u);
 
     pa_hal_interface_pcm_available(u->hal_interface, u->pcm_handle, &avail);
@@ -334,10 +337,17 @@ static int process_render(struct userdata *u) {
     chunk.memblock = pa_memblock_new(u->core->mempool, chunk.length);
 
     p = pa_memblock_acquire(chunk.memblock);
+
+    elapsed = pa_rtclock_now();
+
     if (pa_hal_interface_pcm_read(u->hal_interface, u->pcm_handle, p, (uint32_t)frames_to_read)) {
         pa_log_error("failed to read pcm. p(%p), size(%zu)", p, frames_to_read);
         return -1;
     }
+
+    if (pa_rtclock_now() - elapsed > 100 * PA_USEC_PER_MSEC)
+        pa_log_error("HAL read function takes a long time : %" PRId64 "", elapsed);
+
     pa_memblock_release(chunk.memblock);
 
     chunk.index = 0;
@@ -451,6 +461,7 @@ pa_source *pa_tizenaudio_source2_new(pa_module *m,
     const char *modarg_device_id;
     size_t frame_size, buffer_size, period_frames, buffer_frames;
     pa_pcm_params_t param;
+    pa_cvolume cvolume;
 
     uint32_t period_size;
     uint32_t periods;
@@ -580,6 +591,11 @@ pa_source *pa_tizenaudio_source2_new(pa_module *m,
     pa_source_new_data_set_name(&data, pa_modargs_get_value(ma, "source_name", DEFAULT_SOURCE_NAME));
     pa_source_new_data_set_sample_spec(&data, &ss);
     pa_source_new_data_set_channel_map(&data, &map);
+
+    pa_modargs_get_value_double(ma, "sw_volume_dB", &u->sw_volume_dB);
+    pa_cvolume_set(&cvolume, ss.channels, pa_sw_volume_from_dB(u->sw_volume_dB));
+    pa_source_new_data_set_volume(&data, &cvolume);
+
     pa_proplist_sets(data.proplist, PA_PROP_DEVICE_DESCRIPTION, _("Tizen audio source2"));
     pa_proplist_sets(data.proplist, PA_PROP_DEVICE_CLASS, "abstract");
     pa_proplist_sets(data.proplist, "tizen.card", u->card);
@@ -612,8 +628,8 @@ pa_source *pa_tizenaudio_source2_new(pa_module *m,
     u->source->set_state_in_io_thread = source_set_state_in_io_thread_cb;
     u->source->userdata = u;
 
-    pa_log_info("card(%s) device(%s) fragment_size(%u), fragments(%u)",
-                                 u->card, u->device, u->frag_size, u->nfrags);
+    pa_log_info("card(%s) device(%s) fragment_size(%u), fragments(%u), rtpoll_timeout(%u) sw_volume_dB(%f)",
+                                 u->card, u->device, u->frag_size, u->nfrags, u->rtpoll_timeout, u->sw_volume_dB);
 
     pa_source_set_asyncmsgq(u->source, u->thread_mq.inq);
     pa_source_set_rtpoll(u->source, u->rtpoll);