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.c45
1 files changed, 25 insertions, 20 deletions
diff --git a/pjmedia/src/pjmedia-codec/gsm.c b/pjmedia/src/pjmedia-codec/gsm.c
index ebb6d1be..8689960f 100644
--- a/pjmedia/src/pjmedia-codec/gsm.c
+++ b/pjmedia/src/pjmedia-codec/gsm.c
@@ -54,11 +54,12 @@ static pj_status_t gsm_codec_init( pjmedia_codec *codec,
static pj_status_t gsm_codec_open( pjmedia_codec *codec,
pjmedia_codec_param *attr );
static pj_status_t gsm_codec_close( pjmedia_codec *codec );
-static pj_status_t gsm_codec_get_frames( pjmedia_codec *codec,
- void *pkt,
- pj_size_t pkt_size,
- unsigned *frame_cnt,
- pjmedia_frame frames[]);
+static pj_status_t gsm_codec_parse( pjmedia_codec *codec,
+ void *pkt,
+ pj_size_t pkt_size,
+ const pj_timestamp *ts,
+ unsigned *frame_cnt,
+ pjmedia_frame frames[]);
static pj_status_t gsm_codec_encode( pjmedia_codec *codec,
const struct pjmedia_frame *input,
unsigned output_buf_len,
@@ -74,7 +75,7 @@ static pjmedia_codec_op gsm_op =
&gsm_codec_init,
&gsm_codec_open,
&gsm_codec_close,
- &gsm_codec_get_frames,
+ &gsm_codec_parse,
&gsm_codec_encode,
&gsm_codec_decode
};
@@ -230,12 +231,14 @@ static pj_status_t gsm_default_attr (pjmedia_codec_factory *factory,
PJ_UNUSED_ARG(id);
pj_memset(attr, 0, sizeof(pjmedia_codec_param));
- attr->clock_rate = 8000;
- attr->channel_cnt = 1;
- attr->avg_bps = 13200;
- attr->pcm_bits_per_sample = 16;
- attr->ptime = 20;
- attr->pt = PJMEDIA_RTP_PT_GSM;
+ attr->info.clock_rate = 8000;
+ attr->info.channel_cnt = 1;
+ attr->info.avg_bps = 13200;
+ attr->info.pcm_bits_per_sample = 16;
+ attr->info.frm_ptime = 20;
+ attr->info.pt = PJMEDIA_RTP_PT_GSM;
+
+ attr->setting.frm_per_pkt = 1;
/* Default all flag bits disabled. */
@@ -386,11 +389,12 @@ static pj_status_t gsm_codec_close( pjmedia_codec *codec )
/*
* Get frames in the packet.
*/
-static pj_status_t gsm_codec_get_frames( pjmedia_codec *codec,
- void *pkt,
- pj_size_t pkt_size,
- unsigned *frame_cnt,
- pjmedia_frame frames[])
+static pj_status_t gsm_codec_parse( pjmedia_codec *codec,
+ void *pkt,
+ pj_size_t pkt_size,
+ const pj_timestamp *ts,
+ unsigned *frame_cnt,
+ pjmedia_frame frames[])
{
unsigned count = 0;
@@ -399,9 +403,10 @@ static pj_status_t gsm_codec_get_frames( pjmedia_codec *codec,
PJ_ASSERT_RETURN(frame_cnt, PJ_EINVAL);
while (pkt_size >= 33 && count < *frame_cnt) {
- frames[0].type = PJMEDIA_FRAME_TYPE_AUDIO;
- frames[0].buf = pkt;
- frames[0].size = 33;
+ frames[count].type = PJMEDIA_FRAME_TYPE_AUDIO;
+ frames[count].buf = pkt;
+ frames[count].size = 33;
+ frames[count].timestamp.u64 = ts->u64 + count * 160;
pkt = ((char*)pkt) + 33;
pkt_size -= 33;