Ignore:
Timestamp:
Feb 8, 2006 10:43:39 PM (18 years ago)
Author:
bennylp
Message:

Finished new pjmedia rewrite

File:
1 edited

Legend:

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

    r121 r159  
    2121 */ 
    2222#include <pjmedia/codec.h> 
     23#include <pjmedia/errno.h> 
    2324#include <pj/pool.h> 
    2425#include <pj/string.h> 
     
    3031 
    3132/* These are the only public functions exported to applications */ 
    32 PJ_DECL(pj_status_t) g711_init_factory (pj_codec_factory *factory, pj_pool_t *pool); 
    33 PJ_DECL(pj_status_t) g711_deinit_factory (pj_codec_factory *factory); 
     33PJ_DECL(pj_status_t) g711_init_factory (pjmedia_codec_factory *factory, pj_pool_t *pool); 
     34PJ_DECL(pj_status_t) g711_deinit_factory (pjmedia_codec_factory *factory); 
    3435 
    3536/* Algorithm prototypes. */ 
     
    4041 
    4142/* Prototypes for G711 factory */ 
    42 static pj_status_t  g711_match_id( pj_codec_factory *factory, const pj_codec_id *id ); 
    43 static pj_status_t  g711_default_attr( pj_codec_factory *factory, const pj_codec_id *id, pj_codec_attr *attr ); 
    44 static unsigned     g711_enum_codecs (pj_codec_factory *factory, unsigned count, pj_codec_id codecs[]); 
    45 static pj_codec*    g711_alloc_codec( pj_codec_factory *factory, const pj_codec_id *id); 
    46 static void         g711_dealloc_codec( pj_codec_factory *factory, pj_codec *codec ); 
     43static pj_status_t g711_match_id( pjmedia_codec_factory *factory, const pjmedia_codec_info *id ); 
     44static pj_status_t g711_default_attr( pjmedia_codec_factory *factory, const pjmedia_codec_info *id, pjmedia_codec_param *attr ); 
     45static pj_status_t g711_enum_codecs (pjmedia_codec_factory *factory, unsigned *count, pjmedia_codec_info codecs[]); 
     46static pj_status_t g711_alloc_codec( pjmedia_codec_factory *factory, const pjmedia_codec_info *id, pjmedia_codec **p_codec); 
     47static pj_status_t g711_dealloc_codec( pjmedia_codec_factory *factory, pjmedia_codec *codec ); 
    4748 
    4849/* Prototypes for G711 implementation. */ 
    49 static pj_status_t  g711_codec_default_attr (pj_codec *codec, pj_codec_attr *attr); 
    50 static pj_status_t  g711_init( pj_codec *codec, pj_pool_t *pool ); 
    51 static pj_status_t  g711_open( pj_codec *codec, pj_codec_attr *attr ); 
    52 static pj_status_t  g711_close( pj_codec *codec ); 
    53 static pj_status_t  g711_encode( pj_codec *codec, const struct pj_audio_frame *input, 
    54                                  unsigned output_buf_len, struct pj_audio_frame *output); 
    55 static pj_status_t  g711_decode( pj_codec *codec, const struct pj_audio_frame *input, 
    56                                  unsigned output_buf_len, struct pj_audio_frame *output); 
     50static pj_status_t  g711_codec_default_attr (pjmedia_codec *codec, pjmedia_codec_param *attr); 
     51static pj_status_t  g711_init( pjmedia_codec *codec, pj_pool_t *pool ); 
     52static pj_status_t  g711_open( pjmedia_codec *codec, pjmedia_codec_param *attr ); 
     53static pj_status_t  g711_close( pjmedia_codec *codec ); 
     54static pj_status_t  g711_encode( pjmedia_codec *codec, const struct pjmedia_frame *input, 
     55                                 unsigned output_buf_len, struct pjmedia_frame *output); 
     56static pj_status_t  g711_decode( pjmedia_codec *codec, const struct pjmedia_frame *input, 
     57                                 unsigned output_buf_len, struct pjmedia_frame *output); 
    5758 
    5859/* Definition for G711 codec operations. */ 
    59 static pj_codec_op g711_op =  
     60static pjmedia_codec_op g711_op =  
    6061{ 
    6162    &g711_codec_default_attr , 
     
    6869 
    6970/* Definition for G711 codec factory operations. */ 
    70 static pj_codec_factory_op g711_factory_op = 
     71static pjmedia_codec_factory_op g711_factory_op = 
    7172{ 
    7273    &g711_match_id, 
     
    8182{ 
    8283    pj_pool_t  *pool; 
    83     pj_codec    codec_list; 
     84    pjmedia_codec       codec_list; 
    8485}; 
    8586 
     
    9192 
    9293 
    93 PJ_DEF(pj_status_t) g711_init_factory (pj_codec_factory *factory, pj_pool_t *pool) 
     94PJ_DEF(pj_status_t) g711_init_factory (pjmedia_codec_factory *factory, pj_pool_t *pool) 
    9495{ 
    9596    struct g711_factory_private *priv; 
    96     //enum { CODEC_MEM_SIZE = sizeof(pj_codec) + sizeof(struct g711_private) + 4 }; 
     97    //enum { CODEC_MEM_SIZE = sizeof(pjmedia_codec) + sizeof(struct g711_private) + 4 }; 
    9798 
    9899    /* Create pool. */ 
     
    118119} 
    119120 
    120 PJ_DEF(pj_status_t) g711_deinit_factory (pj_codec_factory *factory) 
     121PJ_DEF(pj_status_t) g711_deinit_factory (pjmedia_codec_factory *factory) 
    121122{ 
    122123    struct g711_factory_private *priv = factory->factory_data; 
     
    128129} 
    129130 
    130 static pj_status_t g711_match_id( pj_codec_factory *factory, const pj_codec_id *id ) 
     131static pj_status_t g711_match_id( pjmedia_codec_factory *factory, const pjmedia_codec_info *id ) 
    131132{ 
    132133    PJ_UNUSED_ARG(factory); 
    133134 
    134135    /* It's sufficient to check payload type only. */ 
    135     return (id->pt==PJ_RTP_PT_PCMU || id->pt==PJ_RTP_PT_PCMA) ? 0 : -1; 
    136 } 
    137  
    138 static pj_status_t g711_default_attr (pj_codec_factory *factory,  
    139                                       const pj_codec_id *id,  
    140                                       pj_codec_attr *attr ) 
     136    return (id->pt==PJMEDIA_RTP_PT_PCMU || id->pt==PJMEDIA_RTP_PT_PCMA) ? 0 : -1; 
     137} 
     138 
     139static pj_status_t g711_default_attr (pjmedia_codec_factory *factory,  
     140                                      const pjmedia_codec_info *id,  
     141                                      pjmedia_codec_param *attr ) 
    141142{ 
    142143    PJ_UNUSED_ARG(factory); 
    143144 
    144     memset(attr, 0, sizeof(pj_codec_attr)); 
     145    memset(attr, 0, sizeof(pjmedia_codec_param)); 
    145146    attr->sample_rate = 8000; 
    146147    attr->avg_bps = G711_BPS; 
     
    154155} 
    155156 
    156 static unsigned g711_enum_codecs (pj_codec_factory *factory,  
    157                                   unsigned count, pj_codec_id codecs[]) 
     157static pj_status_t g711_enum_codecs(pjmedia_codec_factory *factory,  
     158                                    unsigned *count,  
     159                                    pjmedia_codec_info codecs[]) 
    158160{ 
    159161    PJ_UNUSED_ARG(factory); 
    160162 
    161     if (count > 0) { 
    162         codecs[0].type = PJ_MEDIA_TYPE_AUDIO; 
    163         codecs[0].pt = PJ_RTP_PT_PCMU; 
     163    if (*count > 0) { 
     164        codecs[0].type = PJMEDIA_TYPE_AUDIO; 
     165        codecs[0].pt = PJMEDIA_RTP_PT_PCMU; 
    164166        codecs[0].encoding_name = pj_str("PCMU"); 
    165167        codecs[0].sample_rate = 8000; 
    166168    } 
    167     if (count > 1) { 
    168         codecs[1].type = PJ_MEDIA_TYPE_AUDIO; 
    169         codecs[1].pt = PJ_RTP_PT_PCMA; 
     169    if (*count > 1) { 
     170        codecs[1].type = PJMEDIA_TYPE_AUDIO; 
     171        codecs[1].pt = PJMEDIA_RTP_PT_PCMA; 
    170172        codecs[1].encoding_name = pj_str("PCMA"); 
    171173        codecs[1].sample_rate = 8000; 
    172174    } 
    173175 
    174     return 2; 
    175 } 
    176  
    177 static pj_codec *g711_alloc_codec( pj_codec_factory *factory, const pj_codec_id *id) 
     176    if (*count > 0) *count=1; 
     177    if (*count > 1) *count=2; 
     178 
     179    return PJ_SUCCESS; 
     180} 
     181 
     182static pj_status_t g711_alloc_codec( pjmedia_codec_factory *factory,  
     183                                     const pjmedia_codec_info *id, 
     184                                     pjmedia_codec **p_codec) 
    178185{ 
    179186    struct g711_factory_private *priv = factory->factory_data; 
    180     pj_codec *codec = NULL; 
     187    pjmedia_codec *codec = NULL; 
    181188 
    182189    /* Allocate new codec if no more is available */ 
     
    184191        struct g711_private *codec_priv; 
    185192 
    186         codec = pj_pool_alloc(priv->pool, sizeof(pj_codec)); 
     193        codec = pj_pool_alloc(priv->pool, sizeof(pjmedia_codec)); 
    187194        codec_priv = pj_pool_alloc(priv->pool, sizeof(struct g711_private)); 
    188195        if (!codec || !codec_priv) 
    189             return NULL; 
     196            return PJ_ENOMEM; 
    190197 
    191198        codec_priv->pt = id->pt; 
     
    202209    codec->next = codec->prev = NULL; 
    203210 
    204     return codec; 
    205 } 
    206  
    207 static void g711_dealloc_codec( pj_codec_factory *factory, pj_codec *codec ) 
     211    *p_codec = codec; 
     212    return PJ_SUCCESS; 
     213} 
     214 
     215static pj_status_t g711_dealloc_codec( pjmedia_codec_factory *factory, pjmedia_codec *codec ) 
    208216{ 
    209217    struct g711_factory_private *priv = factory->factory_data; 
     
    212220    pj_assert (codec->next==NULL && codec->prev==NULL); 
    213221    if (codec->next!=NULL || codec->prev!=NULL) { 
    214         return; 
     222        return PJ_EINVALIDOP; 
    215223    } 
    216224 
    217225    /* Insert at the back of the list */ 
    218226    pj_list_insert_before(&priv->codec_list, codec); 
    219 } 
    220  
    221 static pj_status_t g711_codec_default_attr  (pj_codec *codec, pj_codec_attr *attr) 
     227 
     228    return PJ_SUCCESS; 
     229} 
     230 
     231static pj_status_t g711_codec_default_attr  (pjmedia_codec *codec, pjmedia_codec_param *attr) 
    222232{ 
    223233    struct g711_private *priv = codec->codec_data; 
    224     pj_codec_id id; 
     234    pjmedia_codec_info id; 
    225235 
    226236    id.pt = priv->pt; 
     
    228238} 
    229239 
    230 static pj_status_t g711_init( pj_codec *codec, pj_pool_t *pool ) 
     240static pj_status_t g711_init( pjmedia_codec *codec, pj_pool_t *pool ) 
    231241{ 
    232242    /* There's nothing to do here really */ 
     
    237247} 
    238248 
    239 static pj_status_t g711_open( pj_codec *codec, pj_codec_attr *attr ) 
     249static pj_status_t g711_open( pjmedia_codec *codec, pjmedia_codec_param *attr ) 
    240250{ 
    241251    struct g711_private *priv = codec->codec_data; 
     
    244254} 
    245255 
    246 static pj_status_t g711_close( pj_codec *codec ) 
     256static pj_status_t g711_close( pjmedia_codec *codec ) 
    247257{ 
    248258    PJ_UNUSED_ARG(codec); 
     
    251261} 
    252262 
    253 static pj_status_t  g711_encode( pj_codec *codec, const struct pj_audio_frame *input, 
    254                                  unsigned output_buf_len, struct pj_audio_frame *output) 
     263static pj_status_t  g711_encode( pjmedia_codec *codec, const struct pjmedia_frame *input, 
     264                                 unsigned output_buf_len, struct pjmedia_frame *output) 
    255265{ 
    256266    pj_int16_t *samples = (pj_int16_t*) input->buf; 
     
    262272 
    263273    /* Encode */ 
    264     if (priv->pt == PJ_RTP_PT_PCMA) { 
     274    if (priv->pt == PJMEDIA_RTP_PT_PCMA) { 
    265275        unsigned i; 
    266276        pj_uint8_t *dst = output->buf; 
     
    269279            *dst = linear2alaw(samples[i]); 
    270280        } 
    271     } else if (priv->pt == PJ_RTP_PT_PCMU) { 
     281    } else if (priv->pt == PJMEDIA_RTP_PT_PCMU) { 
    272282        unsigned i; 
    273283        pj_uint8_t *dst = output->buf; 
     
    281291    } 
    282292 
    283     output->type = PJ_AUDIO_FRAME_AUDIO; 
     293    output->type = PJMEDIA_FRAME_TYPE_AUDIO; 
    284294    output->size = input->size / 2; 
    285295 
     
    287297} 
    288298 
    289 static pj_status_t  g711_decode( pj_codec *codec, const struct pj_audio_frame *input, 
    290                                  unsigned output_buf_len, struct pj_audio_frame *output) 
     299static pj_status_t  g711_decode( pjmedia_codec *codec, const struct pjmedia_frame *input, 
     300                                 unsigned output_buf_len, struct pjmedia_frame *output) 
    291301{ 
    292302    struct g711_private *priv = codec->codec_data; 
     
    297307 
    298308    /* Decode */ 
    299     if (priv->pt == PJ_RTP_PT_PCMA) { 
     309    if (priv->pt == PJMEDIA_RTP_PT_PCMA) { 
    300310        unsigned i; 
    301311        pj_uint8_t *src = input->buf; 
     
    305315            *dst++ = (pj_uint16_t) alaw2linear(*src++); 
    306316        } 
    307     } else if (priv->pt == PJ_RTP_PT_PCMU) { 
     317    } else if (priv->pt == PJMEDIA_RTP_PT_PCMU) { 
    308318        unsigned i; 
    309319        pj_uint8_t *src = input->buf; 
     
    318328    } 
    319329 
    320     output->type = PJ_AUDIO_FRAME_AUDIO; 
     330    output->type = PJMEDIA_FRAME_TYPE_AUDIO; 
    321331    output->size = input->size * 2; 
    322332 
Note: See TracChangeset for help on using the changeset viewer.