diff --git a/ChangeLog b/ChangeLog index 36a05d2a..7535bf01 100644 --- a/ChangeLog +++ b/ChangeLog @@ -14461,3 +14461,8 @@ entries to appear in the list of available matrix output sources. 2014-09-13 Fred Gleason * Incremented the package version to 2.9.2int00. +2014-09-16 Fred Gleason + * Fixed a bug in 'cae/cae_alsa.cpp' that caused induced noise + when routing passthrough audio. + * Reversed format detection order so as to prefer S32_LE format + over S16_LE in 'cae/cae_alsa.cpp'. diff --git a/cae/cae_alsa.cpp b/cae/cae_alsa.cpp index 787c3ca4..818c2853 100644 --- a/cae/cae_alsa.cpp +++ b/cae/cae_alsa.cpp @@ -68,7 +68,8 @@ void AlsaCapture2Callback(struct alsa_format *alsa_format) { char alsa_buffer[RINGBUFFER_SIZE]; int modulo; - short in_meter[RD_MAX_PORTS][2]; + int16_t in_meter[RD_MAX_PORTS][2]; + while(!alsa_format->exiting) { int s=snd_pcm_readi(alsa_format->pcm,alsa_format->card_buffer, @@ -91,35 +92,35 @@ void AlsaCapture2Callback(struct alsa_format *alsa_format) switch(alsa_input_channels[alsa_format->card][i]) { case 1: for(int k=0;k<(2*s);k++) { - ((short *)alsa_buffer)[k]= - (short)(alsa_input_volume[alsa_format->card][i]* - (double)(((short *)alsa_format-> + ((int16_t *)alsa_buffer)[k]= + (int16_t)(alsa_input_volume[alsa_format->card][i]* + (double)(((int16_t *)alsa_format-> card_buffer) [modulo*k+2*i]))+ - (short)(alsa_input_volume[alsa_format->card][i]* - (double)(((short *)alsa_format-> + (int16_t)(alsa_input_volume[alsa_format->card][i]* + (double)(((int16_t *)alsa_format-> card_buffer) [modulo*k+2*i+1])); } alsa_record_ring[alsa_format->card][i]-> - write(alsa_buffer,s*sizeof(short)); + write(alsa_buffer,s*sizeof(int16_t)); break; case 2: for(int k=0;kcard][i]* - (double)(((short *)alsa_format-> + ((int16_t *)alsa_buffer)[2*k]= + (int16_t)(alsa_input_volume[alsa_format->card][i]* + (double)(((int16_t *)alsa_format-> card_buffer) [modulo*k+2*i])); - ((short *)alsa_buffer)[2*k+1]= - (short)(alsa_input_volume[alsa_format->card][i]* - (double)(((short *)alsa_format-> + ((int16_t *)alsa_buffer)[2*k+1]= + (int16_t)(alsa_input_volume[alsa_format->card][i]* + (double)(((int16_t *)alsa_format-> card_buffer) [modulo*k+2*i+1])); } alsa_record_ring[alsa_format->card][i]-> - write(alsa_buffer,s*2*sizeof(short)); + write(alsa_buffer,s*2*sizeof(int16_t)); break; } } @@ -132,20 +133,15 @@ void AlsaCapture2Callback(struct alsa_format *alsa_format) for(unsigned i=0;ichannels;i+=2) { for(unsigned j=0;j<2;j++) { for(int k=0;kpassthrough_buffer)[2*k+j]= - ((short *)alsa_format-> - card_buffer)[alsa_format->channels*k+2*i+j]; + ((int16_t *)alsa_format->passthrough_buffer)[2*k+j]= + ((int16_t *)alsa_format-> + card_buffer)[alsa_format->channels*k+i+j]; } } - if(alsa_passthrough_ring[alsa_format->card][i/2]==NULL) { - printf("RING ERROR Card=%d Port=%d\n",alsa_format->card,i/2); - } - else { alsa_passthrough_ring[alsa_format->card][i/2]-> write(alsa_format->passthrough_buffer,4*s); - } } - + // // Process Input Meters // @@ -153,11 +149,11 @@ void AlsaCapture2Callback(struct alsa_format *alsa_format) for(unsigned j=0;j<2;j++) { in_meter[i/2][j]=0; for(int k=0;k + if(((int16_t *)alsa_format-> card_buffer)[alsa_format->channels*k+2*i+j]> in_meter[i][j]) { in_meter[i][j]= - ((short *)alsa_format-> + ((int16_t *)alsa_format-> card_buffer)[alsa_format->channels*k+2*i+j]; } } @@ -175,33 +171,33 @@ void AlsaCapture2Callback(struct alsa_format *alsa_format) switch(alsa_input_channels[alsa_format->card][i]) { case 1: for(int k=0;k<(2*s);k++) { - ((short *)alsa_buffer)[k]= - (short)(alsa_input_volume[alsa_format->card][i]* - (double)(((short *)alsa_format-> + ((int16_t *)alsa_buffer)[k]= + (int16_t)(alsa_input_volume[alsa_format->card][i]* + (double)(((int16_t *)alsa_format-> card_buffer) [modulo*k+4*i+1]))+ - (short)(alsa_input_volume[alsa_format->card][i]* - (double)(((short *)alsa_format-> + (int16_t)(alsa_input_volume[alsa_format->card][i]* + (double)(((int16_t *)alsa_format-> card_buffer) [modulo*k+4*i+3])); } alsa_record_ring[alsa_format->card][i]-> - write(alsa_buffer,s*sizeof(short)); + write(alsa_buffer,s*sizeof(int16_t)); break; case 2: for(int k=0;kcard][i]* - (double)(((short *)alsa_format->card_buffer) + ((int16_t *)alsa_buffer)[2*k]= + (int16_t)(alsa_input_volume[alsa_format->card][i]* + (double)(((int16_t *)alsa_format->card_buffer) [modulo*k+4*i+1])); - ((short *)alsa_buffer)[2*k+1]= - (short)(alsa_input_volume[alsa_format->card][i]* - (double)(((short *)alsa_format->card_buffer) + ((int16_t *)alsa_buffer)[2*k+1]= + (int16_t)(alsa_input_volume[alsa_format->card][i]* + (double)(((int16_t *)alsa_format->card_buffer) [modulo*k+4*i+3])); } alsa_record_ring[alsa_format->card][i]-> - write(alsa_buffer,s*2*sizeof(short)); + write(alsa_buffer,s*2*sizeof(int16_t)); break; } } @@ -214,15 +210,15 @@ void AlsaCapture2Callback(struct alsa_format *alsa_format) for(unsigned i=0;ichannels;i+=2) { for(unsigned j=0;j<2;j++) { for(int k=0;kpassthrough_buffer)[2*k+j]= - ((short *)alsa_format-> - card_buffer)[alsa_format->channels*2*k+2*i+1+2*j]; + ((int32_t *)alsa_format->passthrough_buffer)[2*k+j]= + ((int32_t *)alsa_format-> + card_buffer)[alsa_format->channels*k+i+j]; } } alsa_passthrough_ring[alsa_format->card][i/2]-> - write(alsa_format->passthrough_buffer,4*s); + write(alsa_format->passthrough_buffer,8*s); } - + // // Process Input Meters // @@ -230,11 +226,11 @@ void AlsaCapture2Callback(struct alsa_format *alsa_format) for(unsigned j=0;j<2;j++) { in_meter[i/2][j]=0; for(int k=0;k + if(((int16_t *)alsa_format-> card_buffer)[alsa_format->channels*2*k+2*i+1+2*j]> in_meter[i/2][j]) { in_meter[i/2][j]= - ((short *)alsa_format-> + ((int16_t *)alsa_format-> card_buffer)[alsa_format->channels*2*k+2*i+1+2*j]; } } @@ -283,8 +279,8 @@ void AlsaPlay2Callback(struct alsa_format *alsa_format) int p; char alsa_buffer[RINGBUFFER_SIZE]; int modulo; - short out_meter[RD_MAX_PORTS][2]; - short stream_out_meter=0; + int16_t out_meter[RD_MAX_PORTS][2]; + int16_t stream_out_meter=0; while(!alsa_format->exiting) { memset(alsa_format->card_buffer,0,alsa_format->card_buffer_size); @@ -298,11 +294,11 @@ void AlsaPlay2Callback(struct alsa_format *alsa_format) n=alsa_play_ring[alsa_format->card][j]-> read(alsa_buffer,alsa_format-> buffer_size/alsa_format->periods)/ - (2*sizeof(short)); + (2*sizeof(int16_t)); stream_out_meter=0; // Stream Output Meters for(int k=0;kstream_out_meter) { - stream_out_meter=abs(((short *)alsa_buffer)[k]); + if(abs(((int16_t *)alsa_buffer)[k])>stream_out_meter) { + stream_out_meter=abs(((int16_t *)alsa_buffer)[k]); } } alsa_stream_output_meter[alsa_format->card][j][0]-> @@ -313,12 +309,12 @@ void AlsaPlay2Callback(struct alsa_format *alsa_format) for(unsigned i=0;i<(alsa_format->channels/2);i++) { if(alsa_output_volume[alsa_format->card][i][j]!=0.0) { for(int k=0;k<(2*n);k++) { - ((short *)alsa_format->card_buffer)[modulo*k+2*i]+= - (short)(alsa_output_volume[alsa_format->card][i][j]* - (double)(((short *)alsa_buffer)[k])); - ((short *)alsa_format->card_buffer)[modulo*k+2*i+1]+= - (short)(alsa_output_volume[alsa_format->card][i][j]* - (double)(((short *)alsa_buffer)[k])); + ((int16_t *)alsa_format->card_buffer)[modulo*k+2*i]+= + (int16_t)(alsa_output_volume[alsa_format->card][i][j]* + (double)(((int16_t *)alsa_buffer)[k])); + ((int16_t *)alsa_format->card_buffer)[modulo*k+2*i+1]+= + (int16_t)(alsa_output_volume[alsa_format->card][i][j]* + (double)(((int16_t *)alsa_buffer)[k])); } } } @@ -328,12 +324,12 @@ void AlsaPlay2Callback(struct alsa_format *alsa_format) case 2: n=alsa_play_ring[alsa_format->card][j]-> read(alsa_buffer,alsa_format->buffer_size*2/ - alsa_format->periods)/(2*sizeof(short)); + alsa_format->periods)/(2*sizeof(int16_t)); for(unsigned k=0;k<2;k++) { // Stream Output Meters stream_out_meter=0; for(int l=0;lstream_out_meter) { - stream_out_meter=abs(((short *)alsa_buffer)[l+k]); + if(abs(((int16_t *)alsa_buffer)[l+k])>stream_out_meter) { + stream_out_meter=abs(((int16_t *)alsa_buffer)[l+k]); } } alsa_stream_output_meter[alsa_format->card][j][k]-> @@ -343,12 +339,12 @@ void AlsaPlay2Callback(struct alsa_format *alsa_format) for(unsigned i=0;i<(alsa_format->channels/2);i++) { if(alsa_output_volume[alsa_format->card][i][j]!=0.0) { for(int k=0;kcard_buffer)[modulo*k+2*i]+= - (short)(alsa_output_volume[alsa_format->card][i][j]* - (double)(((short *)alsa_buffer)[2*k])); - ((short *)alsa_format->card_buffer)[modulo*k+2*i+1]+= - (short)(alsa_output_volume[alsa_format->card][i][j]* - (double)(((short *)alsa_buffer)[2*k+1])); + ((int16_t *)alsa_format->card_buffer)[modulo*k+2*i]+= + (int16_t)(alsa_output_volume[alsa_format->card][i][j]* + (double)(((int16_t *)alsa_buffer)[2*k])); + ((int16_t *)alsa_format->card_buffer)[modulo*k+2*i+1]+= + (int16_t)(alsa_output_volume[alsa_format->card][i][j]* + (double)(((int16_t *)alsa_buffer)[2*k+1])); } } } @@ -369,15 +365,13 @@ void AlsaPlay2Callback(struct alsa_format *alsa_format) p=alsa_passthrough_ring[alsa_format->card][i/2]-> read(alsa_format->passthrough_buffer,4*n)/4; for(unsigned j=0;jchannels;j+=2) { - if(alsa_passthrough_volume[alsa_format->card][i/2][j/2]>0.0) { - for(unsigned k=0;k<2;k++) { - for(int l=0;l - card_buffer)[alsa_format->channels*l+4*j+1+k]+=(short) - ((double)((short *)alsa_format-> - passthrough_buffer)[2*l+1]* - alsa_passthrough_volume[alsa_format->card][i/2][j/2]); - } + for(unsigned k=0;k<2;k++) { + for(int l=0;l + card_buffer)[alsa_format->channels*l+j+k]+= + (int16_t)((double)((int16_t *) + alsa_format->passthrough_buffer)[2*l+k]* + alsa_passthrough_volume[alsa_format->card][i/2][j/2]); } } } @@ -391,11 +385,11 @@ void AlsaPlay2Callback(struct alsa_format *alsa_format) for(unsigned j=0;j<2;j++) { out_meter[port][j]=0; for(unsigned k=0;kbuffer_size;k++) { - if(((short *)alsa_format-> + if(((int16_t *)alsa_format-> card_buffer)[alsa_format->channels*k+2*i+j]> out_meter[i][j]) { out_meter[i][j]= - ((short *)alsa_format-> + ((int16_t *)alsa_format-> card_buffer)[alsa_format->channels*k+2*i+j]; } } @@ -412,11 +406,11 @@ void AlsaPlay2Callback(struct alsa_format *alsa_format) case 1: n=alsa_play_ring[alsa_format->card][j]-> read(alsa_buffer,alsa_format->buffer_size/ - alsa_format->periods)/(2*sizeof(short)); + alsa_format->periods)/(2*sizeof(int16_t)); stream_out_meter=0; for(int k=0;kstream_out_meter) { - stream_out_meter=abs(((short *)alsa_buffer)[k]); + if(abs(((int16_t *)alsa_buffer)[k])>stream_out_meter) { + stream_out_meter=abs(((int16_t *)alsa_buffer)[k]); } } alsa_stream_output_meter[alsa_format->card][j][0]-> @@ -427,12 +421,12 @@ void AlsaPlay2Callback(struct alsa_format *alsa_format) for(unsigned i=0;i<(alsa_format->channels/2);i++) { if(alsa_output_volume[alsa_format->card][i][j]!=0.0) { for(int k=0;k<(2*n);k++) { - ((short *)alsa_format->card_buffer)[modulo*k+4*i+1]+= - (short)(alsa_output_volume[alsa_format->card][i][j]* - (double)(((short *)alsa_buffer)[k])); - ((short *)alsa_format->card_buffer)[modulo*k+4*i+3]+= - (short)(alsa_output_volume[alsa_format->card][i][j]* - (double)(((short *)alsa_buffer)[k])); + ((int16_t *)alsa_format->card_buffer)[modulo*k+4*i+1]+= + (int16_t)(alsa_output_volume[alsa_format->card][i][j]* + (double)(((int16_t *)alsa_buffer)[k])); + ((int16_t *)alsa_format->card_buffer)[modulo*k+4*i+3]+= + (int16_t)(alsa_output_volume[alsa_format->card][i][j]* + (double)(((int16_t *)alsa_buffer)[k])); } } } @@ -442,12 +436,12 @@ void AlsaPlay2Callback(struct alsa_format *alsa_format) case 2: n=alsa_play_ring[alsa_format->card][j]-> read(alsa_buffer,alsa_format->buffer_size*2/ - alsa_format->periods)/(2*sizeof(short)); + alsa_format->periods)/(2*sizeof(int16_t)); for(unsigned k=0;k<2;k++) { // Stream Output Meters stream_out_meter=0; for(int l=0;lstream_out_meter) { - stream_out_meter=abs(((short *)alsa_buffer)[l+k]); + if(abs(((int16_t *)alsa_buffer)[l+k])>stream_out_meter) { + stream_out_meter=abs(((int16_t *)alsa_buffer)[l+k]); } } alsa_stream_output_meter[alsa_format->card][j][k]-> @@ -457,12 +451,12 @@ void AlsaPlay2Callback(struct alsa_format *alsa_format) for(unsigned i=0;i<(alsa_format->channels/2);i++) { if(alsa_output_volume[alsa_format->card][i][j]!=0.0) { for(int k=0;kcard_buffer)[modulo*k+4*i+1]+= - (short)(alsa_output_volume[alsa_format->card][i][j]* - (double)(((short *)alsa_buffer)[2*k])); - ((short *)alsa_format->card_buffer)[modulo*k+4*i+3]+= - (short)(alsa_output_volume[alsa_format->card][i][j]* - (double)(((short *)alsa_buffer)[2*k+1])); + ((int16_t *)alsa_format->card_buffer)[modulo*k+4*i+1]+= + (int16_t)(alsa_output_volume[alsa_format->card][i][j]* + (double)(((int16_t *)alsa_buffer)[2*k])); + ((int16_t *)alsa_format->card_buffer)[modulo*k+4*i+3]+= + (int16_t)(alsa_output_volume[alsa_format->card][i][j]* + (double)(((int16_t *)alsa_buffer)[2*k+1])); } } } @@ -474,7 +468,7 @@ void AlsaPlay2Callback(struct alsa_format *alsa_format) // Empty the ring buffer while(alsa_play_ring[alsa_format->card][j]-> read(alsa_buffer,alsa_format->buffer_size*2/ - alsa_format->periods)/(2*sizeof(short))>0); + alsa_format->periods)/(2*sizeof(int16_t))>0); } } } @@ -485,20 +479,15 @@ void AlsaPlay2Callback(struct alsa_format *alsa_format) // for(unsigned i=0;icapture_channels;i+=2) { p=alsa_passthrough_ring[alsa_format->card][i/2]-> - read(alsa_format->passthrough_buffer,4*n)/4; + read(alsa_format->passthrough_buffer,8*n)/8; for(unsigned j=0;jchannels;j+=2) { - if(alsa_passthrough_volume[alsa_format->card][i/2][j/2]>0.0) { - for(unsigned k=0;k<2;k++) { - for(int l=0;l - card_buffer)[alsa_format->channels*2*l+4*j+1+2*k]+= - (short)((double) - ((short *)alsa_format->passthrough_buffer)[2*l]* - alsa_passthrough_volume[alsa_format->card][i/2][j/2]); - ((short *)alsa_format-> - card_buffer)[alsa_format->channels*2*l+4*j+3+2*k]+= - ((short *)alsa_format->passthrough_buffer)[2*l+1]; - } + for(unsigned k=0;k<2;k++) { + for(int l=0;l + card_buffer)[alsa_format->channels*l+j+k]+= + (int32_t)((double)((int32_t *) + alsa_format->passthrough_buffer)[2*l+k]* + alsa_passthrough_volume[alsa_format->card][i/2][j/2]); } } } @@ -514,11 +503,11 @@ void AlsaPlay2Callback(struct alsa_format *alsa_format) for(unsigned k=0; k<(alsa_format->buffer_size*2/alsa_format->periods); k++) { - if(((short *)alsa_format-> + if(((int16_t *)alsa_format-> card_buffer)[alsa_format->channels*2*k+2*i+1+2*j]> out_meter[port][j]) { out_meter[port][j]= - ((short *)alsa_format-> + ((int16_t *)alsa_format-> card_buffer)[alsa_format->channels*2*k+2*i+1+2*j]; } } @@ -628,7 +617,7 @@ void MainObject::alsaFadeTimerData(int cardstream) #ifdef ALSA int card=cardstream/RD_MAX_STREAMS; int stream=cardstream-card*RD_MAX_STREAMS; - short level; + int16_t level; if(alsa_fade_up[card][stream]) { level=alsa_output_volume_db[card][alsa_fade_port[card][stream]][stream]+ alsa_fade_increment[card][stream]; @@ -727,8 +716,8 @@ void MainObject::alsaInit(RDStation *station) // Allocate Temporary Buffers // AlsaInitCallback(); - alsa_wave_buffer=new short[RINGBUFFER_SIZE]; - //alsa_resample_buffer=new short[2*RINGBUFFER_SIZE]; + alsa_wave_buffer=new int16_t[RINGBUFFER_SIZE]; + //alsa_resample_buffer=new int16_t[2*RINGBUFFER_SIZE]; // // Start Up Interfaces @@ -1275,7 +1264,7 @@ bool MainObject::alsaGetInputStatus(int card,int port) } -bool MainObject::alsaGetInputMeters(int card,int port,short levels[2]) +bool MainObject::alsaGetInputMeters(int card,int port,int16_t levels[2]) { #ifdef ALSA double meter; @@ -1287,7 +1276,7 @@ bool MainObject::alsaGetInputMeters(int card,int port,short levels[2]) levels[i]=-10000; } else { - levels[i]=(short)(2000.0*log10(meter)); + levels[i]=(int16_t)(2000.0*log10(meter)); if(levels[i]<-10000) { levels[i]=-10000; } @@ -1300,7 +1289,7 @@ bool MainObject::alsaGetInputMeters(int card,int port,short levels[2]) } -bool MainObject::alsaGetOutputMeters(int card,int port,short levels[2]) +bool MainObject::alsaGetOutputMeters(int card,int port,int16_t levels[2]) { #ifdef ALSA double meter; @@ -1311,7 +1300,7 @@ bool MainObject::alsaGetOutputMeters(int card,int port,short levels[2]) levels[i]=-10000; } else { - levels[i]=(short)(2000.0*log10(meter)); + levels[i]=(int16_t)(2000.0*log10(meter)); if(levels[i]<-10000) { levels[i]=-10000; } @@ -1324,7 +1313,7 @@ bool MainObject::alsaGetOutputMeters(int card,int port,short levels[2]) } -bool MainObject::alsaGetStreamOutputMeters(int card,int stream,short levels[2]) +bool MainObject::alsaGetStreamOutputMeters(int card,int stream,int16_t levels[2]) { #ifdef ALSA double meter; @@ -1335,7 +1324,7 @@ bool MainObject::alsaGetStreamOutputMeters(int card,int stream,short levels[2]) levels[i]=-10000; } else { - levels[i]=(short)(2000.0*log10(meter)); + levels[i]=(int16_t)(2000.0*log10(meter)); if(levels[i]<-10000) { levels[i]=-10000; } @@ -1418,14 +1407,14 @@ bool MainObject::AlsaStartCaptureDevice(QString &dev,int card,snd_pcm_t *pcm) // // Sample Format // - if(snd_pcm_hw_params_test_format(pcm,hwparams,SND_PCM_FORMAT_S16_LE)==0) { - alsa_capture_format[card].format=SND_PCM_FORMAT_S16_LE; - LogLine(RDConfig::LogDebug," Format = 16 bit little-endian"); + if(snd_pcm_hw_params_test_format(pcm,hwparams,SND_PCM_FORMAT_S32_LE)==0) { + alsa_capture_format[card].format=SND_PCM_FORMAT_S32_LE; + LogLine(RDConfig::LogDebug," Format = 32 bit little-endian"); } else { - if(snd_pcm_hw_params_test_format(pcm,hwparams,SND_PCM_FORMAT_S32_LE)==0) { - alsa_capture_format[card].format=SND_PCM_FORMAT_S32_LE; - LogLine(RDConfig::LogDebug," Format = 32 bit little-endian"); + if(snd_pcm_hw_params_test_format(pcm,hwparams,SND_PCM_FORMAT_S16_LE)==0) { + alsa_capture_format[card].format=SND_PCM_FORMAT_S16_LE; + LogLine(RDConfig::LogDebug," Format = 16 bit little-endian"); } else { LogLine(RDConfig::LogErr, @@ -1581,14 +1570,14 @@ bool MainObject::AlsaStartPlayDevice(QString &dev,int card,snd_pcm_t *pcm) // // Sample Format // - if(snd_pcm_hw_params_test_format(pcm,hwparams,SND_PCM_FORMAT_S16_LE)==0) { - alsa_play_format[card].format=SND_PCM_FORMAT_S16_LE; - LogLine(RDConfig::LogDebug," Format = 16 bit little-endian"); + if(snd_pcm_hw_params_test_format(pcm,hwparams,SND_PCM_FORMAT_S32_LE)==0) { + alsa_play_format[card].format=SND_PCM_FORMAT_S32_LE; + LogLine(RDConfig::LogDebug," Format = 32 bit little-endian"); } else { - if(snd_pcm_hw_params_test_format(pcm,hwparams,SND_PCM_FORMAT_S32_LE)==0) { - alsa_play_format[card].format=SND_PCM_FORMAT_S32_LE; - LogLine(RDConfig::LogDebug," Format = 32 bit little-endian"); + if(snd_pcm_hw_params_test_format(pcm,hwparams,SND_PCM_FORMAT_S16_LE)==0) { + alsa_play_format[card].format=SND_PCM_FORMAT_S16_LE; + LogLine(RDConfig::LogDebug," Format = 16 bit little-endian"); } else { LogLine(RDConfig::LogErr, @@ -1733,7 +1722,7 @@ void MainObject::EmptyAlsaInputStream(int card,int stream) } -void MainObject::WriteAlsaBuffer(int card,int stream,short *buffer,unsigned len) +void MainObject::WriteAlsaBuffer(int card,int stream,int16_t *buffer,unsigned len) { ssize_t s; unsigned char mpeg[2048]; @@ -1817,7 +1806,7 @@ void MainObject::FillAlsaOutputStream(int card,int stream) for(int k=0;k