Ignore:
Timestamp:
Mar 4, 2006 2:52:44 PM (18 years ago)
Author:
bennylp
Message:

Major modification in conference bridge to allow ports with different ptime and sampling rate. Also introduced sampling rate converter

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjmedia/src/pjmedia/file_port.c

    r241 r277  
    2828 
    2929#define SIGNATURE       ('F'<<24|'I'<<16|'L'<<8|'E') 
    30 #define BUF_SIZE        (320*10) 
    3130 
    3231struct file_port 
     
    6059    port->base.info.pt = 0xFF; 
    6160    port->base.info.encoding_name = pj_str("pcm"); 
     61 
     62    port->base.put_frame = &file_put_frame; 
     63    port->base.get_frame = &file_get_frame; 
     64    port->base.on_destroy = &file_on_destroy; 
     65 
     66 
     67    /* Put in default values. 
     68     * These will be overriden once the file is read. 
     69     */ 
    6270    port->base.info.sample_rate = 8000; 
    6371    port->base.info.bits_per_sample = 16; 
    6472    port->base.info.samples_per_frame = 160; 
    6573    port->base.info.bytes_per_frame = 320; 
    66  
    67     port->base.put_frame = &file_put_frame; 
    68     port->base.get_frame = &file_get_frame; 
    69     port->base.on_destroy = &file_on_destroy; 
    7074 
    7175    return port; 
     
    137141    if (wave_hdr.fmt_hdr.fmt_tag != 1 || 
    138142        wave_hdr.fmt_hdr.nchan != 1 || 
    139         wave_hdr.fmt_hdr.sample_rate != 8000 || 
    140         wave_hdr.fmt_hdr.bytes_per_sec != 16000 || 
    141         wave_hdr.fmt_hdr.block_align != 2 || 
    142         wave_hdr.fmt_hdr.bits_per_sample != 16) 
     143        wave_hdr.fmt_hdr.bits_per_sample != 16 || 
     144        wave_hdr.fmt_hdr.block_align != 2) 
    143145    { 
    144146        pj_file_close(fd); 
     
    167169    /* Initialize */ 
    168170    file_port->base.user_data = user_data; 
     171 
     172    /* Update port info. */ 
     173    file_port->base.info.sample_rate = wave_hdr.fmt_hdr.sample_rate; 
     174    file_port->base.info.bits_per_sample = wave_hdr.fmt_hdr.bits_per_sample; 
     175    file_port->base.info.samples_per_frame = file_port->base.info.sample_rate * 
     176                                             20 / 1000; 
     177    file_port->base.info.bytes_per_frame =  
     178        file_port->base.info.samples_per_frame *  
     179        file_port->base.info.bits_per_sample / 8; 
     180 
    169181 
    170182    /* For this version, we only support reading the whole 
     
    223235{ 
    224236    struct file_port *port = (struct file_port*)this_port; 
    225  
     237    unsigned frame_size; 
    226238    pj_assert(port->base.info.signature == SIGNATURE); 
     239 
     240    frame_size = port->base.info.bytes_per_frame; 
    227241 
    228242    /* Copy frame from buffer. */ 
    229243    frame->type = PJMEDIA_FRAME_TYPE_AUDIO; 
    230     frame->size = 320; 
     244    frame->size = frame_size; 
    231245    frame->timestamp.u64 = 0; 
    232246 
    233     if (port->readpos + 320 <= port->buf + port->bufsize) { 
    234         pj_memcpy(frame->buf, port->readpos, 320); 
    235         port->readpos += 320; 
     247    if (port->readpos + frame_size <= port->buf + port->bufsize) { 
     248        pj_memcpy(frame->buf, port->readpos, frame_size); 
     249        port->readpos += frame_size; 
    236250        if (port->readpos == port->buf + port->bufsize) 
    237251            port->readpos = port->buf; 
     
    241255        endread = (port->buf+port->bufsize) - port->readpos; 
    242256        pj_memcpy(frame->buf, port->readpos, endread); 
    243         pj_memcpy(((char*)frame->buf)+endread, port->buf, 320-endread); 
    244         port->readpos = port->buf + (320-endread); 
     257        pj_memcpy(((char*)frame->buf)+endread, port->buf, frame_size-endread); 
     258        port->readpos = port->buf + (frame_size - endread); 
    245259    } 
    246260 
     
    249263 
    250264/* 
    251  * 
     265 * Destroy port. 
    252266 */ 
    253267static pj_status_t file_on_destroy(pjmedia_port *this_port) 
Note: See TracChangeset for help on using the changeset viewer.