diff options
Diffstat (limited to 'pjmedia/src')
-rw-r--r-- | pjmedia/src/pjmedia-codec/g7221.c | 16 | ||||
-rw-r--r-- | pjmedia/src/pjmedia/stream_info.c | 26 |
2 files changed, 19 insertions, 23 deletions
diff --git a/pjmedia/src/pjmedia-codec/g7221.c b/pjmedia/src/pjmedia-codec/g7221.c index 276c0327..37b4b09b 100644 --- a/pjmedia/src/pjmedia-codec/g7221.c +++ b/pjmedia/src/pjmedia-codec/g7221.c @@ -648,10 +648,17 @@ static pj_status_t codec_open( pjmedia_codec *codec, { codec_private_t *codec_data = (codec_private_t*) codec->codec_data; pj_pool_t *pool; + pjmedia_codec_fmtp *fmtp = &attr->setting.dec_fmtp; + pj_uint16_t fmtp_bitrate = 0; unsigned tmp; + for (tmp = 0; tmp < fmtp->cnt && !fmtp_bitrate; ++tmp) { + if (!pj_strcmp2(&fmtp->param[tmp].name, "bitrate")) + fmtp_bitrate = (pj_uint16_t)pj_strtoul(&fmtp->param[tmp].val); + } + /* Validation mode first! */ - if (!validate_mode(attr->info.clock_rate, attr->info.avg_bps)) + if (!fmtp_bitrate || !validate_mode(attr->info.clock_rate, fmtp_bitrate)) return PJMEDIA_CODEC_EINMODE; pool = codec_data->pool; @@ -660,8 +667,8 @@ static pj_status_t codec_open( pjmedia_codec *codec, codec_data->vad_enabled = (attr->setting.vad != 0); codec_data->plc_enabled = (attr->setting.plc != 0); - codec_data->bitrate = (pj_uint16_t)attr->info.avg_bps; - codec_data->frame_size_bits = (pj_uint16_t)(attr->info.avg_bps*20/1000); + codec_data->bitrate = fmtp_bitrate; + codec_data->frame_size_bits = fmtp_bitrate*20/1000; codec_data->frame_size = (pj_uint16_t)(codec_data->frame_size_bits>>3); codec_data->samples_per_frame = (pj_uint16_t) (attr->info.clock_rate*20/1000); @@ -687,6 +694,9 @@ static pj_status_t codec_open( pjmedia_codec *codec, codec_data->dec_randobj.seed2 = 1; codec_data->dec_randobj.seed3 = 1; + /* Update codec param */ + attr->info.avg_bps = attr->info.max_bps = fmtp_bitrate; + return PJ_SUCCESS; } diff --git a/pjmedia/src/pjmedia/stream_info.c b/pjmedia/src/pjmedia/stream_info.c index 5baa5462..3ed32f7e 100644 --- a/pjmedia/src/pjmedia/stream_info.c +++ b/pjmedia/src/pjmedia/stream_info.c @@ -18,6 +18,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include <pjmedia/stream.h> +#include <pjmedia/sdp_neg.h> #include <pjmedia/stream_common.h> #include <pj/ctype.h> #include <pj/rand.h> @@ -188,28 +189,13 @@ static pj_status_t get_audio_codec_info_param(pjmedia_stream_info *si, */ si->tx_pt = 0xFFFF; for (i=0; i<rem_m->desc.fmt_count; ++i) { - unsigned rpt; - pjmedia_sdp_attr *r_attr; - pjmedia_sdp_rtpmap r_rtpmap; - - rpt = pj_strtoul(&rem_m->desc.fmt[i]); - if (rpt < 96) - continue; - - r_attr = pjmedia_sdp_media_find_attr(rem_m, &ID_RTPMAP, - &rem_m->desc.fmt[i]); - if (!r_attr) - continue; - - if (pjmedia_sdp_attr_get_rtpmap(r_attr, &r_rtpmap) != PJ_SUCCESS) - continue; - - if (!pj_stricmp(&rtpmap->enc_name, &r_rtpmap.enc_name) && - rtpmap->clock_rate == r_rtpmap.clock_rate) + if (pjmedia_sdp_neg_fmt_match(pool, + (pjmedia_sdp_media*)local_m, fmti, + (pjmedia_sdp_media*)rem_m, i, 0) == + PJ_SUCCESS) { /* Found matched codec. */ - si->tx_pt = rpt; - + si->tx_pt = pj_strtoul(&rem_m->desc.fmt[i]); break; } } |