Changeset 176 for pjproject/trunk/pjmedia/src/pjmedia/g711.c
- Timestamp:
- Feb 10, 2006 3:57:08 PM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
pjproject/trunk/pjmedia/src/pjmedia/g711.c
r159 r176 41 41 42 42 /* Prototypes for G711 factory */ 43 static pj_status_t g711_match_id( pjmedia_codec_factory *factory, const pjmedia_codec_info *id ); 44 static pj_status_t g711_default_attr( pjmedia_codec_factory *factory, const pjmedia_codec_info *id, pjmedia_codec_param *attr ); 45 static pj_status_t g711_enum_codecs (pjmedia_codec_factory *factory, unsigned *count, pjmedia_codec_info codecs[]); 46 static pj_status_t g711_alloc_codec( pjmedia_codec_factory *factory, const pjmedia_codec_info *id, pjmedia_codec **p_codec); 47 static pj_status_t g711_dealloc_codec( pjmedia_codec_factory *factory, pjmedia_codec *codec ); 43 static pj_status_t g711_test_alloc( pjmedia_codec_factory *factory, 44 const pjmedia_codec_info *id ); 45 static pj_status_t g711_default_attr( pjmedia_codec_factory *factory, 46 const pjmedia_codec_info *id, 47 pjmedia_codec_param *attr ); 48 static pj_status_t g711_enum_codecs (pjmedia_codec_factory *factory, 49 unsigned *count, 50 pjmedia_codec_info codecs[]); 51 static pj_status_t g711_alloc_codec( pjmedia_codec_factory *factory, 52 const pjmedia_codec_info *id, 53 pjmedia_codec **p_codec); 54 static pj_status_t g711_dealloc_codec( pjmedia_codec_factory *factory, 55 pjmedia_codec *codec ); 48 56 49 57 /* Prototypes for G711 implementation. */ 50 static pj_status_t g711_codec_default_attr (pjmedia_codec *codec, pjmedia_codec_param *attr); 51 static pj_status_t g711_init( pjmedia_codec *codec, pj_pool_t *pool ); 52 static pj_status_t g711_open( pjmedia_codec *codec, pjmedia_codec_param *attr ); 58 static pj_status_t g711_codec_default_attr (pjmedia_codec *codec, 59 pjmedia_codec_param *attr); 60 static pj_status_t g711_init( pjmedia_codec *codec, 61 pj_pool_t *pool ); 62 static pj_status_t g711_open( pjmedia_codec *codec, 63 pjmedia_codec_param *attr ); 53 64 static pj_status_t g711_close( pjmedia_codec *codec ); 54 static pj_status_t g711_encode( pjmedia_codec *codec, const struct pjmedia_frame *input, 55 unsigned output_buf_len, struct pjmedia_frame *output); 56 static pj_status_t g711_decode( pjmedia_codec *codec, const struct pjmedia_frame *input, 57 unsigned output_buf_len, struct pjmedia_frame *output); 65 static pj_status_t g711_get_frames(pjmedia_codec *codec, 66 void *pkt, 67 pj_size_t pkt_size, 68 unsigned *frame_cnt, 69 pjmedia_frame frames[]); 70 static pj_status_t g711_encode( pjmedia_codec *codec, 71 const struct pjmedia_frame *input, 72 unsigned output_buf_len, 73 struct pjmedia_frame *output); 74 static pj_status_t g711_decode( pjmedia_codec *codec, 75 const struct pjmedia_frame *input, 76 unsigned output_buf_len, 77 struct pjmedia_frame *output); 58 78 59 79 /* Definition for G711 codec operations. */ … … 64 84 &g711_open, 65 85 &g711_close, 86 &g711_get_frames, 66 87 &g711_encode, 67 88 &g711_decode … … 71 92 static pjmedia_codec_factory_op g711_factory_op = 72 93 { 73 &g711_ match_id,94 &g711_test_alloc, 74 95 &g711_default_attr, 75 96 &g711_enum_codecs, … … 129 150 } 130 151 131 static pj_status_t g711_ match_id( pjmedia_codec_factory *factory, const pjmedia_codec_info *id )152 static pj_status_t g711_test_alloc( pjmedia_codec_factory *factory, const pjmedia_codec_info *id ) 132 153 { 133 154 PJ_UNUSED_ARG(factory); … … 143 164 PJ_UNUSED_ARG(factory); 144 165 145 memset(attr, 0, sizeof(pjmedia_codec_param));166 pj_memset(attr, 0, sizeof(pjmedia_codec_param)); 146 167 attr->sample_rate = 8000; 147 168 attr->avg_bps = G711_BPS; … … 156 177 157 178 static pj_status_t g711_enum_codecs(pjmedia_codec_factory *factory, 158 unsigned * count,179 unsigned *max_count, 159 180 pjmedia_codec_info codecs[]) 160 181 { 182 unsigned count = 0; 183 161 184 PJ_UNUSED_ARG(factory); 162 185 163 if (*count > 0) { 164 codecs[0].type = PJMEDIA_TYPE_AUDIO; 165 codecs[0].pt = PJMEDIA_RTP_PT_PCMU; 166 codecs[0].encoding_name = pj_str("PCMU"); 167 codecs[0].sample_rate = 8000; 186 if (count < *max_count) { 187 codecs[count].type = PJMEDIA_TYPE_AUDIO; 188 codecs[count].pt = PJMEDIA_RTP_PT_PCMU; 189 codecs[count].encoding_name = pj_str("PCMU"); 190 codecs[count].sample_rate = 8000; 191 ++count; 168 192 } 169 if ( *count > 1) {193 if (count < *max_count) { 170 194 codecs[1].type = PJMEDIA_TYPE_AUDIO; 171 195 codecs[1].pt = PJMEDIA_RTP_PT_PCMA; 172 196 codecs[1].encoding_name = pj_str("PCMA"); 173 197 codecs[1].sample_rate = 8000; 198 ++count; 174 199 } 175 200 176 if (*count > 0) *count=1; 177 if (*count > 1) *count=2; 201 *max_count = count; 178 202 179 203 return PJ_SUCCESS; … … 258 282 PJ_UNUSED_ARG(codec); 259 283 /* Nothing to do */ 284 return PJ_SUCCESS; 285 } 286 287 static pj_status_t g711_get_frames(pjmedia_codec *codec, 288 void *pkt, 289 pj_size_t pkt_size, 290 unsigned *frame_cnt, 291 pjmedia_frame frames[]) 292 { 293 unsigned count = 0; 294 295 PJ_UNUSED_ARG(codec); 296 PJ_ASSERT_RETURN(frame_cnt, PJ_EINVAL); 297 298 while (pkt_size >= 160 && count < *frame_cnt) { 299 frames[0].type = PJMEDIA_FRAME_TYPE_AUDIO; 300 frames[0].buf = pkt; 301 frames[0].size = 160; 302 303 pkt = ((char*)pkt) + 160; 304 pkt_size -= 160; 305 306 ++count; 307 } 308 309 *frame_cnt = count; 260 310 return PJ_SUCCESS; 261 311 }
Note: See TracChangeset
for help on using the changeset viewer.