diff options
author | Ariff Abdullah <ariff@FreeBSD.org> | 2006-01-29 01:32:37 +0000 |
---|---|---|
committer | Ariff Abdullah <ariff@FreeBSD.org> | 2006-01-29 01:32:37 +0000 |
commit | 4a193ac90749ae26dad0e7a8dc19d31f05c8a5aa (patch) | |
tree | 0bb79309c3a1dedf4b8d6d46dd0d2b768ab6b657 /sys/dev/sound/pcm/feeder.c | |
parent | 343c20a85ea39cdf6363eb94336325231efdf0ab (diff) | |
download | src-4a193ac90749ae26dad0e7a8dc19d31f05c8a5aa.tar.gz src-4a193ac90749ae26dad0e7a8dc19d31f05c8a5aa.zip |
Tune format scoring so (non)stereo format will get better chance
to be selected.
Notes
Notes:
svn path=/head/; revision=154969
Diffstat (limited to 'sys/dev/sound/pcm/feeder.c')
-rw-r--r-- | sys/dev/sound/pcm/feeder.c | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/sys/dev/sound/pcm/feeder.c b/sys/dev/sound/pcm/feeder.c index c48344d832cf..c6c4744d584a 100644 --- a/sys/dev/sound/pcm/feeder.c +++ b/sys/dev/sound/pcm/feeder.c @@ -299,14 +299,18 @@ int chn_fmtscore(u_int32_t fmt) { if (fmt & AFMT_32BIT) - return 32; + return 60; if (fmt & AFMT_24BIT) - return 24; + return 50; if (fmt & AFMT_16BIT) - return 16; + return 40; if (fmt & (AFMT_U8|AFMT_S8)) - return 8; - return 4; + return 30; + if (fmt & AFMT_MU_LAW) + return 20; + if (fmt & AFMT_A_LAW) + return 10; + return 0; } u_int32_t @@ -322,7 +326,8 @@ chn_fmtbestbit(u_int32_t fmt, u_int32_t *fmts) score2 = chn_fmtscore(fmts[i]); if (oldscore == 0 || (score2 == score) || (score2 > oldscore && score2 < score) || - (score2 < oldscore && score2 > score)) { + (score2 < oldscore && score2 > score) || + (oldscore < score && score2 > oldscore)) { best = fmts[i]; oldscore = score2; } @@ -344,7 +349,8 @@ chn_fmtbeststereo(u_int32_t fmt, u_int32_t *fmts) score2 = chn_fmtscore(fmts[i]); if (oldscore == 0 || (score2 == score) || (score2 > oldscore && score2 < score) || - (score2 < oldscore && score2 > score)) { + (score2 < oldscore && score2 > score) || + (oldscore < score && score2 > oldscore)) { best = fmts[i]; oldscore = score2; } @@ -369,9 +375,11 @@ chn_fmtbest(u_int32_t fmt, u_int32_t *fmts) score = chn_fmtscore(fmt); score1 = chn_fmtscore(best1); score2 = chn_fmtscore(best2); - if (score2 == score) + if (score1 == score2 || score1 == score) + return best1; + else if (score2 == score) return best2; - else if (score1 == score || score1 > score2) + else if (score1 > score2) return best1; return best2; } |