• Stefan Knoblich's avatar
    ftmod_misdn: More reworking of b-channel audio tx handling. · a856d81a
    Stefan Knoblich 提交于
    Use the amount of audio data received in misdn_read() to determine how many
    bytes we need to send to the b-channel (= how much free space is left
    in the b-channel tx queue). (This is how libosmo-abis and LCR handle it too.)
    
    A pipe is used as a poll()-able audio tx buffer (filled in misdn_write()):
    FTDM_WRITE wait requests are currently poll()-ed on the input side of the pipe,
    whereas FTDM_READ and _EVENT requests are poll()-ed on the b-channel socket itself.
    
    For every N-bytes of audio data read from the b-channel in misdn_read(),
    we try to get as much out of the tx pipe, convert it into the ISDN_P_B_RAW
    format and send it to the b-channel socket.
    
    If there's less than N-bytes left in the pipe, we fill the remaining buffer
    with silence to avoid buffer underflows.
    
    B-Channel handling overview:
    
      - misdn_wait(FTDM_WRITE) on audio pipe
    
      - misdn_write() put audio data into pipe
    
      - misdn_wait(FTDM_READ) for next incoming mISDN
        message on b-channel socket
    
      - misdn_read() handle mISDN event, for PH_DATA_IND:
    
          - Write data into channel buffer and convert
            to a/u-law using misdn_convert_audio_bits()
    
          - Try to fetch N-bytes from audio pipe
    
          - If not enough bytes in pipe: fill remaining space with silence
    
          - Convert audio to raw format
    
          - Send to b-channel (PH_DATA_REQ)
    
    Known problems / bugs / further investigation:
    
       1. Bridge aborted by "Write Buffer 0 bytes Failed!" error from switch_core_io.c.
          This is "fixed" by _not_ setting the b-channel sockfd to non-blocking mode.
    
       2. Audio glitches (maybe caused by FTDM_WRITE misdn_wait() handling or blocking I/O on sockfd?)
    
       3. misdn_read() EBUSY error messages from sending data to b-channel sockfd after enabling channel.
    Signed-off-by: 's avatarStefan Knoblich <stkn@openisdn.net>
    a856d81a
名称
最后提交
最后更新
..
build 正在载入提交数据...
conf 正在载入提交数据...
docs 正在载入提交数据...
mod_freetdm 正在载入提交数据...
msvc 正在载入提交数据...
sample 正在载入提交数据...
src 正在载入提交数据...
.gitignore 正在载入提交数据...
.update 正在载入提交数据...
AUTHORS 正在载入提交数据...
CMakeLists.txt 正在载入提交数据...
ChangeLog 正在载入提交数据...
Makefile.am 正在载入提交数据...
NEWS 正在载入提交数据...
README 正在载入提交数据...
TODO 正在载入提交数据...
acinclude.m4 正在载入提交数据...
bootstrap 正在载入提交数据...
configure.ac 正在载入提交数据...
configure.gnu 正在载入提交数据...
cyginstall.sh 正在载入提交数据...
freetdm.2008.sln 正在载入提交数据...
freetdm.2010.sln 正在载入提交数据...
freetdm.pc.in 正在载入提交数据...
mkrelease.sh 正在载入提交数据...
ozrename.sh 正在载入提交数据...
ozreplace.sh 正在载入提交数据...