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);