hackorama to get better sound data. close bug still exists

git-svn-id: https://projectm.svn.sourceforge.net/svnroot/projectm/trunk@706 6778bc44-b910-0410-a7a0-be141de4315d
This commit is contained in:
w1z7ard
2007-11-12 05:33:10 +00:00
parent 6ffb808f79
commit 6144d741eb
2 changed files with 5 additions and 98 deletions

View File

@ -77,19 +77,12 @@ static enum { RECORD } mode = RECORD;
static pa_sample_spec sample_spec ;
QPulseAudioThread::QPulseAudioThread(int _argc, char **_argv, projectM * _projectM, QObject * parent) : QThread(parent), argc(_argc), argv(_argv), m_projectM(_projectM), m_timer(0) {
QPulseAudioThread::QPulseAudioThread(int _argc, char **_argv, projectM * _projectM, QObject * parent) : QThread(parent), argc(_argc), argv(_argv), m_projectM(_projectM) {
m_timer = new QTimer(this);
}
void QPulseAudioThread::init() {
}
QPulseAudioThread::~QPulseAudioThread()
{
cleanup();
@ -147,34 +140,6 @@ if (mainloop_api)
mainloop_api->quit(mainloop_api, ret);
}
/* Write some data to the stream */
static void do_stream_write(size_t length) {
size_t l;
assert(length);
if (!buffer || !buffer_length)
return;
l = length;
if (l > buffer_length)
l = buffer_length;
if (pa_stream_write(stream, (uint8_t*) buffer + buffer_index, l, NULL, 0, PA_SEEK_RELATIVE) < 0) {
fprintf(stderr, "pa_stream_write() failed: %s\n", pa_strerror(pa_context_errno(context)));
quit(1);
return;
}
buffer_length -= l;
buffer_index += l;
if (!buffer_length) {
pa_xfree(buffer);
buffer = NULL;
buffer_index = buffer_length = 0;
}
}
/* This is called whenever new data may is available */
static void stream_read_callback(pa_stream *s, size_t length, void *userdata) {
@ -323,57 +288,6 @@ static void stream_state_callback(pa_stream *s, void *userdata) {
}
}
/* New data on STDIN **/
static void stdin_callback(pa_mainloop_api*a, pa_io_event *e, int fd, pa_io_event_flags_t f, void *userdata) {
size_t l, w = 0;
ssize_t r;
assert(a == mainloop_api && e && stdio_event == e);
if (buffer) {
mainloop_api->io_enable(stdio_event, PA_IO_EVENT_NULL);
return;
}
if (!stream || pa_stream_get_state(stream) != PA_STREAM_READY || !(l = w = pa_stream_writable_size(stream)))
l = 4096;
buffer = (float*)pa_xmalloc(l);
if ((r = read(fd, buffer, l)) <= 0) {
if (r == 0) {
if (verbose)
fprintf(stderr, "Got EOF.\n");
if (stream) {
pa_operation *o;
if (!(o = pa_stream_drain(stream, stream_drain_complete, NULL))) {
fprintf(stderr, "pa_stream_drain(): %s\n", pa_strerror(pa_context_errno(context)));
quit(1);
return;
}
pa_operation_unref(o);
} else
quit(0);
} else {
fprintf(stderr, "read() failed: %s\n", strerror(errno));
quit(1);
}
mainloop_api->io_free(stdio_event);
stdio_event = NULL;
return;
}
buffer_length = r;
buffer_index = 0;
if (w)
do_stream_write(w);
}
/* Some data may be written to STDOUT */
static void stdout_callback(pa_mainloop_api*a, pa_io_event *e, int fd, pa_io_event_flags_t f, void *userdata) {
ssize_t r;
@ -384,15 +298,13 @@ static void stream_state_callback(pa_stream *s, void *userdata) {
return;
} else {
projectM * prjm = static_cast<projectM *>(userdata);
prjm->pcm->addPCMfloat(buffer+buffer_index, sizeof(buffer));
}
assert(buffer_length);
prjm->pcm->addPCMfloat(buffer+buffer_index, buffer_length/(sizeof(float)));
assert(buffer_length);
pa_xfree(buffer);
buffer = NULL;
buffer_length = buffer_index = 0;
}
}
/* UNIX signal to quit recieved */
@ -451,7 +363,7 @@ static void stream_state_callback(pa_stream *s, void *userdata) {
void QPulseAudioThread::run() {
int ret = 1, r, c;
char *bn = "pulse";
char *bn = "QPulseAudioThread";
sample_spec.format = PA_SAMPLE_FLOAT32LE;
sample_spec.rate = 44100;