forked from enlightenment/efl
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>
This commit is contained in:
parent
3b70c0bc83
commit
3fdc608da1
|
@ -43,7 +43,8 @@ lib/ecore_audio/ecore_audio_obj_out_sndfile.h
|
||||||
|
|
||||||
lib_ecore_audio_libecore_audio_la_SOURCES += \
|
lib_ecore_audio_libecore_audio_la_SOURCES += \
|
||||||
lib/ecore_audio/ecore_audio_obj_in_sndfile.c \
|
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
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
|
@ -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 ECORE_AUDIO_OBJ_IN_SNDFILE_CLASS
|
||||||
#define MY_CLASS_NAME "ecore_audio_obj_in_sndfile"
|
#define MY_CLASS_NAME "ecore_audio_obj_in_sndfile"
|
||||||
|
|
||||||
|
extern SF_VIRTUAL_IO vio_wrapper;
|
||||||
|
|
||||||
struct _Ecore_Audio_Sndfile
|
struct _Ecore_Audio_Sndfile
|
||||||
{
|
{
|
||||||
SNDFILE *handle;
|
SNDFILE *handle;
|
||||||
|
@ -27,78 +29,6 @@ struct _Ecore_Audio_Sndfile
|
||||||
|
|
||||||
typedef struct _Ecore_Audio_Sndfile 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)
|
static void _read(Eo *eo_obj EINA_UNUSED, void *_pd, va_list *list)
|
||||||
{
|
{
|
||||||
Ecore_Audio_Sndfile *obj = _pd;
|
Ecore_Audio_Sndfile *obj = _pd;
|
||||||
|
|
|
@ -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 ECORE_AUDIO_OBJ_OUT_SNDFILE_CLASS
|
||||||
#define MY_CLASS_NAME "ecore_audio_obj_out_sndfile"
|
#define MY_CLASS_NAME "ecore_audio_obj_out_sndfile"
|
||||||
|
|
||||||
|
extern SF_VIRTUAL_IO vio_wrapper;
|
||||||
|
|
||||||
struct _Ecore_Audio_Sndfile
|
struct _Ecore_Audio_Sndfile
|
||||||
{
|
{
|
||||||
SNDFILE *handle;
|
SNDFILE *handle;
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
Loading…
Reference in New Issue