From owner-svn-src-all@FreeBSD.ORG Mon Jun 15 04:31:34 2009 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id E1AD1106564A; Mon, 15 Jun 2009 04:31:34 +0000 (UTC) (envelope-from ariff@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id CF69A8FC14; Mon, 15 Jun 2009 04:31:34 +0000 (UTC) (envelope-from ariff@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n5F4VYTk079322; Mon, 15 Jun 2009 04:31:34 GMT (envelope-from ariff@svn.freebsd.org) Received: (from ariff@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n5F4VYHB079320; Mon, 15 Jun 2009 04:31:34 GMT (envelope-from ariff@svn.freebsd.org) Message-Id: <200906150431.n5F4VYHB079320@svn.freebsd.org> From: Ariff Abdullah Date: Mon, 15 Jun 2009 04:31:34 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r194233 - in head/sys: dev/sound tools/sound X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 15 Jun 2009 04:31:35 -0000 Author: ariff Date: Mon Jun 15 04:31:34 2009 New Revision: 194233 URL: http://svn.freebsd.org/changeset/base/194233 Log: - Add a way to change filter oversampling factor through FEEDER_RATE_PRESET "OVERSAMPLING_FACTOR:X .. .." where X = log2(oversampling factor). - Lower down default filter oversampling factor from 128 (log2 = 7) to 32 (log2 = 5), saving worth of 80 Kb. The use of better polynomial interpolator will raise its conversion quality/accuracy to match (or slightly better) with previous settings. - Bump driver version. Modified: head/sys/dev/sound/version.h head/sys/tools/sound/feeder_rate_mkfilter.awk Modified: head/sys/dev/sound/version.h ============================================================================== --- head/sys/dev/sound/version.h Mon Jun 15 04:05:38 2009 (r194232) +++ head/sys/dev/sound/version.h Mon Jun 15 04:31:34 2009 (r194233) @@ -37,6 +37,6 @@ * Last 2 decimal places reserved for daily versioning, starting * with 0. */ -#define SND_DRV_VERSION 2009060800 +#define SND_DRV_VERSION 2009061500 #endif /* !_SND_VERSION_H_ */ Modified: head/sys/tools/sound/feeder_rate_mkfilter.awk ============================================================================== --- head/sys/tools/sound/feeder_rate_mkfilter.awk Mon Jun 15 04:05:38 2009 (r194232) +++ head/sys/tools/sound/feeder_rate_mkfilter.awk Mon Jun 15 04:31:34 2009 (r194233) @@ -379,8 +379,15 @@ function filter_parse(s, a, i, attn, ale split(s, a, ":"); alen = length(a); + if (alen > 0 && a[1] == "OVERSAMPLING_FACTOR") { + if (alen != 2) + return (-1); + init_drift(floor(a[2])); + return (-1); + } + if (alen == 1 || alen == 2) { - if (a[1] == "nyquist_hover") { + if (a[1] == "NYQUIST_HOVER") { i = 1.0 * a[2]; Z_NYQUIST_HOVER = (i > 0.0 && i < 1.0) ? i : 0.0; return (-1); @@ -493,6 +500,33 @@ function genlerp(bit, use64, lerp) bit, (bit < 10) ? "\t" : "", lerp); } +function init_drift(drift, xdrift) +{ + xdrift = floor(drift); + + if (Z_DRIFT_SHIFT != -1) { + if (xdrift != Z_DRIFT_SHIFT) + printf("#error Z_DRIFT_SHIFT reinitialize!\n"); + return; + } + + # + # Initialize filter oversampling factor, or in other word + # Z_DRIFT_SHIFT. + # + if (xdrift < 0) + xdrift = 1; + else if (xdrift > 31) + xdrift = 31; + + Z_DRIFT_SHIFT = xdrift; + Z_DRIFT_ONE = shl(1, Z_DRIFT_SHIFT); + + Z_SHIFT = Z_FULL_SHIFT - Z_DRIFT_SHIFT; + Z_ONE = shl(1, Z_SHIFT); + Z_MASK = Z_ONE - 1; +} + BEGIN { I0_EPSILON = 1e-21; M_PI = atan2(0.0, -1.0); @@ -511,25 +545,14 @@ BEGIN { Z_INTERP_COEFF_SHIFT = 24; Z_INTERP_COEFF_ONE = shl(1, Z_INTERP_COEFF_SHIFT); - # - # Filter oversampling factor. - # - # 6, 7, or 8 depending on how much you can trade off between memory - # consumption (due to large tables) and precision / quality. - # - Z_DRIFT_SHIFT = 7; - Z_DRIFT_ONE = shl(1, Z_DRIFT_SHIFT); - - Z_SHIFT = Z_FULL_SHIFT - Z_DRIFT_SHIFT; - Z_ONE = shl(1, Z_SHIFT); - Z_MASK = Z_ONE - 1; - Z_LINEAR_FULL_SHIFT = Z_FULL_SHIFT; Z_LINEAR_FULL_ONE = shl(1, Z_LINEAR_FULL_SHIFT); Z_LINEAR_SHIFT = 8; Z_LINEAR_UNSHIFT = Z_LINEAR_FULL_SHIFT - Z_LINEAR_SHIFT; Z_LINEAR_ONE = shl(1, Z_LINEAR_SHIFT) + Z_DRIFT_SHIFT_DEFAULT = 5; + Z_DRIFT_SHIFT = -1; # meehhhh... let it overflow... #Z_SCALE_SHIFT = 31; #Z_SCALE_ONE = shl(1, Z_SCALE_SHIFT); @@ -595,6 +618,8 @@ BEGIN { beta = Popts["beta"]; nmult = Popts["nmult"]; rolloff = Popts["rolloff"]; + if (Z_DRIFT_SHIFT == -1) + init_drift(Z_DRIFT_SHIFT_DEFAULT); ztab[imp["quality"] - 2] = \ mkfilter(imp, nmult, rolloff, beta, Z_DRIFT_ONE); imp["quality"]++;