diff options
Diffstat (limited to 'pjmedia/include/pjmedia-audiodev/audiodev.h')
-rw-r--r-- | pjmedia/include/pjmedia-audiodev/audiodev.h | 626 |
1 files changed, 4 insertions, 622 deletions
diff --git a/pjmedia/include/pjmedia-audiodev/audiodev.h b/pjmedia/include/pjmedia-audiodev/audiodev.h index b5e144f2..106a0328 100644 --- a/pjmedia/include/pjmedia-audiodev/audiodev.h +++ b/pjmedia/include/pjmedia-audiodev/audiodev.h @@ -22,478 +22,21 @@ /** * @file audiodev.h - * @brief Audio device API. + * @brief Audio subsystem API. */ -#include <pjmedia-audiodev/config.h> -#include <pjmedia-audiodev/errno.h> -#include <pjmedia/format.h> -#include <pjmedia/frame.h> -#include <pjmedia/types.h> #include <pj/pool.h> +#include <pjmedia/audiodev.h> PJ_BEGIN_DECL /** - * @defgroup s2_audio_device_reference Audio Device API Reference - * @ingroup audio_device_api + * @defgroup s2_audio_device_reference Audio Subsystem API Reference + * @ingroup audio_subsystem_api * @brief API Reference * @{ */ -/** - * Type for device index. - */ -typedef pj_int32_t pjmedia_aud_dev_index; - -/** - * Device index constants. - */ -enum -{ - /** - * Constant to denote default capture device - */ - PJMEDIA_AUD_DEFAULT_CAPTURE_DEV = -1, - - /** - * Constant to denote default playback device - */ - PJMEDIA_AUD_DEFAULT_PLAYBACK_DEV = -2, - - /** - * Constant to denote invalid device index. - */ - PJMEDIA_AUD_INVALID_DEV = -3 -}; - - -/** - * This enumeration identifies various audio device capabilities. These audio - * capabilities indicates what features are supported by the underlying - * audio device implementation. - * - * Applications get these capabilities in the #pjmedia_aud_dev_info structure. - * - * Application can also set the specific features/capabilities when opening - * the audio stream by setting the \a flags member of #pjmedia_aud_param - * structure. - * - * Once audio stream is running, application can also retrieve or set some - * specific audio capability, by using #pjmedia_aud_stream_get_cap() and - * #pjmedia_aud_stream_set_cap() and specifying the desired capability. The - * value of the capability is specified as pointer, and application needs to - * supply the pointer with the correct value, according to the documentation - * of each of the capability. - */ -typedef enum pjmedia_aud_dev_cap -{ - /** - * Support for audio formats other than PCM. The value of this capability - * is represented by #pjmedia_format structure. - */ - PJMEDIA_AUD_DEV_CAP_EXT_FORMAT = 1, - - /** - * Support for audio input latency control or query. The value of this - * capability is an unsigned integer containing milliseconds value of - * the latency. - */ - PJMEDIA_AUD_DEV_CAP_INPUT_LATENCY = 2, - - /** - * Support for audio output latency control or query. The value of this - * capability is an unsigned integer containing milliseconds value of - * the latency. - */ - PJMEDIA_AUD_DEV_CAP_OUTPUT_LATENCY = 4, - - /** - * Support for setting/retrieving the audio input device volume level. - * The value of this capability is an unsigned integer representing - * the input audio volume setting in percent. - */ - PJMEDIA_AUD_DEV_CAP_INPUT_VOLUME_SETTING = 8, - - /** - * Support for setting/retrieving the audio output device volume level. - * The value of this capability is an unsigned integer representing - * the output audio volume setting in percent. - */ - PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING = 16, - - /** - * Support for monitoring the current audio input signal volume. - * The value of this capability is an unsigned integer representing - * the audio volume in percent. - */ - PJMEDIA_AUD_DEV_CAP_INPUT_SIGNAL_METER = 32, - - /** - * Support for monitoring the current audio output signal volume. - * The value of this capability is an unsigned integer representing - * the audio volume in percent. - */ - PJMEDIA_AUD_DEV_CAP_OUTPUT_SIGNAL_METER = 64, - - /** - * Support for audio input routing. The value of this capability is an - * integer containing #pjmedia_aud_dev_route enumeration. - */ - PJMEDIA_AUD_DEV_CAP_INPUT_ROUTE = 128, - - /** - * Support for audio output routing (e.g. loudspeaker vs earpiece). The - * value of this capability is an integer containing #pjmedia_aud_dev_route - * enumeration. - */ - PJMEDIA_AUD_DEV_CAP_OUTPUT_ROUTE = 256, - - /** - * The audio device has echo cancellation feature. The value of this - * capability is a pj_bool_t containing boolean PJ_TRUE or PJ_FALSE. - */ - PJMEDIA_AUD_DEV_CAP_EC = 512, - - /** - * The audio device supports setting echo cancellation fail length. The - * value of this capability is an unsigned integer representing the - * echo tail in milliseconds. - */ - PJMEDIA_AUD_DEV_CAP_EC_TAIL = 1024, - - /** - * The audio device has voice activity detection feature. The value - * of this capability is a pj_bool_t containing boolean PJ_TRUE or - * PJ_FALSE. - */ - PJMEDIA_AUD_DEV_CAP_VAD = 2048, - - /** - * The audio device has comfort noise generation feature. The value - * of this capability is a pj_bool_t containing boolean PJ_TRUE or - * PJ_FALSE. - */ - PJMEDIA_AUD_DEV_CAP_CNG = 4096, - - /** - * The audio device has packet loss concealment feature. The value - * of this capability is a pj_bool_t containing boolean PJ_TRUE or - * PJ_FALSE. - */ - PJMEDIA_AUD_DEV_CAP_PLC = 8192, - - /** - * End of capability - */ - PJMEDIA_AUD_DEV_CAP_MAX = 16384 - -} pjmedia_aud_dev_cap; - - -/** - * This enumeration describes audio routing setting. - */ -typedef enum pjmedia_aud_dev_route -{ - /** - * Default route, it is the default audio route of the audio framework - * backend, as in opening audio device without specifying any route - * setting or with specifying neutral route setting. - */ - PJMEDIA_AUD_DEV_ROUTE_DEFAULT = 0, - - /** Route to loudspeaker */ - PJMEDIA_AUD_DEV_ROUTE_LOUDSPEAKER = 1, - - /** Route to earpiece */ - PJMEDIA_AUD_DEV_ROUTE_EARPIECE = 2, - - /** Route to paired Bluetooth device */ - PJMEDIA_AUD_DEV_ROUTE_BLUETOOTH = 4 - -} pjmedia_aud_dev_route; - - -/** - * Device information structure returned by #pjmedia_aud_dev_get_info(). - */ -typedef struct pjmedia_aud_dev_info -{ - /** - * The device name - */ - char name[PJMEDIA_AUD_DEV_INFO_NAME_LEN]; - - /** - * Maximum number of input channels supported by this device. If the - * value is zero, the device does not support input operation (i.e. - * it is a playback only device). - */ - unsigned input_count; - - /** - * Maximum number of output channels supported by this device. If the - * value is zero, the device does not support output operation (i.e. - * it is an input only device). - */ - unsigned output_count; - - /** - * Default sampling rate. - */ - unsigned default_samples_per_sec; - - /** - * The underlying driver name - */ - char driver[32]; - - /** - * Device capabilities, as bitmask combination of #pjmedia_aud_dev_cap. - */ - unsigned caps; - - /** - * Supported audio device routes, as bitmask combination of - * #pjmedia_aud_dev_route. The value may be zero if the device - * does not support audio routing. - */ - unsigned routes; - - /** - * Number of audio formats supported by this device. The value may be - * zero if the device does not support non-PCM format. - */ - unsigned ext_fmt_cnt; - - /** - * Array of supported extended audio formats - */ - pjmedia_format ext_fmt[8]; - - -} pjmedia_aud_dev_info; - - -/** - * This callback is called by player stream when it needs additional data - * to be played by the device. Application must fill in the whole of output - * buffer with audio samples. - * - * The frame argument contains the following values: - * - timestamp Playback timestamp, in samples. - * - buf Buffer to be filled out by application. - * - size The size requested in bytes, which will be equal to - * the size of one whole packet. - * - * @param user_data User data associated with the stream. - * @param frame Audio frame, which buffer is to be filled in by - * the application. - * - * @return Returning non-PJ_SUCCESS will cause the audio stream - * to stop - */ -typedef pj_status_t (*pjmedia_aud_play_cb)(void *user_data, - pjmedia_frame *frame); - -/** - * This callback is called by recorder stream when it has captured the whole - * packet worth of audio samples. - * - * @param user_data User data associated with the stream. - * @param frame Captured frame. - * - * @return Returning non-PJ_SUCCESS will cause the audio stream - * to stop - */ -typedef pj_status_t (*pjmedia_aud_rec_cb)(void *user_data, - pjmedia_frame *frame); - -/** - * This structure specifies the parameters to open the audio stream. - */ -typedef struct pjmedia_aud_param -{ - /** - * The audio direction. This setting is mandatory. - */ - pjmedia_dir dir; - - /** - * The audio recorder device ID. This setting is mandatory if the audio - * direction includes input/capture direction. - */ - pjmedia_aud_dev_index rec_id; - - /** - * The audio playback device ID. This setting is mandatory if the audio - * direction includes output/playback direction. - */ - pjmedia_aud_dev_index play_id; - - /** - * Clock rate/sampling rate. This setting is mandatory. - */ - unsigned clock_rate; - - /** - * Number of channels. This setting is mandatory. - */ - unsigned channel_count; - - /** - * Number of samples per frame. This setting is mandatory. - */ - unsigned samples_per_frame; - - /** - * Number of bits per sample. This setting is mandatory. - */ - unsigned bits_per_sample; - - /** - * This flags specifies which of the optional settings are valid in this - * structure. The flags is bitmask combination of pjmedia_aud_dev_cap. - */ - unsigned flags; - - /** - * Set the audio format. This setting is optional, and will only be used - * if PJMEDIA_AUD_DEV_CAP_EXT_FORMAT is set in the flags. - */ - pjmedia_format ext_fmt; - - /** - * Input latency, in milliseconds. This setting is optional, and will - * only be used if PJMEDIA_AUD_DEV_CAP_INPUT_LATENCY is set in the flags. - */ - unsigned input_latency_ms; - - /** - * Input latency, in milliseconds. This setting is optional, and will - * only be used if PJMEDIA_AUD_DEV_CAP_OUTPUT_LATENCY is set in the flags. - */ - unsigned output_latency_ms; - - /** - * Input volume setting, in percent. This setting is optional, and will - * only be used if PJMEDIA_AUD_DEV_CAP_INPUT_VOLUME_SETTING is set in - * the flags. - */ - unsigned input_vol; - - /** - * Output volume setting, in percent. This setting is optional, and will - * only be used if PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING is set in - * the flags. - */ - unsigned output_vol; - - /** - * Set the audio input route. This setting is optional, and will only be - * used if PJMEDIA_AUD_DEV_CAP_INPUT_ROUTE is set in the flags. - */ - pjmedia_aud_dev_route input_route; - - /** - * Set the audio output route. This setting is optional, and will only be - * used if PJMEDIA_AUD_DEV_CAP_OUTPUT_ROUTE is set in the flags. - */ - pjmedia_aud_dev_route output_route; - - /** - * Enable/disable echo canceller, if the device supports it. This setting - * is optional, and will only be used if PJMEDIA_AUD_DEV_CAP_EC is set in - * the flags. - */ - pj_bool_t ec_enabled; - - /** - * Set echo canceller tail length in milliseconds, if the device supports - * it. This setting is optional, and will only be used if - * PJMEDIA_AUD_DEV_CAP_EC_TAIL is set in the flags. - */ - unsigned ec_tail_ms; - - /** - * Enable/disable PLC. This setting is optional, and will only be used - * if PJMEDIA_AUD_DEV_CAP_PLC is set in the flags. - */ - pj_bool_t plc_enabled; - - /** - * Enable/disable CNG. This setting is optional, and will only be used - * if PJMEDIA_AUD_DEV_CAP_CNG is set in the flags. - */ - pj_bool_t cng_enabled; - - /** - * Enable/disable VAD. This setting is optional, and will only be used - * if PJMEDIA_AUD_DEV_CAP_VAD is set in the flags. - */ - pj_bool_t vad_enabled; - -} pjmedia_aud_param; - - -/** Forward declaration for pjmedia_aud_stream */ -typedef struct pjmedia_aud_stream pjmedia_aud_stream; - -/** Forward declaration for audio device factory */ -typedef struct pjmedia_aud_dev_factory pjmedia_aud_dev_factory; - -/* typedef for factory creation function */ -typedef pjmedia_aud_dev_factory* -(*pjmedia_aud_dev_factory_create_func_ptr)(pj_pool_factory*); - - -/** - * Get string info for the specified capability. - * - * @param cap The capability ID. - * @param p_desc Optional pointer which will be filled with longer - * description about the capability. - * - * @return Capability name. - */ -PJ_DECL(const char*) pjmedia_aud_dev_cap_name(pjmedia_aud_dev_cap cap, - const char **p_desc); - - -/** - * Set a capability field value in #pjmedia_aud_param structure. This will - * also set the flags field for the specified capability in the structure. - * - * @param param The structure. - * @param cap The audio capability which value is to be set. - * @param pval Pointer to value. Please see the type of value to - * be supplied in the pjmedia_aud_dev_cap documentation. - * - * @return PJ_SUCCESS on successful operation or the appropriate - * error code. - */ -PJ_DECL(pj_status_t) pjmedia_aud_param_set_cap(pjmedia_aud_param *param, - pjmedia_aud_dev_cap cap, - const void *pval); - - -/** - * Get a capability field value from #pjmedia_aud_param structure. This - * function will return PJMEDIA_EAUD_INVCAP error if the flag for that - * capability is not set in the flags field in the structure. - * - * @param param The structure. - * @param cap The audio capability which value is to be retrieved. - * @param pval Pointer to value. Please see the type of value to - * be supplied in the pjmedia_aud_dev_cap documentation. - * - * @return PJ_SUCCESS on successful operation or the appropriate - * error code. - */ -PJ_DECL(pj_status_t) pjmedia_aud_param_get_cap(const pjmedia_aud_param *param, - pjmedia_aud_dev_cap cap, - void *pval); /** * Initialize the audio subsystem. This will register all supported audio @@ -558,167 +101,6 @@ pjmedia_aud_unregister_factory(pjmedia_aud_dev_factory_create_func_ptr adf); /** - * Refresh the list of sound devices installed in the system. This function - * will only refresh the list of audio device so all active audio streams will - * be unaffected. After refreshing the device list, application MUST make sure - * to update all index references to audio devices (i.e. all variables of type - * pjmedia_aud_dev_index) before calling any function that accepts audio device - * index as its parameter. - * - * @return PJ_SUCCESS on successful operation or the appropriate - * error code. - */ -PJ_DECL(pj_status_t) pjmedia_aud_dev_refresh(void); - - -/** - * Get the number of sound devices installed in the system. - * - * @return The number of sound devices installed in the system. - */ -PJ_DECL(unsigned) pjmedia_aud_dev_count(void); - - -/** - * Get device information. - * - * @param id The audio device ID. - * @param info The device information which will be filled in by this - * function once it returns successfully. - * - * @return PJ_SUCCESS on successful operation or the appropriate - * error code. - */ -PJ_DECL(pj_status_t) pjmedia_aud_dev_get_info(pjmedia_aud_dev_index id, - pjmedia_aud_dev_info *info); - - -/** - * Lookup device index based on the driver and device name. - * - * @param drv_name The driver name. - * @param dev_name The device name. - * @param id Pointer to store the returned device ID. - * - * @return PJ_SUCCESS if the device can be found. - */ -PJ_DECL(pj_status_t) pjmedia_aud_dev_lookup(const char *drv_name, - const char *dev_name, - pjmedia_aud_dev_index *id); - - -/** - * Initialize the audio device parameters with default values for the - * specified device. - * - * @param id The audio device ID. - * @param param The audio device parameters which will be initialized - * by this function once it returns successfully. - * - * @return PJ_SUCCESS on successful operation or the appropriate - * error code. - */ -PJ_DECL(pj_status_t) pjmedia_aud_dev_default_param(pjmedia_aud_dev_index id, - pjmedia_aud_param *param); - - -/** - * Open audio stream object using the specified parameters. - * - * @param param Sound device parameters to be used for the stream. - * @param rec_cb Callback to be called on every input frame captured. - * @param play_cb Callback to be called everytime the sound device needs - * audio frames to be played back. - * @param user_data Arbitrary user data, which will be given back in the - * callbacks. - * @param p_strm Pointer to receive the audio stream. - * - * @return PJ_SUCCESS on successful operation or the appropriate - * error code. - */ -PJ_DECL(pj_status_t) pjmedia_aud_stream_create(const pjmedia_aud_param *param, - pjmedia_aud_rec_cb rec_cb, - pjmedia_aud_play_cb play_cb, - void *user_data, - pjmedia_aud_stream **p_strm); - -/** - * Get the running parameters for the specified audio stream. - * - * @param strm The audio stream. - * @param param Audio stream parameters to be filled in by this - * function once it returns successfully. - * - * @return PJ_SUCCESS on successful operation or the appropriate - * error code. - */ -PJ_DECL(pj_status_t) pjmedia_aud_stream_get_param(pjmedia_aud_stream *strm, - pjmedia_aud_param *param); - -/** - * Get the value of a specific capability of the audio stream. - * - * @param strm The audio stream. - * @param cap The audio capability which value is to be retrieved. - * @param value Pointer to value to be filled in by this function - * once it returns successfully. Please see the type - * of value to be supplied in the pjmedia_aud_dev_cap - * documentation. - * - * @return PJ_SUCCESS on successful operation or the appropriate - * error code. - */ -PJ_DECL(pj_status_t) pjmedia_aud_stream_get_cap(pjmedia_aud_stream *strm, - pjmedia_aud_dev_cap cap, - void *value); - -/** - * Set the value of a specific capability of the audio stream. - * - * @param strm The audio stream. - * @param cap The audio capability which value is to be set. - * @param value Pointer to value. Please see the type of value to - * be supplied in the pjmedia_aud_dev_cap documentation. - * - * @return PJ_SUCCESS on successful operation or the appropriate - * error code. - */ -PJ_DECL(pj_status_t) pjmedia_aud_stream_set_cap(pjmedia_aud_stream *strm, - pjmedia_aud_dev_cap cap, - const void *value); - -/** - * Start the stream. - * - * @param strm The audio stream. - * - * @return PJ_SUCCESS on successful operation or the appropriate - * error code. - */ -PJ_DECL(pj_status_t) pjmedia_aud_stream_start(pjmedia_aud_stream *strm); - -/** - * Stop the stream. - * - * @param strm The audio stream. - * - * @return PJ_SUCCESS on successful operation or the appropriate - * error code. - */ -PJ_DECL(pj_status_t) pjmedia_aud_stream_stop(pjmedia_aud_stream *strm); - -/** - * Destroy the stream. - * - * @param strm The audio stream. - * - * @return PJ_SUCCESS on successful operation or the appropriate - * error code. - */ -PJ_DECL(pj_status_t) pjmedia_aud_stream_destroy(pjmedia_aud_stream *strm); - - -/** * @} */ |