Ignore:
Timestamp:
Jun 5, 2008 10:50:40 AM (16 years ago)
Author:
nanang
Message:

Ticket #473:

  • fixed issue on Speex multiple frames (encoding: encoded bits concatenation & decoding: frames parsing)
  • updated pjmedia stream & codecs on encoding multiple frames
  • introduced bit_info in pjmedia_frame and jitter buffer
File:
1 edited

Legend:

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

    r1961 r1983  
    3939    int         *flist_frame_type; 
    4040    pj_size_t   *flist_content_len; 
     41    pj_uint32_t *flist_bit_info; 
    4142    unsigned     flist_frame_size; 
    4243    unsigned     flist_max_count; 
     
    109110                                framelist->flist_max_count); 
    110111 
     112    framelist->flist_bit_info = (pj_uint32_t*) 
     113        pj_pool_zalloc(pool, sizeof(framelist->flist_bit_info[0]) *  
     114                                framelist->flist_max_count); 
     115 
    111116    framelist->flist_empty = 1; 
    112117 
     
    135140static pj_bool_t jb_framelist_get(jb_framelist_t *framelist, 
    136141                                  void *frame, pj_size_t *size, 
    137                                   pjmedia_jb_frame_type *p_type)  
     142                                  pjmedia_jb_frame_type *p_type, 
     143                                  pj_uint32_t *bit_info)  
    138144{ 
    139145    if (!framelist->flist_empty) { 
     
    144150        *p_type = (pjmedia_jb_frame_type)  
    145151                  framelist->flist_frame_type[framelist->flist_head]; 
    146         *size   = framelist->flist_content_len[framelist->flist_head]; 
     152        if (size) 
     153            *size   = framelist->flist_content_len[framelist->flist_head]; 
     154        if (bit_info) 
     155            *bit_info = framelist->flist_bit_info[framelist->flist_head]; 
    147156 
    148157        pj_bzero(framelist->flist_buffer +  
     
    222231                                     unsigned index, 
    223232                                     const void *frame, 
    224                                      unsigned frame_size)  
     233                                     unsigned frame_size, 
     234                                     pj_uint32_t bit_info) 
    225235{ 
    226236    unsigned where; 
     
    264274    framelist->flist_frame_type[where] = PJMEDIA_JB_NORMAL_FRAME; 
    265275    framelist->flist_content_len[where] = frame_size; 
     276    framelist->flist_bit_info[where] = bit_info; 
    266277 
    267278    return PJ_TRUE; 
     
    479490                                     int frame_seq) 
    480491{ 
    481     pjmedia_jbuf_put_frame2(jb, frame, frame_size, frame_seq, NULL); 
     492    pjmedia_jbuf_put_frame2(jb, frame, frame_size, 0, frame_seq, NULL); 
    482493} 
    483494 
     
    485496                                     const void *frame,  
    486497                                     pj_size_t frame_size,  
     498                                     pj_uint32_t bit_info, 
    487499                                     int frame_seq, 
    488500                                     pj_bool_t *discarded) 
     
    509521    if (seq_diff > 0) { 
    510522 
    511         while (jb_framelist_put_at(&jb->jb_framelist, 
    512                                    frame_seq,frame,min_frame_size) == PJ_FALSE) 
     523        while (jb_framelist_put_at(&jb->jb_framelist, frame_seq, frame, 
     524                                   min_frame_size, bit_info) == PJ_FALSE) 
    513525        { 
    514526            jb_framelist_remove_head(&jb->jb_framelist, 
     
    526538        pj_bool_t res; 
    527539        res = jb_framelist_put_at(&jb->jb_framelist,frame_seq,frame, 
    528                                   min_frame_size); 
     540                                  min_frame_size, bit_info); 
    529541        if (discarded) 
    530542            *discarded = !res; 
     
    539551                                     char *p_frame_type) 
    540552{ 
    541     pj_size_t size; 
    542  
    543     pjmedia_jbuf_get_frame2(jb, frame, &size, p_frame_type); 
     553    pjmedia_jbuf_get_frame2(jb, frame, NULL, p_frame_type, NULL); 
    544554} 
    545555 
     
    550560                                     void *frame,  
    551561                                     pj_size_t *size, 
    552                                      char *p_frame_type) 
     562                                     char *p_frame_type, 
     563                                     pj_uint32_t *bit_info) 
    553564{ 
    554565    pjmedia_jb_frame_type ftype; 
     
    582593 
    583594    /* Retrieve a frame from frame list */ 
    584     if (jb_framelist_get(&jb->jb_framelist,frame,size,&ftype) == PJ_FALSE) { 
     595    if (jb_framelist_get(&jb->jb_framelist,frame,size,&ftype,bit_info) == 
     596        PJ_FALSE)  
     597    { 
    585598        /* Can't return frame because jitter buffer is empty! */ 
    586599        pj_bzero(frame, jb->jb_frame_size); 
Note: See TracChangeset for help on using the changeset viewer.