summaryrefslogtreecommitdiff
path: root/pjmedia
diff options
context:
space:
mode:
authorRiza Sulistyo <riza@teluu.com>2016-06-30 03:36:39 +0000
committerRiza Sulistyo <riza@teluu.com>2016-06-30 03:36:39 +0000
commit6b7a0578f7742561876dc39cf0c5a8bfbf099c6c (patch)
tree0f49f19983157b48e5a6696880241f723977a3d8 /pjmedia
parenta55e13c20239b8c174dbaa40ab8809a5510985d4 (diff)
Re #1928: Fixed set bitrate on opus codec might not change the codec param and support opus automatic bitrate setting.
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@5371 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjmedia')
-rw-r--r--pjmedia/src/pjmedia-codec/opus.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/pjmedia/src/pjmedia-codec/opus.c b/pjmedia/src/pjmedia-codec/opus.c
index a9992ffa..4bc84596 100644
--- a/pjmedia/src/pjmedia-codec/opus.c
+++ b/pjmedia/src/pjmedia-codec/opus.c
@@ -397,6 +397,7 @@ pjmedia_codec_opus_set_default_param(const pjmedia_codec_opus_config *cfg,
return PJ_EINVAL;
}
opus_cfg.bit_rate = cfg->bit_rate;
+ param->info.avg_bps = opus_cfg.bit_rate;
/* Set expected packet loss */
if (cfg->packet_loss >= 100)
@@ -461,9 +462,7 @@ static pj_status_t factory_default_attr( pjmedia_codec_factory *factory,
attr->info.pt = (pj_uint8_t)ci->pt;
attr->info.clock_rate = opus_cfg.sample_rate;
attr->info.channel_cnt = opus_cfg.channel_cnt;
- attr->info.avg_bps = (opus_cfg.bit_rate > 0) ?
- opus_cfg.bit_rate :
- opus_cfg.sample_rate; // Estimate
+ attr->info.avg_bps = opus_cfg.bit_rate;
attr->info.max_bps = opus_cfg.bit_rate * 2;
attr->info.frm_ptime = 20;
attr->setting.frm_per_pkt = 1;
@@ -587,6 +586,7 @@ static pj_status_t codec_open( pjmedia_codec *codec,
{
struct opus_data *opus_data = (struct opus_data *)codec->codec_data;
int idx, err;
+ pj_bool_t auto_bit_rate = PJ_TRUE;
PJ_ASSERT_RETURN(codec && attr && opus_data, PJ_EINVAL);
@@ -629,6 +629,7 @@ static pj_status_t codec_open( pjmedia_codec *codec,
idx = find_fmtp(&attr->setting.enc_fmtp, &STR_MAX_BIT_RATE, PJ_FALSE);
if (idx >= 0) {
unsigned rate;
+ auto_bit_rate = PJ_FALSE;
rate = (unsigned)pj_strtoul(&attr->setting.enc_fmtp.param[idx].val);
if (rate < attr->info.avg_bps)
attr->info.avg_bps = rate;
@@ -683,7 +684,9 @@ static pj_status_t codec_open( pjmedia_codec *codec,
/* Set signal type */
opus_encoder_ctl(opus_data->enc, OPUS_SET_SIGNAL(OPUS_SIGNAL_VOICE));
/* Set bitrate */
- opus_encoder_ctl(opus_data->enc, OPUS_SET_BITRATE(attr->info.avg_bps));
+ opus_encoder_ctl(opus_data->enc, OPUS_SET_BITRATE(auto_bit_rate?
+ OPUS_AUTO:
+ attr->info.avg_bps));
/* Set VAD */
opus_encoder_ctl(opus_data->enc, OPUS_SET_DTX(attr->setting.vad ? 1 : 0));
/* Set PLC */
@@ -766,7 +769,9 @@ static pj_status_t codec_modify( pjmedia_codec *codec,
/* Set bitrate */
opus_data->cfg.bit_rate = attr->info.avg_bps;
- opus_encoder_ctl(opus_data->enc, OPUS_SET_BITRATE(attr->info.avg_bps));
+ opus_encoder_ctl(opus_data->enc, OPUS_SET_BITRATE(attr->info.avg_bps?
+ attr->info.avg_bps:
+ OPUS_AUTO));
/* Set VAD */
opus_encoder_ctl(opus_data->enc, OPUS_SET_DTX(attr->setting.vad ? 1 : 0));
/* Set PLC */