Ignore:
Timestamp:
Feb 5, 2009 12:28:38 PM (15 years ago)
Author:
nanang
Message:
  • Fixed pjmedia_frame_ext_pop_subframes() in calculating len.
  • Fixed symbian_sound_aps.cpp in filling silence, previously just by filling zeroes.
  • Some fixes in ua.cpp: always reopen sound device (even if PCM is in use), make sure sound device closed before quit, release application pool.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/branches/projects/aps-direct/pjmedia/src/pjmedia/symbian_sound_aps.cpp

    r2438 r2439  
    759759 
    760760    switch(strm->setting.format.u32) { 
    761      
    762761    case PJMEDIA_FOURCC_G711U: 
    763762    case PJMEDIA_FOURCC_G711A: 
    764         /* Add header. */ 
    765         buf.iBuffer.Append(1); 
    766         buf.iBuffer.Append(0); 
    767  
    768         /* Assume frame size is 10ms if frame size hasn't been known. */ 
    769         if (g711_frame_len == 0) 
    770             g711_frame_len = 80; 
    771          
    772         /* Call parent stream callback to get samples to play. */ 
    773         while (samples_ready < g711_frame_len) { 
    774             if (frame->samples_cnt == 0) { 
    775                 frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED; 
    776                 strm->play_cb(strm->user_data, 0, strm->play_buf, 
    777                               strm->samples_per_frame<<1); 
     763        { 
     764            /* Add header. */ 
     765            buf.iBuffer.Append(1); 
     766            buf.iBuffer.Append(0); 
     767     
     768            /* Assume frame size is 10ms if frame size hasn't been known. */ 
     769            if (g711_frame_len == 0) 
     770                g711_frame_len = 80; 
     771             
     772            /* Call parent stream callback to get samples to play. */ 
     773            while (samples_ready < g711_frame_len) { 
     774                if (frame->samples_cnt == 0) { 
     775                    frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED; 
     776                    strm->play_cb(strm->user_data, 0, strm->play_buf, 
     777                                  strm->samples_per_frame<<1); 
     778                     
     779                    pj_assert(frame->base.type==PJMEDIA_FRAME_TYPE_EXTENDED || 
     780                              frame->base.type==PJMEDIA_FRAME_TYPE_NONE); 
     781                } 
     782     
     783                if (frame->base.type == PJMEDIA_FRAME_TYPE_EXTENDED) {  
     784                    pjmedia_frame_ext_subframe *sf; 
     785                    unsigned samples_cnt; 
     786                     
     787                    sf = pjmedia_frame_ext_get_subframe(frame, 0); 
     788                    samples_cnt = frame->samples_cnt / frame->subframe_cnt; 
     789                    if (sf->data && sf->bitlen) 
     790                        buf.iBuffer.Append((TUint8*)sf->data, sf->bitlen>>3); 
     791                    else { 
     792                        pj_uint8_t silence_code; 
     793                         
     794                        if (strm->setting.format.u32 == PJMEDIA_FOURCC_G711U) 
     795                            silence_code = pjmedia_linear2ulaw(0); 
     796                        else 
     797                            silence_code = pjmedia_linear2alaw(0); 
     798                         
     799                        buf.iBuffer.AppendFill(silence_code, samples_cnt); 
     800                    } 
     801                    samples_ready += samples_cnt; 
     802                     
     803                    pjmedia_frame_ext_pop_subframes(frame, 1); 
    778804                 
    779                 pj_assert(frame->base.type == PJMEDIA_FRAME_TYPE_EXTENDED || 
    780                           frame->base.type == PJMEDIA_FRAME_TYPE_NONE); 
    781             } 
    782  
    783             if (frame->base.type == PJMEDIA_FRAME_TYPE_EXTENDED) {  
    784                 pjmedia_frame_ext_subframe *sf; 
    785                 unsigned samples_cnt; 
    786                  
    787                 sf = pjmedia_frame_ext_get_subframe(frame, 0); 
    788                 samples_cnt = frame->samples_cnt / frame->subframe_cnt; 
    789                 if (sf->data && sf->bitlen) 
    790                     buf.iBuffer.Append((TUint8*)sf->data, sf->bitlen>>3); 
    791                 else  
    792                     buf.iBuffer.AppendFill(0, samples_cnt); 
    793                 samples_ready += samples_cnt; 
    794                  
    795                 pjmedia_frame_ext_pop_subframes(frame, 1); 
    796              
    797             } else { /* PJMEDIA_FRAME_TYPE_NONE */ 
    798                 buf.iBuffer.AppendFill(0, g711_frame_len - samples_ready); 
    799                 samples_ready = g711_frame_len; 
    800                 frame->samples_cnt = 0; 
    801                 frame->subframe_cnt = 0; 
     805                } else { /* PJMEDIA_FRAME_TYPE_NONE */ 
     806                    pj_uint8_t silence_code; 
     807                     
     808                    if (strm->setting.format.u32 == PJMEDIA_FOURCC_G711U) 
     809                        silence_code = pjmedia_linear2ulaw(0); 
     810                    else 
     811                        silence_code = pjmedia_linear2alaw(0); 
     812                     
     813                    buf.iBuffer.AppendFill(silence_code,  
     814                                           g711_frame_len - samples_ready); 
     815                    samples_ready = g711_frame_len; 
     816                    frame->samples_cnt = 0; 
     817                    frame->subframe_cnt = 0; 
     818                } 
    802819            } 
    803820        } 
     
    807824        break; 
    808825    } 
    809      
    810     unsigned tes = buf.iBuffer.Length(); 
    811826} 
    812827 
Note: See TracChangeset for help on using the changeset viewer.