Ignore:
Timestamp:
Feb 23, 2006 1:49:28 PM (18 years ago)
Author:
bennylp
Message:

Added support for NULL frame in rtp stream, fixed bugs here and there in INVITE (e.g. dont send SDP on 180), and set version to 0.5.1.2

File:
1 edited

Legend:

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

    r222 r223  
    5454    pjmedia_port_op      rx_setting;    /**< Can we receive from this port  */ 
    5555    pjmedia_port_op      tx_setting;    /**< Can we transmit to this port   */ 
     56    int                  listener_cnt;  /**< Number of listeners.           */ 
    5657    pj_bool_t           *listeners;     /**< Array of listeners.            */ 
    5758    pjmedia_vad         *vad;           /**< VAD for this port.             */ 
     
    468469        src_port->listeners[sink_slot] = 1; 
    469470        ++conf->connect_cnt; 
     471        ++src_port->listener_cnt; 
    470472 
    471473        if (conf->connect_cnt == 1) 
     
    506508        src_port->listeners[sink_slot] = 0; 
    507509        --conf->connect_cnt; 
     510        --src_port->listener_cnt; 
    508511 
    509512        PJ_LOG(4,(THIS_FILE,"Port %.*s stop transmitting to port %.*s", 
     
    557560        if (conf_port->listeners[port] != 0) { 
    558561            --conf->connect_cnt; 
     562            --conf_port->listener_cnt; 
    559563            conf_port->listeners[port] = 0; 
    560564        } 
     
    564568    conf_port = conf->ports[port]; 
    565569    for (i=0; i<conf->max_ports; ++i) { 
    566         if (conf_port->listeners[i]) 
     570        if (conf_port->listeners[i]) { 
    567571            --conf->connect_cnt; 
     572            --conf_port->listener_cnt; 
     573        } 
    568574    } 
    569575 
     
    694700 
    695701        /* Get frame from this port.  
    696          * If port has rx_buffer, then get the frame from the rx_buffer 
    697          * instead. 
     702         * If port has rx_buffer (e.g. sound port), then get the frame  
     703         * from the rx_buffer instead. 
    698704         */ 
    699         if (i==0/*conf_port->cur_rx_buf*/) { 
     705        if (i==0) { 
    700706            pj_int16_t *rx_buf; 
    701707 
    702             if (conf_port->rx_read == conf_port->rx_write) 
    703                 conf_port->rx_read = (conf_port->rx_write+RX_BUF_COUNT-RX_BUF_COUNT/2) % RX_BUF_COUNT; 
     708            if (conf_port->rx_read == conf_port->rx_write) { 
     709                conf_port->rx_read =  
     710                    (conf_port->rx_write+RX_BUF_COUNT-RX_BUF_COUNT/2) %  
     711                        RX_BUF_COUNT; 
     712            } 
    704713 
    705714            rx_buf = conf_port->rx_buf[conf_port->rx_read]; 
     
    708717            } 
    709718            conf_port->rx_read = (conf_port->rx_read+1) % RX_BUF_COUNT; 
     719 
    710720        } else { 
    711721            pjmedia_frame frame; 
     
    715725            frame.size = size; 
    716726            pjmedia_port_get_frame(conf_port->port, &frame); 
     727 
     728            if (frame.type == PJMEDIA_FRAME_TYPE_NONE) 
     729                continue; 
    717730        } 
    718731 
    719732        /* Skip (after receiving the frame) if this port is muted. */ 
    720733        if (conf_port->rx_setting == PJMEDIA_PORT_MUTE) 
     734            continue; 
     735 
     736        /* Also skip if this port doesn't have listeners. */ 
     737        if (conf_port->listener_cnt == 0) 
    721738            continue; 
    722739 
     
    728745 
    729746        /* Skip if we don't have signal. */ 
    730         if (silence) { 
    731             TRACE_(("sil:%d ", i)); 
    732             continue; 
    733         } 
     747        //if (silence) { 
     748        //    TRACE_(("sil:%d ", i)); 
     749        //    continue; 
     750        //} 
    734751 
    735752        /* Convert the buffer to unsigned value */ 
     
    743760            unsigned k; 
    744761 
    745             if (conf_port->listeners[j] == 0) 
     762            if (listener == 0) 
    746763                continue; 
    747764 
     
    768785        if (!conf_port) 
    769786            continue; 
     787 
     788        if (conf_port->tx_setting == PJMEDIA_PORT_MUTE) { 
     789            frame.type = PJMEDIA_FRAME_TYPE_NONE; 
     790            frame.buf = NULL; 
     791            frame.size = 0; 
     792             
     793            if (conf_port->port) 
     794                pjmedia_port_put_frame(conf_port->port, &frame); 
     795 
     796            continue; 
     797 
     798        } else if (conf_port->tx_setting != PJMEDIA_PORT_ENABLE) { 
     799            continue; 
     800        } 
    770801 
    771802        // 
     
    780811                        conf_port->tx_buf2 : conf_port->tx_buf1); 
    781812 
    782         if (!conf_port->sources) { 
    783             for (j=0; j<conf->samples_per_frame; ++j) 
    784                 target_buf[j] = 0; 
    785         } else { 
     813        if (conf_port->sources) { 
    786814            for (j=0; j<conf->samples_per_frame; ++j) { 
    787815                target_buf[j] = unsigned2pcm(conf_port->sum_buf[j] / conf_port->sources); 
     
    792820        conf_port->cur_tx_buf = target_buf; 
    793821 
    794         if (conf_port->tx_setting != PJMEDIA_PORT_ENABLE) 
    795             continue; 
    796  
    797822        pj_memset(&frame, 0, sizeof(frame)); 
    798         frame.type = PJMEDIA_FRAME_TYPE_AUDIO; 
     823        if (conf_port->sources) 
     824            frame.type = PJMEDIA_FRAME_TYPE_AUDIO; 
     825        else 
     826            frame.type = PJMEDIA_FRAME_TYPE_NONE; 
     827 
    799828        frame.buf = conf_port->cur_tx_buf; 
    800829        frame.size = conf->samples_per_frame * conf->bits_per_sample / 8; 
Note: See TracChangeset for help on using the changeset viewer.