[LAU] jack-stdio 1.1 - was [ANN] jack-stdout 1.0
Kjetil S. Matheussen
k.s.matheussen at notam02.no
Sun Apr 3 09:14:01 UTC 2011
On Fri, 1 Apr 2011, Robin Gareus wrote:
>
>> However, for piping jack-stdout just got options for 24 bits, while jack_capture still only supports 16 bits.
>
> See the announce from today. jack-stdio supports 8/16/24/32 bit integer,
> both big and little endian, as well as 32 bit float (both native-endian
> as well as swapped endianess).
>
> @Kjetil:
> Does jack_capture buffer the [processed] data before I/O? jack-stdio does not.
> jack-stdin/out reads/writes one sample at a time, and thus is relatively heavy on the CPU
> (3-5% on a 2GHz machine - quite a lot for a such a small tool).
>
jack_capture writes blocks at the time:
int bytes_to_write=frames*num_channels*2;
{
int i;
int writeplace=0;
for(i=0;i<frames*num_channels;i++){
int d = (int) rint(buffer[i]*32767.0);
tobuffer[writeplace++] = (unsigned char) (d&0xff);
tobuffer[writeplace++] = (unsigned char) (((d&0xff00)>>8)&0xff);
}
}
{
int fd=fileno(stdout);
while(bytes_to_write > 0){
int written=write(fd,tobuffer,bytes_to_write);
if(written==-1){
fprintf(stderr,"Error writing to stdout.\n");
break;
}
bytes_to_write -= written;
}
}
>> The reason why jack_capture lags a bit behind here is probably because
>> jack_capture used code from jack-stdout to implement writing to stdout.
>> :-)
>
> Before you look into merging it: I just have spotted a bug with endianess for PPC/ big-endian architectures.
> all the #ifdef __BIG_ENDIAN__ code can go away: The compiler (at least gcc) does swap
> constants 0x00ff <> 0xff00 and indices for uint8_t.
>
Thanks.
More information about the Linux-audio-user
mailing list