diff options
author | Nanang Izzuddin <nanang@teluu.com> | 2013-01-23 02:57:30 +0000 |
---|---|---|
committer | Nanang Izzuddin <nanang@teluu.com> | 2013-01-23 02:57:30 +0000 |
commit | 89e43bc5c1f286d4466d606fb96618cb87c4bf90 (patch) | |
tree | 7de5acf14dfd41ed719c4988005eba82448ea9da /pjmedia/src | |
parent | 5a9d4fd7b11151e1b21d627d7197ceafccd38343 (diff) |
Re #1568: backported to 1.x branch.
git-svn-id: http://svn.pjsip.org/repos/pjproject/branches/1.x@4329 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjmedia/src')
-rw-r--r-- | pjmedia/src/pjmedia/codec.c | 33 | ||||
-rw-r--r-- | pjmedia/src/pjmedia/session.c | 19 |
2 files changed, 52 insertions, 0 deletions
diff --git a/pjmedia/src/pjmedia/codec.c b/pjmedia/src/pjmedia/codec.c index 647b0b5d..35a90625 100644 --- a/pjmedia/src/pjmedia/codec.c +++ b/pjmedia/src/pjmedia/codec.c @@ -41,6 +41,39 @@ static void sort_codecs(pjmedia_codec_mgr *mgr); /* + * Duplicate codec parameter. + */ +PJ_DEF(pjmedia_codec_param*) pjmedia_codec_param_clone( + pj_pool_t *pool, + const pjmedia_codec_param *src) +{ + pjmedia_codec_param *p; + unsigned i; + + PJ_ASSERT_RETURN(pool && src, NULL); + + p = PJ_POOL_ZALLOC_T(pool, pjmedia_codec_param); + + /* Update codec param */ + pj_memcpy(p, src, sizeof(pjmedia_codec_param)); + for (i = 0; i < src->setting.dec_fmtp.cnt; ++i) { + pj_strdup(pool, &p->setting.dec_fmtp.param[i].name, + &src->setting.dec_fmtp.param[i].name); + pj_strdup(pool, &p->setting.dec_fmtp.param[i].val, + &src->setting.dec_fmtp.param[i].val); + } + for (i = 0; i < src->setting.enc_fmtp.cnt; ++i) { + pj_strdup(pool, &p->setting.enc_fmtp.param[i].name, + &src->setting.enc_fmtp.param[i].name); + pj_strdup(pool, &p->setting.enc_fmtp.param[i].val, + &src->setting.enc_fmtp.param[i].val); + } + + return p; +} + + +/* * Initialize codec manager. */ PJ_DEF(pj_status_t) pjmedia_codec_mgr_init (pjmedia_codec_mgr *mgr, diff --git a/pjmedia/src/pjmedia/session.c b/pjmedia/src/pjmedia/session.c index 787cbb4c..ff195119 100644 --- a/pjmedia/src/pjmedia/session.c +++ b/pjmedia/src/pjmedia/session.c @@ -671,6 +671,25 @@ PJ_DEF(pj_status_t) pjmedia_session_create( pjmedia_endpt *endpt, pj_memcpy(session->stream_info, si->stream_info, si->stream_cnt * sizeof(pjmedia_stream_info)); + /* Clone codec param */ + for (i=0; i<(int)si->stream_cnt; ++i) { + if (session->stream_info[i].param) { + session->stream_info[i].param = + pjmedia_codec_param_clone(pool, si->stream_info[i].param); + } else { + pjmedia_codec_param cp; + status = pjmedia_codec_mgr_get_default_param( + pjmedia_endpt_get_codec_mgr(endpt), + &si->stream_info[i].fmt, + &cp); + if (status != PJ_SUCCESS) + return status; + + session->stream_info[i].param = + pjmedia_codec_param_clone(pool, &cp); + } + } + /* * Now create and start the stream! */ |