Changeset 159 for pjproject/trunk/pjmedia/src/pjmedia/g711.c
- Timestamp:
- Feb 8, 2006 10:43:39 PM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
pjproject/trunk/pjmedia/src/pjmedia/g711.c
r121 r159 21 21 */ 22 22 #include <pjmedia/codec.h> 23 #include <pjmedia/errno.h> 23 24 #include <pj/pool.h> 24 25 #include <pj/string.h> … … 30 31 31 32 /* 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);33 PJ_DECL(pj_status_t) g711_init_factory (pjmedia_codec_factory *factory, pj_pool_t *pool); 34 PJ_DECL(pj_status_t) g711_deinit_factory (pjmedia_codec_factory *factory); 34 35 35 36 /* Algorithm prototypes. */ … … 40 41 41 42 /* 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_idcodecs[]);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 );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 ); 47 48 48 49 /* 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);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 ); 53 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); 57 58 58 59 /* Definition for G711 codec operations. */ 59 static pj _codec_op g711_op =60 static pjmedia_codec_op g711_op = 60 61 { 61 62 &g711_codec_default_attr , … … 68 69 69 70 /* Definition for G711 codec factory operations. */ 70 static pj _codec_factory_op g711_factory_op =71 static pjmedia_codec_factory_op g711_factory_op = 71 72 { 72 73 &g711_match_id, … … 81 82 { 82 83 pj_pool_t *pool; 83 pj _codec codec_list;84 pjmedia_codec codec_list; 84 85 }; 85 86 … … 91 92 92 93 93 PJ_DEF(pj_status_t) g711_init_factory (pj _codec_factory *factory, pj_pool_t *pool)94 PJ_DEF(pj_status_t) g711_init_factory (pjmedia_codec_factory *factory, pj_pool_t *pool) 94 95 { 95 96 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 }; 97 98 98 99 /* Create pool. */ … … 118 119 } 119 120 120 PJ_DEF(pj_status_t) g711_deinit_factory (pj _codec_factory *factory)121 PJ_DEF(pj_status_t) g711_deinit_factory (pjmedia_codec_factory *factory) 121 122 { 122 123 struct g711_factory_private *priv = factory->factory_data; … … 128 129 } 129 130 130 static pj_status_t g711_match_id( pj _codec_factory *factory, const pj_codec_id*id )131 static pj_status_t g711_match_id( pjmedia_codec_factory *factory, const pjmedia_codec_info *id ) 131 132 { 132 133 PJ_UNUSED_ARG(factory); 133 134 134 135 /* 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 139 static pj_status_t g711_default_attr (pjmedia_codec_factory *factory, 140 const pjmedia_codec_info *id, 141 pjmedia_codec_param *attr ) 141 142 { 142 143 PJ_UNUSED_ARG(factory); 143 144 144 memset(attr, 0, sizeof(pj _codec_attr));145 memset(attr, 0, sizeof(pjmedia_codec_param)); 145 146 attr->sample_rate = 8000; 146 147 attr->avg_bps = G711_BPS; … … 154 155 } 155 156 156 static unsigned g711_enum_codecs (pj_codec_factory *factory, 157 unsigned count, pj_codec_id codecs[]) 157 static pj_status_t g711_enum_codecs(pjmedia_codec_factory *factory, 158 unsigned *count, 159 pjmedia_codec_info codecs[]) 158 160 { 159 161 PJ_UNUSED_ARG(factory); 160 162 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; 164 166 codecs[0].encoding_name = pj_str("PCMU"); 165 167 codecs[0].sample_rate = 8000; 166 168 } 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; 170 172 codecs[1].encoding_name = pj_str("PCMA"); 171 173 codecs[1].sample_rate = 8000; 172 174 } 173 175 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 182 static pj_status_t g711_alloc_codec( pjmedia_codec_factory *factory, 183 const pjmedia_codec_info *id, 184 pjmedia_codec **p_codec) 178 185 { 179 186 struct g711_factory_private *priv = factory->factory_data; 180 pj _codec *codec = NULL;187 pjmedia_codec *codec = NULL; 181 188 182 189 /* Allocate new codec if no more is available */ … … 184 191 struct g711_private *codec_priv; 185 192 186 codec = pj_pool_alloc(priv->pool, sizeof(pj _codec));193 codec = pj_pool_alloc(priv->pool, sizeof(pjmedia_codec)); 187 194 codec_priv = pj_pool_alloc(priv->pool, sizeof(struct g711_private)); 188 195 if (!codec || !codec_priv) 189 return NULL;196 return PJ_ENOMEM; 190 197 191 198 codec_priv->pt = id->pt; … … 202 209 codec->next = codec->prev = NULL; 203 210 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 215 static pj_status_t g711_dealloc_codec( pjmedia_codec_factory *factory, pjmedia_codec *codec ) 208 216 { 209 217 struct g711_factory_private *priv = factory->factory_data; … … 212 220 pj_assert (codec->next==NULL && codec->prev==NULL); 213 221 if (codec->next!=NULL || codec->prev!=NULL) { 214 return ;222 return PJ_EINVALIDOP; 215 223 } 216 224 217 225 /* Insert at the back of the list */ 218 226 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 231 static pj_status_t g711_codec_default_attr (pjmedia_codec *codec, pjmedia_codec_param *attr) 222 232 { 223 233 struct g711_private *priv = codec->codec_data; 224 pj _codec_idid;234 pjmedia_codec_info id; 225 235 226 236 id.pt = priv->pt; … … 228 238 } 229 239 230 static pj_status_t g711_init( pj _codec *codec, pj_pool_t *pool )240 static pj_status_t g711_init( pjmedia_codec *codec, pj_pool_t *pool ) 231 241 { 232 242 /* There's nothing to do here really */ … … 237 247 } 238 248 239 static pj_status_t g711_open( pj _codec *codec, pj_codec_attr*attr )249 static pj_status_t g711_open( pjmedia_codec *codec, pjmedia_codec_param *attr ) 240 250 { 241 251 struct g711_private *priv = codec->codec_data; … … 244 254 } 245 255 246 static pj_status_t g711_close( pj _codec *codec )256 static pj_status_t g711_close( pjmedia_codec *codec ) 247 257 { 248 258 PJ_UNUSED_ARG(codec); … … 251 261 } 252 262 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)263 static pj_status_t g711_encode( pjmedia_codec *codec, const struct pjmedia_frame *input, 264 unsigned output_buf_len, struct pjmedia_frame *output) 255 265 { 256 266 pj_int16_t *samples = (pj_int16_t*) input->buf; … … 262 272 263 273 /* Encode */ 264 if (priv->pt == PJ _RTP_PT_PCMA) {274 if (priv->pt == PJMEDIA_RTP_PT_PCMA) { 265 275 unsigned i; 266 276 pj_uint8_t *dst = output->buf; … … 269 279 *dst = linear2alaw(samples[i]); 270 280 } 271 } else if (priv->pt == PJ _RTP_PT_PCMU) {281 } else if (priv->pt == PJMEDIA_RTP_PT_PCMU) { 272 282 unsigned i; 273 283 pj_uint8_t *dst = output->buf; … … 281 291 } 282 292 283 output->type = PJ _AUDIO_FRAME_AUDIO;293 output->type = PJMEDIA_FRAME_TYPE_AUDIO; 284 294 output->size = input->size / 2; 285 295 … … 287 297 } 288 298 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)299 static pj_status_t g711_decode( pjmedia_codec *codec, const struct pjmedia_frame *input, 300 unsigned output_buf_len, struct pjmedia_frame *output) 291 301 { 292 302 struct g711_private *priv = codec->codec_data; … … 297 307 298 308 /* Decode */ 299 if (priv->pt == PJ _RTP_PT_PCMA) {309 if (priv->pt == PJMEDIA_RTP_PT_PCMA) { 300 310 unsigned i; 301 311 pj_uint8_t *src = input->buf; … … 305 315 *dst++ = (pj_uint16_t) alaw2linear(*src++); 306 316 } 307 } else if (priv->pt == PJ _RTP_PT_PCMU) {317 } else if (priv->pt == PJMEDIA_RTP_PT_PCMU) { 308 318 unsigned i; 309 319 pj_uint8_t *src = input->buf; … … 318 328 } 319 329 320 output->type = PJ _AUDIO_FRAME_AUDIO;330 output->type = PJMEDIA_FRAME_TYPE_AUDIO; 321 331 output->size = input->size * 2; 322 332
Note: See TracChangeset
for help on using the changeset viewer.