Date: Tue, 28 Oct 2014 14:09:02 +0000 (UTC) From: Tijl Coosemans <tijl@FreeBSD.org> To: ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org Subject: svn commit: r371636 - in head/net/mediastreamer: . files Message-ID: <201410281409.s9SE92i7073481@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: tijl Date: Tue Oct 28 14:09:01 2014 New Revision: 371636 URL: https://svnweb.freebsd.org/changeset/ports/371636 QAT: https://qat.redports.org/buildarchive/r371636/ Log: Further reduce latency in the OSS support PR: 194346 Submitted by: hselasky Modified: head/net/mediastreamer/Makefile head/net/mediastreamer/files/patch-src__audiofilters__oss.c Modified: head/net/mediastreamer/Makefile ============================================================================== --- head/net/mediastreamer/Makefile Tue Oct 28 14:07:04 2014 (r371635) +++ head/net/mediastreamer/Makefile Tue Oct 28 14:09:01 2014 (r371636) @@ -3,7 +3,7 @@ PORTNAME= mediastreamer PORTVERSION= 2.10.0 -PORTREVISION= 6 +PORTREVISION= 7 CATEGORIES= net MASTER_SITES= SAVANNAH/linphone/mediastreamer Modified: head/net/mediastreamer/files/patch-src__audiofilters__oss.c ============================================================================== --- head/net/mediastreamer/files/patch-src__audiofilters__oss.c Tue Oct 28 14:07:04 2014 (r371635) +++ head/net/mediastreamer/files/patch-src__audiofilters__oss.c Tue Oct 28 14:09:01 2014 (r371636) @@ -1,6 +1,86 @@ --- src/audiofilters/oss.c.orig +++ src/audiofilters/oss.c -@@ -364,7 +364,11 @@ +@@ -41,7 +41,7 @@ + { + int p=0,cond=0; + int i=0; +- int min_size=0,blocksize=512; ++ int min_size=0, blocksize=0; + int err; + + //g_message("opening sound device"); +@@ -77,54 +77,18 @@ + if (err<0){ + ms_warning("oss_open: can't set mono/stereo mode:%s.",strerror(errno)); + } +- +- if (rate==16000) blocksize=4096; /* oss emulation is not very good at 16khz */ +- else blocksize=blocksize*(rate/8000); + + ioctl(fd, SNDCTL_DSP_GETBLKSIZE, &min_size); + +- /** +- * first try SNDCTL_DSP_SETFRAGMENT +- */ +- if (min_size>blocksize) { +- int size_selector=0; +- while ((blocksize >> size_selector) != 1)size_selector++; /*compute selector blocksize = 1<< size_selector*/ +- int frag = (2 << 16) | (size_selector); +- if (ioctl(fd, SNDCTL_DSP_SETFRAGMENT, &frag) == -1) { +- ms_warning("This OSS driver does not support trying SNDCTL_DSP_SETFRAGMENT"); +- ioctl(fd, SNDCTL_DSP_GETBLKSIZE, &min_size); +- +- /* try to subdivide BLKSIZE to reach block size if necessary */ +- if (min_size>blocksize) +- { +- cond=1; +- p=min_size/blocksize; +- while(cond) +- { +- i=ioctl(fd, SNDCTL_DSP_SUBDIVIDE, &p); +- ms_message("subdivide bloc min_size [%i] block_size [%i] said error=%i,errno=%i\n",min_size,blocksize,i,errno); +- if ((i!=0) || (p==1)) cond=0; +- else p=p/2; +- } +- } +- ioctl(fd, SNDCTL_DSP_GETBLKSIZE, &min_size); +- } else { +- /*it's working*/ +- min_size=1 << (frag&0x0FFFF); +- ms_message("Max fragment=%x, size selector=%x block size=%i",frag>>16,frag&0x0FFFF,min_size); +- } +- } +- +- if (min_size>blocksize) +- { +- ms_warning("dsp block size set to %i.",min_size); +- }else{ +- /* no need to access the card with less latency than needed*/ +- min_size=blocksize; +- } ++ /* compute 20ms buffer */ ++ blocksize = (rate / 50) * 2; ++ if (stereo) ++ blocksize *= 2; ++ if (min_size > blocksize) ++ blocksize = min_size; + + ms_message("/dev/dsp opened: rate=%i,bits=%i,stereo=%i blocksize=%i.", +- rate,bits,stereo,min_size); ++ rate,bits,stereo,blocksize); + + /* start recording !!! Alex */ + { +@@ -134,7 +98,7 @@ + res=ioctl(fd, SNDCTL_DSP_SETTRIGGER, &fl); + if (res<0) ms_warning("OSS_TRIGGER: %s",strerror(errno)); + } +- *minsz=min_size; ++ *minsz=blocksize; + return fd; + } + +@@ -364,7 +328,11 @@ } } if (d->pcmfd_write>=0){
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201410281409.s9SE92i7073481>