Changeset 2075


Ignore:
Timestamp:
Jun 27, 2008 4:18:13 PM (11 years ago)
Author:
nanang
Message:

Ticket #543:

  • Fixed bug of calculating clock interval which should include channel count
  • Added L16 codecs including stereo
  • Added WAV files for stereo tests
Location:
pjproject/trunk
Files:
10 added
4 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjmedia/include/pjmedia/clock.h

    r2039 r2075  
    122122 * @param pool              Pool to allocate memory. 
    123123 * @param clock_rate        Number of samples per second. 
     124 * @param channel_count     Number of channel. 
    124125 * @param samples_per_frame Number of samples per frame. This argument 
    125  *                          along with clock_rate, specifies the interval 
    126  *                          of each clock run (or clock ticks). 
     126 *                          along with clock_rate and channel_count, specifies  
     127 *                          the interval of each clock run (or clock ticks). 
    127128 * @param options           Bitmask of pjmedia_clock_options. 
    128129 * @param cb                Callback to be called for each clock tick. 
     
    135136PJ_DECL(pj_status_t) pjmedia_clock_create( pj_pool_t *pool, 
    136137                                           unsigned clock_rate, 
     138                                           unsigned channel_count, 
    137139                                           unsigned samples_per_frame, 
    138140                                           unsigned options, 
  • pjproject/trunk/pjmedia/src/pjmedia/clock_thread.c

    r2039 r2075  
    5656PJ_DEF(pj_status_t) pjmedia_clock_create( pj_pool_t *pool, 
    5757                                          unsigned clock_rate, 
     58                                          unsigned channel_count, 
    5859                                          unsigned samples_per_frame, 
    5960                                          unsigned options, 
     
    7576        return status; 
    7677 
    77     clock->interval.u64 = samples_per_frame * clock->freq.u64 / clock_rate; 
     78    clock->interval.u64 = samples_per_frame * clock->freq.u64 /  
     79                          channel_count / clock_rate; 
    7880    clock->next_tick.u64 = 0; 
    7981    clock->timestamp.u64 = 0; 
  • pjproject/trunk/pjmedia/src/pjmedia/master_port.c

    r2039 r2075  
    5353    pjmedia_master_port *m; 
    5454    unsigned clock_rate; 
     55    unsigned channel_count; 
    5556    unsigned samples_per_frame; 
    5657    unsigned bytes_per_frame; 
     
    6566                     PJMEDIA_ENCCLOCKRATE); 
    6667 
    67     /* Both ports MUST have equal ptime */ 
    68     PJ_ASSERT_RETURN(u_port->info.clock_rate/u_port->info.samples_per_frame== 
    69                      d_port->info.clock_rate/d_port->info.samples_per_frame, 
     68    /* Both ports MUST have equal samples per frame */ 
     69    PJ_ASSERT_RETURN(u_port->info.samples_per_frame== 
     70                     d_port->info.samples_per_frame, 
    7071                     PJMEDIA_ENCSAMPLESPFRAME); 
     72 
     73    /* Both ports MUST have equal channel count */ 
     74    PJ_ASSERT_RETURN(u_port->info.channel_count == d_port->info.channel_count, 
     75                     PJMEDIA_ENCCHANNEL); 
    7176 
    7277 
     
    7479    clock_rate = u_port->info.clock_rate; 
    7580    samples_per_frame = u_port->info.samples_per_frame; 
     81    channel_count = u_port->info.channel_count; 
    7682 
    7783 
     
    103109 
    104110    /* Create media clock */ 
    105     status = pjmedia_clock_create(pool, clock_rate, samples_per_frame,  
    106                                   options, &clock_callback, m, &m->clock); 
     111    status = pjmedia_clock_create(pool, clock_rate, channel_count,  
     112                                  samples_per_frame, options, &clock_callback, 
     113                                  m, &m->clock); 
    107114    if (status != PJ_SUCCESS) { 
    108115        pj_lock_destroy(m->lock); 
  • pjproject/trunk/pjsip-apps/src/test-pjsua/mod_pesq.py

    r2063 r2075  
    5050        user_data.output_filename = re.compile(const.MEDIA_REC_FILE).search(ua2.inst_param.arg).group(1) 
    5151 
    52         # Find appropriate clock rate for the input file 
     52        # Get WAV input length, in seconds 
     53        fin = wave.open(user_data.input_filename, "r") 
     54        if fin == None: 
     55                raise TestError("Failed opening input WAV file") 
     56        inwavlen = fin.getnframes() * 1.0 / fin.getframerate() 
     57        inwavlen += 0.2 
     58        fin.close() 
     59        print "WAV input len = " + str(inwavlen) + "s" 
     60 
     61        # Get clock rate of the output 
    5362        mo_clock_rate = re.compile("\.(\d+)\.wav").search(user_data.output_filename) 
    5463        if (mo_clock_rate==None): 
    5564                raise TestError("Cannot compare input & output, incorrect output filename format") 
    5665        clock_rate = mo_clock_rate.group(1) 
    57         user_data.input_filename = re.sub("\.\d+\.wav", "."+clock_rate+".wav", user_data.input_filename) 
     66         
     67        # Get channel count of the output 
     68        channel_count = 1 
     69        if re.search("--stereo", ua2.inst_param.arg) != None: 
     70                channel_count = 2 
     71         
     72        # Get matched input file from output file 
     73        # (PESQ evaluates only files whose same clock rate & channel count) 
     74        if channel_count == 2: 
     75            if re.search("\.\d+\.\d+\.wav", user_data.input_filename) != None: 
     76                    user_data.input_filename = re.sub("\.\d+\.\d+\.wav",  
     77                                                      "." + str(channel_count) + "."+clock_rate+".wav", user_data.input_filename) 
     78            else: 
     79                    user_data.input_filename = re.sub("\.\d+\.wav",  
     80                                                      "." + str(channel_count) + "."+clock_rate+".wav", user_data.input_filename) 
    5881 
    5982        if (clock_rate != "8") & (clock_rate != "16"): 
     
    6285        # Get conference clock rate of UA2 for PESQ sample rate option 
    6386        user_data.pesq_sample_rate_opt = "+" + clock_rate + "000" 
    64  
    65         # Get WAV input length, in seconds 
    66         fin = wave.open(user_data.input_filename, "r") 
    67         if fin == None: 
    68                 raise TestError("Failed opening input WAV file") 
    69         inwavlen = fin.getnframes() // fin.getframerate() 
    70         if (fin.getnframes() % fin.getframerate()) > 0: 
    71                 inwavlen = inwavlen + 1 
    72         fin.close() 
    7387 
    7488        # UA1 making call 
     
    110124 
    111125        # Parse ouput 
    112         mo_pesq_out = re.compile("Prediction[^=]+=\s+([\d\.]+)\s*").search(pesq_out[0]) 
     126        mo_pesq_out = re.compile("Prediction[^=]+=\s+([\-\d\.]+)\s*").search(pesq_out[0]) 
    113127        if (mo_pesq_out == None): 
    114128                raise TestError("Failed to fetch PESQ result") 
Note: See TracChangeset for help on using the changeset viewer.