Use the proper left and right channels for UHJ output

This commit is contained in:
Chris Robinson
2016-03-10 22:56:44 -08:00
parent d648486bcd
commit 859cc703e7
3 changed files with 14 additions and 7 deletions
+10 -3
View File
@@ -1473,9 +1473,16 @@ ALvoid aluMixData(ALCdevice *device, ALvoid *buffer, ALsizei size)
{
if(device->Uhj_Encoder)
{
/* Encode to stereo-compatible 2-channel UHJ output. */
EncodeUhj2(device->Uhj_Encoder, device->RealOut.Buffer,
device->VirtOut.Buffer, SamplesToDo);
int lidx = GetChannelIdxByName(device->RealOut, FrontLeft);
int ridx = GetChannelIdxByName(device->RealOut, FrontRight);
if(lidx != -1 && ridx != -1)
{
/* Encode to stereo-compatible 2-channel UHJ output. */
EncodeUhj2(device->Uhj_Encoder,
device->RealOut.Buffer[lidx], device->RealOut.Buffer[ridx],
device->VirtOut.Buffer, SamplesToDo
);
}
}
if(device->Bs2b)
{
+3 -3
View File
@@ -36,7 +36,7 @@ static const ALfloat Filter2Coeff[4] = {
* know which is the intended result.
*/
void EncodeUhj2(Uhj2Encoder *enc, ALfloat (*restrict OutBuffer)[BUFFERSIZE], ALfloat (*restrict InSamples)[BUFFERSIZE], ALuint SamplesToDo)
void EncodeUhj2(Uhj2Encoder *enc, ALfloat *restrict LeftOut, ALfloat *restrict RightOut, ALfloat (*restrict InSamples)[BUFFERSIZE], ALuint SamplesToDo)
{
ALuint base, i, c;
@@ -103,10 +103,10 @@ void EncodeUhj2(Uhj2Encoder *enc, ALfloat (*restrict OutBuffer)[BUFFERSIZE], ALf
/* Left = (S + D)/2.0 */
for(i = 0;i < todo;i++)
OutBuffer[0][base + i] += (S[i] + D[i]) * 0.5f;
*(LeftOut++) += (S[i] + D[i]) * 0.5f;
/* Right = (S - D)/2.0 */
for(i = 0;i < todo;i++)
OutBuffer[1][base + i] += (S[i] - D[i]) * 0.5f;
*(RightOut++) += (S[i] - D[i]) * 0.5f;
base += todo;
}
+1 -1
View File
@@ -43,6 +43,6 @@ typedef struct Uhj2Encoder {
/* Encodes a 2-channel UHJ (stereo-compatible) signal from a B-Format input
* signal. */
void EncodeUhj2(Uhj2Encoder *enc, ALfloat (*restrict OutBuffer)[BUFFERSIZE], ALfloat (*restrict InSamples)[BUFFERSIZE], ALuint SamplesToDo);
void EncodeUhj2(Uhj2Encoder *enc, ALfloat *restrict LeftOut, ALfloat *restrict RightOut, ALfloat (*restrict InSamples)[BUFFERSIZE], ALuint SamplesToDo);
#endif /* UHJFILTER_H */