123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203 |
- #ifndef __PJMEDIA_STEREO_H__
- #define __PJMEDIA_STEREO_H__
- #include <pjmedia/errno.h>
- #include <pjmedia/port.h>
- #include <pjmedia/types.h>
- #include <pj/assert.h>
- PJ_BEGIN_DECL
- #define PJMEDIA_STEREO_MIX PJ_TRUE
- PJ_INLINE(pj_status_t) pjmedia_convert_channel_nto1(pj_int16_t mono[],
- const pj_int16_t multi[],
- unsigned channel_count,
- unsigned samples_per_frame,
- pj_bool_t mix,
- unsigned channel_src)
- {
- unsigned i;
- PJ_ASSERT_RETURN(mono && multi && channel_count && samples_per_frame &&
- channel_src < channel_count, PJ_EINVAL);
- if (mix==PJ_FALSE) {
- for (i = channel_src; i < samples_per_frame; i += channel_count) {
- *mono = multi[i];
- ++mono;
- }
- } else {
- unsigned j;
- for (i = 0; i < samples_per_frame; i += channel_count) {
- int tmp = 0;
- for(j = 0; j < channel_count; ++j)
- tmp += multi[i+j];
- if (tmp > 32767) tmp = 32767;
- else if (tmp < -32768) tmp = -32768;
- *mono = (pj_int16_t) tmp;
- ++mono;
- }
- }
- return PJ_SUCCESS;
- }
- PJ_INLINE(pj_status_t) pjmedia_convert_channel_1ton(pj_int16_t multi[],
- const pj_int16_t mono[],
- unsigned channel_count,
- unsigned samples_per_frame,
- unsigned options)
- {
- const pj_int16_t *src;
- PJ_ASSERT_RETURN(mono && multi && channel_count && samples_per_frame,
- PJ_EINVAL);
- PJ_ASSERT_RETURN(options == 0, PJ_EINVAL);
- PJ_UNUSED_ARG(options);
- src = mono + samples_per_frame - 1;
- samples_per_frame *= channel_count;
- while (samples_per_frame) {
- unsigned i;
- for (i=1; i<=channel_count; ++i)
- multi[samples_per_frame-i] = *src;
- samples_per_frame -= channel_count;
- --src;
- }
- return PJ_SUCCESS;
- }
- typedef enum pjmedia_stereo_port_options
- {
-
- PJMEDIA_STEREO_DONT_DESTROY_DN = 4
- } pjmedia_stereo_port_options;
- PJ_DECL(pj_status_t) pjmedia_stereo_port_create( pj_pool_t *pool,
- pjmedia_port *dn_port,
- unsigned channel_count,
- unsigned options,
- pjmedia_port **p_port );
- PJ_END_DECL
- #endif
|