summaryrefslogtreecommitdiff
path: root/pjsip-apps/src/symsndtest/app_main.cpp
diff options
context:
space:
mode:
authorNanang Izzuddin <nanang@teluu.com>2010-03-04 15:47:25 +0000
committerNanang Izzuddin <nanang@teluu.com>2010-03-04 15:47:25 +0000
commitac131cb38e62d9b73fc857e270430c0f9ecab27c (patch)
tree075ec44e2b62212c128e4bdd9999e21bc922fb49 /pjsip-apps/src/symsndtest/app_main.cpp
parentc2d852485b8591782c9b371f6b277d4a4d0cd35f (diff)
Ticket #1008:
- Applied VAS AMR playback solution from Forum Nokia. - Fixed AMR playback for VAS and APS in composing DTX/NO_DATA (frame type 15) frame header. - Modified symbsndtest test application to support non-PCM audio. - Minor check fix in pjmedia_codec_mgr_destroy(), caught assertion when VAS factory init failed and media endpoint tried to destroy codec manager (codec mgr hasn't been init-ed). git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@3116 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjsip-apps/src/symsndtest/app_main.cpp')
-rw-r--r--pjsip-apps/src/symsndtest/app_main.cpp56
1 files changed, 45 insertions, 11 deletions
diff --git a/pjsip-apps/src/symsndtest/app_main.cpp b/pjsip-apps/src/symsndtest/app_main.cpp
index e58be081..c43a5566 100644
--- a/pjsip-apps/src/symsndtest/app_main.cpp
+++ b/pjsip-apps/src/symsndtest/app_main.cpp
@@ -40,9 +40,27 @@ static pj_caching_pool cp;
static pjmedia_aud_stream *strm;
static unsigned rec_cnt, play_cnt;
static pj_time_val t_start;
+static pjmedia_aud_param param;
+static pj_pool_t *pool;
+static pjmedia_delay_buf *delaybuf;
+static char frame_buf[256];
-pj_pool_t *pool;
-pjmedia_delay_buf *delaybuf;
+static void copy_frame_ext(pjmedia_frame_ext *f_dst,
+ const pjmedia_frame_ext *f_src)
+{
+ pj_bzero(f_dst, sizeof(*f_dst));
+ if (f_src->subframe_cnt) {
+ f_dst->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
+ for (unsigned i = 0; i < f_src->subframe_cnt; ++i) {
+ pjmedia_frame_ext_subframe *sf;
+ sf = pjmedia_frame_ext_get_subframe(f_src, i);
+ pjmedia_frame_ext_append_subframe(f_dst, sf->data, sf->bitlen,
+ param.samples_per_frame);
+ }
+ } else {
+ f_dst->base.type = PJMEDIA_FRAME_TYPE_NONE;
+ }
+}
/* Logging callback */
static void log_writer(int level, const char *buf, unsigned len)
@@ -137,11 +155,18 @@ static pj_status_t rec_cb(void *user_data,
{
PJ_UNUSED_ARG(user_data);
- pjmedia_delay_buf_put(delaybuf, (pj_int16_t*)frame->buf);
-
- if (frame->size != SAMPLES_PER_FRAME*2) {
- PJ_LOG(3, (THIS_FILE, "Size captured = %u",
- frame->size));
+ if (param.ext_fmt.id == PJMEDIA_FORMAT_PCM) {
+ pjmedia_delay_buf_put(delaybuf, (pj_int16_t*)frame->buf);
+
+ if (frame->size != SAMPLES_PER_FRAME*2) {
+ PJ_LOG(3, (THIS_FILE, "Size captured = %u",
+ frame->size));
+ }
+ } else {
+ pjmedia_frame_ext *f_src = (pjmedia_frame_ext*)frame;
+ pjmedia_frame_ext *f_dst = (pjmedia_frame_ext*)frame_buf;
+
+ copy_frame_ext(f_dst, f_src);
}
++rec_cnt;
@@ -154,9 +179,16 @@ static pj_status_t play_cb(void *user_data,
{
PJ_UNUSED_ARG(user_data);
- pjmedia_delay_buf_get(delaybuf, (pj_int16_t*)frame->buf);
- frame->size = SAMPLES_PER_FRAME*2;
- frame->type = PJMEDIA_FRAME_TYPE_AUDIO;
+ if (param.ext_fmt.id == PJMEDIA_FORMAT_PCM) {
+ pjmedia_delay_buf_get(delaybuf, (pj_int16_t*)frame->buf);
+ frame->size = SAMPLES_PER_FRAME*2;
+ frame->type = PJMEDIA_FRAME_TYPE_AUDIO;
+ } else {
+ pjmedia_frame_ext *f_src = (pjmedia_frame_ext*)frame_buf;
+ pjmedia_frame_ext *f_dst = (pjmedia_frame_ext*)frame;
+
+ copy_frame_ext(f_dst, f_src);
+ }
++play_cnt;
return PJ_SUCCESS;
@@ -165,7 +197,6 @@ static pj_status_t play_cb(void *user_data,
/* Start sound */
static pj_status_t snd_start(unsigned flag)
{
- pjmedia_aud_param param;
pj_status_t status;
if (strm != NULL) {
@@ -178,6 +209,9 @@ static pj_status_t snd_start(unsigned flag)
param.clock_rate = CLOCK_RATE;
param.samples_per_frame = SAMPLES_PER_FRAME;
param.dir = (pjmedia_dir) flag;
+ param.ext_fmt.id = PJMEDIA_FORMAT_AMR;
+ param.ext_fmt.bitrate = 12200;
+ param.output_route = PJMEDIA_AUD_DEV_ROUTE_LOUDSPEAKER;
status = pjmedia_aud_stream_create(&param, &rec_cb, &play_cb, NULL, &strm);
if (status != PJ_SUCCESS) {