feeder_rate.c (195519) | feeder_rate.c (195689) |
---|---|
1/*- 2 * Copyright (c) 2005-2009 Ariff Abdullah <ariff@FreeBSD.org> 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 45 unchanged lines hidden (view full) --- 54#endif 55#include <dev/sound/pcm/sound.h> 56#include <dev/sound/pcm/pcm.h> 57#include "feeder_if.h" 58 59#define SND_USE_FXDIV 60#include "snd_fxdiv_gen.h" 61 | 1/*- 2 * Copyright (c) 2005-2009 Ariff Abdullah <ariff@FreeBSD.org> 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 45 unchanged lines hidden (view full) --- 54#endif 55#include <dev/sound/pcm/sound.h> 56#include <dev/sound/pcm/pcm.h> 57#include "feeder_if.h" 58 59#define SND_USE_FXDIV 60#include "snd_fxdiv_gen.h" 61 |
62SND_DECLARE_FILE("$FreeBSD: head/sys/dev/sound/pcm/feeder_rate.c 195519 2009-07-09 22:21:18Z ariff $"); | 62SND_DECLARE_FILE("$FreeBSD: head/sys/dev/sound/pcm/feeder_rate.c 195689 2009-07-14 18:53:34Z ariff $"); |
63#endif 64 65#include "feeder_rate_gen.h" 66 67#if !defined(_KERNEL) && defined(SND_DIAGNOSTIC) 68#undef Z_DIAGNOSTIC 69#define Z_DIAGNOSTIC 1 70#elif defined(_KERNEL) --- 713 unchanged lines hidden (view full) --- 784 * Pick suitable polynomial interpolators based on filter oversampled ratio 785 * (2 ^ Z_DRIFT_SHIFT). 786 */ 787#if !(defined(Z_COEFF_INTERP_ZOH) || defined(Z_COEFF_INTERP_LINEAR) || \ 788 defined(Z_COEFF_INTERP_QUADRATIC) || defined(Z_COEFF_INTERP_HERMITE) || \ 789 defined(Z_COEFF_INTER_BSPLINE) || defined(Z_COEFF_INTERP_OPT32X) || \ 790 defined(Z_COEFF_INTERP_OPT16X) || defined(Z_COEFF_INTERP_OPT8X) || \ 791 defined(Z_COEFF_INTERP_OPT4X) || defined(Z_COEFF_INTERP_OPT2X)) | 63#endif 64 65#include "feeder_rate_gen.h" 66 67#if !defined(_KERNEL) && defined(SND_DIAGNOSTIC) 68#undef Z_DIAGNOSTIC 69#define Z_DIAGNOSTIC 1 70#elif defined(_KERNEL) --- 713 unchanged lines hidden (view full) --- 784 * Pick suitable polynomial interpolators based on filter oversampled ratio 785 * (2 ^ Z_DRIFT_SHIFT). 786 */ 787#if !(defined(Z_COEFF_INTERP_ZOH) || defined(Z_COEFF_INTERP_LINEAR) || \ 788 defined(Z_COEFF_INTERP_QUADRATIC) || defined(Z_COEFF_INTERP_HERMITE) || \ 789 defined(Z_COEFF_INTER_BSPLINE) || defined(Z_COEFF_INTERP_OPT32X) || \ 790 defined(Z_COEFF_INTERP_OPT16X) || defined(Z_COEFF_INTERP_OPT8X) || \ 791 defined(Z_COEFF_INTERP_OPT4X) || defined(Z_COEFF_INTERP_OPT2X)) |
792#if Z_DRIFT_SHIFT >= 12 793#define Z_COEFF_INTERP_LINEAR 1 794#elif Z_DRIFT_SHIFT >= 8 795#define Z_COEFF_INTERP_QUADRATIC 1 | 792#if Z_DRIFT_SHIFT >= 6 793#define Z_COEFF_INTERP_BSPLINE 1 |
796#elif Z_DRIFT_SHIFT >= 5 797#define Z_COEFF_INTERP_OPT32X 1 798#elif Z_DRIFT_SHIFT == 4 799#define Z_COEFF_INTERP_OPT16X 1 800#elif Z_DRIFT_SHIFT == 3 801#define Z_COEFF_INTERP_OPT8X 1 802#elif Z_DRIFT_SHIFT == 2 803#define Z_COEFF_INTERP_OPT4X 1 --- 26 unchanged lines hidden (view full) --- 830 coeff = z_coeff[0]; 831#elif defined(Z_COEFF_INTERP_LINEAR) 832 int32_t zl0, zl1; 833 834 /* 2-point, 1st-order Linear */ 835 zl0 = z_coeff[0]; 836 zl1 = z_coeff[1] - z_coeff[0]; 837 | 794#elif Z_DRIFT_SHIFT >= 5 795#define Z_COEFF_INTERP_OPT32X 1 796#elif Z_DRIFT_SHIFT == 4 797#define Z_COEFF_INTERP_OPT16X 1 798#elif Z_DRIFT_SHIFT == 3 799#define Z_COEFF_INTERP_OPT8X 1 800#elif Z_DRIFT_SHIFT == 2 801#define Z_COEFF_INTERP_OPT4X 1 --- 26 unchanged lines hidden (view full) --- 828 coeff = z_coeff[0]; 829#elif defined(Z_COEFF_INTERP_LINEAR) 830 int32_t zl0, zl1; 831 832 /* 2-point, 1st-order Linear */ 833 zl0 = z_coeff[0]; 834 zl1 = z_coeff[1] - z_coeff[0]; 835 |
838 coeff = (((int64_t)zl1 * z) >> Z_SHIFT) + zl0; | 836 coeff = Z_RSHIFT((int64_t)zl1 * z, Z_SHIFT) + zl0; |
839#elif defined(Z_COEFF_INTERP_QUADRATIC) 840 int32_t zq0, zq1, zq2; 841 842 /* 3-point, 2nd-order Quadratic */ 843 zq0 = z_coeff[0]; 844 zq1 = z_coeff[1] - z_coeff[-1]; 845 zq2 = z_coeff[1] + z_coeff[-1] - (z_coeff[0] << 1); 846 | 837#elif defined(Z_COEFF_INTERP_QUADRATIC) 838 int32_t zq0, zq1, zq2; 839 840 /* 3-point, 2nd-order Quadratic */ 841 zq0 = z_coeff[0]; 842 zq1 = z_coeff[1] - z_coeff[-1]; 843 zq2 = z_coeff[1] + z_coeff[-1] - (z_coeff[0] << 1); 844 |
847 coeff = ((((((int64_t)zq2 * z) >> Z_SHIFT) + 848 zq1) * z) >> (Z_SHIFT + 1)) + zq0; | 845 coeff = Z_RSHIFT((Z_RSHIFT((int64_t)zq2 * z, Z_SHIFT) + 846 zq1) * z, Z_SHIFT + 1) + zq0; |
849#elif defined(Z_COEFF_INTERP_HERMITE) 850 int32_t zh0, zh1, zh2, zh3; 851 852 /* 4-point, 3rd-order Hermite */ 853 zh0 = z_coeff[0]; 854 zh1 = z_coeff[1] - z_coeff[-1]; 855 zh2 = (z_coeff[-1] << 1) - (z_coeff[0] * 5) + (z_coeff[1] << 2) - 856 z_coeff[2]; 857 zh3 = z_coeff[2] - z_coeff[-1] + ((z_coeff[0] - z_coeff[1]) * 3); 858 | 847#elif defined(Z_COEFF_INTERP_HERMITE) 848 int32_t zh0, zh1, zh2, zh3; 849 850 /* 4-point, 3rd-order Hermite */ 851 zh0 = z_coeff[0]; 852 zh1 = z_coeff[1] - z_coeff[-1]; 853 zh2 = (z_coeff[-1] << 1) - (z_coeff[0] * 5) + (z_coeff[1] << 2) - 854 z_coeff[2]; 855 zh3 = z_coeff[2] - z_coeff[-1] + ((z_coeff[0] - z_coeff[1]) * 3); 856 |
859 coeff = (((((((((int64_t)zh3 * z) >> Z_SHIFT) + 860 zh2) * z) >> Z_SHIFT) + zh1) * z) >> (Z_SHIFT + 1)) + zh0; | 857 coeff = Z_RSHIFT((Z_RSHIFT((Z_RSHIFT((int64_t)zh3 * z, Z_SHIFT) + 858 zh2) * z, Z_SHIFT) + zh1) * z, Z_SHIFT + 1) + zh0; |
861#elif defined(Z_COEFF_INTERP_BSPLINE) 862 int32_t zb0, zb1, zb2, zb3; 863 864 /* 4-point, 3rd-order B-Spline */ | 859#elif defined(Z_COEFF_INTERP_BSPLINE) 860 int32_t zb0, zb1, zb2, zb3; 861 862 /* 4-point, 3rd-order B-Spline */ |
865 zb0 = (((int64_t)z_coeff[0] << 2) + z_coeff[-1] + z_coeff[1]) / 3; | 863 zb0 = Z_RSHIFT(0x15555555LL * (((int64_t)z_coeff[0] << 2) + 864 z_coeff[-1] + z_coeff[1]), 30); |
866 zb1 = z_coeff[1] - z_coeff[-1]; 867 zb2 = z_coeff[-1] + z_coeff[1] - (z_coeff[0] << 1); | 865 zb1 = z_coeff[1] - z_coeff[-1]; 866 zb2 = z_coeff[-1] + z_coeff[1] - (z_coeff[0] << 1); |
868 zb3 = (((z_coeff[0] - z_coeff[1]) * 3) + z_coeff[2] - z_coeff[-1]) / 3; | 867 zb3 = Z_RSHIFT(0x15555555LL * (((z_coeff[0] - z_coeff[1]) * 3) + 868 z_coeff[2] - z_coeff[-1]), 30); |
869 | 869 |
870 coeff = ((((((((((int64_t)zb3 * z) >> Z_SHIFT) + 871 zb2) * z) >> Z_SHIFT) + zb1) * z) >> Z_SHIFT) + zb0) >> 1; | 870 coeff = (Z_RSHIFT((Z_RSHIFT((Z_RSHIFT((int64_t)zb3 * z, Z_SHIFT) + 871 zb2) * z, Z_SHIFT) + zb1) * z, Z_SHIFT) + zb0 + 1) >> 1; |
872#elif defined(Z_COEFF_INTERP_OPT32X) 873 int32_t zoz, zoe1, zoe2, zoe3, zoo1, zoo2, zoo3; 874 int32_t zoc0, zoc1, zoc2, zoc3, zoc4, zoc5; 875 876 /* 6-point, 5th-order Optimal 32x */ 877 zoz = z - (Z_ONE >> 1); 878 zoe1 = z_coeff[1] + z_coeff[0]; 879 zoe2 = z_coeff[2] + z_coeff[-1]; 880 zoe3 = z_coeff[3] + z_coeff[-2]; 881 zoo1 = z_coeff[1] - z_coeff[0]; 882 zoo2 = z_coeff[2] - z_coeff[-1]; 883 zoo3 = z_coeff[3] - z_coeff[-2]; 884 | 872#elif defined(Z_COEFF_INTERP_OPT32X) 873 int32_t zoz, zoe1, zoe2, zoe3, zoo1, zoo2, zoo3; 874 int32_t zoc0, zoc1, zoc2, zoc3, zoc4, zoc5; 875 876 /* 6-point, 5th-order Optimal 32x */ 877 zoz = z - (Z_ONE >> 1); 878 zoe1 = z_coeff[1] + z_coeff[0]; 879 zoe2 = z_coeff[2] + z_coeff[-1]; 880 zoe3 = z_coeff[3] + z_coeff[-2]; 881 zoo1 = z_coeff[1] - z_coeff[0]; 882 zoo2 = z_coeff[2] - z_coeff[-1]; 883 zoo3 = z_coeff[3] - z_coeff[-2]; 884 |
885 zoc0 = ((0x1ac2260dLL * zoe1) + (0x0526cdcaLL * zoe2) + 886 (0x00170c29LL * zoe3)) >> 30; 887 zoc1 = ((0x14f8a49aLL * zoo1) + (0x0d6d1109LL * zoo2) + 888 (0x008cd4dcLL * zoo3)) >> 30; 889 zoc2 = ((-0x0d3e94a4LL * zoe1) + (0x0bddded4LL * zoe2) + 890 (0x0160b5d0LL * zoe3)) >> 30; 891 zoc3 = ((-0x0de10cc4LL * zoo1) + (0x019b2a7dLL * zoo2) + 892 (0x01cfe914LL * zoo3)) >> 30; 893 zoc4 = ((0x02aa12d7LL * zoe1) + (-0x03ff1bb3LL * zoe2) + 894 (0x015508ddLL * zoe3)) >> 30; 895 zoc5 = ((0x051d29e5LL * zoo1) + (-0x028e7647LL * zoo2) + 896 (0x0082d81aLL * zoo3)) >> 30; | 885 zoc0 = Z_RSHIFT((0x1ac2260dLL * zoe1) + (0x0526cdcaLL * zoe2) + 886 (0x00170c29LL * zoe3), 30); 887 zoc1 = Z_RSHIFT((0x14f8a49aLL * zoo1) + (0x0d6d1109LL * zoo2) + 888 (0x008cd4dcLL * zoo3), 30); 889 zoc2 = Z_RSHIFT((-0x0d3e94a4LL * zoe1) + (0x0bddded4LL * zoe2) + 890 (0x0160b5d0LL * zoe3), 30); 891 zoc3 = Z_RSHIFT((-0x0de10cc4LL * zoo1) + (0x019b2a7dLL * zoo2) + 892 (0x01cfe914LL * zoo3), 30); 893 zoc4 = Z_RSHIFT((0x02aa12d7LL * zoe1) + (-0x03ff1bb3LL * zoe2) + 894 (0x015508ddLL * zoe3), 30); 895 zoc5 = Z_RSHIFT((0x051d29e5LL * zoo1) + (-0x028e7647LL * zoo2) + 896 (0x0082d81aLL * zoo3), 30); |
897 | 897 |
898 coeff = (((((((((((((((int64_t)zoc5 * zoz) >> Z_SHIFT) + 899 zoc4) * zoz) >> Z_SHIFT) + zoc3) * zoz) >> Z_SHIFT) + 900 zoc2) * zoz) >> Z_SHIFT) + zoc1) * zoz) >> Z_SHIFT) + zoc0; | 898 coeff = Z_RSHIFT((Z_RSHIFT((Z_RSHIFT((Z_RSHIFT((Z_RSHIFT( 899 (int64_t)zoc5 * zoz, Z_SHIFT) + 900 zoc4) * zoz, Z_SHIFT) + zoc3) * zoz, Z_SHIFT) + 901 zoc2) * zoz, Z_SHIFT) + zoc1) * zoz, Z_SHIFT) + zoc0; |
901#elif defined(Z_COEFF_INTERP_OPT16X) 902 int32_t zoz, zoe1, zoe2, zoe3, zoo1, zoo2, zoo3; 903 int32_t zoc0, zoc1, zoc2, zoc3, zoc4, zoc5; 904 905 /* 6-point, 5th-order Optimal 16x */ 906 zoz = z - (Z_ONE >> 1); 907 zoe1 = z_coeff[1] + z_coeff[0]; 908 zoe2 = z_coeff[2] + z_coeff[-1]; 909 zoe3 = z_coeff[3] + z_coeff[-2]; 910 zoo1 = z_coeff[1] - z_coeff[0]; 911 zoo2 = z_coeff[2] - z_coeff[-1]; 912 zoo3 = z_coeff[3] - z_coeff[-2]; 913 | 902#elif defined(Z_COEFF_INTERP_OPT16X) 903 int32_t zoz, zoe1, zoe2, zoe3, zoo1, zoo2, zoo3; 904 int32_t zoc0, zoc1, zoc2, zoc3, zoc4, zoc5; 905 906 /* 6-point, 5th-order Optimal 16x */ 907 zoz = z - (Z_ONE >> 1); 908 zoe1 = z_coeff[1] + z_coeff[0]; 909 zoe2 = z_coeff[2] + z_coeff[-1]; 910 zoe3 = z_coeff[3] + z_coeff[-2]; 911 zoo1 = z_coeff[1] - z_coeff[0]; 912 zoo2 = z_coeff[2] - z_coeff[-1]; 913 zoo3 = z_coeff[3] - z_coeff[-2]; 914 |
914 zoc0 = ((0x1ac2260dLL * zoe1) + (0x0526cdcaLL * zoe2) + 915 (0x00170c29LL * zoe3)) >> 30; 916 zoc1 = ((0x14f8a49aLL * zoo1) + (0x0d6d1109LL * zoo2) + 917 (0x008cd4dcLL * zoo3)) >> 30; 918 zoc2 = ((-0x0d3e94a4LL * zoe1) + (0x0bddded4LL * zoe2) + 919 (0x0160b5d0LL * zoe3)) >> 30; 920 zoc3 = ((-0x0de10cc4LL * zoo1) + (0x019b2a7dLL * zoo2) + 921 (0x01cfe914LL * zoo3)) >> 30; 922 zoc4 = ((0x02aa12d7LL * zoe1) + (-0x03ff1bb3LL * zoe2) + 923 (0x015508ddLL * zoe3)) >> 30; 924 zoc5 = ((0x051d29e5LL * zoo1) + (-0x028e7647LL * zoo2) + 925 (0x0082d81aLL * zoo3)) >> 30; | 915 zoc0 = Z_RSHIFT((0x1ac2260dLL * zoe1) + (0x0526cdcaLL * zoe2) + 916 (0x00170c29LL * zoe3), 30); 917 zoc1 = Z_RSHIFT((0x14f8a49aLL * zoo1) + (0x0d6d1109LL * zoo2) + 918 (0x008cd4dcLL * zoo3), 30); 919 zoc2 = Z_RSHIFT((-0x0d3e94a4LL * zoe1) + (0x0bddded4LL * zoe2) + 920 (0x0160b5d0LL * zoe3), 30); 921 zoc3 = Z_RSHIFT((-0x0de10cc4LL * zoo1) + (0x019b2a7dLL * zoo2) + 922 (0x01cfe914LL * zoo3), 30); 923 zoc4 = Z_RSHIFT((0x02aa12d7LL * zoe1) + (-0x03ff1bb3LL * zoe2) + 924 (0x015508ddLL * zoe3), 30); 925 zoc5 = Z_RSHIFT((0x051d29e5LL * zoo1) + (-0x028e7647LL * zoo2) + 926 (0x0082d81aLL * zoo3), 30); |
926 | 927 |
927 coeff = (((((((((((((((int64_t)zoc5 * zoz) >> Z_SHIFT) + 928 zoc4) * zoz) >> Z_SHIFT) + zoc3) * zoz) >> Z_SHIFT) + 929 zoc2) * zoz) >> Z_SHIFT) + zoc1) * zoz) >> Z_SHIFT) + zoc0; | 928 coeff = Z_RSHIFT((Z_RSHIFT((Z_RSHIFT((Z_RSHIFT((Z_RSHIFT( 929 (int64_t)zoc5 * zoz, Z_SHIFT) + 930 zoc4) * zoz, Z_SHIFT) + zoc3) * zoz, Z_SHIFT) + 931 zoc2) * zoz, Z_SHIFT) + zoc1) * zoz, Z_SHIFT) + zoc0; |
930#elif defined(Z_COEFF_INTERP_OPT8X) 931 int32_t zoz, zoe1, zoe2, zoe3, zoo1, zoo2, zoo3; 932 int32_t zoc0, zoc1, zoc2, zoc3, zoc4, zoc5; 933 934 /* 6-point, 5th-order Optimal 8x */ 935 zoz = z - (Z_ONE >> 1); 936 zoe1 = z_coeff[1] + z_coeff[0]; 937 zoe2 = z_coeff[2] + z_coeff[-1]; 938 zoe3 = z_coeff[3] + z_coeff[-2]; 939 zoo1 = z_coeff[1] - z_coeff[0]; 940 zoo2 = z_coeff[2] - z_coeff[-1]; 941 zoo3 = z_coeff[3] - z_coeff[-2]; 942 | 932#elif defined(Z_COEFF_INTERP_OPT8X) 933 int32_t zoz, zoe1, zoe2, zoe3, zoo1, zoo2, zoo3; 934 int32_t zoc0, zoc1, zoc2, zoc3, zoc4, zoc5; 935 936 /* 6-point, 5th-order Optimal 8x */ 937 zoz = z - (Z_ONE >> 1); 938 zoe1 = z_coeff[1] + z_coeff[0]; 939 zoe2 = z_coeff[2] + z_coeff[-1]; 940 zoe3 = z_coeff[3] + z_coeff[-2]; 941 zoo1 = z_coeff[1] - z_coeff[0]; 942 zoo2 = z_coeff[2] - z_coeff[-1]; 943 zoo3 = z_coeff[3] - z_coeff[-2]; 944 |
943 zoc0 = ((0x1aa9b47dLL * zoe1) + (0x053d9944LL * zoe2) + 944 (0x0018b23fLL * zoe3)) >> 30; 945 zoc1 = ((0x14a104d1LL * zoo1) + (0x0d7d2504LL * zoo2) + 946 (0x0094b599LL * zoo3)) >> 30; 947 zoc2 = ((-0x0d22530bLL * zoe1) + (0x0bb37a2cLL * zoe2) + 948 (0x016ed8e0LL * zoe3)) >> 30; 949 zoc3 = ((-0x0d744b1cLL * zoo1) + (0x01649591LL * zoo2) + 950 (0x01dae93aLL * zoo3)) >> 30; 951 zoc4 = ((0x02a7ee1bLL * zoe1) + (-0x03fbdb24LL * zoe2) + 952 (0x0153ed07LL * zoe3)) >> 30; 953 zoc5 = ((0x04cf9b6cLL * zoo1) + (-0x0266b378LL * zoo2) + 954 (0x007a7c26LL * zoo3)) >> 30; | 945 zoc0 = Z_RSHIFT((0x1aa9b47dLL * zoe1) + (0x053d9944LL * zoe2) + 946 (0x0018b23fLL * zoe3), 30); 947 zoc1 = Z_RSHIFT((0x14a104d1LL * zoo1) + (0x0d7d2504LL * zoo2) + 948 (0x0094b599LL * zoo3), 30); 949 zoc2 = Z_RSHIFT((-0x0d22530bLL * zoe1) + (0x0bb37a2cLL * zoe2) + 950 (0x016ed8e0LL * zoe3), 30); 951 zoc3 = Z_RSHIFT((-0x0d744b1cLL * zoo1) + (0x01649591LL * zoo2) + 952 (0x01dae93aLL * zoo3), 30); 953 zoc4 = Z_RSHIFT((0x02a7ee1bLL * zoe1) + (-0x03fbdb24LL * zoe2) + 954 (0x0153ed07LL * zoe3), 30); 955 zoc5 = Z_RSHIFT((0x04cf9b6cLL * zoo1) + (-0x0266b378LL * zoo2) + 956 (0x007a7c26LL * zoo3), 30); |
955 | 957 |
956 coeff = (((((((((((((((int64_t)zoc5 * zoz) >> Z_SHIFT) + 957 zoc4) * zoz) >> Z_SHIFT) + zoc3) * zoz) >> Z_SHIFT) + 958 zoc2) * zoz) >> Z_SHIFT) + zoc1) * zoz) >> Z_SHIFT) + zoc0; | 958 coeff = Z_RSHIFT((Z_RSHIFT((Z_RSHIFT((Z_RSHIFT((Z_RSHIFT( 959 (int64_t)zoc5 * zoz, Z_SHIFT) + 960 zoc4) * zoz, Z_SHIFT) + zoc3) * zoz, Z_SHIFT) + 961 zoc2) * zoz, Z_SHIFT) + zoc1) * zoz, Z_SHIFT) + zoc0; |
959#elif defined(Z_COEFF_INTERP_OPT4X) 960 int32_t zoz, zoe1, zoe2, zoe3, zoo1, zoo2, zoo3; 961 int32_t zoc0, zoc1, zoc2, zoc3, zoc4, zoc5; 962 963 /* 6-point, 5th-order Optimal 4x */ 964 zoz = z - (Z_ONE >> 1); 965 zoe1 = z_coeff[1] + z_coeff[0]; 966 zoe2 = z_coeff[2] + z_coeff[-1]; 967 zoe3 = z_coeff[3] + z_coeff[-2]; 968 zoo1 = z_coeff[1] - z_coeff[0]; 969 zoo2 = z_coeff[2] - z_coeff[-1]; 970 zoo3 = z_coeff[3] - z_coeff[-2]; 971 | 962#elif defined(Z_COEFF_INTERP_OPT4X) 963 int32_t zoz, zoe1, zoe2, zoe3, zoo1, zoo2, zoo3; 964 int32_t zoc0, zoc1, zoc2, zoc3, zoc4, zoc5; 965 966 /* 6-point, 5th-order Optimal 4x */ 967 zoz = z - (Z_ONE >> 1); 968 zoe1 = z_coeff[1] + z_coeff[0]; 969 zoe2 = z_coeff[2] + z_coeff[-1]; 970 zoe3 = z_coeff[3] + z_coeff[-2]; 971 zoo1 = z_coeff[1] - z_coeff[0]; 972 zoo2 = z_coeff[2] - z_coeff[-1]; 973 zoo3 = z_coeff[3] - z_coeff[-2]; 974 |
972 zoc0 = ((0x1a8eda43LL * zoe1) + (0x0556ee38LL * zoe2) + 973 (0x001a3784LL * zoe3)) >> 30; 974 zoc1 = ((0x143d863eLL * zoo1) + (0x0d910e36LL * zoo2) + 975 (0x009ca889LL * zoo3)) >> 30; 976 zoc2 = ((-0x0d026821LL * zoe1) + (0x0b837773LL * zoe2) + 977 (0x017ef0c6LL * zoe3)) >> 30; 978 zoc3 = ((-0x0cef1502LL * zoo1) + (0x01207a8eLL * zoo2) + 979 (0x01e936dbLL * zoo3)) >> 30; 980 zoc4 = ((0x029fe643LL * zoe1) + (-0x03ef3fc8LL * zoe2) + 981 (0x014f5923LL * zoe3)) >> 30; 982 zoc5 = ((0x043a9d08LL * zoo1) + (-0x02154febLL * zoo2) + 983 (0x00670dbdLL * zoo3)) >> 30; | 975 zoc0 = Z_RSHIFT((0x1a8eda43LL * zoe1) + (0x0556ee38LL * zoe2) + 976 (0x001a3784LL * zoe3), 30); 977 zoc1 = Z_RSHIFT((0x143d863eLL * zoo1) + (0x0d910e36LL * zoo2) + 978 (0x009ca889LL * zoo3), 30); 979 zoc2 = Z_RSHIFT((-0x0d026821LL * zoe1) + (0x0b837773LL * zoe2) + 980 (0x017ef0c6LL * zoe3), 30); 981 zoc3 = Z_RSHIFT((-0x0cef1502LL * zoo1) + (0x01207a8eLL * zoo2) + 982 (0x01e936dbLL * zoo3), 30); 983 zoc4 = Z_RSHIFT((0x029fe643LL * zoe1) + (-0x03ef3fc8LL * zoe2) + 984 (0x014f5923LL * zoe3), 30); 985 zoc5 = Z_RSHIFT((0x043a9d08LL * zoo1) + (-0x02154febLL * zoo2) + 986 (0x00670dbdLL * zoo3), 30); |
984 | 987 |
985 coeff = (((((((((((((((int64_t)zoc5 * zoz) >> Z_SHIFT) + 986 zoc4) * zoz) >> Z_SHIFT) + zoc3) * zoz) >> Z_SHIFT) + 987 zoc2) * zoz) >> Z_SHIFT) + zoc1) * zoz) >> Z_SHIFT) + zoc0; | 988 coeff = Z_RSHIFT((Z_RSHIFT((Z_RSHIFT((Z_RSHIFT((Z_RSHIFT( 989 (int64_t)zoc5 * zoz, Z_SHIFT) + 990 zoc4) * zoz, Z_SHIFT) + zoc3) * zoz, Z_SHIFT) + 991 zoc2) * zoz, Z_SHIFT) + zoc1) * zoz, Z_SHIFT) + zoc0; |
988#elif defined(Z_COEFF_INTERP_OPT2X) 989 int32_t zoz, zoe1, zoe2, zoe3, zoo1, zoo2, zoo3; 990 int32_t zoc0, zoc1, zoc2, zoc3, zoc4, zoc5; 991 992 /* 6-point, 5th-order Optimal 2x */ 993 zoz = z - (Z_ONE >> 1); 994 zoe1 = z_coeff[1] + z_coeff[0]; 995 zoe2 = z_coeff[2] + z_coeff[-1]; 996 zoe3 = z_coeff[3] + z_coeff[-2]; 997 zoo1 = z_coeff[1] - z_coeff[0]; 998 zoo2 = z_coeff[2] - z_coeff[-1]; 999 zoo3 = z_coeff[3] - z_coeff[-2]; 1000 | 992#elif defined(Z_COEFF_INTERP_OPT2X) 993 int32_t zoz, zoe1, zoe2, zoe3, zoo1, zoo2, zoo3; 994 int32_t zoc0, zoc1, zoc2, zoc3, zoc4, zoc5; 995 996 /* 6-point, 5th-order Optimal 2x */ 997 zoz = z - (Z_ONE >> 1); 998 zoe1 = z_coeff[1] + z_coeff[0]; 999 zoe2 = z_coeff[2] + z_coeff[-1]; 1000 zoe3 = z_coeff[3] + z_coeff[-2]; 1001 zoo1 = z_coeff[1] - z_coeff[0]; 1002 zoo2 = z_coeff[2] - z_coeff[-1]; 1003 zoo3 = z_coeff[3] - z_coeff[-2]; 1004 |
1001 zoc0 = ((0x19edb6fdLL * zoe1) + (0x05ebd062LL * zoe2) + 1002 (0x00267881LL * zoe3)) >> 30; 1003 zoc1 = ((0x1223af76LL * zoo1) + (0x0de3dd6bLL * zoo2) + 1004 (0x00d683cdLL * zoo3)) >> 30; 1005 zoc2 = ((-0x0c3ee068LL * zoe1) + (0x0a5c3769LL * zoe2) + 1006 (0x01e2aceaLL * zoe3)) >> 30; 1007 zoc3 = ((-0x0a8ab614LL * zoo1) + (-0x0019522eLL * zoo2) + 1008 (0x022cefc7LL * zoo3)) >> 30; 1009 zoc4 = ((0x0276187dLL * zoe1) + (-0x03a801e8LL * zoe2) + 1010 (0x0131d935LL * zoe3)) >> 30; 1011 zoc5 = ((0x02c373f5LL * zoo1) + (-0x01275f83LL * zoo2) + 1012 (0x0018ee79LL * zoo3)) >> 30; | 1005 zoc0 = Z_RSHIFT((0x19edb6fdLL * zoe1) + (0x05ebd062LL * zoe2) + 1006 (0x00267881LL * zoe3), 30); 1007 zoc1 = Z_RSHIFT((0x1223af76LL * zoo1) + (0x0de3dd6bLL * zoo2) + 1008 (0x00d683cdLL * zoo3), 30); 1009 zoc2 = Z_RSHIFT((-0x0c3ee068LL * zoe1) + (0x0a5c3769LL * zoe2) + 1010 (0x01e2aceaLL * zoe3), 30); 1011 zoc3 = Z_RSHIFT((-0x0a8ab614LL * zoo1) + (-0x0019522eLL * zoo2) + 1012 (0x022cefc7LL * zoo3), 30); 1013 zoc4 = Z_RSHIFT((0x0276187dLL * zoe1) + (-0x03a801e8LL * zoe2) + 1014 (0x0131d935LL * zoe3), 30); 1015 zoc5 = Z_RSHIFT((0x02c373f5LL * zoo1) + (-0x01275f83LL * zoo2) + 1016 (0x0018ee79LL * zoo3), 30); |
1013 | 1017 |
1014 coeff = (((((((((((((((int64_t)zoc5 * zoz) >> Z_SHIFT) + 1015 zoc4) * zoz) >> Z_SHIFT) + zoc3) * zoz) >> Z_SHIFT) + 1016 zoc2) * zoz) >> Z_SHIFT) + zoc1) * zoz) >> Z_SHIFT) + zoc0; | 1018 coeff = Z_RSHIFT((Z_RSHIFT((Z_RSHIFT((Z_RSHIFT((Z_RSHIFT( 1019 (int64_t)zoc5 * zoz, Z_SHIFT) + 1020 zoc4) * zoz, Z_SHIFT) + zoc3) * zoz, Z_SHIFT) + 1021 zoc2) * zoz, Z_SHIFT) + zoc1) * zoz, Z_SHIFT) + zoc0; |
1017#else 1018#error "Interpolation type screwed!" 1019#endif 1020 1021#if Z_POLYPHASE_COEFF_SHIFT > 0 1022 coeff = Z_RSHIFT(coeff, Z_POLYPHASE_COEFF_SHIFT); 1023#endif 1024 return (coeff); --- 714 unchanged lines hidden --- | 1022#else 1023#error "Interpolation type screwed!" 1024#endif 1025 1026#if Z_POLYPHASE_COEFF_SHIFT > 0 1027 coeff = Z_RSHIFT(coeff, Z_POLYPHASE_COEFF_SHIFT); 1028#endif 1029 return (coeff); --- 714 unchanged lines hidden --- |