diff options
author | Benny Prijono <bennylp@teluu.com> | 2007-12-28 18:55:02 +0000 |
---|---|---|
committer | Benny Prijono <bennylp@teluu.com> | 2007-12-28 18:55:02 +0000 |
commit | 4cc0627a188a719358d9deb8a884b3941ee86820 (patch) | |
tree | b8151af7aae830dec86bd54d1fa2aa68f8a08d5e /pjsip-apps/src/symsndtest | |
parent | a1a1a2babda1465967373157c26c3d88a44f3cca (diff) |
Ticket #435: Fixed and tested audio on Symbian device
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@1641 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjsip-apps/src/symsndtest')
-rw-r--r-- | pjsip-apps/src/symsndtest/app_main.cpp | 32 |
1 files changed, 28 insertions, 4 deletions
diff --git a/pjsip-apps/src/symsndtest/app_main.cpp b/pjsip-apps/src/symsndtest/app_main.cpp index dcd6ed88..981e5308 100644 --- a/pjsip-apps/src/symsndtest/app_main.cpp +++ b/pjsip-apps/src/symsndtest/app_main.cpp @@ -28,9 +28,9 @@ #define CLOCK_RATE 8000 #define CHANNEL_COUNT 1 #define PTIME 100 -#define SAMPLES_PER_FRAME (2048) +#define SAMPLES_PER_FRAME (80) #define BITS_PER_SAMPLE 16 - +#define LOOPBACK_BUFF_COUNT 100 extern CConsoleBase* console; @@ -40,6 +40,9 @@ static unsigned rec_cnt, play_cnt; static pj_time_val t_start; +static pj_int16_t buff_loopback[SAMPLES_PER_FRAME*LOOPBACK_BUFF_COUNT]; +static pj_uint32_t pointer_w, pointer_r; + /* Logging callback */ static void log_writer(int level, const char *buf, unsigned len) { @@ -70,6 +73,7 @@ static pj_status_t app_init() /* Redirect log */ pj_log_set_log_func((void (*)(int,const char*,int)) &log_writer); pj_log_set_decor(PJ_LOG_HAS_NEWLINE); + pj_log_set_level(5); /* Init pjlib */ status = pj_init(); @@ -114,6 +118,18 @@ static pj_status_t rec_cb(void *user_data, PJ_UNUSED_ARG(timestamp); PJ_UNUSED_ARG(input); PJ_UNUSED_ARG(size); + + pj_memcpy(&buff_loopback[pointer_w*SAMPLES_PER_FRAME], input, size); + + if (size != SAMPLES_PER_FRAME*2) { + PJ_LOG(3, (THIS_FILE, "Size captured = %u", + size)); + pj_bzero(&buff_loopback[pointer_w*SAMPLES_PER_FRAME]+size/2, SAMPLES_PER_FRAME*2 - size); + } + + if (++pointer_w >= LOOPBACK_BUFF_COUNT) { + pointer_w = 0; + } ++rec_cnt; return PJ_SUCCESS; @@ -128,7 +144,12 @@ static pj_status_t play_cb(void *user_data, PJ_UNUSED_ARG(user_data); PJ_UNUSED_ARG(timestamp); - pj_bzero(output, size); + //pj_bzero(output, size); + pj_memcpy(output, &buff_loopback[pointer_r*SAMPLES_PER_FRAME], SAMPLES_PER_FRAME*2); + + if (++pointer_r >= LOOPBACK_BUFF_COUNT) { + pointer_r = 0; + } ++play_cnt; return PJ_SUCCESS; @@ -173,6 +194,9 @@ static pj_status_t snd_start(unsigned flag) return status; } + pointer_w = LOOPBACK_BUFF_COUNT/2; + pointer_r = 0; + return PJ_SUCCESS; } @@ -297,7 +321,7 @@ void ConsoleUI::RunL() break; case 'p': snd_start(PJMEDIA_DIR_PLAYBACK); - break; + break; case 'c': snd_stop(); break; |