update tests to catch pausing during write_callback

This commit is contained in:
Andrew Kelley 2015-10-28 15:42:41 -07:00
parent c09a64c64f
commit a37b8cf847
2 changed files with 8 additions and 0 deletions

View file

@ -259,6 +259,7 @@ For each backend, do the following:
- Use 'p' to test pausing, 'u' to test unpausing, 'q' to test cleanup. - Use 'p' to test pausing, 'u' to test unpausing, 'q' to test cleanup.
- 'c' for clear buffer. Clear buffer should not pause the stream and it - 'c' for clear buffer. Clear buffer should not pause the stream and it
should also not cause an underflow. should also not cause an underflow.
- Use 'P' to test pausing from the callback, and then 'u' to unpause.
0. Run `./underflow` and read the testing instructions that it prints. 0. Run `./underflow` and read the testing instructions that it prints.
0. Run `./sio_microphone` and ensure that it is both recording and playing 0. Run `./sio_microphone` and ensure that it is both recording and playing
back correctly. If possible use the `--in-device` and `--out-device` back correctly. If possible use the `--in-device` and `--out-device`

View file

@ -53,6 +53,7 @@ static void write_sample_float64ne(char *ptr, double sample) {
static void (*write_sample)(char *ptr, double sample); static void (*write_sample)(char *ptr, double sample);
static const double PI = 3.14159265358979323846264338328; static const double PI = 3.14159265358979323846264338328;
static double seconds_offset = 0.0; static double seconds_offset = 0.0;
static volatile bool want_pause = false;
static void write_callback(struct SoundIoOutStream *outstream, int frame_count_min, int frame_count_max) { static void write_callback(struct SoundIoOutStream *outstream, int frame_count_min, int frame_count_max) {
double float_sample_rate = outstream->sample_rate; double float_sample_rate = outstream->sample_rate;
double seconds_per_frame = 1.0 / float_sample_rate; double seconds_per_frame = 1.0 / float_sample_rate;
@ -95,6 +96,8 @@ static void write_callback(struct SoundIoOutStream *outstream, int frame_count_m
if (frames_left <= 0) if (frames_left <= 0)
break; break;
} }
soundio_outstream_pause(outstream, want_pause);
} }
static void underflow_callback(struct SoundIoOutStream *outstream) { static void underflow_callback(struct SoundIoOutStream *outstream) {
@ -200,6 +203,7 @@ int main(int argc, char **argv) {
fprintf(stderr, fprintf(stderr,
"'p\\n' - pause\n" "'p\\n' - pause\n"
"'u\\n' - unpause\n" "'u\\n' - unpause\n"
"'P\\n' - pause from within callback\n"
"'c\\n' - clear buffer\n" "'c\\n' - clear buffer\n"
"'q\\n' - quit\n"); "'q\\n' - quit\n");
@ -252,7 +256,10 @@ int main(int argc, char **argv) {
if (c == 'p') { if (c == 'p') {
fprintf(stderr, "pausing result: %s\n", fprintf(stderr, "pausing result: %s\n",
soundio_strerror(soundio_outstream_pause(outstream, true))); soundio_strerror(soundio_outstream_pause(outstream, true)));
} else if (c == 'P') {
want_pause = true;
} else if (c == 'u') { } else if (c == 'u') {
want_pause = false;
fprintf(stderr, "unpausing result: %s\n", fprintf(stderr, "unpausing result: %s\n",
soundio_strerror(soundio_outstream_pause(outstream, false))); soundio_strerror(soundio_outstream_pause(outstream, false)));
} else if (c == 'c') { } else if (c == 'c') {