summaryrefslogtreecommitdiff
path: root/libmatemixer
diff options
context:
space:
mode:
authorMichal Ratajsky <[email protected]>2014-07-03 20:48:08 +0200
committerMichal Ratajsky <[email protected]>2014-07-03 20:48:08 +0200
commitb81d9ed11fae7bee59b67b1aee9927e417666875 (patch)
treeb5b2d8406272db2b4457e31f714e1703d6336727 /libmatemixer
parente13f443c1c4c73ef20dd00f1909f8c94c685b07f (diff)
downloadlibmatemixer-b81d9ed11fae7bee59b67b1aee9927e417666875.tar.bz2
libmatemixer-b81d9ed11fae7bee59b67b1aee9927e417666875.tar.xz
PulseAudio and API fixes
Diffstat (limited to 'libmatemixer')
-rw-r--r--libmatemixer/matemixer-client-stream.c2
-rw-r--r--libmatemixer/matemixer-control.c42
-rw-r--r--libmatemixer/matemixer-enum-types.c2
-rw-r--r--libmatemixer/matemixer-enums.h4
-rw-r--r--libmatemixer/matemixer-private.h3
-rw-r--r--libmatemixer/matemixer-stream.c71
-rw-r--r--libmatemixer/matemixer-stream.h56
-rw-r--r--libmatemixer/matemixer.c20
-rw-r--r--libmatemixer/matemixer.h5
9 files changed, 123 insertions, 82 deletions
diff --git a/libmatemixer/matemixer-client-stream.c b/libmatemixer/matemixer-client-stream.c
index d05b1bf..74b3e15 100644
--- a/libmatemixer/matemixer-client-stream.c
+++ b/libmatemixer/matemixer-client-stream.c
@@ -108,7 +108,7 @@ mate_mixer_client_stream_get_parent (MateMixerClientStream *client)
* @parent: a #MateMixerStream
*
* Changes the parent stream of the client stream. The parent stream must be a
- * non-client output stream.
+ * non-client input or output stream.
*
* Returns: %TRUE on success or %FALSE on failure.
*/
diff --git a/libmatemixer/matemixer-control.c b/libmatemixer/matemixer-control.c
index 2bc61ae..06b938a 100644
--- a/libmatemixer/matemixer-control.c
+++ b/libmatemixer/matemixer-control.c
@@ -19,8 +19,10 @@
#include <glib.h>
#include <glib-object.h>
+#include "matemixer.h"
#include "matemixer-backend.h"
#include "matemixer-backend-module.h"
+#include "matemixer-client-stream.h"
#include "matemixer-control.h"
#include "matemixer-enums.h"
#include "matemixer-enum-types.h"
@@ -954,7 +956,8 @@ mate_mixer_control_get_default_input_stream (MateMixerControl *control)
* @control: a #MateMixerControl
* @stream: a #MateMixerStream to set as the default input stream
*
- * Changes the default input stream in the system.
+ * Changes the default input stream in the system. The @stream must be an
+ * input non-client stream.
*
* Returns: %TRUE on success or %FALSE on failure.
*/
@@ -963,10 +966,20 @@ mate_mixer_control_set_default_input_stream (MateMixerControl *control,
MateMixerStream *stream)
{
g_return_val_if_fail (MATE_MIXER_IS_CONTROL (control), FALSE);
+ g_return_val_if_fail (MATE_MIXER_IS_STREAM (stream), FALSE);
if (control->priv->state != MATE_MIXER_STATE_READY)
return FALSE;
+ if (MATE_MIXER_IS_CLIENT_STREAM (stream)) {
+ g_warning ("Unable to set client stream as the default input stream");
+ return FALSE;
+ }
+ if (!(mate_mixer_stream_get_flags (stream) & MATE_MIXER_STREAM_INPUT)) {
+ g_warning ("Unable to set non-input stream as the default input stream");
+ return FALSE;
+ }
+
return mate_mixer_backend_set_default_input_stream (control->priv->backend, stream);
}
@@ -996,7 +1009,8 @@ mate_mixer_control_get_default_output_stream (MateMixerControl *control)
* @control: a #MateMixerControl
* @stream: a #MateMixerStream to set as the default output stream
*
- * Changes the default output stream in the system.
+ * Changes the default output stream in the system. The @stream must be an
+ * output non-client stream.
*
* Returns: %TRUE on success or %FALSE on failure.
*/
@@ -1005,10 +1019,20 @@ mate_mixer_control_set_default_output_stream (MateMixerControl *control,
MateMixerStream *stream)
{
g_return_val_if_fail (MATE_MIXER_IS_CONTROL (control), FALSE);
+ g_return_val_if_fail (MATE_MIXER_IS_STREAM (stream), FALSE);
if (control->priv->state != MATE_MIXER_STATE_READY)
return FALSE;
+ if (MATE_MIXER_IS_CLIENT_STREAM (stream)) {
+ g_warning ("Unable to set client stream as the default output stream");
+ return FALSE;
+ }
+ if (!(mate_mixer_stream_get_flags (stream) & MATE_MIXER_STREAM_OUTPUT)) {
+ g_warning ("Unable to set non-output stream as the default output stream");
+ return FALSE;
+ }
+
return mate_mixer_backend_set_default_input_stream (control->priv->backend, stream);
}
@@ -1177,6 +1201,7 @@ control_try_next_backend (MateMixerControl *control)
{
const GList *modules;
MateMixerBackendModule *module = NULL;
+ MateMixerState state;
modules = mate_mixer_get_modules ();
while (modules) {
@@ -1208,10 +1233,23 @@ control_try_next_backend (MateMixerControl *control)
if (!mate_mixer_backend_open (control->priv->backend))
return control_try_next_backend (control);
+ state = mate_mixer_backend_get_state (control->priv->backend);
+
+ if (G_UNLIKELY (state != MATE_MIXER_STATE_READY &&
+ state != MATE_MIXER_STATE_CONNECTING)) {
+ /* This would be a backend bug */
+ g_warn_if_reached ();
+
+ control_close (control);
+ return control_try_next_backend (control);
+ }
+
g_signal_connect (control->priv->backend,
"notify::state",
G_CALLBACK (control_state_changed_cb),
control);
+
+ control_change_state (control, state);
return TRUE;
}
diff --git a/libmatemixer/matemixer-enum-types.c b/libmatemixer/matemixer-enum-types.c
index e353e0c..0f60a6a 100644
--- a/libmatemixer/matemixer-enum-types.c
+++ b/libmatemixer/matemixer-enum-types.c
@@ -52,7 +52,7 @@ mate_mixer_backend_type_get_type (void)
if (etype == 0) {
static const GEnumValue values[] = {
{ MATE_MIXER_BACKEND_UNKNOWN, "MATE_MIXER_BACKEND_UNKNOWN", "unknown" },
- { MATE_MIXER_BACKEND_PULSE, "MATE_MIXER_BACKEND_PULSE", "pulse" },
+ { MATE_MIXER_BACKEND_PULSEAUDIO, "MATE_MIXER_BACKEND_PULSEAUDIO", "pulseaudio" },
{ MATE_MIXER_BACKEND_NULL, "MATE_MIXER_BACKEND_NULL", "null" },
{ 0, NULL, NULL }
};
diff --git a/libmatemixer/matemixer-enums.h b/libmatemixer/matemixer-enums.h
index 4552141..4753aaf 100644
--- a/libmatemixer/matemixer-enums.h
+++ b/libmatemixer/matemixer-enums.h
@@ -35,7 +35,7 @@ typedef enum {
* MateMixerBackendType:
* @MATE_MIXER_BACKEND_UNKNOWN:
* Unknown or undefined backend type.
- * @MATE_MIXER_BACKEND_PULSE:
+ * @MATE_MIXER_BACKEND_PULSEAUDIO:
* PulseAudio sound system backend. It has the highest priority and
* will be the first one to try unless you select a specific backend
* to connect to.
@@ -47,7 +47,7 @@ typedef enum {
*/
typedef enum {
MATE_MIXER_BACKEND_UNKNOWN = 0,
- MATE_MIXER_BACKEND_PULSE,
+ MATE_MIXER_BACKEND_PULSEAUDIO,
MATE_MIXER_BACKEND_NULL
} MateMixerBackendType;
diff --git a/libmatemixer/matemixer-private.h b/libmatemixer/matemixer-private.h
index 0eb012a..4dde496 100644
--- a/libmatemixer/matemixer-private.h
+++ b/libmatemixer/matemixer-private.h
@@ -22,8 +22,7 @@
G_BEGIN_DECLS
-const GList *mate_mixer_get_modules (void);
-gboolean mate_mixer_is_initialized (void);
+const GList *mate_mixer_get_modules (void);
G_END_DECLS
diff --git a/libmatemixer/matemixer-stream.c b/libmatemixer/matemixer-stream.c
index b845d48..5400357 100644
--- a/libmatemixer/matemixer-stream.c
+++ b/libmatemixer/matemixer-stream.c
@@ -15,9 +15,6 @@
* License along with this library; if not, see <http://www.gnu.org/licenses/>.
*/
-// XXX
-// consider using guint for volumes, but see the other backends first
-
#include <glib.h>
#include <glib-object.h>
@@ -115,24 +112,24 @@ mate_mixer_stream_default_init (MateMixerStreamInterface *iface)
G_PARAM_STATIC_STRINGS));
g_object_interface_install_property (iface,
- g_param_spec_double ("balance",
- "Balance",
- "Balance value of the stream",
- -1.0,
- 1.0,
- 0.0,
- G_PARAM_READABLE |
- G_PARAM_STATIC_STRINGS));
+ g_param_spec_float ("balance",
+ "Balance",
+ "Balance value of the stream",
+ -1.0f,
+ 1.0f,
+ 0.0f,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_interface_install_property (iface,
- g_param_spec_double ("fade",
- "Fade",
- "Fade value of the stream",
- -1.0,
- 1.0,
- 0.0,
- G_PARAM_READABLE |
- G_PARAM_STATIC_STRINGS));
+ g_param_spec_float ("fade",
+ "Fade",
+ "Fade value of the stream",
+ -1.0f,
+ 1.0f,
+ 0.0f,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
g_object_interface_install_property (iface,
g_param_spec_pointer ("ports",
@@ -258,7 +255,7 @@ mate_mixer_stream_set_mute (MateMixerStream *stream, gboolean mute)
return FALSE;
}
-gint64
+guint
mate_mixer_stream_get_volume (MateMixerStream *stream)
{
MateMixerStreamInterface *iface;
@@ -274,7 +271,7 @@ mate_mixer_stream_get_volume (MateMixerStream *stream)
}
gboolean
-mate_mixer_stream_set_volume (MateMixerStream *stream, gint64 volume)
+mate_mixer_stream_set_volume (MateMixerStream *stream, guint volume)
{
MateMixerStreamInterface *iface;
@@ -348,7 +345,7 @@ mate_mixer_stream_get_channel_position (MateMixerStream *stream, guint channel)
return MATE_MIXER_CHANNEL_UNKNOWN_POSITION;
}
-gint64
+guint
mate_mixer_stream_get_channel_volume (MateMixerStream *stream, guint channel)
{
MateMixerStreamInterface *iface;
@@ -366,7 +363,7 @@ mate_mixer_stream_get_channel_volume (MateMixerStream *stream, guint channel)
gboolean
mate_mixer_stream_set_channel_volume (MateMixerStream *stream,
guint channel,
- gint64 volume)
+ guint volume)
{
MateMixerStreamInterface *iface;
@@ -428,7 +425,7 @@ mate_mixer_stream_has_position (MateMixerStream *stream,
return FALSE;
}
-gint64
+guint
mate_mixer_stream_get_position_volume (MateMixerStream *stream,
MateMixerChannelPosition position)
{
@@ -447,7 +444,7 @@ mate_mixer_stream_get_position_volume (MateMixerStream *stream,
gboolean
mate_mixer_stream_set_position_volume (MateMixerStream *stream,
MateMixerChannelPosition position,
- gint64 volume)
+ guint volume)
{
MateMixerStreamInterface *iface;
@@ -494,23 +491,23 @@ mate_mixer_stream_set_position_decibel (MateMixerStream *stream,
return FALSE;
}
-gdouble
+gfloat
mate_mixer_stream_get_balance (MateMixerStream *stream)
{
MateMixerStreamInterface *iface;
- g_return_val_if_fail (MATE_MIXER_IS_STREAM (stream), 0);
+ g_return_val_if_fail (MATE_MIXER_IS_STREAM (stream), 0.0f);
iface = MATE_MIXER_STREAM_GET_INTERFACE (stream);
if (iface->get_balance)
return iface->get_balance (stream);
- return 0;
+ return 0.0f;
}
gboolean
-mate_mixer_stream_set_balance (MateMixerStream *stream, gdouble balance)
+mate_mixer_stream_set_balance (MateMixerStream *stream, gfloat balance)
{
MateMixerStreamInterface *iface;
@@ -524,23 +521,23 @@ mate_mixer_stream_set_balance (MateMixerStream *stream, gdouble balance)
return FALSE;
}
-gdouble
+gfloat
mate_mixer_stream_get_fade (MateMixerStream *stream)
{
MateMixerStreamInterface *iface;
- g_return_val_if_fail (MATE_MIXER_IS_STREAM (stream), 0);
+ g_return_val_if_fail (MATE_MIXER_IS_STREAM (stream), 0.0f);
iface = MATE_MIXER_STREAM_GET_INTERFACE (stream);
if (iface->get_fade)
return iface->get_fade (stream);
- return 0;
+ return 0.0f;
}
gboolean
-mate_mixer_stream_set_fade (MateMixerStream *stream, gdouble fade)
+mate_mixer_stream_set_fade (MateMixerStream *stream, gfloat fade)
{
MateMixerStreamInterface *iface;
@@ -673,7 +670,7 @@ mate_mixer_stream_set_active_port (MateMixerStream *stream, const gchar *port)
return FALSE;
}
-gint64
+guint
mate_mixer_stream_get_min_volume (MateMixerStream *stream)
{
MateMixerStreamInterface *iface;
@@ -688,7 +685,7 @@ mate_mixer_stream_get_min_volume (MateMixerStream *stream)
return 0;
}
-gint64
+guint
mate_mixer_stream_get_max_volume (MateMixerStream *stream)
{
MateMixerStreamInterface *iface;
@@ -703,7 +700,7 @@ mate_mixer_stream_get_max_volume (MateMixerStream *stream)
return 0;
}
-gint64
+guint
mate_mixer_stream_get_normal_volume (MateMixerStream *stream)
{
MateMixerStreamInterface *iface;
@@ -718,7 +715,7 @@ mate_mixer_stream_get_normal_volume (MateMixerStream *stream)
return 0;
}
-gint64
+guint
mate_mixer_stream_get_base_volume (MateMixerStream *stream)
{
MateMixerStreamInterface *iface;
diff --git a/libmatemixer/matemixer-stream.h b/libmatemixer/matemixer-stream.h
index a9933e1..527c470 100644
--- a/libmatemixer/matemixer-stream.h
+++ b/libmatemixer/matemixer-stream.h
@@ -60,19 +60,19 @@ struct _MateMixerStreamInterface
gboolean (*set_mute) (MateMixerStream *stream,
gboolean mute);
guint (*get_num_channels) (MateMixerStream *stream);
- gint64 (*get_volume) (MateMixerStream *stream);
+ guint (*get_volume) (MateMixerStream *stream);
gboolean (*set_volume) (MateMixerStream *stream,
- gint64 volume);
+ guint volume);
gdouble (*get_decibel) (MateMixerStream *stream);
gboolean (*set_decibel) (MateMixerStream *stream,
gdouble decibel);
MateMixerChannelPosition (*get_channel_position) (MateMixerStream *stream,
guint channel);
- gint64 (*get_channel_volume) (MateMixerStream *stream,
+ guint (*get_channel_volume) (MateMixerStream *stream,
guint channel);
gboolean (*set_channel_volume) (MateMixerStream *stream,
guint channel,
- gint64 volume);
+ guint volume);
gdouble (*get_channel_decibel) (MateMixerStream *stream,
guint channel);
gboolean (*set_channel_decibel) (MateMixerStream *stream,
@@ -80,22 +80,22 @@ struct _MateMixerStreamInterface
gdouble decibel);
gboolean (*has_position) (MateMixerStream *stream,
MateMixerChannelPosition position);
- gint64 (*get_position_volume) (MateMixerStream *stream,
+ guint (*get_position_volume) (MateMixerStream *stream,
MateMixerChannelPosition position);
gboolean (*set_position_volume) (MateMixerStream *stream,
MateMixerChannelPosition position,
- gint64 volume);
+ guint volume);
gdouble (*get_position_decibel) (MateMixerStream *stream,
MateMixerChannelPosition position);
gboolean (*set_position_decibel) (MateMixerStream *stream,
MateMixerChannelPosition position,
gdouble decibel);
- gdouble (*get_balance) (MateMixerStream *stream);
+ gfloat (*get_balance) (MateMixerStream *stream);
gboolean (*set_balance) (MateMixerStream *stream,
- gdouble balance);
- gdouble (*get_fade) (MateMixerStream *stream);
+ gfloat balance);
+ gfloat (*get_fade) (MateMixerStream *stream);
gboolean (*set_fade) (MateMixerStream *stream,
- gdouble fade);
+ gfloat fade);
gboolean (*suspend) (MateMixerStream *stream);
gboolean (*resume) (MateMixerStream *stream);
gboolean (*monitor_start) (MateMixerStream *stream);
@@ -105,10 +105,10 @@ struct _MateMixerStreamInterface
MateMixerPort * (*get_active_port) (MateMixerStream *stream);
gboolean (*set_active_port) (MateMixerStream *stream,
const gchar *port);
- gint64 (*get_min_volume) (MateMixerStream *stream);
- gint64 (*get_max_volume) (MateMixerStream *stream);
- gint64 (*get_normal_volume) (MateMixerStream *stream);
- gint64 (*get_base_volume) (MateMixerStream *stream);
+ guint (*get_min_volume) (MateMixerStream *stream);
+ guint (*get_max_volume) (MateMixerStream *stream);
+ guint (*get_normal_volume) (MateMixerStream *stream);
+ guint (*get_base_volume) (MateMixerStream *stream);
/* Signals */
void (*monitor_value) (MateMixerStream *stream,
@@ -129,9 +129,9 @@ gboolean mate_mixer_stream_set_mute (MateMixerStre
guint mate_mixer_stream_get_num_channels (MateMixerStream *stream);
-gint64 mate_mixer_stream_get_volume (MateMixerStream *stream);
+guint mate_mixer_stream_get_volume (MateMixerStream *stream);
gboolean mate_mixer_stream_set_volume (MateMixerStream *stream,
- gint64 volume);
+ guint volume);
gdouble mate_mixer_stream_get_decibel (MateMixerStream *stream);
gboolean mate_mixer_stream_set_decibel (MateMixerStream *stream,
@@ -140,11 +140,11 @@ gboolean mate_mixer_stream_set_decibel (MateMixerStre
MateMixerChannelPosition mate_mixer_stream_get_channel_position (MateMixerStream *stream,
guint channel);
-gint64 mate_mixer_stream_get_channel_volume (MateMixerStream *stream,
+guint mate_mixer_stream_get_channel_volume (MateMixerStream *stream,
guint channel);
gboolean mate_mixer_stream_set_channel_volume (MateMixerStream *stream,
guint channel,
- gint64 volume);
+ guint volume);
gdouble mate_mixer_stream_get_channel_decibel (MateMixerStream *stream,
guint channel);
@@ -155,11 +155,11 @@ gboolean mate_mixer_stream_set_channel_decibel (MateMixerStre
gboolean mate_mixer_stream_has_position (MateMixerStream *stream,
MateMixerChannelPosition position);
-gint64 mate_mixer_stream_get_position_volume (MateMixerStream *stream,
+guint mate_mixer_stream_get_position_volume (MateMixerStream *stream,
MateMixerChannelPosition position);
gboolean mate_mixer_stream_set_position_volume (MateMixerStream *stream,
MateMixerChannelPosition position,
- gint64 volume);
+ guint volume);
gdouble mate_mixer_stream_get_position_decibel (MateMixerStream *stream,
MateMixerChannelPosition position);
@@ -167,13 +167,13 @@ gboolean mate_mixer_stream_set_position_decibel (MateMixerStre
MateMixerChannelPosition position,
gdouble decibel);
-gdouble mate_mixer_stream_get_balance (MateMixerStream *stream);
+gfloat mate_mixer_stream_get_balance (MateMixerStream *stream);
gboolean mate_mixer_stream_set_balance (MateMixerStream *stream,
- gdouble balance);
+ gfloat balance);
-gdouble mate_mixer_stream_get_fade (MateMixerStream *stream);
+gfloat mate_mixer_stream_get_fade (MateMixerStream *stream);
gboolean mate_mixer_stream_set_fade (MateMixerStream *stream,
- gdouble fade);
+ gfloat fade);
gboolean mate_mixer_stream_suspend (MateMixerStream *stream);
gboolean mate_mixer_stream_resume (MateMixerStream *stream);
@@ -189,10 +189,10 @@ MateMixerPort * mate_mixer_stream_get_active_port (MateMixerStre
gboolean mate_mixer_stream_set_active_port (MateMixerStream *stream,
const gchar *port);
-gint64 mate_mixer_stream_get_min_volume (MateMixerStream *stream);
-gint64 mate_mixer_stream_get_max_volume (MateMixerStream *stream);
-gint64 mate_mixer_stream_get_normal_volume (MateMixerStream *stream);
-gint64 mate_mixer_stream_get_base_volume (MateMixerStream *stream);
+guint mate_mixer_stream_get_min_volume (MateMixerStream *stream);
+guint mate_mixer_stream_get_max_volume (MateMixerStream *stream);
+guint mate_mixer_stream_get_normal_volume (MateMixerStream *stream);
+guint mate_mixer_stream_get_base_volume (MateMixerStream *stream);
G_END_DECLS
diff --git a/libmatemixer/matemixer.c b/libmatemixer/matemixer.c
index 602d5d2..8965599 100644
--- a/libmatemixer/matemixer.c
+++ b/libmatemixer/matemixer.c
@@ -76,6 +76,19 @@ mate_mixer_init (void)
}
/**
+ * mate_mixer_is_initialized:
+ *
+ * Returns TRUE if the library has been initialized.
+ *
+ * Returns: %TRUE or %FALSE
+ */
+gboolean
+mate_mixer_is_initialized (void)
+{
+ return mixer_initialized;
+}
+
+/**
* mate_mixer_deinit:
*
* Deinitializes the library. You should call this function when you do not need
@@ -104,13 +117,6 @@ mate_mixer_get_modules (void)
return (const GList *) mixer_modules;
}
-/* Internal function: return TRUE if the library has been initialized */
-gboolean
-mate_mixer_is_initialized (void)
-{
- return mixer_initialized;
-}
-
static void
mixer_load_modules (void)
{
diff --git a/libmatemixer/matemixer.h b/libmatemixer/matemixer.h
index a36c89c..f5c1a78 100644
--- a/libmatemixer/matemixer.h
+++ b/libmatemixer/matemixer.h
@@ -32,8 +32,9 @@
G_BEGIN_DECLS
-gboolean mate_mixer_init (void);
-void mate_mixer_deinit (void);
+gboolean mate_mixer_init (void);
+gboolean mate_mixer_is_initialized (void);
+void mate_mixer_deinit (void);
G_END_DECLS