Lines Matching refs:vhd

207 	struct raw_vhd *vhd = (struct raw_vhd *)lws_protocol_vh_priv_get(
221 avhd = vhd = lws_protocol_vh_priv_zalloc(lws_get_vhost(wsi),
229 1.0, &vhd->porc);
235 vhd->porc_spf = pv_porcupine_frame_length();
236 vhd->porcbuf = malloc(vhd->porc_spf * 2);
239 vhd->porc_spf);
241 vhd->rate = pv_sample_rate(); /* 16kHz */
245 if (set_hw_params(lws_get_vhost(wsi), &vhd->pcm_playback,
253 if (set_hw_params(lws_get_vhost(wsi), &vhd->pcm_capture,
267 if (!vhd)
270 if (vhd->porcbuf) {
271 free(vhd->porcbuf);
272 vhd->porcbuf = NULL;
274 if (vhd->pcm_playback) {
275 snd_pcm_drop(vhd->pcm_playback);
276 snd_pcm_close(vhd->pcm_playback);
277 vhd->pcm_playback = NULL;
279 if (vhd->pcm_capture) {
280 snd_pcm_drop(vhd->pcm_capture);
281 snd_pcm_close(vhd->pcm_capture);
282 vhd->pcm_capture = NULL;
284 if (vhd->porc) {
285 pv_porcupine_delete(vhd->porc);
286 vhd->porc = NULL;
304 if (vhd->mode == MODE_PLAYING && vhd->mh) {
308 try = snd_pcm_avail(vhd->pcm_playback);
309 if (try > LWS_ARRAY_SIZE(vhd->p))
310 try = LWS_ARRAY_SIZE(vhd->p);
312 n = mpg123_read(vhd->mh, (uint8_t *)vhd->p,
317 snd_pcm_start(vhd->pcm_playback);
318 memset(vhd->p, 0, try);
319 snd_pcm_writei(vhd->pcm_playback,
320 vhd->p, try / 2);
321 snd_pcm_prepare(vhd->pcm_playback);
326 n = snd_pcm_writei(vhd->pcm_playback,
327 vhd->p, amt / 2);
333 snd_pcm_prepare(vhd->pcm_playback);
336 if (vhd->destroy_mh_on_drain &&
338 snd_pcm_drain(vhd->pcm_playback);
339 vhd->destroy_mh_on_drain = 0;
342 mpg123_close(vhd->mh);
343 mpg123_delete(vhd->mh);
344 vhd->mh = NULL;
345 vhd->mode = MODE_IDLE;
347 if (vhd->done_cb)
348 vhd->done_cb(vhd->opaque);
356 n = snd_pcm_readi(vhd->pcm_capture, temp, LWS_ARRAY_SIZE(temp));
359 vhd->p[(vhd->wpos + s) % LWS_ARRAY_SIZE(vhd->p)] = temp[s];
363 if (vhd->mode == MODE_CAPTURING) {
391 lwsl_notice("est audio energy: %ld %d\n", avg, vhd->mode);
398 if (vhd->anycount < (3 *vhd->rate) / 2 &&
400 vhd->quietcount += n;
402 if (vhd->quietcount >= ((vhd->rate * 3) / 4)) {
404 vhd->mode = MODE_IDLE;
405 vhd->quietcount = 0;
411 vhd->quietcount = 0;
427 while (vhd->mode == MODE_IDLE) {
428 int m = 0, ppold = vhd->porcpos;
430 s = (vhd->wpos - vhd->porcpos) % LWS_ARRAY_SIZE(vhd->p);
431 if (s < vhd->porc_spf)
434 while (m < vhd->porc_spf) {
435 vhd->porcbuf[m++] = avhd->p[vhd->porcpos];
436 vhd->porcpos = (vhd->porcpos + 1) %
437 LWS_ARRAY_SIZE(vhd->p);
440 if (pv_porcupine_process(vhd->porc, vhd->porcbuf, &det))
443 if (!det && vhd->last_wake_detect &&
444 vhd->mode == MODE_IDLE) {
447 vhd->mode = MODE_CAPTURING;
448 vhd->quietcount = 0;
449 vhd->last_wake_detect = det;
450 vhd->npos = ppold;
454 vhd->last_wake_detect = det;
458 vhd->wpos = (vhd->wpos + n) % LWS_ARRAY_SIZE(vhd->p);