blob: d84757fd0270b5b3055c3eba55f62875188275d0 [file] [log] [blame]
/*
The mediastreamer library aims at providing modular media processing and I/O
for linphone, but also for any telephony application.
Copyright (C) 2001 Simon MORLAT simon.morlat@linphone.org
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef SNDCARD_H
#define SNDCARD_H
#undef PACKAGE
#undef VERSION
#include <config.h>
#undef PACKAGE
#undef VERSION
#ifdef HAVE_GLIB
#include <glib.h>
#else
#include <uglib.h>
#endif
#ifdef __cplusplus
extern "C" {
#endif
/* the base class for all soundcards: SndCard */
struct _SndCard;
typedef int (*SndCardOpenFunc)(struct _SndCard*,int, int, int);
typedef void (*SndCardSetBlockingModeFunc)(struct _SndCard*, gboolean );
typedef void (*SndCardCloseFunc)(struct _SndCard*);
typedef gint (*SndCardIOFunc)(struct _SndCard*,char *,int);
typedef void (*SndCardDestroyFunc)(struct _SndCard*);
typedef gboolean (*SndCardPollFunc)(struct _SndCard*);
typedef gint (*SndCardMixerGetLevelFunc)(struct _SndCard*,gint);
typedef void (*SndCardMixerSetRecSourceFunc)(struct _SndCard*,gint);
typedef void (*SndCardMixerSetLevelFunc)(struct _SndCard*,gint ,gint);
typedef struct _MSFilter * (*SndCardCreateFilterFunc)(struct _SndCard *);
struct _SndCard
{
gchar *card_name; /* SB16 PCI for example */
gint index;
gint bsize;
gint rate;
gint stereo;
gint bits;
gint flags;
#define SND_CARD_FLAGS_OPENED 1
SndCardOpenFunc _probe;
SndCardOpenFunc _open_r;
SndCardOpenFunc _open_w;
SndCardSetBlockingModeFunc _set_blocking_mode;
SndCardPollFunc _can_read;
SndCardIOFunc _read;
SndCardIOFunc _write;
SndCardCloseFunc _close_r;
SndCardCloseFunc _close_w;
SndCardMixerGetLevelFunc _get_level;
SndCardMixerSetLevelFunc _set_level;
SndCardMixerSetRecSourceFunc _set_rec_source;
SndCardCreateFilterFunc _create_read_filter;
SndCardCreateFilterFunc _create_write_filter;
SndCardDestroyFunc _destroy;
};
typedef struct _SndCard SndCard;
void snd_card_init(SndCard *obj);
void snd_card_uninit(SndCard *obj);
gint snd_card_probe(SndCard *obj, int bits, int stereo, int rate);
int snd_card_open_r(SndCard *obj, int bits, int stereo, int rate);
int snd_card_open_w(SndCard *obj, int bits, int stereo, int rate);
int snd_card_get_bsize(SndCard *obj);
gboolean snd_card_can_read(SndCard *obj);
int snd_card_read(SndCard *obj,char *buffer,int size);
int snd_card_write(SndCard *obj,char *buffer,int size);
void snd_card_set_blocking_mode(SndCard *obj,gboolean yesno);
void snd_card_close_r(SndCard *obj);
void snd_card_close_w(SndCard *obj);
void snd_card_set_rec_source(SndCard *obj, int source); /* source='l' or 'm'*/
void snd_card_set_level(SndCard *obj, int way, int level);
gint snd_card_get_level(SndCard *obj,int way);
const gchar *snd_card_get_identifier(SndCard *obj);
struct _MSFilter * snd_card_create_read_filter(SndCard *sndcard);
struct _MSFilter * snd_card_create_write_filter(SndCard *sndcard);
#define SND_CARD_LEVEL_GENERAL 1
#define SND_CARD_LEVEL_INPUT 2
#define SND_CARD_LEVEL_OUTPUT 3
int snd_card_destroy(SndCard *obj);
#define SND_CARD(obj) ((SndCard*)(obj))
/* SndCardManager */
#define MAX_SND_CARDS 20
struct _SndCardManager
{
SndCard *cards[MAX_SND_CARDS];
};
typedef struct _SndCardManager SndCardManager;
void snd_card_manager_init(SndCardManager *manager);
SndCard * snd_card_manager_get_card(SndCardManager *manager,int index);
SndCard * snd_card_manager_get_card_with_string(SndCardManager *manager,const char *cardname,int *index);
extern SndCardManager *snd_card_manager;
#ifdef __cplusplus
}
#endif
#endif