Ignore:
Timestamp:
Jun 26, 2008 6:52:16 PM (16 years ago)
Author:
nanang
Message:

Ticket #543: Updated PESQ to start/stop manually stream/record instead of using auto-rec/play/hangup, and also updated thresholds

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjsip-apps/src/test-pjsua/mod_pesq.py

    r2057 r2063  
    1616import re 
    1717import subprocess 
     18import wave 
    1819import inc_const as const 
    1920 
     
    2627# PESQ_THRESHOLD specifies the minimum acceptable PESQ MOS value, so test can be declared successful 
    2728PESQ = "tools/pesq.exe" 
    28 PESQ_THRESHOLD = 3.0 
     29PESQ_DEFAULT_THRESHOLD = 3.4 
    2930 
    3031# UserData 
     
    3940# Test body function 
    4041def test_func(t, user_data): 
    41  
    42         if len(t.process) == 0: 
    43                 return 
    4442 
    4543        ua1 = t.process[0] 
     
    6563        user_data.pesq_sample_rate_opt = "+" + clock_rate + "000" 
    6664 
     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() 
     73 
    6774        # UA1 making call 
    6875        ua1.send("m") 
    6976        ua1.send(t.inst_params[1].uri) 
    7077        ua1.expect(const.STATE_CALLING) 
     78 
     79        # UA2 wait until call established 
    7180        ua2.expect(const.STATE_CONFIRMED) 
    7281 
    73         # Disconnect mic -> rec file to avoid echo recorded when using sound device 
    74         ua2.send("cd 0 1") 
     82        # Disconnect mic -> rec file, to avoid echo recorded when using sound device 
     83        # Disconnect stream -> spk, make it silent 
     84        # Connect stream -> rec file, start recording 
     85        ua2.send("cd 0 1\ncd 4 0\ncc 4 1") 
    7586 
    76         # Auto answer, auto play, auto hangup 
    77         # Just wait for call disconnected 
    78         # Assumed WAV input is no more than 30 secs 
    79         while 1: 
    80                 line = ua2.proc.stdout.readline() 
    81                 if line == "": 
    82                         raise TestError(ua2.name + ": Premature EOF") 
     87        # Disconnect mic -> stream, make stream purely sending from file 
     88        # Disconnect stream -> spk, make it silent 
     89        # Connect file -> stream, start sending 
     90        ua1.send("cd 0 4\ncd 4 0\ncc 1 4") 
    8391 
    84                 # Search for disconnected text 
    85                 if re.search(const.STATE_DISCONNECTED, line) != None: 
    86                         break 
    87          
     92        time.sleep(inwavlen) 
     93 
     94        # Disconnect files from bridge 
     95        ua2.send("cd 4 1") 
     96        ua2.expect(const.MEDIA_DISCONN_PORT_SUCCESS) 
     97        ua1.send("cd 1 4") 
     98        ua1.expect(const.MEDIA_DISCONN_PORT_SUCCESS) 
     99 
    88100 
    89101# Post body function 
     
    102114                raise TestError("Failed to fetch PESQ result") 
    103115 
    104         # Evaluate the similarity value 
     116        # Get threshold 
     117        if (cfg_file.pesq_threshold != None) | (cfg_file.pesq_threshold > -0.5 ): 
     118                threshold = cfg_file.pesq_threshold 
     119        else: 
     120                threshold = PESQ_DEFAULT_THRESHOLD 
     121 
     122        # Evaluate the PESQ MOS value 
    105123        pesq_res = mo_pesq_out.group(1) 
    106         if (float(pesq_res) >= PESQ_THRESHOLD): 
     124        if (float(pesq_res) >= threshold): 
    107125                endpt.trace("Success, PESQ result = " + pesq_res) 
    108126        else: 
Note: See TracChangeset for help on using the changeset viewer.