diff options
author | Liong Sauw Ming <ming@teluu.com> | 2012-11-03 03:32:09 +0000 |
---|---|---|
committer | Liong Sauw Ming <ming@teluu.com> | 2012-11-03 03:32:09 +0000 |
commit | 6849be9e0b98a792b34ce92ec0051550b4a25597 (patch) | |
tree | f5c60ccbe293deb8d1bf78b1822a3b2f020d74ff | |
parent | a169f2e4f38f7b226946ba8e8dc73f99fb1fb549 (diff) |
Re #1586: Fixed useInBandFEC setting and default value setting in pjmedia_codec_silk_set_config()
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@4293 74dad513-b988-da41-8d7b-12977e46ad98
-rw-r--r-- | pjmedia/src/pjmedia-codec/silk.c | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/pjmedia/src/pjmedia-codec/silk.c b/pjmedia/src/pjmedia-codec/silk.c index 3d3a617f..5d2c8a76 100644 --- a/pjmedia/src/pjmedia-codec/silk.c +++ b/pjmedia/src/pjmedia-codec/silk.c @@ -39,7 +39,9 @@ #define PJMEDIA_SILK_DELAY_BUF_OPTIONS PJMEDIA_DELAY_BUF_SIMPLE_FIFO #endif -#define FRAME_LENGTH_MS 20 +#define FRAME_LENGTH_MS 20 +#define SILK_ENC_CTL_PACKET_LOSS_PCT 10 +#define SILK_MIN_BITRATE 5000 #define CALC_BITRATE_QUALITY(quality, max_br) \ (quality * max_br / 10) #define CALC_BITRATE(max_br) \ @@ -310,11 +312,21 @@ PJ_DEF(pj_status_t) pjmedia_codec_silk_set_config( sizeof(silk_factory.silk_param[0]); ++i) { if (silk_factory.silk_param[i].clock_rate == clock_rate) { + int quality = PJMEDIA_CODEC_SILK_DEFAULT_QUALITY; + int complexity = PJMEDIA_CODEC_SILK_DEFAULT_COMPLEXITY; + silk_factory.silk_param[i].enabled = opt->enabled; - silk_factory.silk_param[i].complexity = opt->complexity; + if (opt->complexity >= 0) + complexity = opt->complexity; + silk_factory.silk_param[i].complexity = complexity; + if (opt->quality >= 0) + quality = opt->quality; silk_factory.silk_param[i].bitrate = - CALC_BITRATE_QUALITY(opt->quality, + CALC_BITRATE_QUALITY(quality, silk_factory.silk_param[i].max_bitrate); + if (silk_factory.silk_param[i].bitrate < SILK_MIN_BITRATE) + silk_factory.silk_param[i].bitrate = SILK_MIN_BITRATE; + return PJ_SUCCESS; } } @@ -588,7 +600,7 @@ static pj_status_t silk_codec_open(pjmedia_codec *codec, } /* Check fmtp params */ - enc_use_fec = PJ_FALSE; + enc_use_fec = PJ_TRUE; enc_bitrate = sp->bitrate; for (i = 0; i < attr->setting.enc_fmtp.cnt; ++i) { pjmedia_codec_fmtp *fmtp = &attr->setting.enc_fmtp; @@ -614,7 +626,10 @@ static pj_status_t silk_codec_open(pjmedia_codec *codec, silk->enc_ctl.API_sampleRate = attr->info.clock_rate; silk->enc_ctl.maxInternalSampleRate = attr->info.clock_rate; silk->enc_ctl.packetSize = silk->samples_per_frame; - silk->enc_ctl.packetLossPercentage = 0; + /* For useInBandFEC setting to be useful, we need to set + * packetLossPercentage greater than LBRR_LOSS_THRES (1) + */ + silk->enc_ctl.packetLossPercentage = SILK_ENC_CTL_PACKET_LOSS_PCT; silk->enc_ctl.useInBandFEC = enc_use_fec; silk->enc_ctl.useDTX = attr->setting.vad; silk->enc_ctl.complexity = sp->complexity; |