@@ -30,11 +30,12 @@ enum samplesize {
3030
3131static  snd_pcm_t  *  scope_pcm ;
3232// Details on the sample format before conversion. 
33- // Two-channel (enables XY mode), if not, acts like a primitive X oscilloscope 
34- static  int  sf_2c ;
33+ // channel count - 2 enables XY mode, 1 acts like a primitive X oscilloscope 
34+ static  int  sf_chancount ;
35+ // xy mode, uses two channels 
36+ static  int  sf_usey ;
3537static  enum  samplesize  sf_sampsize ;
3638static  int  sf_us ;
37- static  int  sf_usey ;
3839static  int  sf_forceon ;
3940
4041static  int  camera_width ;
@@ -62,10 +63,10 @@ static oscore_task scope_task;
6263#define  SM_ALGORITHM (sample , shr , sub ) (((byte) (sample >> shr)) - sub)
6364#define  LD_ALGORITHM (typ , shr , sub ) \
6465	for (int indx = 0; indx < BUFFER_FRAMES; indx++) { \
65- 		typ sampleA = ((typ *) bufferA)[indx * (sf_2c ? 2 : 1) ]; \
66+ 		typ sampleA = ((typ *) bufferA)[indx * sf_chancount ]; \
6667		bufferB[indx * 2] = SM_ALGORITHM(sampleA, shr, sub); \
67- 		if (sf_2c  && sf_usey) { \
68- 			typ sampleB = ((typ *) bufferA)[(indx * (sf_2c ? 2 : 1) ) + 1]; \
68+ 		if (sf_chancount == 2  && sf_usey) { \
69+ 			typ sampleB = ((typ *) bufferA)[(indx * sf_chancount ) + 1]; \
6970			bufferB[(indx * 2) + 1] = 255 - SM_ALGORITHM(sampleB, shr, sub); \
7071		} else { \
7172			bufferB[(indx * 2) + 1] = bufferB[indx * 2]; \
@@ -246,97 +247,62 @@ int init(int modulen, char* argstr) {
246247		return  1 ;
247248	}
248249	free (ourarg );
249- 	 sf_2c   =   0 ; 
250+ 
250251	sf_sampsize  =  SIZE_8 ;
251252	sf_us  =  0 ;
252- 	if  (sf_usey ) {
253- 		if  (!(code  =  snd_pcm_set_params (scope_pcm , SND_PCM_FORMAT_S8 , SND_PCM_ACCESS_RW_INTERLEAVED , 2 , SAMPLE_RATE , 1 , 1000 ))) {
254- 			printf ("Got BS8C2\n" );
255- 			sf_2c  =  1 ;
256- 		} else  if  (!(code  =  snd_pcm_set_params (scope_pcm , SND_PCM_FORMAT_S16 , SND_PCM_ACCESS_RW_INTERLEAVED , 2 , SAMPLE_RATE , 1 , 1000 ))) {
257- 			printf ("Got BS16C2\n" );
258- 			sf_sampsize  =  SIZE_16 ;
259- 			sf_2c  =  1 ;
260- 		} else  if  (!(code  =  snd_pcm_set_params (scope_pcm , SND_PCM_FORMAT_S24 , SND_PCM_ACCESS_RW_INTERLEAVED , 2 , SAMPLE_RATE , 1 , 1000 ))) {
261- 			printf ("Got BS24C2\n" );
262- 			sf_sampsize  =  SIZE_24 ;
263- 			sf_2c  =  1 ;
264- 		} else  if  (!(code  =  snd_pcm_set_params (scope_pcm , SND_PCM_FORMAT_S32 , SND_PCM_ACCESS_RW_INTERLEAVED , 2 , SAMPLE_RATE , 1 , 1000 ))) {
265- 			printf ("Got BS32C2\n" );
266- 			sf_sampsize  =  SIZE_32 ;
267- 			sf_2c  =  1 ;
268- 		} else  if  (!(code  =  snd_pcm_set_params (scope_pcm , SND_PCM_FORMAT_U8 , SND_PCM_ACCESS_RW_INTERLEAVED , 2 , SAMPLE_RATE , 1 , 1000 ))) {
269- 			printf ("Got BU8C2\n" );
270- 			sf_2c  =  1 ;
271- 			sf_us  =  1 ;
272- 		} else  if  (!(code  =  snd_pcm_set_params (scope_pcm , SND_PCM_FORMAT_U16 , SND_PCM_ACCESS_RW_INTERLEAVED , 2 , SAMPLE_RATE , 1 , 1000 ))) {
273- 			printf ("Got BU16C2\n" );
274- 			sf_sampsize  =  SIZE_16 ;
275- 			sf_2c  =  1 ;
276- 			sf_us  =  1 ;
277- 		} else  if  (!(code  =  snd_pcm_set_params (scope_pcm , SND_PCM_FORMAT_U24 , SND_PCM_ACCESS_RW_INTERLEAVED , 2 , SAMPLE_RATE , 1 , 1000 ))) {
278- 			printf ("Got BU24C2\n" );
279- 			sf_sampsize  =  SIZE_24 ;
280- 			sf_2c  =  1 ;
281- 			sf_us  =  1 ;
282- 		} else  if  (!(code  =  snd_pcm_set_params (scope_pcm , SND_PCM_FORMAT_U32 , SND_PCM_ACCESS_RW_INTERLEAVED , 2 , SAMPLE_RATE , 1 , 1000 ))) {
283- 			printf ("Got BU32C2\n" );
284- 			sf_sampsize  =  SIZE_32 ;
285- 			sf_2c  =  1 ;
286- 			sf_us  =  1 ;
287- 		}
253+ 	sf_chancount  =  sf_usey  ? 2  : 1 ;
254+ 
255+ 	if  (!(code  =  snd_pcm_set_params (scope_pcm , SND_PCM_FORMAT_S8 , SND_PCM_ACCESS_RW_INTERLEAVED , sf_chancount , SAMPLE_RATE , 1 , 1000 ))) {
256+ 		sf_sampsize  =  SIZE_8 ;
257+ 	} else  if  (!(code  =  snd_pcm_set_params (scope_pcm , SND_PCM_FORMAT_S16 , SND_PCM_ACCESS_RW_INTERLEAVED , sf_chancount , SAMPLE_RATE , 1 , 1000 ))) {
258+ 		sf_sampsize  =  SIZE_16 ;
259+ 	} else  if  (!(code  =  snd_pcm_set_params (scope_pcm , SND_PCM_FORMAT_S24 , SND_PCM_ACCESS_RW_INTERLEAVED , sf_chancount , SAMPLE_RATE , 1 , 1000 ))) {
260+ 		sf_sampsize  =  SIZE_24 ;
261+ 	} else  if  (!(code  =  snd_pcm_set_params (scope_pcm , SND_PCM_FORMAT_S32 , SND_PCM_ACCESS_RW_INTERLEAVED , sf_chancount , SAMPLE_RATE , 1 , 1000 ))) {
262+ 		sf_sampsize  =  SIZE_32 ;
263+ 	} else  if  (!(code  =  snd_pcm_set_params (scope_pcm , SND_PCM_FORMAT_U8 , SND_PCM_ACCESS_RW_INTERLEAVED , sf_chancount , SAMPLE_RATE , 1 , 1000 ))) {
264+ 		sf_sampsize  =  SIZE_8 ;
265+ 		sf_us  =  1 ;
266+ 	} else  if  (!(code  =  snd_pcm_set_params (scope_pcm , SND_PCM_FORMAT_U16 , SND_PCM_ACCESS_RW_INTERLEAVED , sf_chancount , SAMPLE_RATE , 1 , 1000 ))) {
267+ 		sf_sampsize  =  SIZE_16 ;
268+ 		sf_us  =  1 ;
269+ 	} else  if  (!(code  =  snd_pcm_set_params (scope_pcm , SND_PCM_FORMAT_U24 , SND_PCM_ACCESS_RW_INTERLEAVED , sf_chancount , SAMPLE_RATE , 1 , 1000 ))) {
270+ 		sf_sampsize  =  SIZE_24 ;
271+ 		sf_us  =  1 ;
272+ 	} else  if  (!(code  =  snd_pcm_set_params (scope_pcm , SND_PCM_FORMAT_U32 , SND_PCM_ACCESS_RW_INTERLEAVED , sf_chancount , SAMPLE_RATE , 1 , 1000 ))) {
273+ 		sf_sampsize  =  SIZE_32 ;
274+ 		sf_us  =  1 ;
288275	} else  {
289- 		if  (!(code  =  snd_pcm_set_params (scope_pcm , SND_PCM_FORMAT_S8 , SND_PCM_ACCESS_RW_INTERLEAVED , 1 , SAMPLE_RATE , 1 , 1000 ))) {
290- 			printf ("Got BS8C1\n" );
291- 		} else  if  (!(code  =  snd_pcm_set_params (scope_pcm , SND_PCM_FORMAT_S16 , SND_PCM_ACCESS_RW_INTERLEAVED , 1 , SAMPLE_RATE , 1 , 1000 ))) {
292- 			printf ("Got BS16C1\n" );
293- 			sf_sampsize  =  SIZE_16 ;
294- 		} else  if  (!(code  =  snd_pcm_set_params (scope_pcm , SND_PCM_FORMAT_S24 , SND_PCM_ACCESS_RW_INTERLEAVED , 1 , SAMPLE_RATE , 1 , 1000 ))) {
295- 			printf ("Got BS24C1\n" );
296- 			sf_sampsize  =  SIZE_24 ;
297- 		} else  if  (!(code  =  snd_pcm_set_params (scope_pcm , SND_PCM_FORMAT_S32 , SND_PCM_ACCESS_RW_INTERLEAVED , 1 , SAMPLE_RATE , 1 , 1000 ))) {
298- 			printf ("Got BS32C1\n" );
299- 			sf_sampsize  =  SIZE_32 ;
300- 		} else  if  (!(code  =  snd_pcm_set_params (scope_pcm , SND_PCM_FORMAT_U8 , SND_PCM_ACCESS_RW_INTERLEAVED , 1 , SAMPLE_RATE , 1 , 1000 ))) {
301- 			printf ("Got BU8C1\n" );
302- 			sf_us  =  1 ;
303- 		} else  if  (!(code  =  snd_pcm_set_params (scope_pcm , SND_PCM_FORMAT_U16 , SND_PCM_ACCESS_RW_INTERLEAVED , 1 , SAMPLE_RATE , 1 , 1000 ))) {
304- 			printf ("Got BU16C1\n" );
305- 			sf_sampsize  =  SIZE_16 ;
306- 			sf_us  =  1 ;
307- 		} else  if  (!(code  =  snd_pcm_set_params (scope_pcm , SND_PCM_FORMAT_U24 , SND_PCM_ACCESS_RW_INTERLEAVED , 1 , SAMPLE_RATE , 1 , 1000 ))) {
308- 			printf ("Got BU24C1\n" );
309- 			sf_sampsize  =  SIZE_24 ;
310- 			sf_us  =  1 ;
311- 		} else  if  (!(code  =  snd_pcm_set_params (scope_pcm , SND_PCM_FORMAT_U32 , SND_PCM_ACCESS_RW_INTERLEAVED , 1 , SAMPLE_RATE , 1 , 1000 ))) {
312- 			printf ("Got BU32C1\n" );
313- 			sf_sampsize  =  SIZE_32 ;
314- 			sf_us  =  1 ;
315- 		} else  {
316- 			printf ("Couldn't convince ALSA to give sane settings: %i\n" , code );
317- 			snd_pcm_close (scope_pcm );
318- 			free (bufferC );
319- 			return  1 ;
320- 		}
276+ 		printf ("Couldn't convince ALSA to give sane settings: %i\n" , code );
277+ 		snd_pcm_close (scope_pcm );
278+ 		free (bufferC );
279+ 		return  1 ;
321280	}
322281
323- 	int  bytesPerSample  =  1 ;
282+ 	int  bytesPerSample ;
283+ 	int  bitsPerSample ;
324284	switch  (sf_sampsize ) {
325285		case  SIZE_8 :
326286			bytesPerSample  =  1 ;
287+ 			bitsPerSample  =  8 ;
327288		break ;
328289		case  SIZE_16 :
329290			bytesPerSample  =  2 ;
291+ 			bitsPerSample  =  16 ;
330292			break ;
331293		case  SIZE_24 :
332294			bytesPerSample  =  3 ;
295+ 			bitsPerSample  =  24 ;
333296			break ;
334297		case  SIZE_32 :
335298			bytesPerSample  =  4 ;
299+ 			bitsPerSample  =  32 ;
336300		break ;
337301	}
338302
339- 	bufferA  =  malloc (BUFFER_FRAMES  *  (sf_2c  ? 2  : 1 ) *  bytesPerSample );
303+ 	printf ("Got B%c%dC%d\n" , sf_us  ? 'U'  : 'S' , bitsPerSample , sf_chancount );
304+ 
305+ 	bufferA  =  malloc (BUFFER_FRAMES  *  sf_chancount  *  bytesPerSample );
340306	if  (!bufferA ) {
341307		printf ("Couldn't allocate working buffer\n" );
342308		snd_pcm_close (scope_pcm );
0 commit comments