FreeCalypso > hg > sipout-test-utils
diff test-voice/rtp_tx.c @ 15:71f01a834820
sipout-test-voice: implement play with offset
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sat, 11 May 2024 22:27:07 -0800 |
parents | f96153d15889 |
children | 830af7de3403 |
line wrap: on
line diff
--- a/test-voice/rtp_tx.c Sat May 11 22:10:38 2024 -0800 +++ b/test-voice/rtp_tx.c Sat May 11 22:27:07 2024 -0800 @@ -119,6 +119,7 @@ else { free(play_buffer); play_buffer = 0; + printf("file play finished\n"); } } @@ -236,6 +237,53 @@ } void +play_file_offset(filename, offset) + char *filename; + unsigned offset; +{ + int fd; + struct stat st; + unsigned pre_offset; + + if (play_buffer) { + fprintf(stderr, "error: file play already in progress\n"); + return; + } + fd = open(filename, O_RDONLY); + if (fd < 0) { + perror(filename); + return; + } + fstat(fd, &st); + if (!S_ISREG(st.st_mode)) { + close(fd); + fprintf(stderr, "error: %s is not a regular file\n", filename); + return; + } + if (st.st_size % 160) { + close(fd); + fprintf(stderr, + "error: size of %s is not a multiple of 160 bytes\n", + filename); + return; + } + play_buffer = malloc(st.st_size + 160); + if (!play_buffer) { + close(fd); + fprintf(stderr, "unable to malloc buffer for %s\n", filename); + return; + } + pre_offset = 160 - offset; + memset(play_buffer, pcm_fill_octet, pre_offset); + read(fd, play_buffer + pre_offset, st.st_size); + close(fd); + memset(play_buffer + pre_offset + st.st_size, pcm_fill_octet, offset); + play_buf_nframes = st.st_size / 160 + 1; + play_buf_ptr = 0; + play_loop = 0; +} + +void play_file_stop() { if (!play_buffer)