aboutsummaryrefslogtreecommitdiff
path: root/emulators/rpcs3/files/patch-cubeb-revert
diff options
context:
space:
mode:
Diffstat (limited to 'emulators/rpcs3/files/patch-cubeb-revert')
-rw-r--r--emulators/rpcs3/files/patch-cubeb-revert112
1 files changed, 112 insertions, 0 deletions
diff --git a/emulators/rpcs3/files/patch-cubeb-revert b/emulators/rpcs3/files/patch-cubeb-revert
new file mode 100644
index 000000000000..c941396a31ea
--- /dev/null
+++ b/emulators/rpcs3/files/patch-cubeb-revert
@@ -0,0 +1,112 @@
+Revert https://github.com/mozilla/cubeb/commit/0846b39f1fdc
+until https://github.com/mozilla/cubeb/issues/746
+
+--- 3rdparty/cubeb/cubeb/src/cubeb_sndio.c.orig 2025-09-16 23:01:49 UTC
++++ 3rdparty/cubeb/cubeb/src/cubeb_sndio.c
+@@ -68,7 +68,7 @@ struct cubeb_stream {
+ struct sio_hdl * hdl; /* link us to sndio */
+ int mode; /* bitmap of SIO_{PLAY,REC} */
+ int active; /* cubec_start() called */
+- int conv; /* need float->s24 conversion */
++ int conv; /* need float->s16 conversion */
+ unsigned char * rbuf; /* rec data consumed from here */
+ unsigned char * pbuf; /* play data is prepared here */
+ unsigned int nfr; /* number of frames in ibuf and obuf */
+@@ -99,33 +99,33 @@ static void
+ }
+
+ static void
+-float_to_s24(void * ptr, long nsamp, float volume)
++float_to_s16(void * ptr, long nsamp, float volume)
+ {
+- int32_t * dst = ptr;
++ int16_t * dst = ptr;
+ float * src = ptr;
+- float mult = volume * 8388608;
++ float mult = volume * 32768;
+ int s;
+
+ while (nsamp-- > 0) {
+ s = lrintf(*(src++) * mult);
+- if (s < -8388608)
+- s = -8388608;
+- else if (s > 8388607)
+- s = 8388607;
++ if (s < -32768)
++ s = -32768;
++ else if (s > 32767)
++ s = 32767;
+ *(dst++) = s;
+ }
+ }
+
+ static void
+-s24_to_float(void * ptr, long nsamp)
++s16_to_float(void * ptr, long nsamp)
+ {
+- int32_t * src = ptr;
++ int16_t * src = ptr;
+ float * dst = ptr;
+
+ src += nsamp;
+ dst += nsamp;
+ while (nsamp-- > 0)
+- *(--dst) = (1. / 8388608) * *(--src);
++ *(--dst) = (1. / 32768) * *(--src);
+ }
+
+ static const char *
+@@ -213,7 +213,7 @@ sndio_mainloop(void * arg)
+ }
+
+ if ((s->mode & SIO_REC) && s->conv)
+- s24_to_float(s->rbuf, s->nfr * s->rchan);
++ s16_to_float(s->rbuf, s->nfr * s->rchan);
+
+ /* invoke call-back, it returns less that s->nfr if done */
+ pthread_mutex_unlock(&s->mtx);
+@@ -244,7 +244,7 @@ sndio_mainloop(void * arg)
+
+ if (s->mode & SIO_PLAY) {
+ if (s->conv)
+- float_to_s24(s->pbuf, nfr * s->pchan, s->volume);
++ float_to_s16(s->pbuf, nfr * s->pchan, s->volume);
+ else
+ s16_setvol(s->pbuf, nfr * s->pchan, s->volume);
+ }
+@@ -429,25 +429,21 @@ sndio_stream_init(cubeb * context, cubeb_stream ** str
+ }
+ WRAP(sio_initpar)(&wpar);
+ wpar.sig = 1;
++ wpar.bits = 16;
+ switch (format) {
+ case CUBEB_SAMPLE_S16LE:
+ wpar.le = 1;
+- wpar.bits = 16;
+ break;
+ case CUBEB_SAMPLE_S16BE:
+ wpar.le = 0;
+- wpar.bits = 16;
+ break;
+ case CUBEB_SAMPLE_FLOAT32NE:
+ wpar.le = SIO_LE_NATIVE;
+- wpar.bits = 24;
+- wpar.msb = 0;
+ break;
+ default:
+ DPR("sndio_stream_init() unsupported format\n");
+ goto err;
+ }
+- wpar.bps = SIO_BPS(wpar.bits);
+ wpar.rate = rate;
+ if (s->mode & SIO_REC)
+ wpar.rchan = input_stream_params->channels;
+@@ -459,8 +455,6 @@ sndio_stream_init(cubeb * context, cubeb_stream ** str
+ goto err;
+ }
+ if (rpar.bits != wpar.bits || rpar.le != wpar.le || rpar.sig != wpar.sig ||
+- rpar.bps != wpar.bps ||
+- (wpar.bits < 8 * wpar.bps && rpar.msb != wpar.msb) ||
+ rpar.rate != wpar.rate ||
+ ((s->mode & SIO_REC) && rpar.rchan != wpar.rchan) ||
+ ((s->mode & SIO_PLAY) && rpar.pchan != wpar.pchan)) {