- Timestamp:
- Oct 29, 2008 10:17:02 AM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
pjproject/trunk/pjmedia/include/pjmedia-codec/amr_helper.h
r2358 r2359 605 605 pj_int8_t mode; /**< AMR mode. */ 606 606 pj_uint8_t start_bit; /**< Frame start bit. */ 607 pj_uint8_t good_quality:1; /**< Flag if frame contains good data. */607 pj_uint8_t good_quality:1; /**< Flag if frame is good/degraded. */ 608 608 } pjmedia_codec_amr_bit_info; 609 609 #pragma pack() … … 614 614 */ 615 615 typedef struct pjmedia_codec_amr_settings { 616 pj_bool_t amr_nb; /**< TRUE for AMR-NB, FALSE for AMR-WB */617 pj_ uint8_t CMR; /**< Change Mode Request,618 in band message from encoder. */616 pj_bool_t amr_nb; /**< TRUE for AMR-NB, FALSE for AMR-WB. */ 617 pj_bool_t reorder; /**< Reorder bitstream into descending 618 sensitivity order or vice versa. */ 619 619 pj_uint8_t octet_aligned; /**< TRUE if payload is in octet-aligned mode, 620 620 FALSE if payload is in bandwidth 621 621 efficient mode. */ 622 pj_uint8_t CMR; /**< Change Mode Request for remote 623 encoder. */ 622 624 } pjmedia_codec_amr_settings; 623 625 … … 631 633 */ 632 634 633 PJ_INLINE( int) pjmedia_codec_amr_get_mode(unsigned bitrate)634 { 635 int mode = -1;635 PJ_INLINE(pj_int8_t) pjmedia_codec_amr_get_mode(unsigned bitrate) 636 { 637 pj_int8_t mode = -1; 636 638 637 639 if(bitrate==4750){ … … 676 678 677 679 /** 678 * Rearrange AMR bitstream from sensitivity bits order into encoder bits order. 679 * This will also make the start_bit to be 0. Basically this function should be 680 * called before invoking decoder. 680 * Prepare a frame before pass it to decoder. This function will do: 681 * - reorder AMR bitstream from descending sensitivity order into 682 * encoder bits order. This can be enabled/disabled via param 683 * 'setting' by setting/resetting field 'reorder'. 684 * - align left the start bit (make the start_bit to be 0). 681 685 * 682 686 * @param amr_nb Set PJ_TRUE for AMR-NB and PJ_FALSE for AMR-WB. 683 687 * @param in Input frame. 688 * @param setting Settings, see @pjmedia_codec_amr_settings. 684 689 * @param out Output frame. 685 690 * 686 691 * @return PJ_SUCCESS on success. 687 692 */ 688 PJ_INLINE(pj_status_t) pjmedia_codec_amr_ reorder_sens_to_enc(689 pj_bool_t amr_nb,690 const pjmedia_frame *in,691 693 PJ_INLINE(pj_status_t) pjmedia_codec_amr_predecode( 694 const pjmedia_frame *in, 695 const pjmedia_codec_amr_settings *setting, 696 pjmedia_frame *out) 692 697 { 693 698 pj_int8_t amr_bits[477 + 7] = {0}; … … 713 718 *out_info = *in_info; 714 719 715 if ( amr_nb) {720 if (setting->amr_nb) { 716 721 SID_FT = 8; 717 722 framelen_tbl = pjmedia_codec_amrnb_framelen; … … 751 756 752 757 /* Speech */ 753 const pj_int16_t *order_map;754 755 758 out_info->mode = in_info->frame_type; 756 759 out->size = framelen_tbl[out_info->mode]; 757 760 PJ_ASSERT_RETURN(out->size <= in->size, PJMEDIA_CODEC_EFRMINLEN); 758 761 759 order_map = order_maps[out_info->mode];760 762 pj_bzero(out->buf, out->size); 761 for(i = 0; i < framelenbit_tbl[out_info->mode]; ++i) { 762 if (amr_bits[i]) { 763 pj_uint16_t bitpos; 764 bitpos = order_map[i]; 765 w[bitpos>>3] |= 1 << (7 - (bitpos % 8)); 763 764 if (setting->reorder) { 765 const pj_int16_t *order_map; 766 767 order_map = order_maps[out_info->mode]; 768 for(i = 0; i < framelenbit_tbl[out_info->mode]; ++i) { 769 if (amr_bits[i]) { 770 pj_uint16_t bitpos; 771 bitpos = order_map[i]; 772 w[bitpos>>3] |= 1 << (7 - (bitpos % 8)); 773 } 774 } 775 } else { 776 for(i = 0; i < framelenbit_tbl[out_info->mode]; ++i) { 777 if (amr_bits[i]) 778 w[i >> 3] |= 1 << (7 - (i % 8)); 766 779 } 767 780 } … … 773 786 pj_uint8_t FT_; 774 787 775 if ( amr_nb)788 if (setting->amr_nb) 776 789 FT_ = (pj_uint8_t)((amr_bits[36] << 2) | (amr_bits[37] << 1) | 777 790 amr_bits[38]); … … 949 962 950 963 /* Speech */ 951 const pj_int16_t *order_map;952 953 /* Put bits in the packet, sensitivity descending ordered */954 order_map = order_maps[info->frame_type];955 964 if (w_bitptr == 0) *w = 0; 956 for(j = 0; j < framelenbit_tbl[info->frame_type]; ++j) { 957 if (amr_bits[order_map[j]]) 958 *w |= (1 << (7-w_bitptr)); 959 960 if (++w_bitptr == 8) { 961 w_bitptr = 0; 962 ++w; 963 *w = 0; 965 966 if (setting->reorder) { 967 const pj_int16_t *order_map; 968 969 /* Put bits in the packet, sensitivity descending ordered */ 970 order_map = order_maps[info->frame_type]; 971 for(j = 0; j < framelenbit_tbl[info->frame_type]; ++j) { 972 if (amr_bits[order_map[j]]) 973 *w |= (1 << (7-w_bitptr)); 974 975 if (++w_bitptr == 8) { 976 w_bitptr = 0; 977 ++w; 978 *w = 0; 979 } 980 } 981 } else { 982 for(j = 0; j < framelenbit_tbl[info->frame_type]; ++j) { 983 if (amr_bits[j]) 984 *w |= (1 << (7-w_bitptr)); 985 986 if (++w_bitptr == 8) { 987 w_bitptr = 0; 988 ++w; 989 *w = 0; 990 } 964 991 } 965 992 } … … 1019 1046 * @param frames Frames parsed. 1020 1047 * @param nframes Number of frames parsed. 1021 * @param CMR Change Mode Request message f rom theencoder.1048 * @param CMR Change Mode Request message for local encoder. 1022 1049 * 1023 1050 * @return PJ_SUCCESS on success.
Note: See TracChangeset
for help on using the changeset viewer.