diff options
author | Benny Prijono <bennylp@teluu.com> | 2006-05-13 22:46:23 +0000 |
---|---|---|
committer | Benny Prijono <bennylp@teluu.com> | 2006-05-13 22:46:23 +0000 |
commit | b4ff87018aef719a1427c47da854d0108b9ed6c4 (patch) | |
tree | f117b651f2daeea1824eca14945668df7d4898a3 /pjmedia/src/pjmedia-codec/l16.c | |
parent | 19d4fb0b0f2d39538018f16323c4b6a52c07903d (diff) |
Another major modifications in PJMEDIA:
- handle multiple frames in one packet
- split stream creation into two steps to allow customization
- PLC framework and implementation with G.711 and speex
- stream returns NO_FRAME correctly.
- added ptime argument in pjsua
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@438 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjmedia/src/pjmedia-codec/l16.c')
-rw-r--r-- | pjmedia/src/pjmedia-codec/l16.c | 45 |
1 files changed, 25 insertions, 20 deletions
diff --git a/pjmedia/src/pjmedia-codec/l16.c b/pjmedia/src/pjmedia-codec/l16.c index 594aefc3..47e4c070 100644 --- a/pjmedia/src/pjmedia-codec/l16.c +++ b/pjmedia/src/pjmedia-codec/l16.c @@ -61,11 +61,12 @@ static pj_status_t l16_init( pjmedia_codec *codec, static pj_status_t l16_open( pjmedia_codec *codec, pjmedia_codec_param *attr ); static pj_status_t l16_close( pjmedia_codec *codec ); -static pj_status_t l16_get_frames(pjmedia_codec *codec, - void *pkt, - pj_size_t pkt_size, - unsigned *frame_cnt, - pjmedia_frame frames[]); +static pj_status_t l16_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 l16_encode( pjmedia_codec *codec, const struct pjmedia_frame *input, unsigned output_buf_len, @@ -81,7 +82,7 @@ static pjmedia_codec_op l16_op = &l16_init, &l16_open, &l16_close, - &l16_get_frames, + &l16_parse, &l16_encode, &l16_decode }; @@ -234,16 +235,18 @@ static pj_status_t l16_default_attr( pjmedia_codec_factory *factory, PJ_UNUSED_ARG(factory); pj_memset(attr, 0, sizeof(pjmedia_codec_param)); - attr->pt = id->pt; - attr->clock_rate = id->clock_rate; - attr->channel_cnt = id->channel_cnt; - attr->avg_bps = id->clock_rate * id->channel_cnt * 16; - attr->pcm_bits_per_sample = 16; + attr->info.pt = (pj_uint8_t)id->pt; + attr->info.clock_rate = id->clock_rate; + attr->info.channel_cnt = id->channel_cnt; + attr->info.avg_bps = id->clock_rate * id->channel_cnt * 16; + attr->info.pcm_bits_per_sample = 16; /* To keep frame size below 1400 MTU, set ptime to 10ms for * sampling rate > 35 KHz */ - attr->ptime = GET_PTIME(id->clock_rate); + attr->info.frm_ptime = GET_PTIME(id->clock_rate); + + attr->setting.frm_per_pkt = 1; /* Default all flag bits disabled. */ @@ -498,11 +501,12 @@ static pj_status_t l16_close( pjmedia_codec *codec ) return PJ_SUCCESS; } -static pj_status_t l16_get_frames( pjmedia_codec *codec, - void *pkt, - pj_size_t pkt_size, - unsigned *frame_cnt, - pjmedia_frame frames[]) +static pj_status_t l16_parse( pjmedia_codec *codec, + void *pkt, + pj_size_t pkt_size, + const pj_timestamp *ts, + unsigned *frame_cnt, + pjmedia_frame frames[]) { unsigned count = 0; struct l16_data *data = (struct l16_data*) codec->codec_data; @@ -511,9 +515,10 @@ static pj_status_t l16_get_frames( pjmedia_codec *codec, PJ_ASSERT_RETURN(frame_cnt, PJ_EINVAL); while (pkt_size >= data->frame_size && count < *frame_cnt) { - frames[0].type = PJMEDIA_FRAME_TYPE_AUDIO; - frames[0].buf = pkt; - frames[0].size = data->frame_size; + frames[count].type = PJMEDIA_FRAME_TYPE_AUDIO; + frames[count].buf = pkt; + frames[count].size = data->frame_size; + frames[count].timestamp.u64 = ts->u64 + (count * data->frame_size); pkt = ((char*)pkt) + data->frame_size; pkt_size -= data->frame_size; |