You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

65 lines
1.8 KiB

#include "input/fifo.h"
#include "input/common.h"
#include <fcntl.h>
#include <time.h>
#include <unistd.h>
#define BUFSIZE 1024
#define MAX_FFTBUFERSIZE
int rc;
int open_fifo(const char *path) {
int fd = open(path, O_RDONLY);
int flags = fcntl(fd, F_GETFL, 0);
fcntl(fd, F_SETFL, flags | O_NONBLOCK);
return fd;
}
// input: FIFO
void *input_fifo(void *data) {
struct audio_data *audio = (struct audio_data *)data;
int fd;
int i;
int t = 0;
int bytes = 0;
int16_t buf[BUFSIZE / 2];
struct timespec req = {.tv_sec = 0, .tv_nsec = 10000000};
uint16_t frames = BUFSIZE / 4;
fd = open_fifo(audio->source);
while (!audio->terminate) {
bytes = read(fd, buf, sizeof(buf));
if (bytes < 1) { // if no bytes read sleep 10ms and zero shared buffer
nanosleep(&req, NULL);
t++;
if (t > 10) {
for (i = 0; i < audio->FFTbassbufferSize; i++)
audio->audio_out_bass_l[i] = 0;
for (i = 0; i < audio->FFTbassbufferSize; i++)
audio->audio_out_bass_r[i] = 0;
for (i = 0; i < audio->FFTmidbufferSize; i++)
audio->audio_out_mid_l[i] = 0;
for (i = 0; i < audio->FFTmidbufferSize; i++)
audio->audio_out_mid_r[i] = 0;
for (i = 0; i < audio->FFTtreblebufferSize; i++)
audio->audio_out_treble_l[i] = 0;
for (i = 0; i < audio->FFTtreblebufferSize; i++)
audio->audio_out_treble_r[i] = 0;
close(fd);
fd = open_fifo(audio->source);
t = 0;
}
} else { // if bytes read go ahead
t = 0;
write_to_fftw_input_buffers(buf, frames, audio);
}
}
close(fd);
return 0;
}