|
|
@ -255,6 +255,32 @@ void HwOpus::GetWorkBufferSizeEx(Kernel::HLERequestContext& ctx) {
|
|
|
|
GetWorkBufferSize(ctx);
|
|
|
|
GetWorkBufferSize(ctx);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void HwOpus::GetWorkBufferSizeForMultiStreamEx(Kernel::HLERequestContext& ctx) {
|
|
|
|
|
|
|
|
OpusMultiStreamParametersEx param;
|
|
|
|
|
|
|
|
std::memcpy(¶m, ctx.ReadBuffer().data(), ctx.GetReadBufferSize());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const auto sample_rate = param.sample_rate;
|
|
|
|
|
|
|
|
const auto channel_count = param.channel_count;
|
|
|
|
|
|
|
|
const auto number_streams = param.number_streams;
|
|
|
|
|
|
|
|
const auto number_stereo_streams = param.number_stereo_streams;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
LOG_DEBUG(
|
|
|
|
|
|
|
|
Audio,
|
|
|
|
|
|
|
|
"called with sample_rate={}, channel_count={}, number_streams={}, number_stereo_streams={}",
|
|
|
|
|
|
|
|
sample_rate, channel_count, number_streams, number_stereo_streams);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ASSERT_MSG(sample_rate == 48000 || sample_rate == 24000 || sample_rate == 16000 ||
|
|
|
|
|
|
|
|
sample_rate == 12000 || sample_rate == 8000,
|
|
|
|
|
|
|
|
"Invalid sample rate");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const u32 worker_buffer_sz =
|
|
|
|
|
|
|
|
static_cast<u32>(opus_multistream_decoder_get_size(number_streams, number_stereo_streams));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
IPC::ResponseBuilder rb{ctx, 3};
|
|
|
|
|
|
|
|
rb.Push(ResultSuccess);
|
|
|
|
|
|
|
|
rb.Push<u32>(worker_buffer_sz);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void HwOpus::OpenHardwareOpusDecoder(Kernel::HLERequestContext& ctx) {
|
|
|
|
void HwOpus::OpenHardwareOpusDecoder(Kernel::HLERequestContext& ctx) {
|
|
|
|
IPC::RequestParser rp{ctx};
|
|
|
|
IPC::RequestParser rp{ctx};
|
|
|
|
const auto sample_rate = rp.Pop<u32>();
|
|
|
|
const auto sample_rate = rp.Pop<u32>();
|
|
|
@ -335,7 +361,7 @@ HwOpus::HwOpus(Core::System& system_) : ServiceFramework{system_, "hwopus"} {
|
|
|
|
{4, &HwOpus::OpenHardwareOpusDecoderEx, "OpenHardwareOpusDecoderEx"},
|
|
|
|
{4, &HwOpus::OpenHardwareOpusDecoderEx, "OpenHardwareOpusDecoderEx"},
|
|
|
|
{5, &HwOpus::GetWorkBufferSizeEx, "GetWorkBufferSizeEx"},
|
|
|
|
{5, &HwOpus::GetWorkBufferSizeEx, "GetWorkBufferSizeEx"},
|
|
|
|
{6, nullptr, "OpenHardwareOpusDecoderForMultiStreamEx"},
|
|
|
|
{6, nullptr, "OpenHardwareOpusDecoderForMultiStreamEx"},
|
|
|
|
{7, nullptr, "GetWorkBufferSizeForMultiStreamEx"},
|
|
|
|
{7, &HwOpus::GetWorkBufferSizeForMultiStreamEx, "GetWorkBufferSizeForMultiStreamEx"},
|
|
|
|
};
|
|
|
|
};
|
|
|
|
RegisterHandlers(functions);
|
|
|
|
RegisterHandlers(functions);
|
|
|
|
}
|
|
|
|
}
|
|
|
|