/* * Copyright (C) 2008-2011 Teluu Inc. (http://www.teluu.com) * Copyright (C) 2003-2008 Benny Prijono * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef __AUDIODEV_IMP_H__ #define __AUDIODEV_IMP_H__ #include /** * @defgroup s8_audio_device_implementors_api Audio Device Implementors API * @ingroup audio_device_api * @brief API for audio device implementors * @{ */ /** * Sound device factory operations. */ typedef struct pjmedia_aud_dev_factory_op { /** * Initialize the audio device factory. * * @param f The audio device factory. */ pj_status_t (*init)(pjmedia_aud_dev_factory *f); /** * Close this audio device factory and release all resources back to the * operating system. * * @param f The audio device factory. */ pj_status_t (*destroy)(pjmedia_aud_dev_factory *f); /** * Get the number of audio devices installed in the system. * * @param f The audio device factory. */ unsigned (*get_dev_count)(pjmedia_aud_dev_factory *f); /** * Get the audio device information and capabilities. * * @param f The audio device factory. * @param index Device index. * @param info The audio device information structure which will be * initialized by this function once it returns * successfully. */ pj_status_t (*get_dev_info)(pjmedia_aud_dev_factory *f, unsigned index, pjmedia_aud_dev_info *info); /** * Initialize the specified audio device parameter with the default * values for the specified device. * * @param f The audio device factory. * @param index Device index. * @param param The audio device parameter. */ pj_status_t (*default_param)(pjmedia_aud_dev_factory *f, unsigned index, pjmedia_aud_param *param); /** * Open the audio device and create audio stream. See * #pjmedia_aud_stream_create() */ pj_status_t (*create_stream)(pjmedia_aud_dev_factory *f, const pjmedia_aud_param *param, pjmedia_aud_rec_cb rec_cb, pjmedia_aud_play_cb play_cb, void *user_data, pjmedia_aud_stream **p_aud_strm); /** * Refresh the list of audio devices installed in the system. * * @param f The audio device factory. */ pj_status_t (*refresh)(pjmedia_aud_dev_factory *f); } pjmedia_aud_dev_factory_op; /** * This structure describes an audio device factory. */ struct pjmedia_aud_dev_factory { /** Internal data to be initialized by audio subsystem. */ struct { /** Driver index */ unsigned drv_idx; } sys; /** Operations */ pjmedia_aud_dev_factory_op *op; }; /** * Sound stream operations. */ typedef struct pjmedia_aud_stream_op { /** * See #pjmedia_aud_stream_get_param() */ pj_status_t (*get_param)(pjmedia_aud_stream *strm, pjmedia_aud_param *param); /** * See #pjmedia_aud_stream_get_cap() */ pj_status_t (*get_cap)(pjmedia_aud_stream *strm, pjmedia_aud_dev_cap cap, void *value); /** * See #pjmedia_aud_stream_set_cap() */ pj_status_t (*set_cap)(pjmedia_aud_stream *strm, pjmedia_aud_dev_cap cap, const void *value); /** * See #pjmedia_aud_stream_start() */ pj_status_t (*start)(pjmedia_aud_stream *strm); /** * See #pjmedia_aud_stream_stop(). */ pj_status_t (*stop)(pjmedia_aud_stream *strm); /** * See #pjmedia_aud_stream_destroy(). */ pj_status_t (*destroy)(pjmedia_aud_stream *strm); } pjmedia_aud_stream_op; /** * This structure describes the audio device stream. */ struct pjmedia_aud_stream { /** Internal data to be initialized by audio subsystem */ struct { /** Driver index */ unsigned drv_idx; } sys; /** Operations */ pjmedia_aud_stream_op *op; }; /** * @} */ #endif /* __AUDIODEV_IMP_H__ */