Ignore:
Timestamp:
Apr 27, 2006 10:36:40 PM (18 years ago)
Author:
bennylp
Message:

Initial support for stereo codecs, and added L16 codecs. Also better handling for case remote media is restarted

File:
1 edited

Legend:

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

    r320 r411  
    3636/* These are the only public functions exported to applications */ 
    3737PJ_DECL(pj_status_t) g711_init_factory (pjmedia_codec_factory *factory, pj_pool_t *pool); 
    38 PJ_DECL(pj_status_t) g711_deinit_factory (pjmedia_codec_factory *factory); 
    3938 
    4039/* Algorithm prototypes. */ 
     
    6059 
    6160/* Prototypes for G711 implementation. */ 
    62 static pj_status_t  g711_codec_default_attr (pjmedia_codec *codec,  
    63                                              pjmedia_codec_param *attr); 
    6461static pj_status_t  g711_init( pjmedia_codec *codec,  
    6562                               pj_pool_t *pool ); 
     
    8481static pjmedia_codec_op g711_op =  
    8582{ 
    86     &g711_codec_default_attr , 
    8783    &g711_init, 
    8884    &g711_open, 
     
    120116 
    121117 
    122 PJ_DEF(pj_status_t) g711_deinit_factory (pjmedia_codec_factory *factory) 
    123 { 
    124     PJ_ASSERT_RETURN(factory==&g711_factory.base, PJ_EINVAL); 
    125  
    126     /* Invalidate member to help detect errors */ 
    127     g711_factory.codec_list.next = g711_factory.codec_list.prev = NULL; 
    128     return 0; 
    129 } 
    130  
    131118PJ_DEF(pj_status_t) pjmedia_codec_g711_init(pjmedia_endpt *endpt) 
    132119{ 
     
    223210} 
    224211 
    225 static pj_status_t g711_test_alloc( pjmedia_codec_factory *factory, const pjmedia_codec_info *id ) 
     212static pj_status_t g711_test_alloc(pjmedia_codec_factory *factory,  
     213                                   const pjmedia_codec_info *id ) 
    226214{ 
    227215    PJ_UNUSED_ARG(factory); 
     
    238226 
    239227    pj_memset(attr, 0, sizeof(pjmedia_codec_param)); 
    240     attr->sample_rate = 8000; 
     228    attr->clock_rate = 8000; 
     229    attr->channel_cnt = 1; 
    241230    attr->avg_bps = G711_BPS; 
    242231    attr->pcm_bits_per_sample = 16; 
     
    261250        codecs[count].pt = PJMEDIA_RTP_PT_PCMU; 
    262251        codecs[count].encoding_name = pj_str("PCMU"); 
    263         codecs[count].sample_rate = 8000; 
     252        codecs[count].clock_rate = 8000; 
     253        codecs[count].channel_cnt = 1; 
    264254        ++count; 
    265255    } 
    266256    if (count < *max_count) { 
    267         codecs[1].type = PJMEDIA_TYPE_AUDIO; 
    268         codecs[1].pt = PJMEDIA_RTP_PT_PCMA; 
    269         codecs[1].encoding_name = pj_str("PCMA"); 
    270         codecs[1].sample_rate = 8000; 
     257        codecs[count].type = PJMEDIA_TYPE_AUDIO; 
     258        codecs[count].pt = PJMEDIA_RTP_PT_PCMA; 
     259        codecs[count].encoding_name = pj_str("PCMA"); 
     260        codecs[count].clock_rate = 8000; 
     261        codecs[count].channel_cnt = 1; 
    271262        ++count; 
    272263    } 
     
    293284 
    294285        codec = pj_pool_alloc(g711_factory.pool, sizeof(pjmedia_codec)); 
    295         codec_priv = pj_pool_alloc(g711_factory.pool, sizeof(struct g711_private)); 
     286        codec_priv = pj_pool_alloc(g711_factory.pool,  
     287                                   sizeof(struct g711_private)); 
    296288        if (!codec || !codec_priv) { 
    297289            pj_mutex_unlock(g711_factory.mutex); 
     
    320312} 
    321313 
    322 static pj_status_t g711_dealloc_codec( pjmedia_codec_factory *factory, pjmedia_codec *codec ) 
     314static pj_status_t g711_dealloc_codec(pjmedia_codec_factory *factory,  
     315                                      pjmedia_codec *codec ) 
    323316{ 
    324317     
     
    343336} 
    344337 
    345 static pj_status_t g711_codec_default_attr  (pjmedia_codec *codec, pjmedia_codec_param *attr) 
    346 { 
    347     struct g711_private *priv = codec->codec_data; 
    348     pjmedia_codec_info id; 
    349  
    350     id.pt = priv->pt; 
    351     return g711_default_attr (NULL, &id, attr); 
    352 } 
    353  
    354338static pj_status_t g711_init( pjmedia_codec *codec, pj_pool_t *pool ) 
    355339{ 
     
    361345} 
    362346 
    363 static pj_status_t g711_open( pjmedia_codec *codec, pjmedia_codec_param *attr ) 
     347static pj_status_t g711_open(pjmedia_codec *codec,  
     348                             pjmedia_codec_param *attr ) 
    364349{ 
    365350    struct g711_private *priv = codec->codec_data; 
     
    401386} 
    402387 
    403 static pj_status_t  g711_encode( pjmedia_codec *codec, const struct pjmedia_frame *input, 
    404                                  unsigned output_buf_len, struct pjmedia_frame *output) 
     388static pj_status_t  g711_encode(pjmedia_codec *codec,  
     389                                const struct pjmedia_frame *input, 
     390                                unsigned output_buf_len,  
     391                                struct pjmedia_frame *output) 
    405392{ 
    406393    pj_int16_t *samples = (pj_int16_t*) input->buf; 
     
    409396    /* Check output buffer length */ 
    410397    if (output_buf_len < input->size / 2) 
    411         return -1; 
     398        return PJMEDIA_CODEC_EFRMTOOSHORT; 
    412399 
    413400    /* Encode */ 
     
    428415 
    429416    } else { 
    430         return -1; 
     417        return PJMEDIA_EINVALIDPT; 
    431418    } 
    432419 
     
    434421    output->size = input->size / 2; 
    435422 
    436     return 0; 
    437 } 
    438  
    439 static pj_status_t  g711_decode( pjmedia_codec *codec, const struct pjmedia_frame *input, 
    440                                  unsigned output_buf_len, struct pjmedia_frame *output) 
     423    return PJ_SUCCESS; 
     424} 
     425 
     426static pj_status_t  g711_decode(pjmedia_codec *codec,  
     427                                const struct pjmedia_frame *input, 
     428                                unsigned output_buf_len,  
     429                                struct pjmedia_frame *output) 
    441430{ 
    442431    struct g711_private *priv = codec->codec_data; 
     
    444433    /* Check output buffer length */ 
    445434    if (output_buf_len < input->size * 2) 
    446         return -1; 
     435        return PJMEDIA_CODEC_EPCMTOOSHORT; 
    447436 
    448437    /* Decode */ 
     
    465454 
    466455    } else { 
    467         return -1; 
     456        return PJMEDIA_EINVALIDPT; 
    468457    } 
    469458 
     
    471460    output->size = input->size * 2; 
    472461 
    473     return 0; 
     462    return PJ_SUCCESS; 
    474463} 
    475464 
Note: See TracChangeset for help on using the changeset viewer.