comparison src/audio/alsa/SDL_alsa_audio.c @ 4331:a24454ed4ac4 SDL-1.2

Fixed debug code to print correct values Passed a meaningful value to snd_pcm_sw_params_set_start_threshold()
author Sam Lantinga <slouken@libsdl.org>
date Tue, 13 Oct 2009 09:24:05 +0000
parents 9716da353104
children 67e799ffcadf
comparison
equal deleted inserted replaced
4330:33570eec2d4f 4331:a24454ed4ac4
57 57
58 static const char *alsa_library = SDL_AUDIO_DRIVER_ALSA_DYNAMIC; 58 static const char *alsa_library = SDL_AUDIO_DRIVER_ALSA_DYNAMIC;
59 static void *alsa_handle = NULL; 59 static void *alsa_handle = NULL;
60 static int alsa_loaded = 0; 60 static int alsa_loaded = 0;
61 61
62 static int (*SDL_snd_pcm_open)(snd_pcm_t **pcm, const char *name, snd_pcm_stream_t stream, int mode);
63 static int (*SDL_NAME(snd_pcm_open))(snd_pcm_t **pcm, const char *name, snd_pcm_stream_t stream, int mode); 62 static int (*SDL_NAME(snd_pcm_open))(snd_pcm_t **pcm, const char *name, snd_pcm_stream_t stream, int mode);
64 static int (*SDL_NAME(snd_pcm_close))(snd_pcm_t *pcm); 63 static int (*SDL_NAME(snd_pcm_close))(snd_pcm_t *pcm);
65 static snd_pcm_sframes_t (*SDL_NAME(snd_pcm_writei))(snd_pcm_t *pcm, const void *buffer, snd_pcm_uframes_t size); 64 static snd_pcm_sframes_t (*SDL_NAME(snd_pcm_writei))(snd_pcm_t *pcm, const void *buffer, snd_pcm_uframes_t size);
66 static int (*SDL_NAME(snd_pcm_resume))(snd_pcm_t *pcm); 65 static int (*SDL_NAME(snd_pcm_resume))(snd_pcm_t *pcm);
67 static int (*SDL_NAME(snd_pcm_prepare))(snd_pcm_t *pcm); 66 static int (*SDL_NAME(snd_pcm_prepare))(snd_pcm_t *pcm);
71 static size_t (*SDL_NAME(snd_pcm_sw_params_sizeof))(void); 70 static size_t (*SDL_NAME(snd_pcm_sw_params_sizeof))(void);
72 static int (*SDL_NAME(snd_pcm_hw_params_any))(snd_pcm_t *pcm, snd_pcm_hw_params_t *params); 71 static int (*SDL_NAME(snd_pcm_hw_params_any))(snd_pcm_t *pcm, snd_pcm_hw_params_t *params);
73 static int (*SDL_NAME(snd_pcm_hw_params_set_access))(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_access_t access); 72 static int (*SDL_NAME(snd_pcm_hw_params_set_access))(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_access_t access);
74 static int (*SDL_NAME(snd_pcm_hw_params_set_format))(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_format_t val); 73 static int (*SDL_NAME(snd_pcm_hw_params_set_format))(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_format_t val);
75 static int (*SDL_NAME(snd_pcm_hw_params_set_channels))(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int val); 74 static int (*SDL_NAME(snd_pcm_hw_params_set_channels))(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int val);
75 static int (*SDL_NAME(snd_pcm_hw_params_get_channels))(const snd_pcm_hw_params_t *params, unsigned int *val);
76 static int (*SDL_NAME(snd_pcm_hw_params_set_rate_near))(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val, int *dir); 76 static int (*SDL_NAME(snd_pcm_hw_params_set_rate_near))(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
77 static int (*SDL_NAME(snd_pcm_hw_params_set_period_size_near))(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_uframes_t *val, int *dir); 77 static int (*SDL_NAME(snd_pcm_hw_params_set_period_size_near))(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_uframes_t *val, int *dir);
78 static int (*SDL_NAME(snd_pcm_hw_params_get_channels))(const snd_pcm_hw_params_t *params, unsigned int *val); 78 static int (*SDL_NAME(snd_pcm_hw_params_get_period_size))(const snd_pcm_hw_params_t *params, snd_pcm_uframes_t *frames, int *dir);
79 static snd_pcm_sframes_t (*SDL_NAME(snd_pcm_hw_params_get_period_size))(const snd_pcm_hw_params_t *params);
80 static int (*SDL_NAME(snd_pcm_hw_params_set_periods_near))(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val, int *dir); 79 static int (*SDL_NAME(snd_pcm_hw_params_set_periods_near))(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
81 static int (*SDL_NAME(snd_pcm_hw_params_get_periods))(snd_pcm_hw_params_t *params); 80 static int (*SDL_NAME(snd_pcm_hw_params_get_periods))(const snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
81 static int (*SDL_NAME(snd_pcm_hw_params_get_buffer_size))(const snd_pcm_hw_params_t *params, snd_pcm_uframes_t *val);
82 static int (*SDL_NAME(snd_pcm_hw_params))(snd_pcm_t *pcm, snd_pcm_hw_params_t *params); 82 static int (*SDL_NAME(snd_pcm_hw_params))(snd_pcm_t *pcm, snd_pcm_hw_params_t *params);
83 /* 83 /*
84 */ 84 */
85 static int (*SDL_NAME(snd_pcm_sw_params_current))(snd_pcm_t *pcm, snd_pcm_sw_params_t *swparams); 85 static int (*SDL_NAME(snd_pcm_sw_params_current))(snd_pcm_t *pcm, snd_pcm_sw_params_t *swparams);
86 static int (*SDL_NAME(snd_pcm_sw_params_set_start_threshold))(snd_pcm_t *pcm, snd_pcm_sw_params_t *params, snd_pcm_uframes_t val); 86 static int (*SDL_NAME(snd_pcm_sw_params_set_start_threshold))(snd_pcm_t *pcm, snd_pcm_sw_params_t *params, snd_pcm_uframes_t val);
112 { "snd_pcm_hw_params_set_rate_near", (void**)(char*)&SDL_NAME(snd_pcm_hw_params_set_rate_near) }, 112 { "snd_pcm_hw_params_set_rate_near", (void**)(char*)&SDL_NAME(snd_pcm_hw_params_set_rate_near) },
113 { "snd_pcm_hw_params_set_period_size_near", (void**)(char*)&SDL_NAME(snd_pcm_hw_params_set_period_size_near) }, 113 { "snd_pcm_hw_params_set_period_size_near", (void**)(char*)&SDL_NAME(snd_pcm_hw_params_set_period_size_near) },
114 { "snd_pcm_hw_params_get_period_size", (void**)(char*)&SDL_NAME(snd_pcm_hw_params_get_period_size) }, 114 { "snd_pcm_hw_params_get_period_size", (void**)(char*)&SDL_NAME(snd_pcm_hw_params_get_period_size) },
115 { "snd_pcm_hw_params_set_periods_near", (void**)(char*)&SDL_NAME(snd_pcm_hw_params_set_periods_near) }, 115 { "snd_pcm_hw_params_set_periods_near", (void**)(char*)&SDL_NAME(snd_pcm_hw_params_set_periods_near) },
116 { "snd_pcm_hw_params_get_periods", (void**)(char*)&SDL_NAME(snd_pcm_hw_params_get_periods) }, 116 { "snd_pcm_hw_params_get_periods", (void**)(char*)&SDL_NAME(snd_pcm_hw_params_get_periods) },
117 { "snd_pcm_hw_params_get_buffer_size", (void**)(char*)&SDL_NAME(snd_pcm_hw_params_get_buffer_size) },
117 { "snd_pcm_hw_params", (void**)(char*)&SDL_NAME(snd_pcm_hw_params) }, 118 { "snd_pcm_hw_params", (void**)(char*)&SDL_NAME(snd_pcm_hw_params) },
118 { "snd_pcm_sw_params_current", (void**)(char*)&SDL_NAME(snd_pcm_sw_params_current) }, 119 { "snd_pcm_sw_params_current", (void**)(char*)&SDL_NAME(snd_pcm_sw_params_current) },
119 { "snd_pcm_sw_params_set_start_threshold", (void**)(char*)&SDL_NAME(snd_pcm_sw_params_set_start_threshold) }, 120 { "snd_pcm_sw_params_set_start_threshold", (void**)(char*)&SDL_NAME(snd_pcm_sw_params_set_start_threshold) },
120 { "snd_pcm_sw_params_set_avail_min", (void**)(char*)&SDL_NAME(snd_pcm_sw_params_set_avail_min) }, 121 { "snd_pcm_sw_params_set_avail_min", (void**)(char*)&SDL_NAME(snd_pcm_sw_params_set_avail_min) },
121 { "snd_pcm_sw_params", (void**)(char*)&SDL_NAME(snd_pcm_sw_params) }, 122 { "snd_pcm_sw_params", (void**)(char*)&SDL_NAME(snd_pcm_sw_params) },
483 ALSA_CloseAudio(this); 484 ALSA_CloseAudio(this);
484 return(-1); 485 return(-1);
485 } 486 }
486 487
487 /* This is useful for debugging... */ 488 /* This is useful for debugging... */
488 /* 489 #if 0
489 { snd_pcm_sframes_t bufsize; int fragments; 490 { snd_pcm_uframes_t bufsize; snd_pcm_sframes_t persize; unsigned int periods; int dir;
490 bufsize = SDL_NAME(snd_pcm_hw_params_get_period_size)(hwparams); 491 SDL_NAME(snd_pcm_hw_params_get_buffer_size)(hwparams, &bufsize);
491 fragments = SDL_NAME(snd_pcm_hw_params_get_periods)(hwparams); 492 SDL_NAME(snd_pcm_hw_params_get_period_size)(hwparams, &persize, &dir);
492 493 SDL_NAME(snd_pcm_hw_params_get_periods)(hwparams, &periods, &dir);
493 fprintf(stderr, "ALSA: bufsize = %ld, fragments = %d\n", bufsize, fragments); 494
494 } 495 fprintf(stderr, "ALSA: period size = %ld, periods = %u, buffer size = %lu\n", persize, periods, bufsize);
495 */ 496 }
497 #endif
496 498
497 /* Set the software parameters */ 499 /* Set the software parameters */
498 snd_pcm_sw_params_alloca(&swparams); 500 snd_pcm_sw_params_alloca(&swparams);
499 status = SDL_NAME(snd_pcm_sw_params_current)(pcm_handle, swparams); 501 status = SDL_NAME(snd_pcm_sw_params_current)(pcm_handle, swparams);
500 if ( status < 0 ) { 502 if ( status < 0 ) {
501 SDL_SetError("Couldn't get software config: %s", SDL_NAME(snd_strerror)(status)); 503 SDL_SetError("Couldn't get software config: %s", SDL_NAME(snd_strerror)(status));
502 ALSA_CloseAudio(this); 504 ALSA_CloseAudio(this);
503 return(-1); 505 return(-1);
504 } 506 }
505 status = SDL_NAME(snd_pcm_sw_params_set_start_threshold)(pcm_handle, swparams, 0); 507 status = SDL_NAME(snd_pcm_sw_params_set_start_threshold)(pcm_handle, swparams, 1);
506 if ( status < 0 ) { 508 if ( status < 0 ) {
507 SDL_SetError("Couldn't set start threshold: %s", SDL_NAME(snd_strerror)(status)); 509 SDL_SetError("Couldn't set start threshold: %s", SDL_NAME(snd_strerror)(status));
508 ALSA_CloseAudio(this); 510 ALSA_CloseAudio(this);
509 return(-1); 511 return(-1);
510 } 512 }