@@ -523,27 +523,31 @@ void PipewireEnumerator::callback(const spa_io_position* pos) {
523523
524524 std::pair<uint32_t *, uint32_t *> ports = m_inputs.value (input);
525525
526- const float * bufferFL = static_cast <const float *>(
527- pw_filter_get_dsp_buffer (ports.first , framesPerBuffer));
528- if (bufferFL) {
529- for (uint64_t i = 0 ; i < framesPerBuffer; i++) {
530- pInputBuffer[iChannelBase + i * iChannelCount] = bufferFL[i];
526+ if (iChannelCount == 1 ) {
527+ void * portData = iChannelBase % 2 ? ports.second : ports.first ;
528+ const float * buffer = static_cast <const float *>(
529+ pw_filter_get_dsp_buffer (portData, framesPerBuffer));
530+ if (buffer) {
531+ for (uint64_t i = 0 ; i < framesPerBuffer; i++) {
532+ pInputBuffer[i * 2 ] = buffer[i];
533+ pInputBuffer[i * 2 + 1 ] = buffer[i];
534+ }
531535 }
532536 } else {
533- for (uint64_t i = 0 ; i < framesPerBuffer; i++) {
534- pInputBuffer[iChannelBase + i * iChannelCount] = 0 ;
537+ const float * bufferFL = static_cast <const float *>(
538+ pw_filter_get_dsp_buffer (ports.first , framesPerBuffer));
539+ if (bufferFL) {
540+ for (uint64_t i = 0 ; i < framesPerBuffer; i++) {
541+ pInputBuffer[iChannelBase + i * 2 ] = bufferFL[i];
542+ }
535543 }
536- }
537544
538- const float * bufferFR = static_cast <const float *>(
539- pw_filter_get_dsp_buffer (ports.second , framesPerBuffer));
540- if (bufferFR) {
541- for (uint64_t i = 0 ; i < framesPerBuffer; i++) {
542- pInputBuffer[iChannelBase + 1 + i * iChannelCount] = bufferFR[i];
543- }
544- } else {
545- for (uint64_t i = 0 ; i < framesPerBuffer; i++) {
546- pInputBuffer[iChannelBase + 1 + i * iChannelCount] = 0 ;
545+ const float * bufferFR = static_cast <const float *>(
546+ pw_filter_get_dsp_buffer (ports.second , framesPerBuffer));
547+ if (bufferFR) {
548+ for (uint64_t i = 0 ; i < framesPerBuffer; i++) {
549+ pInputBuffer[iChannelBase + 1 + i * 2 ] = bufferFR[i];
550+ }
547551 }
548552 }
549553 }
@@ -562,19 +566,30 @@ void PipewireEnumerator::callback(const spa_io_position* pos) {
562566
563567 std::pair<uint32_t *, uint32_t *> ports = m_outputs.value (output);
564568
565- float * bufferFL = static_cast <float *>(
566- pw_filter_get_dsp_buffer (ports.first , framesPerBuffer));
567- if (bufferFL) {
568- for (uint64_t i = 0 ; i < framesPerBuffer; i++) {
569- bufferFL[i] = pOutputBuffer[iChannelBase + i * iChannelCount];
569+ if (iChannelCount == 1 ) {
570+ void * portData = iChannelBase % 2 ? ports.second : ports.first ;
571+ float * buffer = static_cast <float *>(
572+ pw_filter_get_dsp_buffer (portData, framesPerBuffer));
573+ if (buffer) {
574+ for (uint64_t i = 0 ; i < framesPerBuffer; i++) {
575+ buffer[i] = pOutputBuffer[iChannelBase + i * 2 ];
576+ }
577+ }
578+ } else {
579+ float * bufferFL = static_cast <float *>(
580+ pw_filter_get_dsp_buffer (ports.first , framesPerBuffer));
581+ if (bufferFL) {
582+ for (uint64_t i = 0 ; i < framesPerBuffer; i++) {
583+ bufferFL[i] = pOutputBuffer[iChannelBase + i * 2 ];
584+ }
570585 }
571- }
572586
573- float * bufferFR = static_cast <float *>(
574- pw_filter_get_dsp_buffer (ports.second , framesPerBuffer));
575- if (bufferFR) {
576- for (uint64_t i = 0 ; i < framesPerBuffer; i++) {
577- bufferFR[i] = pOutputBuffer[iChannelBase + 1 + i * iChannelCount];
587+ float * bufferFR = static_cast <float *>(
588+ pw_filter_get_dsp_buffer (ports.second , framesPerBuffer));
589+ if (bufferFR) {
590+ for (uint64_t i = 0 ; i < framesPerBuffer; i++) {
591+ bufferFR[i] = pOutputBuffer[iChannelBase + 1 + i * 2 ];
592+ }
578593 }
579594 }
580595 }
0 commit comments