Ignore:
Timestamp:
Jun 4, 2009 6:48:49 PM (15 years ago)
Author:
nanang
Message:

Ticket #879:

  • Added pjmedia synchronizer port.
  • Updated affected components, i.e: sound port, AEC, conference bridge.
File:
1 edited

Legend:

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

    r2728 r2747  
    237237    unsigned              samples_per_frame;    /**< Samples per frame.     */ 
    238238    unsigned              bits_per_sample;      /**< Bits per sample.       */ 
     239    pj_int16_t           *master_port_buf; 
    239240}; 
    240241 
     
    458459 
    459460 
    460     status = create_pasv_port(conf, pool, &name, NULL, &conf_port); 
     461    status = create_conf_port(conf, pool, &name, NULL, &conf_port); 
    461462    if (status != PJ_SUCCESS) 
    462463        return status; 
     
    557558    conf->master_port = PJ_POOL_ZALLOC_T(pool, pjmedia_port); 
    558559    PJ_ASSERT_RETURN(conf->master_port, PJ_ENOMEM); 
     560 
     561    conf->master_port_buf = (pj_int16_t*) 
     562                            pj_pool_zalloc(pool, conf->samples_per_frame<<1); 
     563    PJ_ASSERT_RETURN(conf->master_port_buf, PJ_ENOMEM); 
    559564     
    560565    pjmedia_port_info_init(&conf->master_port->info, &name, SIGNATURE, 
     
    10521057 
    10531058        /* if source port is passive port and has no listener, reset delaybuf */ 
    1054         if (src_port->delay_buf && src_port->listener_cnt == 0) 
    1055             pjmedia_delay_buf_reset(src_port->delay_buf); 
     1059        if (src_port->listener_cnt == 0) { 
     1060            if (src_port->delay_buf) 
     1061                pjmedia_delay_buf_reset(src_port->delay_buf); 
     1062            if (src_port->port == NULL) 
     1063                pjmedia_zero_samples(conf->master_port_buf,  
     1064                                     conf->samples_per_frame); 
     1065        } 
    10561066    } 
    10571067 
     
    18421852 
    18431853        /* Get frame from this port. 
     1854         * For port 0 (master port), get the frame from master_port_buf. 
    18441855         * For passive ports, get the frame from the delay_buf. 
    18451856         * For other ports, get the frame from the port.  
    18461857         */ 
    1847         if (conf_port->delay_buf != NULL) { 
     1858        if (conf_port->port == NULL) { 
     1859 
     1860            pjmedia_copy_samples((pj_int16_t*)frame->buf, conf->master_port_buf, 
     1861                                 conf->samples_per_frame); 
     1862 
     1863        } else if (conf_port->delay_buf != NULL) { 
     1864 
    18481865            pj_status_t status; 
    18491866         
     
    20552072    pjmedia_conf *conf = (pjmedia_conf*) this_port->port_data.pdata; 
    20562073    struct conf_port *port = conf->ports[this_port->port_data.ldata]; 
    2057     pj_status_t status; 
    20582074 
    20592075    /* Check for correct size. */ 
     
    20622078                      PJMEDIA_ENCSAMPLESPFRAME); 
    20632079 
    2064     /* Check existance of delay_buf instance */ 
    2065     PJ_ASSERT_RETURN( port->delay_buf, PJ_EBUG ); 
    2066  
    20672080    /* Skip if this port is muted/disabled. */ 
    20682081    if (port->rx_setting != PJMEDIA_PORT_ENABLE) { 
     
    20752088    } 
    20762089 
    2077     status = pjmedia_delay_buf_put(port->delay_buf, (pj_int16_t*)frame->buf); 
    2078  
    2079     return status; 
     2090    pjmedia_copy_samples(conf->master_port_buf, (pj_int16_t*)frame->buf, 
     2091                         conf->samples_per_frame); 
     2092 
     2093    return PJ_SUCCESS; 
    20802094} 
    20812095 
Note: See TracChangeset for help on using the changeset viewer.