OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 20 matching lines...) Expand all Loading... |
31 // Declare function pointers. | 31 // Declare function pointers. |
32 FilterMaLoopFix WebRtcIsacfix_FilterMaLoopFix; | 32 FilterMaLoopFix WebRtcIsacfix_FilterMaLoopFix; |
33 Spec2Time WebRtcIsacfix_Spec2Time; | 33 Spec2Time WebRtcIsacfix_Spec2Time; |
34 Time2Spec WebRtcIsacfix_Time2Spec; | 34 Time2Spec WebRtcIsacfix_Time2Spec; |
35 MatrixProduct1 WebRtcIsacfix_MatrixProduct1; | 35 MatrixProduct1 WebRtcIsacfix_MatrixProduct1; |
36 MatrixProduct2 WebRtcIsacfix_MatrixProduct2; | 36 MatrixProduct2 WebRtcIsacfix_MatrixProduct2; |
37 | 37 |
38 /* This method assumes that |stream_size_bytes| is in valid range, | 38 /* This method assumes that |stream_size_bytes| is in valid range, |
39 * i.e. >= 0 && <= STREAM_MAXW16_60MS | 39 * i.e. >= 0 && <= STREAM_MAXW16_60MS |
40 */ | 40 */ |
41 static void InitializeDecoderBitstream(int stream_size_bytes, | 41 static void InitializeDecoderBitstream(size_t stream_size_bytes, |
42 Bitstr_dec* bitstream) { | 42 Bitstr_dec* bitstream) { |
43 bitstream->W_upper = 0xFFFFFFFF; | 43 bitstream->W_upper = 0xFFFFFFFF; |
44 bitstream->streamval = 0; | 44 bitstream->streamval = 0; |
45 bitstream->stream_index = 0; | 45 bitstream->stream_index = 0; |
46 bitstream->full = 1; | 46 bitstream->full = 1; |
47 bitstream->stream_size = (stream_size_bytes + 1) >> 1; | 47 bitstream->stream_size = (stream_size_bytes + 1) >> 1; |
48 memset(bitstream->stream, 0, sizeof(bitstream->stream)); | 48 memset(bitstream->stream, 0, sizeof(bitstream->stream)); |
49 } | 49 } |
50 | 50 |
51 /************************************************************************** | 51 /************************************************************************** |
(...skipping 557 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
609 * - rtp_seq_number : the RTP number of the packet. | 609 * - rtp_seq_number : the RTP number of the packet. |
610 * - arr_ts : the arrival time of the packet (from NetEq) | 610 * - arr_ts : the arrival time of the packet (from NetEq) |
611 * in samples. | 611 * in samples. |
612 * | 612 * |
613 * Return value : 0 - Ok | 613 * Return value : 0 - Ok |
614 * -1 - Error | 614 * -1 - Error |
615 */ | 615 */ |
616 | 616 |
617 int16_t WebRtcIsacfix_UpdateBwEstimate1(ISACFIX_MainStruct *ISAC_main_inst, | 617 int16_t WebRtcIsacfix_UpdateBwEstimate1(ISACFIX_MainStruct *ISAC_main_inst, |
618 const uint8_t* encoded, | 618 const uint8_t* encoded, |
619 int32_t packet_size, | 619 size_t packet_size, |
620 uint16_t rtp_seq_number, | 620 uint16_t rtp_seq_number, |
621 uint32_t arr_ts) | 621 uint32_t arr_ts) |
622 { | 622 { |
623 ISACFIX_SubStruct *ISAC_inst; | 623 ISACFIX_SubStruct *ISAC_inst; |
624 Bitstr_dec streamdata; | 624 Bitstr_dec streamdata; |
625 int16_t err; | 625 int16_t err; |
626 const int kRequiredEncodedLenBytes = 10; | 626 const size_t kRequiredEncodedLenBytes = 10; |
627 | 627 |
628 /* typecast pointer to real structure */ | 628 /* typecast pointer to real structure */ |
629 ISAC_inst = (ISACFIX_SubStruct *)ISAC_main_inst; | 629 ISAC_inst = (ISACFIX_SubStruct *)ISAC_main_inst; |
630 | 630 |
631 /* Sanity check of packet length */ | 631 /* Sanity check of packet length */ |
632 if (packet_size <= 0) { | 632 if (packet_size == 0) { |
633 /* return error code if the packet length is null or less */ | 633 /* return error code if the packet length is null or less */ |
634 ISAC_inst->errorcode = ISAC_EMPTY_PACKET; | 634 ISAC_inst->errorcode = ISAC_EMPTY_PACKET; |
635 return -1; | 635 return -1; |
636 } else if (packet_size > (STREAM_MAXW16<<1)) { | 636 } else if (packet_size > (STREAM_MAXW16<<1)) { |
637 /* return error code if length of stream is too long */ | 637 /* return error code if length of stream is too long */ |
638 ISAC_inst->errorcode = ISAC_LENGTH_MISMATCH; | 638 ISAC_inst->errorcode = ISAC_LENGTH_MISMATCH; |
639 return -1; | 639 return -1; |
640 } | 640 } |
641 | 641 |
642 /* check if decoder initiated */ | 642 /* check if decoder initiated */ |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
681 * - send_ts : Send Time Stamp from RTP header | 681 * - send_ts : Send Time Stamp from RTP header |
682 * - arr_ts : the arrival time of the packet (from NetEq) | 682 * - arr_ts : the arrival time of the packet (from NetEq) |
683 * in samples. | 683 * in samples. |
684 * | 684 * |
685 * Return value : 0 - Ok | 685 * Return value : 0 - Ok |
686 * -1 - Error | 686 * -1 - Error |
687 */ | 687 */ |
688 | 688 |
689 int16_t WebRtcIsacfix_UpdateBwEstimate(ISACFIX_MainStruct *ISAC_main_inst, | 689 int16_t WebRtcIsacfix_UpdateBwEstimate(ISACFIX_MainStruct *ISAC_main_inst, |
690 const uint8_t* encoded, | 690 const uint8_t* encoded, |
691 int32_t packet_size, | 691 size_t packet_size, |
692 uint16_t rtp_seq_number, | 692 uint16_t rtp_seq_number, |
693 uint32_t send_ts, | 693 uint32_t send_ts, |
694 uint32_t arr_ts) | 694 uint32_t arr_ts) |
695 { | 695 { |
696 ISACFIX_SubStruct *ISAC_inst; | 696 ISACFIX_SubStruct *ISAC_inst; |
697 Bitstr_dec streamdata; | 697 Bitstr_dec streamdata; |
698 int16_t err; | 698 int16_t err; |
699 const int kRequiredEncodedLenBytes = 10; | 699 const size_t kRequiredEncodedLenBytes = 10; |
700 | 700 |
701 /* typecast pointer to real structure */ | 701 /* typecast pointer to real structure */ |
702 ISAC_inst = (ISACFIX_SubStruct *)ISAC_main_inst; | 702 ISAC_inst = (ISACFIX_SubStruct *)ISAC_main_inst; |
703 | 703 |
704 /* Sanity check of packet length */ | 704 /* Sanity check of packet length */ |
705 if (packet_size <= 0) { | 705 if (packet_size == 0) { |
706 /* return error code if the packet length is null or less */ | 706 /* return error code if the packet length is null or less */ |
707 ISAC_inst->errorcode = ISAC_EMPTY_PACKET; | 707 ISAC_inst->errorcode = ISAC_EMPTY_PACKET; |
708 return -1; | 708 return -1; |
709 } else if (packet_size < kRequiredEncodedLenBytes) { | 709 } else if (packet_size < kRequiredEncodedLenBytes) { |
710 ISAC_inst->errorcode = ISAC_PACKET_TOO_SHORT; | 710 ISAC_inst->errorcode = ISAC_PACKET_TOO_SHORT; |
711 return -1; | 711 return -1; |
712 } else if (packet_size > (STREAM_MAXW16<<1)) { | 712 } else if (packet_size > (STREAM_MAXW16<<1)) { |
713 /* return error code if length of stream is too long */ | 713 /* return error code if length of stream is too long */ |
714 ISAC_inst->errorcode = ISAC_LENGTH_MISMATCH; | 714 ISAC_inst->errorcode = ISAC_LENGTH_MISMATCH; |
715 return -1; | 715 return -1; |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
758 * Output: | 758 * Output: |
759 * - decoded : The decoded vector | 759 * - decoded : The decoded vector |
760 * | 760 * |
761 * Return value : >0 - number of samples in decoded vector | 761 * Return value : >0 - number of samples in decoded vector |
762 * -1 - Error | 762 * -1 - Error |
763 */ | 763 */ |
764 | 764 |
765 | 765 |
766 int WebRtcIsacfix_Decode(ISACFIX_MainStruct* ISAC_main_inst, | 766 int WebRtcIsacfix_Decode(ISACFIX_MainStruct* ISAC_main_inst, |
767 const uint8_t* encoded, | 767 const uint8_t* encoded, |
768 int16_t len, | 768 size_t len, |
769 int16_t* decoded, | 769 int16_t* decoded, |
770 int16_t* speechType) | 770 int16_t* speechType) |
771 { | 771 { |
772 ISACFIX_SubStruct *ISAC_inst; | 772 ISACFIX_SubStruct *ISAC_inst; |
773 /* number of samples (480 or 960), output from decoder */ | 773 /* number of samples (480 or 960), output from decoder */ |
774 /* that were actually used in the encoder/decoder (determined on the fly) */ | 774 /* that were actually used in the encoder/decoder (determined on the fly) */ |
775 int16_t number_of_samples; | 775 size_t number_of_samples; |
776 int declen = 0; | 776 int declen_int = 0; |
| 777 size_t declen; |
777 | 778 |
778 /* typecast pointer to real structure */ | 779 /* typecast pointer to real structure */ |
779 ISAC_inst = (ISACFIX_SubStruct *)ISAC_main_inst; | 780 ISAC_inst = (ISACFIX_SubStruct *)ISAC_main_inst; |
780 | 781 |
781 /* check if decoder initiated */ | 782 /* check if decoder initiated */ |
782 if ((ISAC_inst->initflag & 1) != 1) { | 783 if ((ISAC_inst->initflag & 1) != 1) { |
783 ISAC_inst->errorcode = ISAC_DECODER_NOT_INITIATED; | 784 ISAC_inst->errorcode = ISAC_DECODER_NOT_INITIATED; |
784 return (-1); | 785 return (-1); |
785 } | 786 } |
786 | 787 |
787 /* Sanity check of packet length */ | 788 /* Sanity check of packet length */ |
788 if (len <= 0) { | 789 if (len == 0) { |
789 /* return error code if the packet length is null or less */ | 790 /* return error code if the packet length is null or less */ |
790 ISAC_inst->errorcode = ISAC_EMPTY_PACKET; | 791 ISAC_inst->errorcode = ISAC_EMPTY_PACKET; |
791 return -1; | 792 return -1; |
792 } else if (len > (STREAM_MAXW16<<1)) { | 793 } else if (len > (STREAM_MAXW16<<1)) { |
793 /* return error code if length of stream is too long */ | 794 /* return error code if length of stream is too long */ |
794 ISAC_inst->errorcode = ISAC_LENGTH_MISMATCH; | 795 ISAC_inst->errorcode = ISAC_LENGTH_MISMATCH; |
795 return -1; | 796 return -1; |
796 } | 797 } |
797 | 798 |
798 InitializeDecoderBitstream(len, &ISAC_inst->ISACdec_obj.bitstr_obj); | 799 InitializeDecoderBitstream(len, &ISAC_inst->ISACdec_obj.bitstr_obj); |
799 | 800 |
800 read_be16(encoded, len, ISAC_inst->ISACdec_obj.bitstr_obj.stream); | 801 read_be16(encoded, len, ISAC_inst->ISACdec_obj.bitstr_obj.stream); |
801 | 802 |
802 /* added for NetEq purposes (VAD/DTX related) */ | 803 /* added for NetEq purposes (VAD/DTX related) */ |
803 *speechType=1; | 804 *speechType=1; |
804 | 805 |
805 declen = WebRtcIsacfix_DecodeImpl(decoded, &ISAC_inst->ISACdec_obj, | 806 declen_int = WebRtcIsacfix_DecodeImpl(decoded, &ISAC_inst->ISACdec_obj, |
806 &number_of_samples); | 807 &number_of_samples); |
807 if (declen < 0) { | 808 if (declen_int < 0) { |
808 /* Some error inside the decoder */ | 809 /* Some error inside the decoder */ |
809 ISAC_inst->errorcode = -(int16_t)declen; | 810 ISAC_inst->errorcode = -(int16_t)declen_int; |
810 memset(decoded, 0, sizeof(int16_t) * MAX_FRAMESAMPLES); | 811 memset(decoded, 0, sizeof(int16_t) * MAX_FRAMESAMPLES); |
811 return -1; | 812 return -1; |
812 } | 813 } |
| 814 declen = (size_t)declen_int; |
813 | 815 |
814 /* error check */ | 816 /* error check */ |
815 | 817 |
816 if (declen & 1) { | 818 if (declen & 1) { |
817 if (len != declen && | 819 if (len != declen && |
818 len != declen + | 820 len != declen + |
819 ((ISAC_inst->ISACdec_obj.bitstr_obj.stream[declen >> 1]) & 0xFF)) { | 821 ((ISAC_inst->ISACdec_obj.bitstr_obj.stream[declen >> 1]) & 0xFF)) { |
820 ISAC_inst->errorcode = ISAC_LENGTH_MISMATCH; | 822 ISAC_inst->errorcode = ISAC_LENGTH_MISMATCH; |
821 memset(decoded, 0, sizeof(int16_t) * number_of_samples); | 823 memset(decoded, 0, sizeof(int16_t) * number_of_samples); |
822 return -1; | 824 return -1; |
823 } | 825 } |
824 } else { | 826 } else { |
825 if (len != declen && | 827 if (len != declen && |
826 len != declen + | 828 len != declen + |
827 ((ISAC_inst->ISACdec_obj.bitstr_obj.stream[declen >> 1]) >> 8)) { | 829 ((ISAC_inst->ISACdec_obj.bitstr_obj.stream[declen >> 1]) >> 8)) { |
828 ISAC_inst->errorcode = ISAC_LENGTH_MISMATCH; | 830 ISAC_inst->errorcode = ISAC_LENGTH_MISMATCH; |
829 memset(decoded, 0, sizeof(int16_t) * number_of_samples); | 831 memset(decoded, 0, sizeof(int16_t) * number_of_samples); |
830 return -1; | 832 return -1; |
831 } | 833 } |
832 } | 834 } |
833 | 835 |
834 return number_of_samples; | 836 return (int)number_of_samples; |
835 } | 837 } |
836 | 838 |
837 | 839 |
838 | 840 |
839 | 841 |
840 | 842 |
841 /**************************************************************************** | 843 /**************************************************************************** |
842 * WebRtcIsacfix_DecodeNb(...) | 844 * WebRtcIsacfix_DecodeNb(...) |
843 * | 845 * |
844 * This function decodes a ISAC frame in narrow-band (8 kHz sampling). | 846 * This function decodes a ISAC frame in narrow-band (8 kHz sampling). |
845 * Output speech length will be a multiple of 240 samples: 240 or 480 samples, | 847 * Output speech length will be a multiple of 240 samples: 240 or 480 samples, |
846 * depending on the framesize (30 or 60 ms). | 848 * depending on the framesize (30 or 60 ms). |
847 * | 849 * |
848 * The function is enabled if WEBRTC_ISAC_FIX_NB_CALLS_ENABLED is defined | 850 * The function is enabled if WEBRTC_ISAC_FIX_NB_CALLS_ENABLED is defined |
849 * | 851 * |
850 * Input: | 852 * Input: |
851 * - ISAC_main_inst : ISAC instance. | 853 * - ISAC_main_inst : ISAC instance. |
852 * - encoded : encoded ISAC frame(s) | 854 * - encoded : encoded ISAC frame(s) |
853 * - len : bytes in encoded vector | 855 * - len : bytes in encoded vector |
854 * | 856 * |
855 * Output: | 857 * Output: |
856 * - decoded : The decoded vector | 858 * - decoded : The decoded vector |
857 * | 859 * |
858 * Return value : >0 - number of samples in decoded vector | 860 * Return value : >0 - number of samples in decoded vector |
859 * -1 - Error | 861 * -1 - Error |
860 */ | 862 */ |
861 | 863 |
862 #ifdef WEBRTC_ISAC_FIX_NB_CALLS_ENABLED | 864 #ifdef WEBRTC_ISAC_FIX_NB_CALLS_ENABLED |
863 int WebRtcIsacfix_DecodeNb(ISACFIX_MainStruct *ISAC_main_inst, | 865 int WebRtcIsacfix_DecodeNb(ISACFIX_MainStruct* ISAC_main_inst, |
864 const uint16_t *encoded, | 866 const uint16_t* encoded, |
865 int16_t len, | 867 size_t len, |
866 int16_t *decoded, | 868 int16_t* decoded, |
867 int16_t *speechType) | 869 int16_t* speechType) |
868 { | 870 { |
869 ISACFIX_SubStruct *ISAC_inst; | 871 ISACFIX_SubStruct *ISAC_inst; |
870 /* twice the number of samples (480 or 960), output from decoder */ | 872 /* twice the number of samples (480 or 960), output from decoder */ |
871 /* that were actually used in the encoder/decoder (determined on the fly) */ | 873 /* that were actually used in the encoder/decoder (determined on the fly) */ |
872 int16_t number_of_samples; | 874 size_t number_of_samples; |
873 int declen = 0; | 875 int declen_int = 0; |
| 876 size_t declen; |
874 int16_t dummy[FRAMESAMPLES/2]; | 877 int16_t dummy[FRAMESAMPLES/2]; |
875 | 878 |
876 | 879 |
877 /* typecast pointer to real structure */ | 880 /* typecast pointer to real structure */ |
878 ISAC_inst = (ISACFIX_SubStruct *)ISAC_main_inst; | 881 ISAC_inst = (ISACFIX_SubStruct *)ISAC_main_inst; |
879 | 882 |
880 /* check if decoder initiated */ | 883 /* check if decoder initiated */ |
881 if ((ISAC_inst->initflag & 1) != 1) { | 884 if ((ISAC_inst->initflag & 1) != 1) { |
882 ISAC_inst->errorcode = ISAC_DECODER_NOT_INITIATED; | 885 ISAC_inst->errorcode = ISAC_DECODER_NOT_INITIATED; |
883 return (-1); | 886 return (-1); |
884 } | 887 } |
885 | 888 |
886 if (len <= 0) { | 889 if (len == 0) { |
887 /* return error code if the packet length is null or less */ | 890 /* return error code if the packet length is null or less */ |
888 ISAC_inst->errorcode = ISAC_EMPTY_PACKET; | 891 ISAC_inst->errorcode = ISAC_EMPTY_PACKET; |
889 return -1; | 892 return -1; |
890 } else if (len > (STREAM_MAXW16<<1)) { | 893 } else if (len > (STREAM_MAXW16<<1)) { |
891 /* return error code if length of stream is too long */ | 894 /* return error code if length of stream is too long */ |
892 ISAC_inst->errorcode = ISAC_LENGTH_MISMATCH; | 895 ISAC_inst->errorcode = ISAC_LENGTH_MISMATCH; |
893 return -1; | 896 return -1; |
894 } | 897 } |
895 | 898 |
896 InitializeDecoderBitstream(len, &ISAC_inst->ISACdec_obj.bitstr_obj); | 899 InitializeDecoderBitstream(len, &ISAC_inst->ISACdec_obj.bitstr_obj); |
897 | 900 |
898 read_be16(encoded, len, ISAC_inst->ISACdec_obj.bitstr_obj.stream); | 901 read_be16(encoded, len, ISAC_inst->ISACdec_obj.bitstr_obj.stream); |
899 | 902 |
900 /* added for NetEq purposes (VAD/DTX related) */ | 903 /* added for NetEq purposes (VAD/DTX related) */ |
901 *speechType=1; | 904 *speechType=1; |
902 | 905 |
903 declen = WebRtcIsacfix_DecodeImpl(decoded, &ISAC_inst->ISACdec_obj, | 906 declen_int = WebRtcIsacfix_DecodeImpl(decoded,&ISAC_inst->ISACdec_obj, |
904 &number_of_samples); | 907 &number_of_samples); |
905 if (declen < 0) { | 908 if (declen_int < 0) { |
906 /* Some error inside the decoder */ | 909 /* Some error inside the decoder */ |
907 ISAC_inst->errorcode = -(int16_t)declen; | 910 ISAC_inst->errorcode = -(int16_t)declen_int; |
908 memset(decoded, 0, sizeof(int16_t) * FRAMESAMPLES); | 911 memset(decoded, 0, sizeof(int16_t) * FRAMESAMPLES); |
909 return -1; | 912 return -1; |
910 } | 913 } |
| 914 declen = (size_t)declen_int; |
911 | 915 |
912 /* error check */ | 916 /* error check */ |
913 | 917 |
914 if (declen & 1) { | 918 if (declen & 1) { |
915 if (len != declen && | 919 if (len != declen && |
916 len != declen + | 920 len != declen + |
917 ((ISAC_inst->ISACdec_obj.bitstr_obj.stream[declen >> 1]) & 0xFF)) { | 921 ((ISAC_inst->ISACdec_obj.bitstr_obj.stream[declen >> 1]) & 0xFF)) { |
918 ISAC_inst->errorcode = ISAC_LENGTH_MISMATCH; | 922 ISAC_inst->errorcode = ISAC_LENGTH_MISMATCH; |
919 memset(decoded, 0, sizeof(int16_t) * number_of_samples); | 923 memset(decoded, 0, sizeof(int16_t) * number_of_samples); |
920 return -1; | 924 return -1; |
921 } | 925 } |
922 } else { | 926 } else { |
923 if (len != declen && | 927 if (len != declen && |
924 len != declen + | 928 len != declen + |
925 ((ISAC_inst->ISACdec_obj.bitstr_obj.stream[declen >>1]) >> 8)) { | 929 ((ISAC_inst->ISACdec_obj.bitstr_obj.stream[declen >>1]) >> 8)) { |
926 ISAC_inst->errorcode = ISAC_LENGTH_MISMATCH; | 930 ISAC_inst->errorcode = ISAC_LENGTH_MISMATCH; |
927 memset(decoded, 0, sizeof(int16_t) * number_of_samples); | 931 memset(decoded, 0, sizeof(int16_t) * number_of_samples); |
928 return -1; | 932 return -1; |
929 } | 933 } |
930 } | 934 } |
931 | 935 |
932 WebRtcIsacfix_SplitAndFilter2(decoded, decoded, dummy, &ISAC_inst->ISACdec_obj
.decimatorstr_obj); | 936 WebRtcIsacfix_SplitAndFilter2(decoded, decoded, dummy, &ISAC_inst->ISACdec_obj
.decimatorstr_obj); |
933 | 937 |
934 if (number_of_samples>FRAMESAMPLES) { | 938 if (number_of_samples>FRAMESAMPLES) { |
935 WebRtcIsacfix_SplitAndFilter2(decoded + FRAMESAMPLES, decoded + FRAMESAMPLES
/2, | 939 WebRtcIsacfix_SplitAndFilter2(decoded + FRAMESAMPLES, decoded + FRAMESAMPLES
/2, |
936 dummy, &ISAC_inst->ISACdec_obj.decimatorstr_ob
j); | 940 dummy, &ISAC_inst->ISACdec_obj.decimatorstr_ob
j); |
937 } | 941 } |
938 | 942 |
939 return number_of_samples/2; | 943 return (int)(number_of_samples / 2); |
940 } | 944 } |
941 #endif /* WEBRTC_ISAC_FIX_NB_CALLS_ENABLED */ | 945 #endif /* WEBRTC_ISAC_FIX_NB_CALLS_ENABLED */ |
942 | 946 |
943 | 947 |
944 /**************************************************************************** | 948 /**************************************************************************** |
945 * WebRtcIsacfix_DecodePlcNb(...) | 949 * WebRtcIsacfix_DecodePlcNb(...) |
946 * | 950 * |
947 * This function conducts PLC for ISAC frame(s) in narrow-band (8kHz sampling). | 951 * This function conducts PLC for ISAC frame(s) in narrow-band (8kHz sampling). |
948 * Output speech length will be "240*noOfLostFrames" samples | 952 * Output speech length will be "240*noOfLostFrames" samples |
949 * that is equevalent of "30*noOfLostFrames" millisecond. | 953 * that is equevalent of "30*noOfLostFrames" millisecond. |
950 * | 954 * |
951 * The function is enabled if WEBRTC_ISAC_FIX_NB_CALLS_ENABLED is defined | 955 * The function is enabled if WEBRTC_ISAC_FIX_NB_CALLS_ENABLED is defined |
952 * | 956 * |
953 * Input: | 957 * Input: |
954 * - ISAC_main_inst : ISAC instance. | 958 * - ISAC_main_inst : ISAC instance. |
955 * - noOfLostFrames : Number of PLC frames (240 sample=30ms) to produce | 959 * - noOfLostFrames : Number of PLC frames (240 sample=30ms) to produce |
956 * | 960 * |
957 * Output: | 961 * Output: |
958 * - decoded : The decoded vector | 962 * - decoded : The decoded vector |
959 * | 963 * |
960 * Return value : >0 - number of samples in decoded PLC vector | 964 * Return value : Number of samples in decoded PLC vector |
961 * -1 - Error | |
962 */ | 965 */ |
963 | 966 |
964 #ifdef WEBRTC_ISAC_FIX_NB_CALLS_ENABLED | 967 #ifdef WEBRTC_ISAC_FIX_NB_CALLS_ENABLED |
965 int16_t WebRtcIsacfix_DecodePlcNb(ISACFIX_MainStruct *ISAC_main_inst, | 968 size_t WebRtcIsacfix_DecodePlcNb(ISACFIX_MainStruct* ISAC_main_inst, |
966 int16_t *decoded, | 969 int16_t* decoded, |
967 int16_t noOfLostFrames ) | 970 size_t noOfLostFrames ) |
968 { | 971 { |
969 int16_t no_of_samples, declen, k, ok; | 972 size_t no_of_samples, declen, k; |
970 int16_t outframeNB[FRAMESAMPLES]; | 973 int16_t outframeNB[FRAMESAMPLES]; |
971 int16_t outframeWB[FRAMESAMPLES]; | 974 int16_t outframeWB[FRAMESAMPLES]; |
972 int16_t dummy[FRAMESAMPLES/2]; | 975 int16_t dummy[FRAMESAMPLES/2]; |
973 | 976 |
974 | 977 |
975 ISACFIX_SubStruct *ISAC_inst; | 978 ISACFIX_SubStruct *ISAC_inst; |
976 /* typecast pointer to real structure */ | 979 /* typecast pointer to real structure */ |
977 ISAC_inst = (ISACFIX_SubStruct *)ISAC_main_inst; | 980 ISAC_inst = (ISACFIX_SubStruct *)ISAC_main_inst; |
978 | 981 |
979 /* Limit number of frames to two = 60 msec. Otherwise we exceed data vectors *
/ | 982 /* Limit number of frames to two = 60 msec. Otherwise we exceed data vectors *
/ |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1016 * that is equevalent of "30*noOfLostFrames" millisecond. | 1019 * that is equevalent of "30*noOfLostFrames" millisecond. |
1017 * | 1020 * |
1018 * Input: | 1021 * Input: |
1019 * - ISAC_main_inst : ISAC instance. | 1022 * - ISAC_main_inst : ISAC instance. |
1020 * - noOfLostFrames : Number of PLC frames (480sample = 30ms) | 1023 * - noOfLostFrames : Number of PLC frames (480sample = 30ms) |
1021 * to produce | 1024 * to produce |
1022 * | 1025 * |
1023 * Output: | 1026 * Output: |
1024 * - decoded : The decoded vector | 1027 * - decoded : The decoded vector |
1025 * | 1028 * |
1026 * Return value : >0 - number of samples in decoded PLC vector | 1029 * Return value : Number of samples in decoded PLC vector |
1027 * -1 - Error | |
1028 */ | 1030 */ |
1029 | 1031 |
1030 int16_t WebRtcIsacfix_DecodePlc(ISACFIX_MainStruct *ISAC_main_inst, | 1032 size_t WebRtcIsacfix_DecodePlc(ISACFIX_MainStruct* ISAC_main_inst, |
1031 int16_t *decoded, | 1033 int16_t* decoded, |
1032 int16_t noOfLostFrames) | 1034 size_t noOfLostFrames) |
1033 { | 1035 { |
1034 | 1036 |
1035 int16_t no_of_samples, declen, k; | 1037 size_t no_of_samples, declen, k; |
1036 int16_t outframe16[MAX_FRAMESAMPLES]; | 1038 int16_t outframe16[MAX_FRAMESAMPLES]; |
1037 | 1039 |
1038 ISACFIX_SubStruct *ISAC_inst; | 1040 ISACFIX_SubStruct *ISAC_inst; |
1039 /* typecast pointer to real structure */ | 1041 /* typecast pointer to real structure */ |
1040 ISAC_inst = (ISACFIX_SubStruct *)ISAC_main_inst; | 1042 ISAC_inst = (ISACFIX_SubStruct *)ISAC_main_inst; |
1041 | 1043 |
1042 /* Limit number of frames to two = 60 msec. Otherwise we exceed data vectors *
/ | 1044 /* Limit number of frames to two = 60 msec. Otherwise we exceed data vectors *
/ |
1043 if (noOfLostFrames > 2) { | 1045 if (noOfLostFrames > 2) { |
1044 noOfLostFrames = 2; | 1046 noOfLostFrames = 2; |
1045 } | 1047 } |
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1260 * | 1262 * |
1261 * Input: | 1263 * Input: |
1262 * - encoded : Encoded bitstream | 1264 * - encoded : Encoded bitstream |
1263 * | 1265 * |
1264 * Output: | 1266 * Output: |
1265 * - frameLength : Length of frame in packet (in samples) | 1267 * - frameLength : Length of frame in packet (in samples) |
1266 * | 1268 * |
1267 */ | 1269 */ |
1268 | 1270 |
1269 int16_t WebRtcIsacfix_ReadFrameLen(const uint8_t* encoded, | 1271 int16_t WebRtcIsacfix_ReadFrameLen(const uint8_t* encoded, |
1270 int encoded_len_bytes, | 1272 size_t encoded_len_bytes, |
1271 int16_t* frameLength) | 1273 size_t* frameLength) |
1272 { | 1274 { |
1273 Bitstr_dec streamdata; | 1275 Bitstr_dec streamdata; |
1274 int16_t err; | 1276 int16_t err; |
1275 const int kRequiredEncodedLenBytes = 10; | 1277 const size_t kRequiredEncodedLenBytes = 10; |
1276 | 1278 |
1277 if (encoded_len_bytes < kRequiredEncodedLenBytes) { | 1279 if (encoded_len_bytes < kRequiredEncodedLenBytes) { |
1278 return -1; | 1280 return -1; |
1279 } | 1281 } |
1280 | 1282 |
1281 InitializeDecoderBitstream(encoded_len_bytes, &streamdata); | 1283 InitializeDecoderBitstream(encoded_len_bytes, &streamdata); |
1282 | 1284 |
1283 read_be16(encoded, kRequiredEncodedLenBytes, streamdata.stream); | 1285 read_be16(encoded, kRequiredEncodedLenBytes, streamdata.stream); |
1284 | 1286 |
1285 /* decode frame length */ | 1287 /* decode frame length */ |
(...skipping 13 matching lines...) Expand all Loading... |
1299 * Input: | 1301 * Input: |
1300 * - encoded : Encoded bitstream | 1302 * - encoded : Encoded bitstream |
1301 * | 1303 * |
1302 * Output: | 1304 * Output: |
1303 * - frameLength : Length of frame in packet (in samples) | 1305 * - frameLength : Length of frame in packet (in samples) |
1304 * - rateIndex : Bandwidth estimate in bitstream | 1306 * - rateIndex : Bandwidth estimate in bitstream |
1305 * | 1307 * |
1306 */ | 1308 */ |
1307 | 1309 |
1308 int16_t WebRtcIsacfix_ReadBwIndex(const uint8_t* encoded, | 1310 int16_t WebRtcIsacfix_ReadBwIndex(const uint8_t* encoded, |
1309 int encoded_len_bytes, | 1311 size_t encoded_len_bytes, |
1310 int16_t* rateIndex) | 1312 int16_t* rateIndex) |
1311 { | 1313 { |
1312 Bitstr_dec streamdata; | 1314 Bitstr_dec streamdata; |
1313 int16_t err; | 1315 int16_t err; |
1314 const int kRequiredEncodedLenBytes = 10; | 1316 const size_t kRequiredEncodedLenBytes = 10; |
1315 | 1317 |
1316 if (encoded_len_bytes < kRequiredEncodedLenBytes) { | 1318 if (encoded_len_bytes < kRequiredEncodedLenBytes) { |
1317 return -1; | 1319 return -1; |
1318 } | 1320 } |
1319 | 1321 |
1320 InitializeDecoderBitstream(encoded_len_bytes, &streamdata); | 1322 InitializeDecoderBitstream(encoded_len_bytes, &streamdata); |
1321 | 1323 |
1322 read_be16(encoded, kRequiredEncodedLenBytes, streamdata.stream); | 1324 read_be16(encoded, kRequiredEncodedLenBytes, streamdata.stream); |
1323 | 1325 |
1324 /* decode frame length, needed to get to the rateIndex in the bitstream */ | 1326 /* decode frame length, needed to get to the rateIndex in the bitstream */ |
1325 int16_t frameLength; | 1327 size_t framelength; |
1326 err = WebRtcIsacfix_DecodeFrameLen(&streamdata, &frameLength); | 1328 err = WebRtcIsacfix_DecodeFrameLen(&streamdata, &framelength); |
1327 if (err<0) // error check | 1329 if (err<0) // error check |
1328 return err; | 1330 return err; |
1329 | 1331 |
1330 /* decode BW estimation */ | 1332 /* decode BW estimation */ |
1331 err = WebRtcIsacfix_DecodeSendBandwidth(&streamdata, rateIndex); | 1333 err = WebRtcIsacfix_DecodeSendBandwidth(&streamdata, rateIndex); |
1332 if (err<0) // error check | 1334 if (err<0) // error check |
1333 return err; | 1335 return err; |
1334 | 1336 |
1335 return 0; | 1337 return 0; |
1336 } | 1338 } |
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1545 assert(inst->initflag & 1); // Decoder initialized. | 1547 assert(inst->initflag & 1); // Decoder initialized. |
1546 WebRtcIsacfixBw_GetBandwidthInfo(&inst->bwestimator_obj, bwinfo); | 1548 WebRtcIsacfixBw_GetBandwidthInfo(&inst->bwestimator_obj, bwinfo); |
1547 } | 1549 } |
1548 | 1550 |
1549 void WebRtcIsacfix_SetBandwidthInfo(ISACFIX_MainStruct* ISAC_main_inst, | 1551 void WebRtcIsacfix_SetBandwidthInfo(ISACFIX_MainStruct* ISAC_main_inst, |
1550 const IsacBandwidthInfo* bwinfo) { | 1552 const IsacBandwidthInfo* bwinfo) { |
1551 ISACFIX_SubStruct* inst = (ISACFIX_SubStruct*)ISAC_main_inst; | 1553 ISACFIX_SubStruct* inst = (ISACFIX_SubStruct*)ISAC_main_inst; |
1552 assert(inst->initflag & 2); // Encoder initialized. | 1554 assert(inst->initflag & 2); // Encoder initialized. |
1553 WebRtcIsacfixBw_SetBandwidthInfo(&inst->bwestimator_obj, bwinfo); | 1555 WebRtcIsacfixBw_SetBandwidthInfo(&inst->bwestimator_obj, bwinfo); |
1554 } | 1556 } |
OLD | NEW |