mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-03-29 22:20:48 +00:00
cellMic: Handle value 0 on CELLMIC_DEVATTR_CHANVOL
If arg1 is zero, all channels of the device are affected.
This commit is contained in:
parent
ba3d16b48b
commit
9db68e7d39
@ -8,6 +8,8 @@
|
|||||||
#include <Emu/IdManager.h>
|
#include <Emu/IdManager.h>
|
||||||
#include <Emu/Cell/lv2/sys_event.h>
|
#include <Emu/Cell/lv2/sys_event.h>
|
||||||
|
|
||||||
|
#include <numeric>
|
||||||
|
|
||||||
LOG_CHANNEL(cellMic);
|
LOG_CHANNEL(cellMic);
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
@ -863,9 +865,19 @@ error_code cellMicGetDeviceAttr(s32 dev_num, CellMicDeviceAttr deviceAttributes,
|
|||||||
switch (deviceAttributes)
|
switch (deviceAttributes)
|
||||||
{
|
{
|
||||||
case CELLMIC_DEVATTR_CHANVOL:
|
case CELLMIC_DEVATTR_CHANVOL:
|
||||||
if (*arg1 == 0 || *arg1 > 2 || !arg2)
|
if (*arg1 > 2 || !arg2)
|
||||||
return CELL_MICIN_ERROR_PARAM;
|
return CELL_MICIN_ERROR_PARAM;
|
||||||
*arg2 = ::at32(device.attr_chanvol, *arg1 - 1);
|
|
||||||
|
if (*arg1 == 0)
|
||||||
|
{
|
||||||
|
// Calculate average volume of the channels
|
||||||
|
*arg2 = std::accumulate(device.attr_chanvol.begin(), device.attr_chanvol.end(), 0) / device.attr_chanvol.size();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*arg2 = ::at32(device.attr_chanvol, *arg1 - 1);
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case CELLMIC_DEVATTR_LED: *arg1 = device.attr_led; break;
|
case CELLMIC_DEVATTR_LED: *arg1 = device.attr_led; break;
|
||||||
case CELLMIC_DEVATTR_GAIN: *arg1 = device.attr_gain; break;
|
case CELLMIC_DEVATTR_GAIN: *arg1 = device.attr_gain; break;
|
||||||
@ -897,9 +909,18 @@ error_code cellMicSetDeviceAttr(s32 dev_num, CellMicDeviceAttr deviceAttributes,
|
|||||||
{
|
{
|
||||||
case CELLMIC_DEVATTR_CHANVOL:
|
case CELLMIC_DEVATTR_CHANVOL:
|
||||||
// Used by SingStar to set the volume of each mic
|
// Used by SingStar to set the volume of each mic
|
||||||
if (arg1 == 0 || arg1 > 2)
|
if (arg1 > 2)
|
||||||
return CELL_MICIN_ERROR_PARAM;
|
return CELL_MICIN_ERROR_PARAM;
|
||||||
::at32(device.attr_chanvol, arg1 - 1) = arg2;
|
|
||||||
|
if (arg1 == 0)
|
||||||
|
{
|
||||||
|
device.attr_chanvol.fill(arg2);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
::at32(device.attr_chanvol, arg1 - 1) = arg2;
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case CELLMIC_DEVATTR_LED: device.attr_led = arg1; break;
|
case CELLMIC_DEVATTR_LED: device.attr_led = arg1; break;
|
||||||
case CELLMIC_DEVATTR_GAIN: device.attr_gain = arg1; break;
|
case CELLMIC_DEVATTR_GAIN: device.attr_gain = arg1; break;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user