cvs commit: src/sys/dev/sound/pcm buffer.c channel.c dsp.c fake.c feeder_fmt.c feeder_rate.c sound.h vchan.c

Alexander Leidinger netchild at FreeBSD.org
Sun Jul 31 16:16:23 GMT 2005


netchild    2005-07-31 16:16:22 UTC

  FreeBSD src repository

  Modified files:
    sys/dev/sound/pcm    buffer.c channel.c dsp.c fake.c 
                         feeder_fmt.c feeder_rate.c sound.h 
                         vchan.c 
  Log:
  Whats New:
  1. Support wide range sampling rate, as low as 1hz up to int32 max
     (which is, insane) through new feeder_rate, multiple precisions
     choice (32/64 bit converter). This is indeed, quite insane, but it
     does give us more room and flexibility. Plenty sysctl options to
     adjust resampling characteristics.
  2. Support 24/32 bit pcm format conversion through new, much improved,
     simplified and optimized feeder_fmt.
  
  Changes:
  1. buffer.c / dsp.c / sound.h
     * Support for 24/32 AFMT.
  2. feeder_rate.c
     * New implementation of sampling rate conversion with 32/64 bit
       precision, 1 - int32max hz (which is, ridiculous, yet very
       addictive).  Much improved / smarter buffer management to not
       cause any missing samples at the end of conversion process
     * Tunable sysctls for various aspect:
         hw.snd.feeder_rate_ratemin - minimum allowable sampling rate
         (default to 4000)
         hw.snd.feeder_rate_ratemax - maximum allowable sampling rate
         (default to 1102500)
         hw.snd.feeder_rate_buffersize - conversion buffer size
         (default to 8192)
         hw.snd.feeder_rate_scaling - scaling / conversion method
         (please refer to the source for explaination). Default to
         previous implementation type.
  3. feeder_fmt.c / sound.h
     * New implementation, support for 24/32bit conversion, optimized,
       and simplified. Few routines has been removed (8 to xlaw, 16 to
       8). It just doesn't make sense.
  4. channel.c
     * Support for 24/32 AFMT
     * Fix wrong xruns increment, causing incorrect underruns statistic
       while using vchans.
  5. vchan.c
     * Support for 24/32 AFMT
     * Proper speed / rate detection especially for fixed rate ac97.
       User can override it using kernel hint:
       hint.pcm.<unit>.vchanrate="xxxx".
  
  Notes / Issues:
          * Virtual Channels (vchans)
            Enabling vchans can really, really help to solve overrun
            issues.  This is quite understandable, because it operates
            entirely within its own buffering system without relying on
            hardware interrupt / state. Even if you don't need vchan,
            just enable single channel can help much. Few soundcards
            (notably via8233x, sblive, possibly others) have their own
            hardware multi channel, and this is unfortunately beyond
            vchan reachability.
          * The arrival of 24/32 also come with a price. Applications
            that can do 24/32bit playback need to be recompiled (notably
            mplayer).  Use (recompiled) mplayer to experiment / test /
            debug this various format using -af format=fmt. Note that
            24bit seeking in mplayer is a little bit broken, sometimes
            can cause silence or loud static noise. Pausing / seeking
            few times can solve this problem.
            You don't have to rebuild world entirely for this. Simply
            copy /usr/src/sys/sys/soundcard.h to
            /usr/include/sys/soundcard.h would suffice. Few drivers also
            need recompilation, and this can be done via
            /usr/src/sys/modules/sound/.
            Support for 24bit hardware playback is beyond the scope of
            this changes. That would require spessific hardware driver
            changes.
          * Don't expect playing 9999999999hz is a wise decision. Be
            reasonable. The new feeder_rate implemention provide
            flexibility, not insanity. You can easily chew up your CPU
            with this kind of mind instability. Please use proper
            mosquito repellent device for this obvious cracked brain
            attempt. As for testing purposes, you can use (again)
            mplayer to generate / play with different sampling rate. Use
            something like "mplayer -af resample=192000:0:0 <files>".
  
  Submitted by:   Ariff Abdullah <skywizard at MyBSD.org.my>
  Tested by:      multimedia@
  
  Revision  Changes    Path
  1.26      +6 -2      src/sys/dev/sound/pcm/buffer.c
  1.100     +47 -6     src/sys/dev/sound/pcm/channel.c
  1.81      +8 -1      src/sys/dev/sound/pcm/dsp.c
  1.15      +22 -0     src/sys/dev/sound/pcm/fake.c
  1.15      +581 -405  src/sys/dev/sound/pcm/feeder_fmt.c
  1.12      +640 -323  src/sys/dev/sound/pcm/feeder_rate.c
  1.64      +5 -2      src/sys/dev/sound/pcm/sound.h
  1.18      +190 -4    src/sys/dev/sound/pcm/vchan.c


More information about the cvs-all mailing list