Changeset 4617

Show
Ignore:
Timestamp:
02/17/10 17:36:30 (4 years ago)
Author:
soohyunc
Message:

*** Vic can send packets out within the encoding loop ***

as long as Vic has enough cwnd to send that packet.

i.e.,)
as long as cwnd allows to send the packet during encoding, Vic doesn't have
to wait for XR (ackvec) reception.

Vic should be able to send the packet immediately even in the encoding loop.

Location:
vic/branches/cc/rtp
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • vic/branches/cc/rtp/transmitter.cpp

    r4614 r4617  
    9393        loopback_(0), 
    9494        is_cc_active_(1), 
    95         is_first_(1), 
     95        is_buf_empty_(1), 
    9696        cc_type_(WBCC) 
    9797{ 
     
    221221        case WBCC: 
    222222                // if it is the very first packet, just send it. 
    223                 if(is_first_) { 
     223                if(is_buf_empty_) { 
    224224                        if (head_ != 0) { 
    225225                                tail_->next = pb; 
     
    229229                        pb->next = 0; 
    230230                        cc_tfwc_output(); 
    231                         is_first_ = false; 
     231                        is_buf_empty_ = false; 
    232232                }  
    233233                // if it is not, just queue up the packets. 
     
    239239                                tail_ = head_ = pb; 
    240240                        pb->next = 0; 
     241                        cc_tfwc_output(pb); 
    241242                } 
    242243                break; 
     
    247248        case RBCC: 
    248249                // if it is the very first packet, just send it. 
    249                 if(is_first_) { 
     250                if(is_buf_empty_) { 
    250251                        if (head_ != 0) { 
    251252                                tail_->next = pb; 
     
    255256                        pb->next = 0; 
    256257                        cc_tfrc_output(); 
    257                         is_first_ = false; 
     258                        is_buf_empty_ = false; 
    258259                }  
    259260                // if it is not, just queue up the packets. 
     
    295296} 
    296297 
     298void Transmitter::cc_tfwc_output(pktbuf* pb)  
     299{ 
     300//      fprintf(stderr,"\t--------entering cc_tfwc_output(pb)---------\n"); 
     301//      fprintf(stderr,"\t|                                          |\n"); 
     302//      fprintf(stderr,"\tV                                          V\n"); 
     303 
     304        // pb is not null, hence parse it. 
     305        rtphdr* rh = (rtphdr *) pb->data; 
     306 
     307        int magic = (int) tfwc_magic(); 
     308        //debug_msg("cwnd: %d\n", magic); 
     309        int jack = (int) tfwc_sndr_jacked(); 
     310        //debug_msg("jack: %d\n", jack); 
     311         
     312        if (ntohs(rh->rh_seqno) <= magic + jack) { 
     313                fprintf(stderr, "\n\tnow: %f\tseqno: %d\n\n",  
     314                        tx_now()-tx_now_offset_, ntohs(rh->rh_seqno)); 
     315                // record seqno and timestamp at TfwcSndr side 
     316                tfwc_sndr_send(pb); 
     317 
     318                // move head pointer 
     319                head_ = pb->next; 
     320 
     321                // call Transmitter::output(pb) 
     322                output(pb); 
     323        } 
     324//      fprintf(stderr,"\t^                                          ^\n"); 
     325//      fprintf(stderr,"\t|                                          |\n"); 
     326//      fprintf(stderr,"\t============================================\n"); 
     327} 
     328 
    297329/* 
    298330 * main TFWC CC output routines 
     
    300332void Transmitter::cc_tfwc_output() 
    301333{ 
    302         fprintf(stderr,"\t---------entering cc_tfwc_output()----------\n"); 
    303         fprintf(stderr,"\t|                                          |\n"); 
    304         fprintf(stderr,"\tV                                          V\n"); 
     334//      fprintf(stderr,"\t---------entering cc_tfwc_output()----------\n"); 
     335//      fprintf(stderr,"\t|                                          |\n"); 
     336//      fprintf(stderr,"\tV                                          V\n"); 
    305337 
    306338        // head of the RTP data packet buffer (pb) 
     
    310342        // the packet buffer. and then, return - i.e., do not try sending packets. 
    311343        if (pb == 0) { 
    312                 is_first_ = true; 
    313                 fprintf(stderr, 
    314                 "\t=========== PACKET NOT AVAILABLE ===========\n\n"); 
     344                is_buf_empty_ = true; 
     345//              fprintf(stderr, 
     346//              "\t=========== PACKET NOT AVAILABLE ===========\n\n"); 
    315347                return; 
    316348        } 
     
    322354        // cwnd value 
    323355        int magic = (int) tfwc_magic(); 
    324         //debug_msg("cwnd: %d\n", magic); 
     356//      debug_msg("cwnd: %d\n", magic); 
    325357 
    326358        // just acked seqno 
    327359        int jack = (int) tfwc_sndr_jacked(); 
    328         //debug_msg("jack: %d\n", jack); 
     360//      debug_msg("jack: %d\n", jack); 
    329361 
    330362        //fprintf(stderr, "\tXXX now: %f\tnum: %d\tcwnd: %d\tjack: %d\n", 
     
    353385                } 
    354386        } // end while () 
    355         fprintf(stderr,"\t^                                          ^\n"); 
    356         fprintf(stderr,"\t|                                          |\n"); 
    357         fprintf(stderr,"\t============================================\n"); 
     387//      fprintf(stderr,"\t^                                          ^\n"); 
     388//      fprintf(stderr,"\t|                                          |\n"); 
     389//      fprintf(stderr,"\t============================================\n"); 
    358390} 
    359391 
  • vic/branches/cc/rtp/transmitter.h

    r4610 r4617  
    9292        inline bool is_cc_on() { return is_cc_active_; } 
    9393        void cc_tfwc_output(); 
     94        void cc_tfwc_output(pktbuf*); 
    9495        void cc_tfrc_output(); 
    9596 
     
    140141        /* Cc related variables */ 
    141142        bool is_cc_active_;     /* is Cc module activated?              */ 
    142         bool is_first_;         /* is this first CC'd data packet?      */ 
     143        bool is_buf_empty_;             /* is pktbuf empty?     */ 
    143144        int cc_type_; 
    144145