Changeset 3261
- Timestamp:
- Aug 10, 2010 3:06:40 PM (14 years ago)
- Location:
- pjproject/trunk/pjmedia
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
pjproject/trunk/pjmedia/include/pjmedia-codec/ipp_codecs.h
r3083 r3261 292 292 PJ_BEGIN_DECL 293 293 294 /** 295 * IPP codecs configuration settings. 296 */ 297 typedef struct pjmedia_codec_ipp_config 298 { 299 /** 300 * Specifies the G.722.1 codec encoder and decoder level adjustment. 301 * If the value is non-zero, then PCM input samples to the encoder will 302 * be shifted right by this value, and similarly PCM output samples from 303 * the decoder will be shifted left by this value. 304 * 305 * Default value is PJMEDIA_G7221_DEFAULT_PCM_SHIFT. 306 */ 307 unsigned g7221_pcm_shift; 308 309 } pjmedia_codec_ipp_config; 310 311 294 312 /** 295 313 * Initialize and register IPP codecs factory to pjmedia endpoint. … … 301 319 PJ_DECL(pj_status_t) pjmedia_codec_ipp_init( pjmedia_endpt *endpt ); 302 320 321 322 /** 323 * Get current IPP codecs configuration settings. 324 * 325 * @param cfg The IPP codecs configuration settings buffer. 326 * 327 * @return PJ_SUCCESS on success. 328 */ 329 PJ_DECL(pj_status_t) pjmedia_codec_ipp_get_config( 330 pjmedia_codec_ipp_config *cfg); 331 332 333 /** 334 * Set IPP codecs configuration settings. 335 * 336 * @param setting The IPP codecs configuration settings to be applied. 337 * 338 * @return PJ_SUCCESS on success. 339 */ 340 PJ_DECL(pj_status_t) pjmedia_codec_ipp_set_config( 341 const pjmedia_codec_ipp_config *cfg); 303 342 304 343 -
pjproject/trunk/pjmedia/src/pjmedia-codec/ipp_codecs.c
r3199 r3261 113 113 pj_pool_t *pool; 114 114 pj_mutex_t *mutex; 115 unsigned g7221_pcm_shift; 115 116 } ipp_factory; 116 117 … … 134 135 codec has internal VAD. */ 135 136 pj_timestamp last_tx; /**< Timestamp of last transmit.*/ 137 138 unsigned g7221_pcm_shift; /**< G722.1 PCM level adjustment*/ 136 139 } ipp_private_t; 137 140 … … 661 664 ipp_factory.base.factory_data = NULL; 662 665 ipp_factory.endpt = endpt; 666 ipp_factory.g7221_pcm_shift = PJMEDIA_G7221_DEFAULT_PCM_SHIFT; 663 667 664 668 ipp_factory.pool = pjmedia_endpt_create_pool(endpt, "IPP codecs", 4000, 4000); … … 730 734 return status; 731 735 } 736 737 /* 738 * Get current IPP codecs configuration settings. 739 */ 740 PJ_DEF(pj_status_t) pjmedia_codec_ipp_get_config( 741 pjmedia_codec_ipp_config *cfg) 742 { 743 PJ_ASSERT_RETURN(cfg, PJ_EINVAL); 744 745 pj_bzero(cfg, sizeof(*cfg)); 746 cfg->g7221_pcm_shift = ipp_factory.g7221_pcm_shift; 747 748 return PJ_SUCCESS; 749 } 750 751 752 /* 753 * Set IPP codecs configuration settings. 754 */ 755 PJ_DECL(pj_status_t) pjmedia_codec_ipp_set_config( 756 const pjmedia_codec_ipp_config *cfg) 757 { 758 PJ_ASSERT_RETURN(cfg, PJ_EINVAL); 759 760 ipp_factory.g7221_pcm_shift = cfg->g7221_pcm_shift; 761 762 return PJ_SUCCESS; 763 } 764 732 765 733 766 /* … … 1209 1242 #endif 1210 1243 1244 #if PJMEDIA_HAS_INTEL_IPP_CODEC_G722_1 1245 if (ippc->pt >= PJMEDIA_RTP_PT_G722_1_16 && 1246 ippc->pt <= PJMEDIA_RTP_PT_G7221_RSV2) 1247 { 1248 codec_data->g7221_pcm_shift = ipp_factory.g7221_pcm_shift; 1249 } 1250 #endif 1251 1211 1252 return PJ_SUCCESS; 1212 1253 … … 1362 1403 if (pt == PJMEDIA_RTP_PT_AMR || pt == PJMEDIA_RTP_PT_AMRWB) { 1363 1404 out.pBuffer += 2; 1405 } 1406 #endif 1407 1408 #if PJMEDIA_HAS_INTEL_IPP_CODEC_G722_1 1409 /* For G722.1: adjust the encoder input signal level */ 1410 if (pt >= PJMEDIA_RTP_PT_G722_1_16 && 1411 pt <= PJMEDIA_RTP_PT_G7221_RSV2 && 1412 codec_data->g7221_pcm_shift) 1413 { 1414 unsigned i; 1415 for (i = 0; i < samples_per_frame; ++i) 1416 pcm_in[i] >>= codec_data->g7221_pcm_shift; 1364 1417 } 1365 1418 #endif … … 1515 1568 #endif 1516 1569 1570 #if PJMEDIA_HAS_INTEL_IPP_CODEC_G722_1 1571 /* For G722.1: adjust the decoder output signal level */ 1572 if (pt >= PJMEDIA_RTP_PT_G722_1_16 && 1573 pt <= PJMEDIA_RTP_PT_G7221_RSV2 && 1574 codec_data->g7221_pcm_shift) 1575 { 1576 unsigned i; 1577 pj_int16_t *s = (pj_int16_t*)output->buf; 1578 1579 for (i = 0; i < samples_per_frame; ++i) 1580 s[i] <<= codec_data->g7221_pcm_shift; 1581 } 1582 #endif 1583 1517 1584 output->type = PJMEDIA_FRAME_TYPE_AUDIO; 1518 1585 output->size = samples_per_frame << 1;
Note: See TracChangeset
for help on using the changeset viewer.