FreeCalypso > hg > sipout-test-utils
comparison 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 |
comparison
equal
deleted
inserted
replaced
14:f96153d15889 | 15:71f01a834820 |
---|---|
117 if (play_loop) | 117 if (play_loop) |
118 play_buf_ptr = 0; | 118 play_buf_ptr = 0; |
119 else { | 119 else { |
120 free(play_buffer); | 120 free(play_buffer); |
121 play_buffer = 0; | 121 play_buffer = 0; |
122 printf("file play finished\n"); | |
122 } | 123 } |
123 } | 124 } |
124 | 125 |
125 void | 126 void |
126 generate_rtp_packet() | 127 generate_rtp_packet() |
234 play_buf_ptr = 0; | 235 play_buf_ptr = 0; |
235 play_loop = loop; | 236 play_loop = loop; |
236 } | 237 } |
237 | 238 |
238 void | 239 void |
240 play_file_offset(filename, offset) | |
241 char *filename; | |
242 unsigned offset; | |
243 { | |
244 int fd; | |
245 struct stat st; | |
246 unsigned pre_offset; | |
247 | |
248 if (play_buffer) { | |
249 fprintf(stderr, "error: file play already in progress\n"); | |
250 return; | |
251 } | |
252 fd = open(filename, O_RDONLY); | |
253 if (fd < 0) { | |
254 perror(filename); | |
255 return; | |
256 } | |
257 fstat(fd, &st); | |
258 if (!S_ISREG(st.st_mode)) { | |
259 close(fd); | |
260 fprintf(stderr, "error: %s is not a regular file\n", filename); | |
261 return; | |
262 } | |
263 if (st.st_size % 160) { | |
264 close(fd); | |
265 fprintf(stderr, | |
266 "error: size of %s is not a multiple of 160 bytes\n", | |
267 filename); | |
268 return; | |
269 } | |
270 play_buffer = malloc(st.st_size + 160); | |
271 if (!play_buffer) { | |
272 close(fd); | |
273 fprintf(stderr, "unable to malloc buffer for %s\n", filename); | |
274 return; | |
275 } | |
276 pre_offset = 160 - offset; | |
277 memset(play_buffer, pcm_fill_octet, pre_offset); | |
278 read(fd, play_buffer + pre_offset, st.st_size); | |
279 close(fd); | |
280 memset(play_buffer + pre_offset + st.st_size, pcm_fill_octet, offset); | |
281 play_buf_nframes = st.st_size / 160 + 1; | |
282 play_buf_ptr = 0; | |
283 play_loop = 0; | |
284 } | |
285 | |
286 void | |
239 play_file_stop() | 287 play_file_stop() |
240 { | 288 { |
241 if (!play_buffer) | 289 if (!play_buffer) |
242 return; | 290 return; |
243 free(play_buffer); | 291 free(play_buffer); |