diff options
Diffstat (limited to 'pjmedia/src/pjmedia-codec')
-rw-r--r-- | pjmedia/src/pjmedia-codec/g7221.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/pjmedia/src/pjmedia-codec/g7221.c b/pjmedia/src/pjmedia-codec/g7221.c index 37b4b09b..9dfb88cb 100644 --- a/pjmedia/src/pjmedia-codec/g7221.c +++ b/pjmedia/src/pjmedia-codec/g7221.c @@ -375,18 +375,30 @@ PJ_DEF(pj_status_t) pjmedia_codec_g7221_set_mode(unsigned sample_rate, unsigned bitrate, pj_bool_t enabled) { + pjmedia_codec_mgr *codec_mgr; unsigned i; /* Validate mode */ if (!validate_mode(sample_rate, bitrate)) return PJMEDIA_CODEC_EINMODE; + /* Get codec manager */ + codec_mgr = pjmedia_endpt_get_codec_mgr(codec_factory.endpt); + if (!codec_mgr) + return PJMEDIA_CODEC_EFAILED; + /* Look up in factory modes table */ for (i = 0; i < codec_factory.mode_count; ++i) { if (codec_factory.modes[i].sample_rate == sample_rate && codec_factory.modes[i].bitrate == bitrate) { codec_factory.modes[i].enabled = enabled; + + /* Re-register G722.1 codec factory to update codec list */ + pjmedia_codec_mgr_unregister_factory(codec_mgr, + &codec_factory.base); + pjmedia_codec_mgr_register_factory(codec_mgr, + &codec_factory.base); return PJ_SUCCESS; } } @@ -413,6 +425,12 @@ PJ_DEF(pj_status_t) pjmedia_codec_g7221_set_mode(unsigned sample_rate, mode->bitrate = bitrate; pj_utoa(mode->bitrate, mode->bitrate_str); + /* Re-register G722.1 codec factory to update codec list */ + pjmedia_codec_mgr_unregister_factory(codec_mgr, + &codec_factory.base); + pjmedia_codec_mgr_register_factory(codec_mgr, + &codec_factory.base); + return PJ_SUCCESS; } } |