void alsaseq_event_data_queue_get_tstamp_param(ALSASeqEventDataQueue *self,
const ALSASeqTstamp **tstamp)
{
- *tstamp = &self->param.time;
+ // MEMO: I wish the structure has no padding in its head in all of supported
+ // ABIs.
+ *tstamp = (const ALSASeqTstamp *)&self->param.time;
}
/**
void alsaseq_event_data_queue_set_tstamp_param(ALSASeqEventDataQueue *self,
const ALSASeqTstamp *tstamp)
{
- self->param.time = *tstamp;
+ self->param.time = tstamp->tstamp;
}
/**
{
ALSASeqTstamp *data = g_value_get_boxed(val);
if (data != NULL)
- ev->data.time = *data;
+ ev->data.time = data->tstamp;
break;
}
default:
g_value_set_static_boxed(val, &ev->data.connect);
break;
case SEQ_EVENT_FIXED_PROP_TSTAMP_DATA:
- g_value_set_static_boxed(val, &ev->data.time);
+ // MEMO: I wish the structure has no padding in its head in all of
+ // supported ABIs.
+ g_value_set_static_boxed(val, (ALSASeqTstamp *)&ev->data.time);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, id, spec);
{
ALSASeqTstamp *tstamp = g_value_get_boxed(val);
if (tstamp != NULL)
- ev->time = *tstamp;
+ ev->time = tstamp->tstamp;
break;
}
case SEQ_EVENT_PROP_SRC_ADDR:
g_value_set_uchar(val, ev->queue);
break;
case SEQ_EVENT_PROP_TSTAMP:
- g_value_set_static_boxed(val, &ev->time);
+ // MEMO: I wish the structure has no padding in its head in all of
+ // supported ABIs.
+ g_value_set_static_boxed(val, (ALSASeqTstamp *)&ev->time);
break;
case SEQ_EVENT_PROP_SRC_ADDR:
g_value_set_static_boxed(val, &ev->source);
*/
void alsaseq_tstamp_get_tick_time(ALSASeqTstamp *self, guint32 *tick_time)
{
- *tick_time = self->tick;
+ *tick_time = self->tstamp.tick;
}
/**
*/
void alsaseq_tstamp_set_tick_time(ALSASeqTstamp *self, const guint32 tick_time)
{
- self->tick = tick_time;
+ self->tstamp.tick = tick_time;
}
/**
{
// MEMO: I wish 32-bit storage size is aligned to 32 bit offset in all of
// supported ABIs.
- *tstamp = (guint32 *)&self->time;
+ *tstamp = (guint32 *)&self->tstamp.time;
}
*/
void alsaseq_tstamp_set_real_time(ALSASeqTstamp *self, const guint32 tstamp[2])
{
- self->time.tv_sec = tstamp[0];
- self->time.tv_nsec = tstamp[1];
+ self->tstamp.time.tv_sec = tstamp[0];
+ self->tstamp.time.tv_nsec = tstamp[1];
}
#define ALSASEQ_TYPE_TSTAMP (alsaseq_tstamp_get_type())
-typedef union snd_seq_timestamp ALSASeqTstamp;
+// The usage of union is inconvenient to some programming languages which has
+// no support to handle it. Let's use wrapper structure.
+typedef struct {
+ union snd_seq_timestamp time;
+} ALSASeqTstamp;
GType alsaseq_tstamp_get_type() G_GNUC_CONST;