summaryrefslogtreecommitdiff
path: root/pjmedia/src/pjmedia-codec/gsm.c
diff options
context:
space:
mode:
Diffstat (limited to 'pjmedia/src/pjmedia-codec/gsm.c')
-rw-r--r--pjmedia/src/pjmedia-codec/gsm.c27
1 files changed, 23 insertions, 4 deletions
diff --git a/pjmedia/src/pjmedia-codec/gsm.c b/pjmedia/src/pjmedia-codec/gsm.c
index 633ddc1b..00b7d3fd 100644
--- a/pjmedia/src/pjmedia-codec/gsm.c
+++ b/pjmedia/src/pjmedia-codec/gsm.c
@@ -54,8 +54,10 @@ static pj_status_t gsm_dealloc_codec( pjmedia_codec_factory *factory,
static pj_status_t gsm_codec_init( pjmedia_codec *codec,
pj_pool_t *pool );
static pj_status_t gsm_codec_open( pjmedia_codec *codec,
- pjmedia_codec_param *attr );
+ const pjmedia_codec_param *attr );
static pj_status_t gsm_codec_close( pjmedia_codec *codec );
+static pj_status_t gsm_codec_modify(pjmedia_codec *codec,
+ const pjmedia_codec_param *attr );
static pj_status_t gsm_codec_parse( pjmedia_codec *codec,
void *pkt,
pj_size_t pkt_size,
@@ -80,6 +82,7 @@ static pjmedia_codec_op gsm_op =
&gsm_codec_init,
&gsm_codec_open,
&gsm_codec_close,
+ &gsm_codec_modify,
&gsm_codec_parse,
&gsm_codec_encode,
&gsm_codec_decode,
@@ -385,15 +388,13 @@ static pj_status_t gsm_codec_init( pjmedia_codec *codec,
* Open codec.
*/
static pj_status_t gsm_codec_open( pjmedia_codec *codec,
- pjmedia_codec_param *attr )
+ const pjmedia_codec_param *attr )
{
struct gsm_data *gsm_data = codec->codec_data;
pj_assert(gsm_data != NULL);
pj_assert(gsm_data->encoder == NULL && gsm_data->decoder == NULL);
- PJ_UNUSED_ARG(attr);
-
gsm_data->encoder = gsm_create();
if (!gsm_data->encoder)
return PJMEDIA_CODEC_EFAILED;
@@ -431,6 +432,24 @@ static pj_status_t gsm_codec_close( pjmedia_codec *codec )
/*
+ * Modify codec settings.
+ */
+static pj_status_t gsm_codec_modify(pjmedia_codec *codec,
+ const pjmedia_codec_param *attr )
+{
+ struct gsm_data *gsm_data = codec->codec_data;
+
+ pj_assert(gsm_data != NULL);
+ pj_assert(gsm_data->encoder == NULL && gsm_data->decoder == NULL);
+
+ gsm_data->vad_enabled = (attr->setting.vad != 0);
+ gsm_data->plc_enabled = (attr->setting.plc != 0);
+
+ return PJ_SUCCESS;
+}
+
+
+/*
* Get frames in the packet.
*/
static pj_status_t gsm_codec_parse( pjmedia_codec *codec,