projects
/
goodguy
/
history.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
findobj mode/xlat/scale/rotate, save backup shortcut, undo limit bug, title boundary...
[goodguy/history.git]
/
cinelerra-5.1
/
cinelerra
/
audioalsa.C
diff --git
a/cinelerra-5.1/cinelerra/audioalsa.C
b/cinelerra-5.1/cinelerra/audioalsa.C
index adb6c8bb0b9d80def3eaf073477d9ea9e714f13e..7a8d712c3b8f2687280dd33a9bccfa0925872c12 100644
(file)
--- a/
cinelerra-5.1/cinelerra/audioalsa.C
+++ b/
cinelerra-5.1/cinelerra/audioalsa.C
@@
-22,6
+22,7
@@
#include "audiodevice.h"
#include "audioalsa.h"
#include "bcsignals.h"
#include "audiodevice.h"
#include "audioalsa.h"
#include "bcsignals.h"
+#include "language.h"
#include "mutex.h"
#include "playbackconfig.h"
#include "preferences.h"
#include "mutex.h"
#include "playbackconfig.h"
#include "preferences.h"
@@
-58,6
+59,7
@@
public:
// This is required in the top thread for Alsa to work
alsa_leaks() {
ArrayList<char*> *alsa_titles = new ArrayList<char*>;
// This is required in the top thread for Alsa to work
alsa_leaks() {
ArrayList<char*> *alsa_titles = new ArrayList<char*>;
+ alsa_titles->set_array_delete();
AudioALSA::list_devices(alsa_titles, 0, MODEPLAY);
alsa_titles->remove_all_objects();
delete alsa_titles;
AudioALSA::list_devices(alsa_titles, 0, MODEPLAY);
alsa_titles->remove_all_objects();
delete alsa_titles;
@@
-74,9
+76,6
@@
void AudioALSA::list_devices(ArrayList<char*> *devices, int pcm_title, int mode)
char string[BCTEXTLEN];
snd_pcm_stream_t stream = SND_PCM_STREAM_PLAYBACK;
char string[BCTEXTLEN];
snd_pcm_stream_t stream = SND_PCM_STREAM_PLAYBACK;
- devices->set_array_delete();
-
-
switch(mode)
{
case MODERECORD:
switch(mode)
{
case MODERECORD:
@@
-95,7
+94,6
@@
void AudioALSA::list_devices(ArrayList<char*> *devices, int pcm_title, int mode)
#define DEFAULT_DEVICE "default"
char *result = new char[strlen(DEFAULT_DEVICE) + 1];
devices->append(result);
#define DEFAULT_DEVICE "default"
char *result = new char[strlen(DEFAULT_DEVICE) + 1];
devices->append(result);
- devices->set_array_delete(); // since we are allocating by new[]
strcpy(result, DEFAULT_DEVICE);
while(snd_card_next(&card) >= 0)
strcpy(result, DEFAULT_DEVICE);
while(snd_card_next(&card) >= 0)
@@
-159,6
+157,7
@@
void AudioALSA::list_devices(ArrayList<char*> *devices, int pcm_title, int mode)
snd_ctl_close(handle);
}
snd_ctl_close(handle);
}
+#ifdef HAVE_PACTL
// attempt to add pulseaudio "monitor" devices
// run: pactl list <sources>|<sinks>
// scan output for <Source/Sink> #n, Name: <device>
// attempt to add pulseaudio "monitor" devices
// run: pactl list <sources>|<sinks>
// scan output for <Source/Sink> #n, Name: <device>
@@
-214,12
+213,16
@@
void AudioALSA::list_devices(ArrayList<char*> *devices, int pcm_title, int mode)
}
pclose(pactl);
}
}
pclose(pactl);
}
+#endif
}
void AudioALSA::translate_name(char *output, char *input, int mode)
{
ArrayList<char*> titles;
}
void AudioALSA::translate_name(char *output, char *input, int mode)
{
ArrayList<char*> titles;
+ titles.set_array_delete();
+
ArrayList<char*> pcm_titles;
ArrayList<char*> pcm_titles;
+ pcm_titles.set_array_delete();
list_devices(&titles, 0, mode);
list_devices(&pcm_titles, 1, mode);
list_devices(&titles, 0, mode);
list_devices(&pcm_titles, 1, mode);
@@
-271,7
+274,8
@@
int AudioALSA::set_params(snd_pcm_t *dsp, int mode,
err = snd_pcm_hw_params_any(dsp, params);
if (err < 0) {
err = snd_pcm_hw_params_any(dsp, params);
if (err < 0) {
- fprintf(stderr, "AudioALSA::set_params: no PCM configurations available\n");
+ fprintf(stderr, "AudioALSA::set_params: ");
+ fprintf(stderr, _("no PCM configurations available\n"));
return 1;
}
return 1;
}
@@
-279,8
+283,8
@@
int AudioALSA::set_params(snd_pcm_t *dsp, int mode,
params,
SND_PCM_ACCESS_RW_INTERLEAVED);
if(err) {
params,
SND_PCM_ACCESS_RW_INTERLEAVED);
if(err) {
- fprintf(stderr, "AudioALSA::set_params:
failed to set up "
-
"interleaved device access.\n"
);
+ fprintf(stderr, "AudioALSA::set_params:
");
+
fprintf(stderr, _("failed to set up interleaved device access.\n")
);
return 1;
}
return 1;
}
@@
-288,7
+292,8
@@
int AudioALSA::set_params(snd_pcm_t *dsp, int mode,
params,
translate_format(bits));
if(err) {
params,
translate_format(bits));
if(err) {
- fprintf(stderr, "AudioALSA::set_params: failed to set output format.\n");
+ fprintf(stderr, "AudioALSA::set_params: ");
+ fprintf(stderr, _("failed to set output format.\n"));
return 1;
}
return 1;
}
@@
-296,8
+301,8
@@
int AudioALSA::set_params(snd_pcm_t *dsp, int mode,
params,
channels);
if(err) {
params,
channels);
if(err) {
- fprintf(stderr, "AudioALSA::set_params:
Configured ALSA device "
-
"does not support %d channel operation.\n"
,
+ fprintf(stderr, "AudioALSA::set_params:
");
+
fprintf(stderr, _("Configured ALSA device does not support %d channel operation.\n")
,
channels);
return 1;
}
channels);
return 1;
}
@@
-307,8
+312,8
@@
int AudioALSA::set_params(snd_pcm_t *dsp, int mode,
(unsigned int*)&samplerate,
(int*)0);
if(err) {
(unsigned int*)&samplerate,
(int*)0);
if(err) {
- fprintf(stderr, "AudioALSA::set_params:
Configured ALSA device "
-
"does not support %u Hz playback.\n"
,
+ fprintf(stderr, "AudioALSA::set_params:
");
+
fprintf(stderr, _(" Configured ALSA device does not support %u Hz playback.\n")
,
(unsigned int)samplerate);
return 1;
}
(unsigned int)samplerate);
return 1;
}
@@
-382,7
+387,7
@@
int AudioALSA::open_input()
translate_name(pcm_name, device->in_config->alsa_in_device,MODERECORD);
//printf("AudioALSA::open_input %s\n", pcm_name);
translate_name(pcm_name, device->in_config->alsa_in_device,MODERECORD);
//printf("AudioALSA::open_input %s\n", pcm_name);
- err = snd_pcm_open(&dsp_in,
device->in_config->alsa_in_devic
e, stream, open_mode);
+ err = snd_pcm_open(&dsp_in,
pcm_nam
e, stream, open_mode);
if(err < 0) {
dsp_in = 0;
if(err < 0) {
dsp_in = 0;
@@
-427,7
+432,7
@@
int AudioALSA::open_output()
return 1;
}
return 1;
}
- set_params(dsp_out, MODEPLAY,
+
err =
set_params(dsp_out, MODEPLAY,
device->get_ochannels(),
device->out_config->alsa_out_bits,
device->out_samplerate,
device->get_ochannels(),
device->out_config->alsa_out_bits,
device->out_samplerate,
@@
-562,8
+567,8
@@
int AudioALSA::write_buffer(char *buffer, int size)
timer->update();
AudioThread *audio_out = device->audio_out;
timer->update();
AudioThread *audio_out = device->audio_out;
- while(
attempts < 2 && !done && !device->playback_interrupted)
- {
+ while(
count > 0 && attempts < 2 && !done ) {
+ if( device->playback_interrupted ) break;
// Buffers written must be equal to period_time
audio_out->Thread::enable_cancel();
int ret = snd_pcm_avail_update(get_output());
// Buffers written must be equal to period_time
audio_out->Thread::enable_cancel();
int ret = snd_pcm_avail_update(get_output());
@@
-581,6
+586,7
@@
int AudioALSA::write_buffer(char *buffer, int size)
if( ret > 0 ) ret = 0;
}
audio_out->Thread::disable_cancel();
if( ret > 0 ) ret = 0;
}
audio_out->Thread::disable_cancel();
+ if( device->playback_interrupted ) break;
if( ret == 0 ) continue;
if( ret > 0 ) {
if( ret == 0 ) continue;
if( ret > 0 ) {