From b0a11ba9fead19a793eea48795633b30ab6d6801 Mon Sep 17 00:00:00 2001 From: John Crispin Date: Tue, 14 Feb 2012 15:05:55 +0000 Subject: bump to 1.12, merge improved lantiq aud_dev driver SVN-Revision: 30520 --- ...DEF-pj_status_t-pjsua_add_snd_port-int-id.patch | 229 +++++++++++++++++++++ 1 file changed, 229 insertions(+) create mode 100644 package/pjsip/patches/0003-adds-PJ_DEF-pj_status_t-pjsua_add_snd_port-int-id.patch (limited to 'package/pjsip/patches/0003-adds-PJ_DEF-pj_status_t-pjsua_add_snd_port-int-id.patch') diff --git a/package/pjsip/patches/0003-adds-PJ_DEF-pj_status_t-pjsua_add_snd_port-int-id.patch b/package/pjsip/patches/0003-adds-PJ_DEF-pj_status_t-pjsua_add_snd_port-int-id.patch new file mode 100644 index 0000000000..8e9b604147 --- /dev/null +++ b/package/pjsip/patches/0003-adds-PJ_DEF-pj_status_t-pjsua_add_snd_port-int-id.patch @@ -0,0 +1,229 @@ +From 1e0d5dbf8b7714dfd490add0e2b507fd513414f3 Mon Sep 17 00:00:00 2001 +From: John Crispin +Date: Fri, 3 Feb 2012 21:45:08 +0100 +Subject: [PATCH 3/3] adds PJ_DEF(pj_status_t) pjsua_add_snd_port(int id) + +--- + pjproject-1.12/pjsip/include/pjsua-lib/pjsua.h | 2 + + .../pjsip/include/pjsua-lib/pjsua_internal.h | 4 +- + pjproject-1.12/pjsip/src/pjsua-lib/pjsua_media.c | 69 ++++++++++++++------ + 3 files changed, 54 insertions(+), 21 deletions(-) + +diff --git a/pjsip/include/pjsua-lib/pjsua.h b/pjsip/include/pjsua-lib/pjsua.h +index 85dbbbb..ad3e020 100644 +--- a/pjsip/include/pjsua-lib/pjsua.h ++++ b/pjsip/include/pjsua-lib/pjsua.h +@@ -1543,6 +1543,8 @@ PJ_DECL(pjmedia_endpt*) pjsua_get_pjmedia_endpt(void); + PJ_DECL(pj_pool_factory*) pjsua_get_pool_factory(void); + + ++PJ_DECL(pj_status_t) pjsua_add_snd_port(int id, pjsua_conf_port_id *p_id); ++ + + /***************************************************************************** + * Utilities. +diff --git a/pjsip/include/pjsua-lib/pjsua_internal.h b/pjsip/include/pjsua-lib/pjsua_internal.h +index 6c27826..4ba91ed 100644 +--- a/pjsip/include/pjsua-lib/pjsua_internal.h ++++ b/pjsip/include/pjsua-lib/pjsua_internal.h +@@ -261,6 +261,8 @@ typedef struct pjsua_stun_resolve + } pjsua_stun_resolve; + + ++#define MAX_PORT 2 ++ + /** + * Global pjsua application data. + */ +@@ -336,7 +338,7 @@ struct pjsua_data + pj_bool_t aud_open_cnt;/**< How many # device is opened */ + pj_bool_t no_snd; /**< No sound (app will manage it) */ + pj_pool_t *snd_pool; /**< Sound's private pool. */ +- pjmedia_snd_port *snd_port; /**< Sound port. */ ++ pjmedia_snd_port *snd_port[MAX_PORT]; /**< Sound port. */ + pj_timer_entry snd_idle_timer;/**< Sound device idle timer. */ + pjmedia_master_port *null_snd; /**< Master port for null sound. */ + pjmedia_port *null_port; /**< Null port. */ +diff --git a/pjsip/src/pjsua-lib/pjsua_media.c b/pjsip/src/pjsua-lib/pjsua_media.c +index 7d53cad..8a882f3 100644 +--- a/pjsip/src/pjsua-lib/pjsua_media.c ++++ b/pjsip/src/pjsua-lib/pjsua_media.c +@@ -588,7 +588,7 @@ static void check_snd_dev_idle() + * It is idle when there is no port connection in the bridge and + * there is no active call. + */ +- if ((pjsua_var.snd_port!=NULL || pjsua_var.null_snd!=NULL) && ++ if ((pjsua_var.snd_port[0]!=NULL || pjsua_var.null_snd!=NULL) && + pjsua_var.snd_idle_timer.id == PJ_FALSE && + pjmedia_conf_get_connect_count(pjsua_var.mconf) == 0 && + call_cnt == 0 && +@@ -2009,7 +2009,7 @@ PJ_DEF(pj_status_t) pjsua_conf_connect( pjsua_conf_port_id source, + pj_assert(status == PJ_SUCCESS); + + /* Check if sound device is instantiated. */ +- need_reopen = (pjsua_var.snd_port==NULL && pjsua_var.null_snd==NULL && ++ need_reopen = (pjsua_var.snd_port[0]==NULL && pjsua_var.null_snd==NULL && + !pjsua_var.no_snd); + + /* Check if sound device need to reopen because it needs to modify +@@ -2067,7 +2067,7 @@ PJ_DEF(pj_status_t) pjsua_conf_connect( pjsua_conf_port_id source, + /* The bridge version */ + + /* Create sound port if none is instantiated */ +- if (pjsua_var.snd_port==NULL && pjsua_var.null_snd==NULL && ++ if (pjsua_var.snd_port[0]==NULL && pjsua_var.null_snd==NULL && + !pjsua_var.no_snd) + { + pj_status_t status; +@@ -2679,9 +2679,9 @@ static pj_status_t update_initial_aud_param() + pjmedia_aud_param param; + pj_status_t status; + +- PJ_ASSERT_RETURN(pjsua_var.snd_port != NULL, PJ_EBUG); ++ PJ_ASSERT_RETURN(pjsua_var.snd_port[0] != NULL, PJ_EBUG); + +- strm = pjmedia_snd_port_get_snd_stream(pjsua_var.snd_port); ++ strm = pjmedia_snd_port_get_snd_stream(pjsua_var.snd_port[0]); + + status = pjmedia_aud_stream_get_param(strm, ¶m); + if (status != PJ_SUCCESS) { +@@ -2747,7 +2747,7 @@ static pj_status_t open_snd_dev(pjmedia_snd_port_param *param) + 1000 / param->base.clock_rate)); + + status = pjmedia_snd_port_create2( pjsua_var.snd_pool, +- param, &pjsua_var.snd_port); ++ param, &pjsua_var.snd_port[0]); + if (status != PJ_SUCCESS) + return status; + +@@ -2805,13 +2805,13 @@ static pj_status_t open_snd_dev(pjmedia_snd_port_param *param) + } + + /* Connect sound port to the bridge */ +- status = pjmedia_snd_port_connect(pjsua_var.snd_port, ++ status = pjmedia_snd_port_connect(pjsua_var.snd_port[0], + conf_port ); + if (status != PJ_SUCCESS) { + pjsua_perror(THIS_FILE, "Unable to connect conference port to " + "sound device", status); +- pjmedia_snd_port_destroy(pjsua_var.snd_port); +- pjsua_var.snd_port = NULL; ++ pjmedia_snd_port_destroy(pjsua_var.snd_port[0]); ++ pjsua_var.snd_port[0] = NULL; + return status; + } + +@@ -2826,7 +2826,7 @@ static pj_status_t open_snd_dev(pjmedia_snd_port_param *param) + pjmedia_aud_param si; + pj_str_t tmp; + +- strm = pjmedia_snd_port_get_snd_stream(pjsua_var.snd_port); ++ strm = pjmedia_snd_port_get_snd_stream(pjsua_var.snd_port[0]); + status = pjmedia_aud_stream_get_param(strm, &si); + if (status == PJ_SUCCESS) + status = pjmedia_aud_dev_get_info(si.rec_id, &rec_info); +@@ -2869,12 +2869,12 @@ static pj_status_t open_snd_dev(pjmedia_snd_port_param *param) + static void close_snd_dev(void) + { + /* Close sound device */ +- if (pjsua_var.snd_port) { ++ if (pjsua_var.snd_port[0]) { + pjmedia_aud_dev_info cap_info, play_info; + pjmedia_aud_stream *strm; + pjmedia_aud_param param; + +- strm = pjmedia_snd_port_get_snd_stream(pjsua_var.snd_port); ++ strm = pjmedia_snd_port_get_snd_stream(pjsua_var.snd_port[0]); + pjmedia_aud_stream_get_param(strm, ¶m); + + if (pjmedia_aud_dev_get_info(param.rec_id, &cap_info) != PJ_SUCCESS) +@@ -2886,9 +2886,9 @@ static void close_snd_dev(void) + "%s sound capture device", + play_info.name, cap_info.name)); + +- pjmedia_snd_port_disconnect(pjsua_var.snd_port); +- pjmedia_snd_port_destroy(pjsua_var.snd_port); +- pjsua_var.snd_port = NULL; ++ pjmedia_snd_port_disconnect(pjsua_var.snd_port[0]); ++ pjmedia_snd_port_destroy(pjsua_var.snd_port[0]); ++ pjsua_var.snd_port[0] = NULL; + } + + /* Close null sound device */ +@@ -2968,6 +2968,35 @@ PJ_DEF(pj_status_t) pjsua_set_snd_dev( int capture_dev, + return PJ_SUCCESS; + } + ++PJ_DEF(pj_status_t) pjsua_add_snd_port(int id, pjsua_conf_port_id *p_id) ++{ ++ unsigned alt_cr_cnt = 1; ++ unsigned alt_cr = 0; ++ pj_status_t status = -1; ++ pjmedia_snd_port_param param; ++ unsigned samples_per_frame; ++ pjmedia_port *port; ++ const pj_str_t name = pj_str("tapi2"); ++ alt_cr = pjsua_var.media_cfg.clock_rate; ++ samples_per_frame = alt_cr * ++ pjsua_var.media_cfg.audio_frame_ptime * ++ pjsua_var.media_cfg.channel_count / 1000; ++ status = create_aud_param(¶m.base, ++ pjsua_var.play_dev, ++ pjsua_var.cap_dev, ++ alt_cr, ++ pjsua_var.media_cfg.channel_count, ++ samples_per_frame, 16); ++ if (status != PJ_SUCCESS) ++ return status; ++ param.base.rec_id = id; ++ param.base.play_id = id; ++ param.options = 0; ++ status = pjmedia_snd_port_create2(pjsua_var.snd_pool, ++ ¶m, &pjsua_var.snd_port[id]); ++ return PJ_SUCCESS; ++} ++ + + /* + * Get currently active sound devices. If sound devices has not been created +@@ -3054,8 +3083,8 @@ PJ_DEF(pj_status_t) pjsua_set_ec(unsigned tail_ms, unsigned options) + { + pjsua_var.media_cfg.ec_tail_len = tail_ms; + +- if (pjsua_var.snd_port) +- return pjmedia_snd_port_set_ec( pjsua_var.snd_port, pjsua_var.pool, ++ if (pjsua_var.snd_port[0]) ++ return pjmedia_snd_port_set_ec( pjsua_var.snd_port[0], pjsua_var.pool, + tail_ms, options); + + return PJ_SUCCESS; +@@ -3077,7 +3106,7 @@ PJ_DEF(pj_status_t) pjsua_get_ec_tail(unsigned *p_tail_ms) + */ + PJ_DEF(pj_bool_t) pjsua_snd_is_active(void) + { +- return pjsua_var.snd_port != NULL; ++ return pjsua_var.snd_port[0] != NULL; + } + + +@@ -3099,7 +3128,7 @@ PJ_DEF(pj_status_t) pjsua_snd_set_setting( pjmedia_aud_dev_cap cap, + if (pjsua_snd_is_active()) { + pjmedia_aud_stream *strm; + +- strm = pjmedia_snd_port_get_snd_stream(pjsua_var.snd_port); ++ strm = pjmedia_snd_port_get_snd_stream(pjsua_var.snd_port[0]); + status = pjmedia_aud_stream_set_cap(strm, cap, pval); + } else { + status = PJ_SUCCESS; +@@ -3137,7 +3166,7 @@ PJ_DEF(pj_status_t) pjsua_snd_get_setting( pjmedia_aud_dev_cap cap, + /* Sound is active, retrieve from device directly */ + pjmedia_aud_stream *strm; + +- strm = pjmedia_snd_port_get_snd_stream(pjsua_var.snd_port); ++ strm = pjmedia_snd_port_get_snd_stream(pjsua_var.snd_port[0]); + return pjmedia_aud_stream_get_cap(strm, cap, pval); + } else { + /* Otherwise retrieve from internal param */ +-- +1.7.7.1 + -- cgit v1.2.3