[prev in list] [next in list] [prev in thread] [next in thread]
List: freebsd-multimedia
Subject: Re: [SoX-devel] Bug in sox-14.3.2/src/oss.c
From: Hans Petter Selasky <hselasky () c2i ! net>
Date: 2012-10-31 9:37:46
Message-ID: 201210311037.46581.hselasky () c2i ! net
[Download RAW message or body]
On Wednesday 31 October 2012 10:03:50 Eric Wong wrote:
> Hans Petter Selasky <hselasky@c2i.net> wrote:
> > Hi,
> >
> > Line buffering should be off, but this statement leads to SOX reading 1
> > and
> >
> > one byte from the recording DSP device under FreeBSD:
> > /* Change to non-buffered I/O */
> > setvbuf(ft->fp, NULL, _IONBF, sizeof(char) * file->size);
> > return(SOX_SUCCESS);
> >
> > I think this flag should be used instead:
> > _IOFBF fully buffered
> >
> > I've tested this change and it works like expected.
> >
> > Any comments?
>
> The code you're changing in src/oss.c no long applies to SoX 14.4.0,
> how does 14.4.0 work out-of-the-box for you?
>
Hi,
First observation:
oss.c: In function 'ossinit':
oss.c:116: warning: dereferencing 'void *' pointer
oss.c:116: error: request for member '_file' in something not a structure or
union
oss.c:124: warning: dereferencing 'void *' pointer
oss.c:124: error: request for member '_file' in something not a structure or
union
oss.c:163: warning: dereferencing 'void *' pointer
oss.c:163: error: request for member '_file' in something not a structure or
union
oss.c:176: warning: dereferencing 'void *' pointer
oss.c:176: error: request for member '_file' in something not a structure or
union
oss.c:186: warning: dereferencing 'void *' pointer
oss.c:186: error: request for member '_file' in something not a structure or
union
oss.c:205: warning: dereferencing 'void *' pointer
oss.c:205: error: request for member '_file' in something not a structure or
union
oss.c:214: warning: dereferencing 'void *' pointer
oss.c:214: error: request for member '_file' in something not a structure or
union
Fixed by renaming fileno( into sox_fileno( and defining this:
#define sox_fileno(x) fileno((FILE *)(x))
Second observation:
Default audio driver is not OSS.
env AUDIODEVICE=/dev/dsp AUDIODRIVER=oss rec test.wav
Third observation:
GIO syscalls are still used, and the length is 1 byte.
15260 sox RET read 1
15260 sox CALL read(0x3,0x807b2de37,0x1)
15260 sox GIO fd 3 read 1 byte
0x0000 ff
Patch needed:
/* Change to non-buffered I/O */
setvbuf(ft->fp, NULL, _IONBF, sizeof(char) * file->size);
return(SOX_SUCCESS);
}
Change to:
/* Change to non-buffered I/O */
setvbuf(ft->fp, NULL, _IOFBF, sizeof(char) * file->size);
return(SOX_SUCCESS);
}
--HPS
_______________________________________________
freebsd-multimedia@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-multimedia
To unsubscribe, send any mail to "freebsd-multimedia-unsubscribe@freebsd.org"
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic