diff options
author | Daniel Willmann <d.willmann@samsung.com> | 2013-04-26 18:17:03 +0100 |
---|---|---|
committer | Daniel Willmann <d.willmann@samsung.com> | 2013-04-26 18:49:24 +0100 |
commit | 3fdc608da16d5071a5b0f3a2b3be4a1e2f7124bc (patch) | |
tree | 8cf428c43479c6784d7291b2b04bd953b37a063f /src | |
parent | 3b70c0bc83552a26b89879aed42293de1e00b090 (diff) | |
download | efl-3fdc608da16d5071a5b0f3a2b3be4a1e2f7124bc.tar.gz |
ecore_audio: Move sndfile VIO into a file to access from in- and output
The VIO wrapper functions are needed from the sndfile inputs and outputs
so move them to a separate file and access from both.
Signed-off-by: Daniel Willmann <d.willmann@samsung.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/Makefile_Ecore_Audio.am | 3 | ||||
-rw-r--r-- | src/lib/ecore_audio/ecore_audio_obj_in_sndfile.c | 74 | ||||
-rw-r--r-- | src/lib/ecore_audio/ecore_audio_obj_out_sndfile.c | 2 | ||||
-rw-r--r-- | src/lib/ecore_audio/ecore_audio_sndfile_vio.c | 100 |
4 files changed, 106 insertions, 73 deletions
diff --git a/src/Makefile_Ecore_Audio.am b/src/Makefile_Ecore_Audio.am index b224906e28..35a414cc52 100644 --- a/src/Makefile_Ecore_Audio.am +++ b/src/Makefile_Ecore_Audio.am @@ -43,7 +43,8 @@ lib/ecore_audio/ecore_audio_obj_out_sndfile.h lib_ecore_audio_libecore_audio_la_SOURCES += \ lib/ecore_audio/ecore_audio_obj_in_sndfile.c \ -lib/ecore_audio/ecore_audio_obj_out_sndfile.c +lib/ecore_audio/ecore_audio_obj_out_sndfile.c \ +lib/ecore_audio/ecore_audio_sndfile_vio.c endif endif diff --git a/src/lib/ecore_audio/ecore_audio_obj_in_sndfile.c b/src/lib/ecore_audio/ecore_audio_obj_in_sndfile.c index eee40c41d2..33aff76398 100644 --- a/src/lib/ecore_audio/ecore_audio_obj_in_sndfile.c +++ b/src/lib/ecore_audio/ecore_audio_obj_in_sndfile.c @@ -19,6 +19,8 @@ EAPI Eo_Op ECORE_AUDIO_OBJ_IN_SNDFILE_BASE_ID = EO_NOOP; #define MY_CLASS ECORE_AUDIO_OBJ_IN_SNDFILE_CLASS #define MY_CLASS_NAME "ecore_audio_obj_in_sndfile" +extern SF_VIRTUAL_IO vio_wrapper; + struct _Ecore_Audio_Sndfile { SNDFILE *handle; @@ -27,78 +29,6 @@ struct _Ecore_Audio_Sndfile typedef struct _Ecore_Audio_Sndfile Ecore_Audio_Sndfile; -/* Virtual IO wrapper functions */ - -static sf_count_t _wrap_get_filelen(void *data) -{ - Eo *eo_obj = data; - Ecore_Audio_Object *ea_obj = eo_data_get(eo_obj, ECORE_AUDIO_OBJ_CLASS); - - if (!ea_obj->vio->vio) - goto error; - - if (ea_obj->vio->vio->get_length) - return ea_obj->vio->vio->get_length(ea_obj->vio->data, eo_obj); - -error: - return -1; -} - -static sf_count_t _wrap_seek(sf_count_t offset, int whence, void *data) -{ - Eo *eo_obj = data; - Ecore_Audio_Object *ea_obj = eo_data_get(eo_obj, ECORE_AUDIO_OBJ_CLASS); - - if (!ea_obj->vio->vio) - goto error; - - if (ea_obj->vio->vio->seek) - return ea_obj->vio->vio->seek(ea_obj->vio->data, eo_obj, offset, whence); - -error: - return -1; -} - -static sf_count_t _wrap_read(void *buffer, sf_count_t count, void *data) -{ - Eo *eo_obj = data; - Ecore_Audio_Object *ea_obj = eo_data_get(eo_obj, ECORE_AUDIO_OBJ_CLASS); - - if (!ea_obj->vio->vio) - goto error; - - if (ea_obj->vio->vio->read) - return ea_obj->vio->vio->read(ea_obj->vio->data, eo_obj, buffer, count); - -error: - return 0; -} - -static sf_count_t _wrap_tell(void *data) -{ - Eo *eo_obj = data; - Ecore_Audio_Object *ea_obj = eo_data_get(eo_obj, ECORE_AUDIO_OBJ_CLASS); - - if (!ea_obj->vio->vio) - goto error; - - if (ea_obj->vio->vio->tell) - return ea_obj->vio->vio->tell(ea_obj->vio->data, eo_obj); - -error: - return -1; -} - -static SF_VIRTUAL_IO vio_wrapper = { - .get_filelen = _wrap_get_filelen, - .seek = _wrap_seek, - .read = _wrap_read, - .write = NULL, - .tell = _wrap_tell, -}; - -/* End virtual IO wrapper functions */ - static void _read(Eo *eo_obj EINA_UNUSED, void *_pd, va_list *list) { Ecore_Audio_Sndfile *obj = _pd; diff --git a/src/lib/ecore_audio/ecore_audio_obj_out_sndfile.c b/src/lib/ecore_audio/ecore_audio_obj_out_sndfile.c index 68c2a3d84f..0d62283793 100644 --- a/src/lib/ecore_audio/ecore_audio_obj_out_sndfile.c +++ b/src/lib/ecore_audio/ecore_audio_obj_out_sndfile.c @@ -19,6 +19,8 @@ EAPI Eo_Op ECORE_AUDIO_OBJ_OUT_SNDFILE_BASE_ID = EO_NOOP; #define MY_CLASS ECORE_AUDIO_OBJ_OUT_SNDFILE_CLASS #define MY_CLASS_NAME "ecore_audio_obj_out_sndfile" +extern SF_VIRTUAL_IO vio_wrapper; + struct _Ecore_Audio_Sndfile { SNDFILE *handle; diff --git a/src/lib/ecore_audio/ecore_audio_sndfile_vio.c b/src/lib/ecore_audio/ecore_audio_sndfile_vio.c new file mode 100644 index 0000000000..06268069aa --- /dev/null +++ b/src/lib/ecore_audio/ecore_audio_sndfile_vio.c @@ -0,0 +1,100 @@ +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#ifdef HAVE_FEATURES_H +#include <features.h> +#endif + +#include <Eo.h> + +#include "ecore_audio_private.h" +#include <sndfile.h> + +/* Virtual IO wrapper functions */ + +static sf_count_t _wrap_get_filelen(void *data) +{ + Eo *eo_obj = data; + Ecore_Audio_Object *ea_obj = eo_data_get(eo_obj, ECORE_AUDIO_OBJ_CLASS); + + if (!ea_obj->vio->vio) + goto error; + + if (ea_obj->vio->vio->get_length) + return ea_obj->vio->vio->get_length(ea_obj->vio->data, eo_obj); + +error: + return -1; +} + +static sf_count_t _wrap_seek(sf_count_t offset, int whence, void *data) +{ + Eo *eo_obj = data; + Ecore_Audio_Object *ea_obj = eo_data_get(eo_obj, ECORE_AUDIO_OBJ_CLASS); + + if (!ea_obj->vio->vio) + goto error; + + if (ea_obj->vio->vio->seek) + return ea_obj->vio->vio->seek(ea_obj->vio->data, eo_obj, offset, whence); + +error: + return -1; +} + +static sf_count_t _wrap_read(void *buffer, sf_count_t count, void *data) +{ + Eo *eo_obj = data; + Ecore_Audio_Object *ea_obj = eo_data_get(eo_obj, ECORE_AUDIO_OBJ_CLASS); + + if (!ea_obj->vio->vio) + goto error; + + if (ea_obj->vio->vio->read) + return ea_obj->vio->vio->read(ea_obj->vio->data, eo_obj, buffer, count); + +error: + return 0; +} + +static sf_count_t _wrap_write(const void *buffer, sf_count_t count, void *data) +{ + Eo *eo_obj = data; + Ecore_Audio_Object *ea_obj = eo_data_get(eo_obj, ECORE_AUDIO_OBJ_CLASS); + + if (!ea_obj->vio->vio) + goto error; + + if (ea_obj->vio->vio->write) + return ea_obj->vio->vio->write(ea_obj->vio->data, eo_obj, buffer, count); + +error: + return 0; +} + +static sf_count_t _wrap_tell(void *data) +{ + Eo *eo_obj = data; + Ecore_Audio_Object *ea_obj = eo_data_get(eo_obj, ECORE_AUDIO_OBJ_CLASS); + + if (!ea_obj->vio->vio) + goto error; + + if (ea_obj->vio->vio->tell) + return ea_obj->vio->vio->tell(ea_obj->vio->data, eo_obj); + +error: + return -1; +} + +SF_VIRTUAL_IO vio_wrapper = { + .get_filelen = _wrap_get_filelen, + .seek = _wrap_seek, + .read = _wrap_read, + .write = _wrap_write, + .tell = _wrap_tell, +}; + +/* End virtual IO wrapper functions */ + |