Changeset 2918

Show
Ignore:
Timestamp:
11/11/99 11:41:26 (14 years ago)
Author:
ucacoxh
Message:

- Added VAT trick of subtracting a few of frame durations when marker

bit set since VAD algorithms cause packet compression at talkspurt
starts.

- Added check for jitter larger than current playout. If so we obviously

have wrong playout and need to recalculate.

- Fixed equality in cont_toged checked. >= rather than ==.

Location:
rat/trunk
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • rat/trunk/pdb.h

    r2911 r2918  
    3737        u_int16         units_per_packet; 
    3838        u_int16         inter_pkt_gap;               /* expected time between pkt arrivals */ 
     39        ts_t            frame_dur; 
    3940        u_char          enc; 
    4041        char*           enc_fmt; 
  • rat/trunk/playout_calc.c

    r2914 r2918  
    2020#include "pdb.h" 
    2121#include "playout_calc.h" 
     22 
     23#define PLAYOUT_JITTER_SCALE 2 
    2224 
    2325static ts_t 
     
    6264{ 
    6365        pdb_entry_t *e; 
    64         ts_t         var; 
    6566 
    6667        pdb_item_get(sp->pdb, ssrc, &e); 
     
    6869 
    6970        if (new_spurt == TRUE) { 
     71                ts_t         hvar, jvar; /* Host and jitter components       */ 
    7072                debug_msg("New talkspurt\n"); 
    71                 /* Get RAT specific variable playout component               */ 
    72                 var = playout_variable_component(sp, e); 
    73                 /* Use the larger of jitter and variable playout component.  */ 
    74                 if (ts_gt(var, e->jitter)) { 
    75                         e->playout = var; 
     73                hvar = playout_variable_component(sp, e); 
     74                jvar = ts_mul(e->jitter, PLAYOUT_JITTER_SCALE); 
     75                if (ts_gt(hvar, jvar)) { 
     76                        e->playout = hvar; 
    7677                } else { 
    77                         e->playout = e->jitter; 
     78                        e->playout = jvar; 
    7879                } 
    79                 debug_msg("Playout offset (%08lu)\n", e->playout.ticks); 
    8080                e->transit     = transit; 
    8181                e->avg_transit = transit; 
  • rat/trunk/source.c

    r2917 r2918  
    578578                        /* Something has changed or is uninitialized...      */ 
    579579                        const codec_format_t *cf; 
    580                         const audio_format *dev_fmt; 
    581                         codec_id_t cid; 
     580                        const audio_format   *dev_fmt; 
     581                        codec_id_t           cid; 
     582                        u_int32              samples_per_frame; 
    582583 
    583584                        cid = codec_get_by_payload(codec_pt); 
     
    589590                        e->units_per_packet = units_per_packet; 
    590591                        e->channel_coder_id = ccid;         
    591                         e->inter_pkt_gap    = e->units_per_packet *  
    592                                 (u_int16)codec_get_samples_per_frame(cid); 
     592                        samples_per_frame   = codec_get_samples_per_frame(cid); 
     593                        debug_msg("Samples per frame %d rate %d\n", samples_per_frame, cf->format.sample_rate); 
     594                        e->inter_pkt_gap    = e->units_per_packet * (u_int16)samples_per_frame; 
     595                        e->frame_dur        = ts_map32(cf->format.sample_rate, samples_per_frame); 
     596 
    593597                        debug_msg("Encoding change\n"); 
    594598                        /* Get string describing encoding.                   */ 
     
    619623                } 
    620624 
     625                if (ts_gt(e->jitter, e->playout)) { 
     626                        /* Network conditions have changed drastically.      */ 
     627                        /* We are in the wrong ball park change immediately. */ 
     628                        adjust_playout = TRUE; 
     629                } 
     630 
    621631                /* Check for continuous number of packets being discarded.   */ 
    622632                /* This happens when jitter or transit estimate is no longer */ 
    623633                /* consistent with the real world.                           */ 
    624                 if (e->cont_toged == NO_CONT_TOGED_FOR_PLAYOUT_RECALC) { 
     634                if (e->cont_toged >= NO_CONT_TOGED_FOR_PLAYOUT_RECALC) { 
    625635                        adjust_playout = TRUE; 
    626636                        e->cont_toged  = 0; 
     
    650660 
    651661                playout = playout_calc(sp, e->ssrc, transit, adjust_playout); 
     662                if (p->m && ts_gt(playout, e->frame_dur)) { 
     663                        /* Packets are likely to be compressed at talkspurt start */ 
     664                        /* because of VAD going back and grabbing frames.         */ 
     665                        playout = ts_sub(playout, e->frame_dur); 
     666                        debug_msg("New ts shift XXX\n"); 
     667                } 
    652668                playout = ts_add(e->transit, playout); 
    653669                playout = ts_add(src_ts, playout); 
     
    662678                                  src->last_played.ticks, 
    663679                                  playout.ticks); 
     680                        src->pdbe->cont_toged++; 
     681                        src->pdbe->jit_toged++; 
    664682                        xfree(p); 
    665683                        continue; 
     
    840858                return FALSE; 
    841859        } 
    842  
    843         return FALSE; 
    844860 
    845861        actual  = source_get_audio_buffered(src);