mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2026-06-03 06:05:01 -06:00
Lib.Audio3d: Implement sceAudio3dPortGetAttributesSupported based on currently handled attributes (#4450)
* Stub sceAudio3dPortGetAttributesSupported to return no supported attributes * Report supported attributes * Slight fix
This commit is contained in:
parent
112a4561cf
commit
7572c51c0e
@ -694,8 +694,38 @@ s32 PS4_SYSV_ABI sceAudio3dPortFreeState() {
|
||||
return ORBIS_OK;
|
||||
}
|
||||
|
||||
s32 PS4_SYSV_ABI sceAudio3dPortGetAttributesSupported() {
|
||||
LOG_ERROR(Lib_Audio3d, "(STUBBED) called");
|
||||
s32 PS4_SYSV_ABI sceAudio3dPortGetAttributesSupported(OrbisAudio3dPortId port_id,
|
||||
OrbisAudio3dAttributeId* capabilities,
|
||||
u32* num_capabilities) {
|
||||
LOG_DEBUG(Lib_Audio3d, "called");
|
||||
if (!num_capabilities) {
|
||||
return ORBIS_AUDIO3D_ERROR_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
if (!state->ports.contains(port_id)) {
|
||||
return ORBIS_AUDIO3D_ERROR_INVALID_PORT;
|
||||
}
|
||||
|
||||
// We support three attributes, PCM, Gain, and ResetState
|
||||
// In the future, supported attributes should be stored in the port.
|
||||
if (capabilities) {
|
||||
// Writes up to num_capabilities supported capabilities,
|
||||
// then sets num_capabilities to how many were written.
|
||||
u32 caps_to_write = *num_capabilities;
|
||||
if (caps_to_write >= 1) {
|
||||
capabilities[0] = OrbisAudio3dAttributeId::ORBIS_AUDIO3D_ATTRIBUTE_PCM;
|
||||
}
|
||||
if (caps_to_write >= 2) {
|
||||
capabilities[1] = OrbisAudio3dAttributeId::ORBIS_AUDIO3D_ATTRIBUTE_GAIN;
|
||||
}
|
||||
if (caps_to_write >= 3) {
|
||||
capabilities[2] = OrbisAudio3dAttributeId::ORBIS_AUDIO3D_ATTRIBUTE_RESET_STATE;
|
||||
}
|
||||
*num_capabilities = std::min<u32>(caps_to_write, 3);
|
||||
} else {
|
||||
// If capabilities is null, then just report the number of supported capabilities.
|
||||
*num_capabilities = 3;
|
||||
}
|
||||
return ORBIS_OK;
|
||||
}
|
||||
|
||||
|
||||
@ -158,7 +158,9 @@ s32 PS4_SYSV_ABI sceAudio3dPortCreate();
|
||||
s32 PS4_SYSV_ABI sceAudio3dPortDestroy();
|
||||
s32 PS4_SYSV_ABI sceAudio3dPortFlush(OrbisAudio3dPortId port_id);
|
||||
s32 PS4_SYSV_ABI sceAudio3dPortFreeState();
|
||||
s32 PS4_SYSV_ABI sceAudio3dPortGetAttributesSupported();
|
||||
s32 PS4_SYSV_ABI sceAudio3dPortGetAttributesSupported(OrbisAudio3dPortId port_id,
|
||||
OrbisAudio3dAttributeId* capabilities,
|
||||
u32* num_capabilities);
|
||||
s32 PS4_SYSV_ABI sceAudio3dPortGetList();
|
||||
s32 PS4_SYSV_ABI sceAudio3dPortGetParameters();
|
||||
s32 PS4_SYSV_ABI sceAudio3dPortGetQueueLevel(OrbisAudio3dPortId port_id, u32* queue_level,
|
||||
|
||||
@ -694,8 +694,38 @@ s32 PS4_SYSV_ABI sceAudio3dPortFreeState() {
|
||||
return ORBIS_OK;
|
||||
}
|
||||
|
||||
s32 PS4_SYSV_ABI sceAudio3dPortGetAttributesSupported() {
|
||||
LOG_ERROR(Lib_Audio3d, "(STUBBED) called");
|
||||
s32 PS4_SYSV_ABI sceAudio3dPortGetAttributesSupported(OrbisAudio3dPortId port_id,
|
||||
OrbisAudio3dAttributeId* capabilities,
|
||||
u32* num_capabilities) {
|
||||
LOG_DEBUG(Lib_Audio3d, "called");
|
||||
if (!num_capabilities) {
|
||||
return ORBIS_AUDIO3D_ERROR_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
if (!state->ports.contains(port_id)) {
|
||||
return ORBIS_AUDIO3D_ERROR_INVALID_PORT;
|
||||
}
|
||||
|
||||
// We support three attributes, PCM, Gain, and ResetState
|
||||
// In the future, supported attributes should be stored in the port.
|
||||
if (capabilities) {
|
||||
// Writes up to num_capabilities supported capabilities,
|
||||
// then sets num_capabilities to how many were written.
|
||||
u32 caps_to_write = *num_capabilities;
|
||||
if (caps_to_write >= 1) {
|
||||
capabilities[0] = OrbisAudio3dAttributeId::ORBIS_AUDIO3D_ATTRIBUTE_PCM;
|
||||
}
|
||||
if (caps_to_write >= 2) {
|
||||
capabilities[1] = OrbisAudio3dAttributeId::ORBIS_AUDIO3D_ATTRIBUTE_GAIN;
|
||||
}
|
||||
if (caps_to_write >= 3) {
|
||||
capabilities[2] = OrbisAudio3dAttributeId::ORBIS_AUDIO3D_ATTRIBUTE_RESET_STATE;
|
||||
}
|
||||
*num_capabilities = std::min<u32>(caps_to_write, 3);
|
||||
} else {
|
||||
// If capabilities is null, then just report the number of supported capabilities.
|
||||
*num_capabilities = 3;
|
||||
}
|
||||
return ORBIS_OK;
|
||||
}
|
||||
|
||||
|
||||
@ -156,7 +156,9 @@ s32 PS4_SYSV_ABI sceAudio3dPortCreate();
|
||||
s32 PS4_SYSV_ABI sceAudio3dPortDestroy();
|
||||
s32 PS4_SYSV_ABI sceAudio3dPortFlush(OrbisAudio3dPortId port_id);
|
||||
s32 PS4_SYSV_ABI sceAudio3dPortFreeState();
|
||||
s32 PS4_SYSV_ABI sceAudio3dPortGetAttributesSupported();
|
||||
s32 PS4_SYSV_ABI sceAudio3dPortGetAttributesSupported(OrbisAudio3dPortId port_id,
|
||||
OrbisAudio3dAttributeId* capabilities,
|
||||
u32* num_capabilities);
|
||||
s32 PS4_SYSV_ABI sceAudio3dPortGetList();
|
||||
s32 PS4_SYSV_ABI sceAudio3dPortGetParameters();
|
||||
s32 PS4_SYSV_ABI sceAudio3dPortGetQueueLevel(OrbisAudio3dPortId port_id, u32* queue_level,
|
||||
|
||||
Loading…
Reference in New Issue
Block a user