Changeset 2620 for pjproject/trunk/pjmedia/src/pjmedia-codec/g7221.c
- Timestamp:
- Apr 20, 2009 2:19:11 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
pjproject/trunk/pjmedia/src/pjmedia-codec/g7221.c
r2616 r2620 138 138 pj_mutex_t *mutex; /**< Codec factory mutex. */ 139 139 140 int pcm_shift; /**< Level adjustment */ 140 141 unsigned mode_count; /**< Number of G722.1 modes. */ 141 142 codec_mode modes[MAX_CODEC_MODES]; /**< The G722.1 modes. */ … … 165 166 pj_uint16_t frame_size_bits; /**< Coded frame size in bits. */ 166 167 pj_uint16_t number_of_regions; /**< Number of regions. */ 168 int pcm_shift; /**< Adjustment for PCM in/out */ 167 169 168 170 /* Encoder specific state */ 171 Word16 *enc_frame; /**< 16bit to 14bit buffer */ 169 172 Word16 *enc_old_frame; 170 173 … … 252 255 /* Initialize codec modes, by default all standard bitrates are enabled */ 253 256 codec_factory.mode_count = 0; 257 codec_factory.pcm_shift = PJMEDIA_G7221_DEFAULT_PCM_SHIFT; 254 258 255 259 mode = &codec_factory.modes[codec_factory.mode_count++]; … … 409 413 410 414 /* 415 * Set level adjustment. 416 */ 417 PJ_DEF(pj_status_t) pjmedia_codec_g7221_set_pcm_shift(int val) 418 { 419 codec_factory.pcm_shift = val; 420 return PJ_SUCCESS; 421 } 422 423 /* 411 424 * Unregister G722.1 codec factory from pjmedia endpoint. 412 425 */ … … 645 658 (attr->info.clock_rate <= WB_SAMPLE_RATE? 646 659 NUMBER_OF_REGIONS:MAX_NUMBER_OF_REGIONS); 660 codec_data->pcm_shift = codec_factory.pcm_shift; 647 661 648 662 /* Initialize encoder state */ 649 663 tmp = codec_data->samples_per_frame << 1; 650 664 codec_data->enc_old_frame = (Word16*)pj_pool_zalloc(pool, tmp); 665 codec_data->enc_frame = (Word16*)pj_pool_alloc(pool, tmp); 651 666 652 667 /* Initialize decoder state */ … … 734 749 { 735 750 codec_private_t *codec_data = (codec_private_t*) codec->codec_data; 751 const Word16 *pcm_input; 736 752 Word16 mlt_coefs[MAX_SAMPLES_PER_FRAME]; 737 753 Word16 mag_shift; … … 773 789 } 774 790 791 /* Encoder adjust the input signal level */ 792 if (codec_data->pcm_shift) { 793 unsigned i; 794 pcm_input = (const Word16*)input->buf; 795 for (i=0; i<codec_data->samples_per_frame; ++i) { 796 codec_data->enc_frame[i] = 797 (pj_int16_t)(pcm_input[i] >> codec_data->pcm_shift); 798 } 799 pcm_input = codec_data->enc_frame; 800 } else { 801 pcm_input = (const Word16*)input->buf; 802 } 803 775 804 /* Convert input samples to rmlt coefs */ 776 mag_shift = samples_to_rmlt_coefs( (Word16*)input->buf,805 mag_shift = samples_to_rmlt_coefs(pcm_input, 777 806 codec_data->enc_old_frame, 778 807 mlt_coefs, … … 856 885 mag_shift); 857 886 887 /* Decoder adjust PCM signal */ 888 if (codec_data->pcm_shift) { 889 unsigned i; 890 pj_int16_t *buf = (Word16*)output->buf; 891 892 for (i=0; i<codec_data->samples_per_frame; ++i) { 893 buf[i] <<= codec_data->pcm_shift; 894 } 895 } 896 858 897 output->type = PJMEDIA_FRAME_TYPE_AUDIO; 859 898 output->size = codec_data->samples_per_frame << 1;
Note: See TracChangeset
for help on using the changeset viewer.