Changes between Initial Version and Version 1 of CodecPerformance


Ignore:
Timestamp:
Jan 8, 2008 10:17:51 PM (16 years ago)
Author:
bennylp
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • CodecPerformance

    v1 v1  
     1Result without VAD, in cycles per sample: 
     2{{{ 
     3 pcmu            12.90 
     4 pcma            13.05 
     5 gsm             1436.85 
     6 speex/16000     5577.65 
     7 speex/8000      9868.60 
     8}}} 
     9 
     10Result with VAD, in cycles per sample: 
     11{{{ 
     12  pcmu            24.47 
     13  pcma            23.95 
     14  gsm             1538.53 
     15  speex/16000     5578.68 
     16  speex/8000      10026.28 
     17}}} 
     18 
     19Code: 
     20{{{ 
     21#include <pjsua-lib/pjsua_internal.h> 
     22 
     23static __declspec(naked) unsigned tick(void) 
     24{ 
     25    __asm { 
     26        rdtsc 
     27        ret 
     28    } 
     29} 
     30 
     31static void codec_test() 
     32{ 
     33    pj_str_t ci[16]; 
     34    pjmedia_endpt *med_ept = pjsua_var.med_endpt; 
     35    pjmedia_codec_mgr *cm; 
     36    unsigned i, count; 
     37    pj_status_t status; 
     38 
     39    cm = pjmedia_endpt_get_codec_mgr(med_ept); 
     40 
     41    ci[0] = pj_str("pcmu"); 
     42    ci[1] = pj_str("pcma"); 
     43    ci[2] = pj_str("gsm"); 
     44    ci[3] = pj_str("speex/16000"); 
     45    ci[4] = pj_str("speex/8000"); 
     46    count = 5; 
     47 
     48    for (i=0; i<count; ++i) { 
     49        pjmedia_codec_info *pci; 
     50        unsigned c=1; 
     51        pjmedia_codec *codec; 
     52        pj_pool_t *pool = pjsua_pool_create("test", 1000, 1000); 
     53        pjmedia_port *wav; 
     54        pj_int16_t framebuf[320]; 
     55        pjmedia_frame frame; 
     56        unsigned t, totsamp; 
     57        pjmedia_codec_param param; 
     58 
     59        status = pjmedia_codec_mgr_find_codecs_by_id(cm, &ci[i], &c, &pci, NULL); 
     60        pj_assert(status == PJ_SUCCESS); 
     61 
     62        //if (pci->pt != 0) 
     63        //    continue; 
     64 
     65        status = pjmedia_codec_mgr_get_default_param(cm, pci, &param); 
     66        pj_assert(status == PJ_SUCCESS); 
     67 
     68        if (pci->clock_rate == 8000) { 
     69            status = pjmedia_wav_player_port_create(pool, "../bin/d8.wav", param.info.frm_ptime, PJMEDIA_FILE_NO_LOOP, 0, &wav); 
     70        } else if (pci->clock_rate == 16000) { 
     71            status = pjmedia_wav_player_port_create(pool, "../bin/d16.wav", param.info.frm_ptime, PJMEDIA_FILE_NO_LOOP, 0, &wav); 
     72        } else if (pci->clock_rate == 32000) { 
     73            status = pjmedia_wav_player_port_create(pool, "../bin/d32.wav", param.info.frm_ptime, PJMEDIA_FILE_NO_LOOP, 0, &wav); 
     74        } else { 
     75            continue; 
     76        } 
     77 
     78        pj_assert(status == PJ_SUCCESS); 
     79 
     80        status = pjmedia_codec_mgr_alloc_codec(cm, pci, &codec); 
     81        pj_assert(status == PJ_SUCCESS); 
     82 
     83        status = codec->op->init(codec, pool); 
     84        pj_assert(status == PJ_SUCCESS); 
     85 
     86        param.setting.vad = 1; 
     87 
     88        status = codec->op->open(codec, &param); 
     89        pj_assert(status == PJ_SUCCESS); 
     90 
     91        frame.buf = (char*)framebuf; 
     92        frame.size = param.info.frm_ptime * pci->clock_rate / 1000 * 2; 
     93 
     94        t = 0; 
     95        totsamp = 0; 
     96 
     97        while (pjmedia_port_get_frame(wav, &frame)==PJ_SUCCESS && frame.type==PJMEDIA_FRAME_TYPE_AUDIO) { 
     98            char outputbuf[320]; 
     99            pjmedia_frame output; 
     100            unsigned t0, t1; 
     101 
     102            totsamp += param.info.frm_ptime * pci->clock_rate / 1000; 
     103 
     104            output.buf = outputbuf; 
     105            output.size = sizeof(outputbuf); 
     106            t0 = tick(); 
     107            status = codec->op->encode(codec, &frame, sizeof(outputbuf), &output); 
     108            t1 = tick(); 
     109            pj_assert(status == PJ_SUCCESS); 
     110            //if (status != PJ_SUCCESS) { 
     111            //  int j=0; 
     112            //} 
     113 
     114            t += (t1 - t0); 
     115 
     116            frame.size = param.info.frm_ptime * pci->clock_rate / 1000 * 2; 
     117        } 
     118 
     119        pjmedia_port_destroy(wav); 
     120        codec->op->close(codec); 
     121        pjmedia_codec_mgr_dealloc_codec(cm, codec); 
     122        pj_pool_release(pool); 
     123 
     124        PJ_LOG(3,("test", "%u\t%.*s\t%3.2f",  
     125                    pci->clock_rate, ci[i].slen, ci[i].ptr,  
     126                    t * 1.0 / totsamp)); 
     127    } 
     128} 
     129}}}