Lines Matching defs:pVoice

294 static int fltInitOutput(filterVoiceOut *pVoice)
299 ASMAtomicXchgU32(&pVoice->status, CA_STATUS_IN_INIT);
304 cSamples = cFrames * pVoice->phw->info.nchannels;
305 IORingBufferCreate(&pVoice->pBuf, cSamples << pVoice->phw->info.shift);
306 if (!RT_VALID_PTR(pVoice->pBuf))
312 if ( pVoice->phw->samples != 0
313 && pVoice->phw->samples != (int32_t)cSamples)
314 LogRel(("FilterAudio: [Output] Warning! After recreation, the CoreAudio ring buffer doesn't has the same size as the device buffer (%RU32 vs. %RU32).\n", cSamples, (uint32_t)pVoice->phw->samples));
315 ASMAtomicXchgU32(&pVoice->status, CA_STATUS_INIT);
331 filterVoiceOut *pVoice = (filterVoiceOut *)((uint8_t *)phw + filter_conf.pDrv->voice_size_out);
333 if (!pVoice->fIntercepted)
340 if (ASMAtomicReadU32(&pVoice->status) != CA_STATUS_INIT)
341 return audio_pcm_hw_get_live_out(pVoice->phw);
344 filteraudio_ctl_out(pVoice->phw, VOICE_ENABLE);
347 csAvail = IORingBufferFree(pVoice->pBuf) >> pVoice->phw->info.shift; /* bytes -> samples */
350 csAvail = RT_MIN(csAvail, (uint32_t)audio_pcm_hw_get_live_out(pVoice->phw));
352 CA_EXT_DEBUG_LOG(("FilterAudio: [Output] Start writing buffer with %RU32 samples (%RU32 bytes)\n", csAvail, csAvail << pVoice->phw->info.shift));
358 csToWrite = RT_MIN(csAvail - csWritten, (uint32_t)(pVoice->phw->samples - pVoice->phw->rpos));
359 cbToWrite = csToWrite << pVoice->phw->info.shift; /* samples -> bytes */
363 IORingBufferAquireWriteBlock(pVoice->pBuf, cbToWrite, &pcDst, &cbToWrite);
366 csToWrite = cbToWrite >> pVoice->phw->info.shift;
374 psSrc = pVoice->phw->mix_buf + pVoice->phw->rpos;
375 pVoice->phw->clip((uint8_t*)pcDst, psSrc, csToWrite);
378 IORingBufferReleaseWriteBlock(pVoice->pBuf, cbToWrite);
380 pVoice->phw->rpos = (pVoice->phw->rpos + csToWrite) % pVoice->phw->samples;
386 CA_EXT_DEBUG_LOG(("FilterAudio: [Output] Finished writing buffer with %RU32 samples (%RU32 bytes)\n", csWritten, csWritten << pVoice->phw->info.shift));
402 filterVoiceOut *pVoice = (filterVoiceOut *)((uint8_t *)phw + filter_conf.pDrv->voice_size_out);
404 if (!pVoice->fIntercepted)
410 status = ASMAtomicReadU32(&pVoice->status);
419 if (!pVoice->fIsRunning)
421 IORingBufferReset(pVoice->pBuf);
422 filter_output_begin(&pVoice->pvOutputCtx, &pVoice->phw->info, pVoice->phw->samples);
429 if (pVoice->fIsRunning)
431 filter_output_end(pVoice->pvOutputCtx);
444 filterVoiceOut *pVoice = (filterVoiceOut *)((uint8_t *)phw + filter_conf.pDrv->voice_size_out);
446 if (!pVoice->fIntercepted)
452 status = ASMAtomicReadU32(&pVoice->status);
459 ASMAtomicXchgU32(&pVoice->status, CA_STATUS_IN_UNINIT);
460 IORingBufferDestroy(pVoice->pBuf);
461 pVoice->pBuf = NULL;
462 ASMAtomicXchgU32(&pVoice->status, CA_STATUS_UNINIT);
472 filterVoiceOut *pVoice = (filterVoiceOut *)((uint8_t *)phw + filter_conf.pDrv->voice_size_out);
476 pVoice->fIntercepted = false;
484 ASMAtomicXchgU32(&pVoice->status, CA_STATUS_UNINIT);
486 pVoice->fIntercepted = true;
487 pVoice->phw = phw;
488 pVoice->phw->samples = 0;
491 audio_pcm_init_info(&pVoice->phw->info, as);
493 rc = fltInitOutput(pVoice);
498 pVoice->phw->samples = (IORingBufferSize(pVoice->pBuf) >> pVoice->phw->info.shift) / pVoice->phw->info.nchannels;
500 Log(("FilterAudio: [Output] HW samples: %d\n", pVoice->phw->samples));
531 filterVoiceIn *pVoice = (filterVoiceIn *)pvCallback;
535 if (!pVoice->fIsRunning)
543 csAvail = IORingBufferFree(pVoice->pBuf) / sizeof(st_sample_t); /* bytes -> samples */
559 IORingBufferAquireWriteBlock(pVoice->pBuf, cbToWrite, &pcDst, &cbToWrite);
573 IORingBufferReleaseWriteBlock(pVoice->pBuf, cbToWrite);
591 filterVoiceIn *pVoice;
599 pVoice = (filterVoiceIn *)((uint8_t *)phw + filter_conf.pDrv->voice_size_in);
601 if (!pVoice->fIntercepted)
603 if (!pVoice->fHostOK)
606 Log(("FilterAudio: [Input]: run_in voice %p (hw %p) not available on host\n", pVoice, pVoice->phw));
610 Log(("FilterAudio: [Input]: forwarding run_in for voice %p (hw %p)\n", pVoice, pVoice->phw));
614 Log(("FilterAudio: [Input]: run_in for voice %p (hw %p)\n", pVoice, pVoice->phw));
616 if (!pVoice->fIsRunning)
620 csAvail = IORingBufferUsed(pVoice->pBuf) / sizeof(st_sample_t); /* bytes -> samples */
623 csAvail = RT_MIN(csAvail, (uint32_t)(pVoice->phw->samples - audio_pcm_hw_get_live_in (pVoice->phw)));
630 csToRead = RT_MIN(csAvail - csReads, (uint32_t)(pVoice->phw->samples - pVoice->phw->wpos));
635 IORingBufferAquireReadBlock(pVoice->pBuf, cbToRead, &pcSrc, &cbToRead);
646 psDst = pVoice->phw->conv_buf + pVoice->phw->wpos;
650 IORingBufferReleaseReadBlock(pVoice->pBuf, cbToRead);
652 pVoice->phw->wpos = (pVoice->phw->wpos + csToRead) % pVoice->phw->samples;
672 filterVoiceIn *pVoice;
680 pVoice = (filterVoiceIn *)((uint8_t *)phw + filter_conf.pDrv->voice_size_in);
687 if (!pVoice->fHostOK)
690 Log(("FilterAudio: [Input]: ctl_in ENABLE voice %p (hw %p) not available on host\n", pVoice, pVoice->phw));
695 Log(("FilterAudio: [Input]: forwarding ctl_in ENABLE for voice %p (hw %p)\n", pVoice, pVoice->phw));
700 Log(("FilterAudio: [Input]: ctl_in ENABLE for voice %p (hw %p), cmd %d\n", pVoice, pVoice->phw, cmd));
702 if (ASMAtomicReadU32(&pVoice->status) != CA_STATUS_INIT)
706 if (!pVoice->fIsRunning)
708 IORingBufferReset(pVoice->pBuf);
713 rc = filter_input_begin(&pVoice->pvInputCtx, fltRecordingCallback, pVoice, pVoice->phw, pVoice->phw->samples);
716 pVoice->fIsRunning = true;
719 pVoice->fIntercepted = true;
730 if (ASMAtomicReadU32(&pVoice->status) != CA_STATUS_INIT)
734 if (!pVoice->fIntercepted)
736 if (!pVoice->fHostOK)
741 Log(("FilterAudio: [Input]: ctl_in DISABLE voice %p (hw %p) not available on host\n", pVoice, pVoice->phw));
746 Log(("FilterAudio: [Input]: forwarding ctl_in DISABLE for voice %p (hw %p)\n", pVoice, pVoice->phw));
751 Log(("FilterAudio: [Input]: ctl_in DISABLE for voice %p (hw %p), cmd %d\n", pVoice, pVoice->phw, cmd));
754 if (pVoice->fIsRunning)
756 pVoice->fIsRunning = false;
758 filter_input_end(pVoice->pvInputCtx);
762 pVoice->fIntercepted = false;
775 filterVoiceIn *pVoice;
783 pVoice = (filterVoiceIn *)((uint8_t *)phw + filter_conf.pDrv->voice_size_in);
786 if (pVoice->fHostOK)
789 Log(("FilterAudio: [Input]: forwarding fini_in for voice %p (hw %p)\n", pVoice, pVoice->phw));
793 Log(("FilterAudio: [Input]: fini_in for voice %p (hw %p)\n", pVoice, pVoice->phw));
795 if (ASMAtomicReadU32(&pVoice->status) != CA_STATUS_INIT)
799 if (pVoice->fIntercepted)
810 ASMAtomicWriteU32(&pVoice->status, CA_STATUS_IN_UNINIT);
811 IORingBufferDestroy(pVoice->pBuf);
812 pVoice->pBuf = NULL;
813 pVoice->rpos = 0;
814 ASMAtomicWriteU32(&pVoice->status, CA_STATUS_UNINIT);
823 filterVoiceIn *pVoice;
831 pVoice = (filterVoiceIn *)((uint8_t *)phw + filter_conf.pDrv->voice_size_in);
834 Log(("FilterAudio: [Input]: forwarding init_in for voice %p (hw %p)\n", pVoice, pVoice->phw));
837 Log(("FilterAudio: [Input]: init_in for voice %p (hw %p), hostret = %d\n", pVoice, pVoice->phw, hostret));
839 ASMAtomicWriteU32(&pVoice->status, CA_STATUS_UNINIT);
841 pVoice->phw = phw;
842 pVoice->rpos = 0;
843 pVoice->pBuf = NULL;
844 pVoice->fHostOK = (hostret == 0);
845 pVoice->fIntercepted = false;
846 pVoice->fIsRunning = false;
847 pVoice->pvInputCtx = NULL;
849 if (!pVoice->fHostOK)
852 pVoice->phw->samples = 2048;
855 audio_pcm_init_info(&pVoice->phw->info, as);
858 ASMAtomicWriteU32(&pVoice->status, CA_STATUS_IN_INIT);
861 IORingBufferCreate(&pVoice->pBuf, pVoice->phw->samples * sizeof(st_sample_t));
863 if (!RT_VALID_PTR(pVoice->pBuf))
869 ASMAtomicWriteU32(&pVoice->status, CA_STATUS_INIT);
871 Log(("FilterAudio: [Input] HW samples: %d\n", pVoice->phw->samples));
955 filterVoiceIn *pVoice;
972 pVoice = (filterVoiceIn *)((uint8_t *)phw + filter_conf.pDrv->voice_size_in);
974 return pVoice->fHostOK;