EAPI Eo_Op ECORE_AUDIO_OBJ_IN_BASE_ID = EO_NOOP;
+EAPI const Eo_Event_Description _ECORE_AUDIO_EV_IN_LOOPED =
+ EO_EVENT_DESCRIPTION("in,looped", "Called when an input has looped.");
+EAPI const Eo_Event_Description _ECORE_AUDIO_EV_IN_STOPPED =
+ EO_EVENT_DESCRIPTION("in,stopped", "Called when an input has stopped playing.");
+
#define MY_CLASS ECORE_AUDIO_OBJ_IN_CLASS
#define MY_CLASS_NAME "ecore_audio_obj_in"
memset(buf, 0, len);
len_read = len;
} else {
- /* FIXME: Module read func */
- len_read = 0;
- /* FIXME: Signals for loop/EOF */
+ eo_do(eo_obj, ecore_audio_obj_in_read_internal(buf, len, &len_read));
+ if (len_read == 0) {
+ if (!obj->looped) {
+ eo_do(eo_obj, eo_event_callback_call(ECORE_AUDIO_EV_IN_STOPPED, NULL, NULL));
+ } else {
+ eo_do(eo_obj, ecore_audio_obj_in_seek(0, SEEK_SET, NULL));
+ eo_do(eo_obj, ecore_audio_obj_in_read_internal(buf, len, &len_read));
+ eo_do(eo_obj, eo_event_callback_call(ECORE_AUDIO_EV_IN_LOOPED, NULL, NULL));
+ }
+ }
+
}
if (ret)
EO_OP_DESCRIPTION(ECORE_AUDIO_OBJ_IN_SUB_ID_LOOPED_SET, S(looped)),
EO_OP_DESCRIPTION(ECORE_AUDIO_OBJ_IN_SUB_ID_LOOPED_GET, G(looped)),
EO_OP_DESCRIPTION(ECORE_AUDIO_OBJ_IN_SUB_ID_READ, "Read from the input"),
+ EO_OP_DESCRIPTION(ECORE_AUDIO_OBJ_IN_SUB_ID_READ_INTERNAL, "Internal implementation for the read"),
EO_OP_DESCRIPTION(ECORE_AUDIO_OBJ_IN_SUB_ID_SEEK, "Seek within the input"),
EO_OP_DESCRIPTION(ECORE_AUDIO_OBJ_IN_SUB_ID_OUTPUT_GET, G(output)),
EO_OP_DESCRIPTION(ECORE_AUDIO_OBJ_IN_SUB_ID_LENGTH_GET, G(length)),
EO_OP_DESCRIPTION_SENTINEL
};
+static const Eo_Event_Description *event_desc[] = {
+ ECORE_AUDIO_EV_IN_LOOPED,
+ ECORE_AUDIO_EV_IN_STOPPED,
+ NULL
+};
+
static const Eo_Class_Description class_desc = {
EO_VERSION,
MY_CLASS_NAME,
EO_CLASS_TYPE_REGULAR,
EO_CLASS_DESCRIPTION_OPS(&ECORE_AUDIO_OBJ_IN_BASE_ID, op_desc, ECORE_AUDIO_OBJ_IN_SUB_ID_LAST),
- NULL,
+ event_desc,
sizeof(Ecore_Audio_Input),
_class_constructor,
NULL
ECORE_AUDIO_OBJ_IN_SUB_ID_LOOPED_SET,
ECORE_AUDIO_OBJ_IN_SUB_ID_LOOPED_GET,
ECORE_AUDIO_OBJ_IN_SUB_ID_READ,
+ ECORE_AUDIO_OBJ_IN_SUB_ID_READ_INTERNAL,
ECORE_AUDIO_OBJ_IN_SUB_ID_SEEK,
ECORE_AUDIO_OBJ_IN_SUB_ID_OUTPUT_GET,
ECORE_AUDIO_OBJ_IN_SUB_ID_LENGTH_GET,
#define ecore_audio_obj_in_remaining_get(ret) ECORE_AUDIO_OBJ_IN_ID(ECORE_AUDIO_OBJ_IN_SUB_ID_REMAINING_GET), EO_TYPECHECK(double *, ret)
+extern const Eo_Event_Description _ECORE_AUDIO_EV_IN_LOOPED;
+#define ECORE_AUDIO_EV_IN_LOOPED (&(_ECORE_AUDIO_EV_IN_LOOPED))
+extern const Eo_Event_Description _ECORE_AUDIO_EV_IN_STOPPED;
+#define ECORE_AUDIO_EV_IN_STOPPED (&(_ECORE_AUDIO_EV_IN_STOPPED))
/**
* @}