From: Sangchul Lee Date: Fri, 3 May 2019 02:58:14 +0000 (+0900) Subject: pulseutil: Add API for setting volume ratio X-Git-Tag: accepted/tizen/unified/20220217.153506~2^2~10^2~9^2~14^2~3^2~47 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=82a861316c7d53940a4ba5c5ea6b80e4e9b2fbb0;p=platform%2Fupstream%2Fgstreamer.git pulseutil: Add API for setting volume ratio In Tizen, a stream has one volume type such as media, notification, alarm. Each type is so-called volume group which has its own volume value of a certain volume level. It is managed on the Tizen policy module of the PulseAudio. That's why the player framework has been using volume element instead of volume property of gstpulsesink of the pipeline to set individual volume of the stream itself. Here we add a function to set volume ratio for the individual volume value via the policy module of the PulseAudio which can be with the volume group concept. Change-Id: I6b2cf8d4814a01970e425a4dd25b49aa883ee7e1 Signed-off-by: Sangchul Lee --- diff --git a/configure.ac b/configure.ac index 09b5084..f4ede88 100644 --- a/configure.ac +++ b/configure.ac @@ -273,6 +273,10 @@ AC_SUBST(VCONF_CFLAGS) AC_SUBST(VCONF_LIBS) fi +PKG_CHECK_MODULES(GIO, gio-2.0) +AC_SUBST(GIO_CFLAGS) +AC_SUBST(GIO_LIBS) + dnl Check for -Bsymbolic-functions linker flag used to avoid dnl intra-library PLT jumps, if available. AC_ARG_ENABLE(Bsymbolic, diff --git a/ext/pulse/Makefile.am b/ext/pulse/Makefile.am index 5fed235..e52814c 100644 --- a/ext/pulse/Makefile.am +++ b/ext/pulse/Makefile.am @@ -7,10 +7,10 @@ libgstpulseaudio_la_SOURCES = \ pulsedeviceprovider.c \ pulseutil.c -libgstpulseaudio_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(PULSE_CFLAGS) +libgstpulseaudio_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(PULSE_CFLAGS) $(GIO_CFLAGS) libgstpulseaudio_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) -lgstaudio-$(GST_API_VERSION) \ -lgstpbutils-$(GST_API_VERSION) \ - $(GST_BASE_LIBS) $(GST_LIBS) $(PULSE_LIBS) + $(GST_BASE_LIBS) $(GST_LIBS) $(PULSE_LIBS) $(GIO_LIBS) libgstpulseaudio_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) libgstpulseaudio_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS) diff --git a/ext/pulse/pulseutil.c b/ext/pulse/pulseutil.c index f4f7c97..662fb05 100644 --- a/ext/pulse/pulseutil.c +++ b/ext/pulse/pulseutil.c @@ -512,3 +512,53 @@ gst_pulse_format_info_to_caps (pa_format_info * format) out: return ret; } + +#ifdef __TIZEN__ +#include +#define PA_BUS_NAME "org.pulseaudio.Server" +#define PA_STREAM_MANAGER_OBJECT_PATH "/org/pulseaudio/StreamManager" +#define PA_STREAM_MANAGER_INTERFACE "org.pulseaudio.StreamManager" +#define PA_STREAM_MANAGER_METHOD_NAME_SET_VOLUME_RATIO "SetVolumeRatio" +void +gst_pulse_set_volume_ratio (uint32_t stream_index, const char *direction, double ratio) +{ + GDBusConnection *conn = NULL; + GError *err = NULL; + GVariant *result = NULL; + const gchar *dbus_ret = NULL; + + conn = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, &err); + if (!conn || err) { + GST_ERROR ("g_bus_get_sync() error (%s)", err ? err->message : NULL); + if (err) + g_error_free (err); + return; + } + + result = g_dbus_connection_call_sync (conn, + PA_BUS_NAME, + PA_STREAM_MANAGER_OBJECT_PATH, + PA_STREAM_MANAGER_INTERFACE, + PA_STREAM_MANAGER_METHOD_NAME_SET_VOLUME_RATIO, + g_variant_new("(sud)", direction, stream_index, ratio), + G_VARIANT_TYPE("(s)"), + G_DBUS_CALL_FLAGS_NONE, + 1000, + NULL, + &err); + if (!result || err) { + GST_ERROR ("g_dbus_connection_call_sync() for SET_VOLUME_RATIO error (%s)", err ? err->message : NULL); + if (err) + g_error_free (err); + goto finish; + } + g_variant_get (result, "(&s)", &dbus_ret); + GST_DEBUG ("SET_VOLUME_RATIO returns value(%s) for stream index(%u), ratio(%f)", dbus_ret, stream_index, ratio); + +finish: + g_variant_unref(result); + g_object_unref(conn); + + return; +} +#endif \ No newline at end of file diff --git a/ext/pulse/pulseutil.h b/ext/pulse/pulseutil.h index 152c42d..a410d05 100644 --- a/ext/pulse/pulseutil.h +++ b/ext/pulse/pulseutil.h @@ -91,4 +91,7 @@ GstStructure *gst_pulse_make_structure (pa_proplist *properties); GstCaps * gst_pulse_format_info_to_caps (pa_format_info * format); +#ifdef __TIZEN__ +void gst_pulse_set_volume_ratio (uint32_t stream_index, const char *direction, double ratio); +#endif #endif diff --git a/packaging/gst-plugins-good.spec b/packaging/gst-plugins-good.spec index 2c436d9..3ccf003 100644 --- a/packaging/gst-plugins-good.spec +++ b/packaging/gst-plugins-good.spec @@ -39,6 +39,7 @@ BuildRequires: pkgconfig(zlib) BuildRequires: pkgconfig(libv4l2) %endif BuildRequires: pkgconfig(vconf) +BuildRequires: pkgconfig(gio-2.0) Requires: gst-plugins-base >= 1.0.0 Requires: gstreamer >= 1.0.5