mirror of
				https://github.com/alsa-project/alsa-lib.git
				synced 2025-11-03 09:01:52 -05:00 
			
		
		
		
	
		
			
	
	
		
			53 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			53 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 * optimized mixing code for i386
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define MIX_AREAS1 mix_areas1
							 | 
						||
| 
								 | 
							
								#define MIX_AREAS1_MMX mix_areas1_mmx
							 | 
						||
| 
								 | 
							
								#define MIX_AREAS2 mix_areas2
							 | 
						||
| 
								 | 
							
								#define LOCK_PREFIX ""
							 | 
						||
| 
								 | 
							
								#include "pcm_dmix_i386.h"
							 | 
						||
| 
								 | 
							
								#undef MIX_AREAS1
							 | 
						||
| 
								 | 
							
								#undef MIX_AREAS1_MMX
							 | 
						||
| 
								 | 
							
								#undef MIX_AREAS2
							 | 
						||
| 
								 | 
							
								#undef LOCK_PREFIX
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define MIX_AREAS1 mix_areas1_smp
							 | 
						||
| 
								 | 
							
								#define MIX_AREAS1_MMX mix_areas1_smp_mmx
							 | 
						||
| 
								 | 
							
								#define MIX_AREAS2 mix_areas2_smp
							 | 
						||
| 
								 | 
							
								#define LOCK_PREFIX "lock ; "
							 | 
						||
| 
								 | 
							
								#include "pcm_dmix_i386.h"
							 | 
						||
| 
								 | 
							
								#undef MIX_AREAS1
							 | 
						||
| 
								 | 
							
								#undef MIX_AREAS1_MMX
							 | 
						||
| 
								 | 
							
								#undef MIX_AREAS2
							 | 
						||
| 
								 | 
							
								#undef LOCK_PREFIX
							 | 
						||
| 
								 | 
							
								 
							 | 
						||
| 
								 | 
							
								static void mix_select_callbacks(snd_pcm_direct_t *dmix)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									FILE *in;
							 | 
						||
| 
								 | 
							
									char line[255];
							 | 
						||
| 
								 | 
							
									int smp = 0, mmx = 0;
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									/* try to determine, if we have a MMX capable CPU */
							 | 
						||
| 
								 | 
							
									in = fopen("/proc/cpuinfo", "r");
							 | 
						||
| 
								 | 
							
									if (in) {
							 | 
						||
| 
								 | 
							
										while (!feof(in)) {
							 | 
						||
| 
								 | 
							
											fgets(line, sizeof(line), in);
							 | 
						||
| 
								 | 
							
											if (!strncmp(line, "processor", 9))
							 | 
						||
| 
								 | 
							
												smp++;
							 | 
						||
| 
								 | 
							
											else if (!strncmp(line, "flags", 5)) {
							 | 
						||
| 
								 | 
							
												if (strstr(line, " mmx"))
							 | 
						||
| 
								 | 
							
													mmx = 1;
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
										fclose(in);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									// printf("MMX: %i, SMP: %i\n", mmx, smp);
							 | 
						||
| 
								 | 
							
									if (mmx) {
							 | 
						||
| 
								 | 
							
										dmix->u.dmix.mix_areas1 = smp > 1 ? mix_areas1_smp_mmx : mix_areas1_mmx;
							 | 
						||
| 
								 | 
							
									} else {
							 | 
						||
| 
								 | 
							
										dmix->u.dmix.mix_areas1 = smp > 1 ? mix_areas1_smp : mix_areas1;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									dmix->u.dmix.mix_areas2 = smp > 1 ? mix_areas2_smp : mix_areas2;
							 | 
						||
| 
								 | 
							
								}
							 |