mirror of
https://git.eden-emu.dev/eden-emu/eden.git
synced 2026-09-13 23:12:59 +00:00
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 2f94f7708b |
@@ -261,6 +261,7 @@ SinkStream* CubebSink::AcquireSinkStream(Core::System& system, u32 system_channe
|
||||
system_channels = system_channels_;
|
||||
SinkStreamPtr& stream = sink_streams.emplace_back(std::make_unique<CubebSinkStream>(
|
||||
ctx, device_channels, system_channels, output_device, input_device, name, type, system));
|
||||
stream->SetDeviceVolume(device_volume);
|
||||
|
||||
return stream.get();
|
||||
}
|
||||
@@ -280,14 +281,11 @@ void CubebSink::CloseStreams() {
|
||||
}
|
||||
|
||||
f32 CubebSink::GetDeviceVolume() const {
|
||||
if (sink_streams.empty()) {
|
||||
return 1.0f;
|
||||
}
|
||||
|
||||
return sink_streams[0]->GetDeviceVolume();
|
||||
return device_volume;
|
||||
}
|
||||
|
||||
void CubebSink::SetDeviceVolume(f32 volume) {
|
||||
device_volume = volume;
|
||||
for (auto& stream : sink_streams) {
|
||||
stream->SetDeviceVolume(volume);
|
||||
}
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
@@ -38,6 +41,7 @@ public:
|
||||
StreamType type) override {
|
||||
if (null_sink == nullptr) {
|
||||
null_sink = std::make_unique<NullSinkStreamImpl>(system, type);
|
||||
null_sink->SetDeviceVolume(device_volume);
|
||||
}
|
||||
return null_sink.get();
|
||||
}
|
||||
@@ -45,9 +49,14 @@ public:
|
||||
void CloseStream(SinkStream*) override {}
|
||||
void CloseStreams() override {}
|
||||
f32 GetDeviceVolume() const override {
|
||||
return 1.0f;
|
||||
return device_volume;
|
||||
}
|
||||
void SetDeviceVolume(f32 volume) override {
|
||||
device_volume = volume;
|
||||
if (null_sink != nullptr) {
|
||||
null_sink->SetDeviceVolume(volume);
|
||||
}
|
||||
}
|
||||
void SetDeviceVolume(f32 volume) override {}
|
||||
void SetSystemVolume(f32 volume) override {}
|
||||
|
||||
private:
|
||||
|
||||
@@ -246,6 +246,7 @@ SinkStream* SDLSink::AcquireSinkStream(Core::System& system, u32 system_channels
|
||||
system_channels = system_channels_;
|
||||
SinkStreamPtr& stream = sink_streams.emplace_back(std::make_unique<SDLSinkStream>(
|
||||
device_channels, system_channels, output_device, input_device, type, system));
|
||||
stream->SetDeviceVolume(device_volume);
|
||||
return stream.get();
|
||||
}
|
||||
|
||||
@@ -264,14 +265,11 @@ void SDLSink::CloseStreams() {
|
||||
}
|
||||
|
||||
f32 SDLSink::GetDeviceVolume() const {
|
||||
if (sink_streams.empty()) {
|
||||
return 1.0f;
|
||||
}
|
||||
|
||||
return sink_streams[0]->GetDeviceVolume();
|
||||
return device_volume;
|
||||
}
|
||||
|
||||
void SDLSink::SetDeviceVolume(f32 volume) {
|
||||
device_volume = volume;
|
||||
for (auto& stream : sink_streams) {
|
||||
stream->SetDeviceVolume(volume);
|
||||
}
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
@@ -96,6 +99,8 @@ public:
|
||||
}
|
||||
|
||||
protected:
|
||||
/// Master volume, persists stream lifetimes
|
||||
f32 device_volume{1.0f};
|
||||
/// Number of device channels supported by the hardware
|
||||
u32 device_channels{2};
|
||||
/// Number of channels the game is sending
|
||||
|
||||
@@ -243,7 +243,7 @@ constexpr RequestLayout GetReplyOutLayout(bool is_domain) {
|
||||
return is_domain ? GetDomainReplyOutLayout<MethodArguments>() : GetNonDomainReplyOutLayout<MethodArguments>();
|
||||
}
|
||||
|
||||
using OutTemporaryBuffers = std::array<boost::container::small_vector<u8, 128>, 3>;
|
||||
using OutTemporaryBuffers = std::array<Common::ScratchBuffer<u8>, 3>;
|
||||
|
||||
template <typename MethodArguments, typename CallArguments, size_t PrevAlign = 1, size_t DataOffset = 0, size_t HandleIndex = 0, size_t InBufferIndex = 0, size_t OutBufferIndex = 0, bool RawDataFinished = false, size_t ArgIndex = 0>
|
||||
void ReadInArgument(bool is_domain, CallArguments& args, const u8* raw_data, HLERequestContext& ctx, OutTemporaryBuffers& temp) {
|
||||
@@ -345,9 +345,9 @@ void ReadInArgument(bool is_domain, CallArguments& args, const u8* raw_data, HLE
|
||||
// Set up scratch buffer.
|
||||
auto& buffer = temp[OutBufferIndex];
|
||||
if (ctx.CanWriteBuffer(OutBufferIndex)) {
|
||||
buffer.resize(ctx.GetWriteBufferSize(OutBufferIndex));
|
||||
buffer.resize_destructive(ctx.GetWriteBufferSize(OutBufferIndex));
|
||||
} else {
|
||||
buffer.resize(0);
|
||||
buffer.resize_destructive(0);
|
||||
}
|
||||
|
||||
ElementType* ptr = (ElementType*) buffer.data();
|
||||
@@ -456,7 +456,7 @@ void CmifReplyWrapImpl(HLERequestContext& ctx, T& t, Result (T::*f)(A...)) {
|
||||
static_assert(ConstIfReference<A...>(), "Arguments taken by reference must be const");
|
||||
using MethodArguments = std::tuple<std::remove_cvref_t<A>...>;
|
||||
|
||||
OutTemporaryBuffers buffers; //don't zero init
|
||||
OutTemporaryBuffers buffers{};
|
||||
auto call_arguments = std::tuple<typename UnwrapArg<A>::Type...>();
|
||||
|
||||
// Read inputs.
|
||||
|
||||
Reference in New Issue
Block a user