mirror of
https://github.com/RPCS3/rpcs3.git
synced 2024-11-16 23:17:29 +00:00
cellMic: Fix CELLMIC_DEVATTR_CHANVOL handling
The microphone index given in `arg1` is 1-indexed, so we have to subtract 1 from the index to access the proper value. This wasn't caught up before since we were doing direct access of the array instead of using `::at32` which wouldn't check that the value is within bounds. This allows the original SingStar game to boot up again, as it would otherwise crash then trying to set the volume to the second channel due to the index being out of bounds.
This commit is contained in:
parent
c8ad075372
commit
ba3d16b48b
@ -863,9 +863,9 @@ error_code cellMicGetDeviceAttr(s32 dev_num, CellMicDeviceAttr deviceAttributes,
|
||||
switch (deviceAttributes)
|
||||
{
|
||||
case CELLMIC_DEVATTR_CHANVOL:
|
||||
if (*arg1 > 2 || !arg2)
|
||||
if (*arg1 == 0 || *arg1 > 2 || !arg2)
|
||||
return CELL_MICIN_ERROR_PARAM;
|
||||
*arg2 = ::at32(device.attr_chanvol, *arg1);
|
||||
*arg2 = ::at32(device.attr_chanvol, *arg1 - 1);
|
||||
break;
|
||||
case CELLMIC_DEVATTR_LED: *arg1 = device.attr_led; break;
|
||||
case CELLMIC_DEVATTR_GAIN: *arg1 = device.attr_gain; break;
|
||||
@ -897,9 +897,9 @@ error_code cellMicSetDeviceAttr(s32 dev_num, CellMicDeviceAttr deviceAttributes,
|
||||
{
|
||||
case CELLMIC_DEVATTR_CHANVOL:
|
||||
// Used by SingStar to set the volume of each mic
|
||||
if (arg1 > 2)
|
||||
if (arg1 == 0 || arg1 > 2)
|
||||
return CELL_MICIN_ERROR_PARAM;
|
||||
::at32(device.attr_chanvol, arg1) = arg2;
|
||||
::at32(device.attr_chanvol, arg1 - 1) = arg2;
|
||||
break;
|
||||
case CELLMIC_DEVATTR_LED: device.attr_led = arg1; break;
|
||||
case CELLMIC_DEVATTR_GAIN: device.attr_gain = arg1; break;
|
||||
|
Loading…
Reference in New Issue
Block a user