diff --git a/src/lib/ecore_audio/Ecore_Audio.h b/src/lib/ecore_audio/Ecore_Audio.h index 8b7427aac0..ddf34a0497 100644 --- a/src/lib/ecore_audio/Ecore_Audio.h +++ b/src/lib/ecore_audio/Ecore_Audio.h @@ -48,8 +48,21 @@ enum _Ecore_Audio_Type { ECORE_AUDIO_MODULE_LAST, /**< Sentinel */ }; +enum _Ecore_Audio_Format { + ECORE_AUDIO_FORMAT_AUTO, + ECORE_AUDIO_FORMAT_RAW, + ECORE_AUDIO_FORMAT_WAV, + ECORE_AUDIO_FORMAT_OGG, + ECORE_AUDIO_FORMAT_FLAC, + ECORE_AUDIO_FORMAT_MP3, + ECORE_AUDIO_FORMAT_LAST +}; + typedef enum _Ecore_Audio_Type Ecore_Audio_Type; +typedef enum _Ecore_Audio_Format Ecore_Audio_Format; +/**< The format of the audio data */ + /** @since 1.8 */ typedef struct _Ecore_Audio_Module Ecore_Audio_Module; @@ -59,10 +72,6 @@ typedef struct _Ecore_Audio_Module Ecore_Audio_Module; */ typedef struct _Ecore_Audio_Object Ecore_Audio_Object; /**< The audio object */ - /** @since 1.8 - */ -typedef struct _Ecore_Audio_Format Ecore_Audio_Format; -/**< The format of the audio data */ typedef int (*Ecore_Audio_Read_Callback)(void *user_data, void *data, int len); diff --git a/src/lib/ecore_audio/ecore_audio_obj.c b/src/lib/ecore_audio/ecore_audio_obj.c index fe1d2617de..aa78c9ccbf 100644 --- a/src/lib/ecore_audio/ecore_audio_obj.c +++ b/src/lib/ecore_audio/ecore_audio_obj.c @@ -77,6 +77,25 @@ static void _volume_get(Eo *eo_obj, void *_pd, va_list *list) *ret = obj->volume; } +static void _format_set(Eo *eo_obj, void *_pd, va_list *list) +{ + Ecore_Audio_Object *obj = _pd; + + double volume = va_arg(*list, double); + + obj->volume = volume; +} + +static void _format_get(Eo *eo_obj, void *_pd, va_list *list) +{ + const Ecore_Audio_Object *obj = _pd; + + double *ret = va_arg(*list, double *); + + if (ret) + *ret = obj->volume; +} + static void _constructor(Eo *eo_obj, void *_pd, va_list *list EINA_UNUSED) { Ecore_Audio_Object *obj = _pd; @@ -116,6 +135,8 @@ static const Eo_Op_Description op_desc[] = { EO_OP_DESCRIPTION(ECORE_AUDIO_OBJ_SUB_ID_VOLUME_GET, "Gets the volume of the object."), EO_OP_DESCRIPTION(ECORE_AUDIO_OBJ_SUB_ID_SOURCE_SET, "Sets the source of the object."), EO_OP_DESCRIPTION(ECORE_AUDIO_OBJ_SUB_ID_SOURCE_GET, "Gets the source of the object."), + EO_OP_DESCRIPTION(ECORE_AUDIO_OBJ_SUB_ID_FORMAT_SET, "Sets the format of the object."), + EO_OP_DESCRIPTION(ECORE_AUDIO_OBJ_SUB_ID_FORMAT_GET, "Gets the format of the object."), EO_OP_DESCRIPTION_SENTINEL }; diff --git a/src/lib/ecore_audio/ecore_audio_obj.h b/src/lib/ecore_audio/ecore_audio_obj.h index 26606b3aaa..e806e8afd7 100644 --- a/src/lib/ecore_audio/ecore_audio_obj.h +++ b/src/lib/ecore_audio/ecore_audio_obj.h @@ -49,6 +49,8 @@ enum Ecore_Audio_Obj_Sub_Ids ECORE_AUDIO_OBJ_SUB_ID_VOLUME_GET, ECORE_AUDIO_OBJ_SUB_ID_SOURCE_SET, ECORE_AUDIO_OBJ_SUB_ID_SOURCE_GET, + ECORE_AUDIO_OBJ_SUB_ID_FORMAT_SET, + ECORE_AUDIO_OBJ_SUB_ID_FORMAT_GET, ECORE_AUDIO_OBJ_SUB_ID_LAST }; @@ -86,6 +88,10 @@ enum Ecore_Audio_Obj_Sub_Ids #define ecore_audio_obj_source_get(source) ECORE_AUDIO_OBJ_ID(ECORE_AUDIO_OBJ_SUB_ID_SOURCE_GET), EO_TYPECHECK(const char **, source) +#define ecore_audio_obj_format_set(format) ECORE_AUDIO_OBJ_ID(ECORE_AUDIO_OBJ_SUB_ID_FORMAT_SET), EO_TYPECHECK(Ecore_Audio_Format, format) + +#define ecore_audio_obj_format_get(ret) ECORE_AUDIO_OBJ_ID(ECORE_AUDIO_OBJ_SUB_ID_FORMAT_GET), EO_TYPECHECK(Ecore_Audio_Format *, ret) + /** * @} */ diff --git a/src/lib/ecore_audio/ecore_audio_obj_in.c b/src/lib/ecore_audio/ecore_audio_obj_in.c index 3cab5ee612..bd3a08849c 100644 --- a/src/lib/ecore_audio/ecore_audio_obj_in.c +++ b/src/lib/ecore_audio/ecore_audio_obj_in.c @@ -90,6 +90,25 @@ static void _channels_get(Eo *eo_obj, void *_pd, va_list *list) *channels = obj->channels; } +static void _looped_set(Eo *eo_obj, void *_pd, va_list *list) +{ + Ecore_Audio_Input *obj = _pd; + + Eina_Bool looped = va_arg(*list, int); + + obj->looped = looped; +} + +static void _looped_get(Eo *eo_obj, void *_pd, va_list *list) +{ + const Ecore_Audio_Input *obj = _pd; + + Eina_Bool *ret = va_arg(*list, Eina_Bool *); + + if (ret) + *ret = obj->looped; +} + static void _read(Eo *eo_obj, void *_pd, va_list *list) { const Ecore_Audio_Input *obj = _pd; @@ -112,6 +131,17 @@ static void _read(Eo *eo_obj, void *_pd, va_list *list) *ret = len_read; } +static void _length_get(Eo *eo_obj, void *_pd, va_list *list) +{ + const Ecore_Audio_Input *obj = _pd; + + double *ret = va_arg(*list, double *); + + if (ret) { + *ret = obj->length; + } +} + static void _remaining_get(Eo *eo_obj, void *_pd, va_list *list) { const Ecore_Audio_Input *obj = _pd; @@ -119,7 +149,7 @@ static void _remaining_get(Eo *eo_obj, void *_pd, va_list *list) double *ret = va_arg(*list, double *); if (ret) { - eo_do(eo_obj, ecore_audio_obj_in_seek(SEEK_CUR, 0, ret)); + eo_do(eo_obj, ecore_audio_obj_in_seek(0, SEEK_CUR, ret)); *ret = obj->length - *ret; } } @@ -172,6 +202,7 @@ static void _class_constructor(Eo_Class *klass) EO_OP_FUNC(ECORE_AUDIO_OBJ_IN_ID(ECORE_AUDIO_OBJ_IN_SUB_ID_READ), _read), EO_OP_FUNC(ECORE_AUDIO_OBJ_IN_ID(ECORE_AUDIO_OBJ_IN_SUB_ID_SEEK), NULL), EO_OP_FUNC(ECORE_AUDIO_OBJ_IN_ID(ECORE_AUDIO_OBJ_IN_SUB_ID_OUTPUT_GET), _output_get), + EO_OP_FUNC(ECORE_AUDIO_OBJ_IN_ID(ECORE_AUDIO_OBJ_IN_SUB_ID_LENGTH_GET), _length_get), EO_OP_FUNC(ECORE_AUDIO_OBJ_IN_ID(ECORE_AUDIO_OBJ_IN_SUB_ID_REMAINING_GET), _remaining_get), EO_OP_FUNC_SENTINEL @@ -192,9 +223,12 @@ static const Eo_Op_Description op_desc[] = { EO_OP_DESCRIPTION(ECORE_AUDIO_OBJ_IN_SUB_ID_CHANNELS_GET, G(channels)), EO_OP_DESCRIPTION(ECORE_AUDIO_OBJ_IN_SUB_ID_PRELOADED_SET, S(preloaded)), EO_OP_DESCRIPTION(ECORE_AUDIO_OBJ_IN_SUB_ID_PRELOADED_GET, G(preloaded)), + 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_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(ECORE_AUDIO_OBJ_IN_SUB_ID_REMAINING_GET, G(remaining)), EO_OP_DESCRIPTION_SENTINEL }; diff --git a/src/lib/ecore_audio/ecore_audio_obj_in.h b/src/lib/ecore_audio/ecore_audio_obj_in.h index 465f7bf6a4..57832b8a7c 100644 --- a/src/lib/ecore_audio/ecore_audio_obj_in.h +++ b/src/lib/ecore_audio/ecore_audio_obj_in.h @@ -49,9 +49,12 @@ enum Ecore_Audio_Obj_In_Sub_Ids ECORE_AUDIO_OBJ_IN_SUB_ID_CHANNELS_GET, ECORE_AUDIO_OBJ_IN_SUB_ID_PRELOADED_SET, ECORE_AUDIO_OBJ_IN_SUB_ID_PRELOADED_GET, + 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_SEEK, ECORE_AUDIO_OBJ_IN_SUB_ID_OUTPUT_GET, + ECORE_AUDIO_OBJ_IN_SUB_ID_LENGTH_GET, ECORE_AUDIO_OBJ_IN_SUB_ID_REMAINING_GET, ECORE_AUDIO_OBJ_IN_SUB_ID_LAST }; @@ -91,12 +94,18 @@ enum Ecore_Audio_Obj_In_Sub_Ids #define ecore_audio_obj_in_preloaded_get(preloaded) ECORE_AUDIO_OBJ_IN_ID(ECORE_AUDIO_OBJ_IN_SUB_ID_PRELOADED_GET), EO_TYPECHECK(Eina_Bool *, preloaded) +#define ecore_audio_obj_in_looped_set(looped) ECORE_AUDIO_OBJ_IN_ID(ECORE_AUDIO_OBJ_IN_SUB_ID_LOOPED_SET), EO_TYPECHECK(Eina_Bool, looped) + +#define ecore_audio_obj_in_looped_get(preloaded) ECORE_AUDIO_OBJ_IN_ID(ECORE_AUDIO_OBJ_IN_SUB_ID_LOOPED_GET), EO_TYPECHECK(Eina_Bool *, looped) + #define ecore_audio_obj_in_read(buf, len, ret) ECORE_AUDIO_OBJ_IN_ID(ECORE_AUDIO_OBJ_IN_SUB_ID_READ), EO_TYPECHECK(char *, buf), EO_TYPECHECK(int, len), EO_TYPECHECK(int *, ret) -#define ecore_audio_obj_in_seek(mode, offs, ret) ECORE_AUDIO_OBJ_IN_ID(ECORE_AUDIO_OBJ_IN_SUB_ID_SEEK), EO_TYPECHECK(int, mode), EO_TYPECHECK(double, offs), EO_TYPECHECK(double *, ret) +#define ecore_audio_obj_in_seek(offs, mode, ret) ECORE_AUDIO_OBJ_IN_ID(ECORE_AUDIO_OBJ_IN_SUB_ID_SEEK), EO_TYPECHECK(double, offs), EO_TYPECHECK(int, mode), EO_TYPECHECK(double *, ret) #define ecore_audio_obj_in_output_get(ret) ECORE_AUDIO_OBJ_IN_ID(ECORE_AUDIO_OBJ_IN_SUB_ID_OUTPUT_GET), EO_TYPECHECK(Eo **, ret) +#define ecore_audio_obj_in_length_get(ret) ECORE_AUDIO_OBJ_IN_ID(ECORE_AUDIO_OBJ_IN_SUB_ID_LENGTH_GET), EO_TYPECHECK(double *, ret) + #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) diff --git a/src/lib/ecore_audio/ecore_audio_private.h b/src/lib/ecore_audio/ecore_audio_private.h index 67477a72be..3d6999f5bc 100644 --- a/src/lib/ecore_audio/ecore_audio_private.h +++ b/src/lib/ecore_audio/ecore_audio_private.h @@ -101,6 +101,7 @@ struct _Ecore_Audio_Object Eina_Bool paused; double volume; + Ecore_Audio_Format format; };