value_count = info.get_property('value-count')
value = [0] * value_count
if info.get_property('elem-type') == ALSACtl.ElemType.BOOLEAN:
- value = elem_value.get_bool(value)
+ value = elem_value.get_bool()[:value_count]
elif info.get_property('elem-type') == ALSACtl.ElemType.INTEGER:
value = elem_value.get_int(value)
elif info.get_property('elem-type') == ALSACtl.ElemType.ENUMERATED:
"alsactl_elem_value_get_type";
"alsactl_elem_value_new";
"alsactl_elem_value_set_bool";
- "alsactl_elem_value_get_bool";
"alsactl_elem_value_set_int";
"alsactl_elem_value_get_int";
"alsactl_elem_value_set_enum";
"alsactl_elem_info_enumerated_get_type";
"alsactl_elem_info_enumerated_new";
+
+ "alsactl_elem_value_get_bool";
} ALSA_GOBJECT_0_2_0;
*/
typedef struct {
struct snd_ctl_elem_value value;
+ gboolean boolean[128];
} ALSACtlElemValuePrivate;
G_DEFINE_TYPE_WITH_PRIVATE(ALSACtlElemValue, alsactl_elem_value, G_TYPE_OBJECT)
/**
* alsactl_elem_value_get_bool:
* @self: A [class@ElemValue].
- * @values: (array length=value_count)(inout): The array for values of boolean type.
+ * @values: (array length=value_count) (out) (transfer none): The array for boolean values.
* @value_count: The number of values up to 128.
- *
- * Copy the array for values of boolean type from internal data.
+ *
+ * Refer to the array specific to [enum@ElemType].BOOLEAN element in internal storage.
*/
-void alsactl_elem_value_get_bool(ALSACtlElemValue *self, gboolean *const *values,
+void alsactl_elem_value_get_bool(ALSACtlElemValue *self, const gboolean **values,
gsize *value_count)
{
ALSACtlElemValuePrivate *priv;
g_return_if_fail(value_count != NULL);
value = &priv->value;
- *value_count = MIN(*value_count, G_N_ELEMENTS(value->value.integer.value));
- for (i = 0; i < *value_count; ++i)
- (*values)[i] = (gboolean)value->value.integer.value[i];
+ for (i = 0; i < G_N_ELEMENTS(value->value.integer.value); ++i)
+ priv->boolean[i] = value->value.integer.value[i] > 0;
+
+ *values = priv->boolean;
+ *value_count = G_N_ELEMENTS(value->value.integer.value);
}
/**
void alsactl_elem_value_set_bool(ALSACtlElemValue *self,
const gboolean *values, gsize value_count);
void alsactl_elem_value_get_bool(ALSACtlElemValue *self,
- gboolean *const *values, gsize *value_count);
+ const gboolean **values, gsize *value_count);
void alsactl_elem_value_set_int(ALSACtlElemValue *self, const gint32 *values,
gsize value_count);