summaryrefslogtreecommitdiff
path: root/pjmedia/src/pjmedia-codec
diff options
context:
space:
mode:
authorLiong Sauw Ming <ming@teluu.com>2012-10-01 11:11:37 +0000
committerLiong Sauw Ming <ming@teluu.com>2012-10-01 11:11:37 +0000
commit9bbfecd2bde8adbd85efa944c12ffa95565a605c (patch)
tree7991419dadeebae8641b0e27f72f564c31e7b782 /pjmedia/src/pjmedia-codec
parent35a03adc4ed89bb9d47af599f8ab6a8d5c58cbfd (diff)
Re #1586: Implement SILK config setting and fixed decoding fmtp
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@4272 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjmedia/src/pjmedia-codec')
-rw-r--r--pjmedia/src/pjmedia-codec/silk.c29
1 files changed, 23 insertions, 6 deletions
diff --git a/pjmedia/src/pjmedia-codec/silk.c b/pjmedia/src/pjmedia-codec/silk.c
index 7b72bd5c..50cc50c1 100644
--- a/pjmedia/src/pjmedia-codec/silk.c
+++ b/pjmedia/src/pjmedia-codec/silk.c
@@ -35,8 +35,11 @@
#define THIS_FILE "silk.c"
#define FRAME_LENGTH_MS 20
+#define CALC_BITRATE_QUALITY(quality, max_br) \
+ (quality * max_br / 10)
#define CALC_BITRATE(max_br) \
- (PJMEDIA_CODEC_SILK_DEFAULT_QUALITY * max_br / 10)
+ CALC_BITRATE_QUALITY(PJMEDIA_CODEC_SILK_DEFAULT_QUALITY, \
+ max_br);
/* Prototypes for SILK factory */
@@ -287,9 +290,23 @@ PJ_DEF(pj_status_t) pjmedia_codec_silk_set_config(
unsigned clock_rate,
const pjmedia_codec_silk_setting *opt)
{
- PJ_UNUSED_ARG(clock_rate);
- PJ_UNUSED_ARG(opt);
- return PJ_ENOTSUP;
+ unsigned i;
+
+ /* Look up in factory modes table */
+ for (i = 0; i < sizeof(silk_factory.silk_param)/
+ sizeof(silk_factory.silk_param[0]); ++i)
+ {
+ if (silk_factory.silk_param[i].clock_rate == clock_rate) {
+ silk_factory.silk_param[i].enabled = opt->enabled;
+ silk_factory.silk_param[i].complexity = opt->complexity;
+ silk_factory.silk_param[i].bitrate =
+ CALC_BITRATE_QUALITY(opt->quality,
+ silk_factory.silk_param[i].max_bitrate);
+ return PJ_SUCCESS;
+ }
+ }
+
+ return PJ_ENOTFOUND;
}
@@ -403,10 +420,10 @@ static pj_status_t silk_default_attr( pjmedia_codec_factory *factory,
attr->setting.plc = 1;
i = 0;
- attr->setting.dec_fmtp.param[i++].name = pj_str("useinbandfec");
+ attr->setting.dec_fmtp.param[i].name = pj_str("useinbandfec");
attr->setting.dec_fmtp.param[i++].val = pj_str("0");
/*
- attr->setting.dec_fmtp.param[i++].name = pj_str("maxaveragebitrate");
+ attr->setting.dec_fmtp.param[i].name = pj_str("maxaveragebitrate");
attr->setting.dec_fmtp.param[i++].val = pj_str(mode->bitrate_str);
*/
attr->setting.dec_fmtp.cnt = (pj_uint8_t)i;