Ignore:
Timestamp:
Jan 20, 2007 5:18:14 AM (14 years ago)
Author:
bennylp
Message:

Implement ticket #56: Periodically transmit RTP packet on silence, to maintain NAT binding etc.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjmedia/src/pjmedia-codec/ilbc.c

    r874 r888  
    129129    pj_bool_t            vad_enabled; 
    130130    pj_bool_t            plc_enabled; 
     131    pj_timestamp         last_tx; 
    131132 
    132133    pj_bool_t            enc_ready; 
     
    427428        return status; 
    428429 
     430    /* Init last_tx (not necessary because of zalloc, but better 
     431     * be safe in case someone remove zalloc later. 
     432     */ 
     433    pj_set_timestamp32(&ilbc_codec->last_tx, 0, 0); 
     434 
    429435    PJ_LOG(5,(ilbc_codec->obj_name,  
    430436              "iLBC codec opened, encoder mode=%d, decoder mode=%d", 
     
    513519        return PJMEDIA_CODEC_EFRMTOOSHORT; 
    514520 
    515     if (input->size != ilbc_codec->enc_samples_per_frame * 2) 
     521    if (input->size != (ilbc_codec->enc_samples_per_frame << 1)) 
    516522        return PJMEDIA_CODEC_EPCMFRMINLEN; 
    517523 
     
    519525    if (ilbc_codec->vad_enabled) { 
    520526        pj_bool_t is_silence; 
     527        pj_int32_t silence_period; 
     528 
     529        silence_period = pj_timestamp_diff32(&ilbc_codec->last_tx, 
     530                                              &input->timestamp); 
    521531 
    522532        is_silence = pjmedia_silence_det_detect(ilbc_codec->vad,  
    523533                                                input->buf, 
    524                                                 input->size / 2, 
     534                                                (input->size >> 1), 
    525535                                                NULL); 
    526         if (is_silence) { 
     536        if (is_silence && 
     537            PJMEDIA_CODEC_MAX_SILENCE_PERIOD != -1 && 
     538            silence_period < PJMEDIA_CODEC_MAX_SILENCE_PERIOD) 
     539        { 
    527540            output->type = PJMEDIA_FRAME_TYPE_NONE; 
    528541            output->buf = NULL; 
    529542            output->size = 0; 
    530             output->timestamp.u64 = input->timestamp.u64; 
     543            output->timestamp = input->timestamp; 
    531544            return PJ_SUCCESS; 
     545        } else { 
     546            ilbc_codec->last_tx = input->timestamp; 
    532547        } 
    533548    } 
     
    545560    output->type = PJMEDIA_FRAME_TYPE_AUDIO; 
    546561    output->size = ilbc_codec->enc.no_of_bytes; 
    547     output->timestamp.u64 = input->timestamp.u64; 
     562    output->timestamp = input->timestamp; 
    548563 
    549564    return PJ_SUCCESS; 
     
    564579    PJ_ASSERT_RETURN(input && output, PJ_EINVAL); 
    565580 
    566     if (output_buf_len < ilbc_codec->dec_samples_per_frame*2) 
     581    if (output_buf_len < (ilbc_codec->dec_samples_per_frame << 1)) 
    567582        return PJMEDIA_CODEC_EPCMTOOSHORT; 
    568583 
     
    578593        ((short*)output->buf)[i] = (short)ilbc_codec->dec_block[i]; 
    579594    } 
    580     output->size = ilbc_codec->dec_samples_per_frame * 2; 
     595    output->size = (ilbc_codec->dec_samples_per_frame << 1); 
    581596    output->type = PJMEDIA_FRAME_TYPE_AUDIO; 
    582     output->timestamp.u64 = input->timestamp.u64; 
     597    output->timestamp = input->timestamp; 
    583598 
    584599    return PJ_SUCCESS; 
     
    599614    PJ_ASSERT_RETURN(output, PJ_EINVAL); 
    600615 
    601     if (output_buf_len < ilbc_codec->dec_samples_per_frame*2) 
     616    if (output_buf_len < (ilbc_codec->dec_samples_per_frame << 1)) 
    602617        return PJMEDIA_CODEC_EPCMTOOSHORT; 
    603618 
     
    609624        ((short*)output->buf)[i] = (short)ilbc_codec->dec_block[i]; 
    610625    } 
    611     output->size = ilbc_codec->dec_samples_per_frame * 2; 
     626    output->size = (ilbc_codec->dec_samples_per_frame << 1); 
    612627    output->type = PJMEDIA_FRAME_TYPE_AUDIO; 
    613628 
Note: See TracChangeset for help on using the changeset viewer.