Merge pull request #6526 from bunnei/doom-update
services: Misc. minor changes for latest SDK update.
This commit is contained in:
		@@ -15,7 +15,7 @@ constexpr ResultCode ERR_INVALID_PARAMETERS{ErrorModule::Audio, 41};
 | 
			
		||||
constexpr ResultCode ERR_SPLITTER_SORT_FAILED{ErrorModule::Audio, 43};
 | 
			
		||||
} // namespace Audren
 | 
			
		||||
 | 
			
		||||
constexpr u32_le CURRENT_PROCESS_REVISION = Common::MakeMagic('R', 'E', 'V', '8');
 | 
			
		||||
constexpr u32_le CURRENT_PROCESS_REVISION = Common::MakeMagic('R', 'E', 'V', '9');
 | 
			
		||||
constexpr std::size_t MAX_MIX_BUFFERS = 24;
 | 
			
		||||
constexpr std::size_t MAX_BIQUAD_FILTERS = 2;
 | 
			
		||||
constexpr std::size_t MAX_CHANNEL_COUNT = 6;
 | 
			
		||||
 
 | 
			
		||||
@@ -345,8 +345,12 @@ public:
 | 
			
		||||
    explicit RequestParser(u32* command_buffer) : RequestHelperBase(command_buffer) {}
 | 
			
		||||
 | 
			
		||||
    explicit RequestParser(Kernel::HLERequestContext& ctx) : RequestHelperBase(ctx) {
 | 
			
		||||
        ASSERT_MSG(ctx.GetDataPayloadOffset(), "context is incomplete");
 | 
			
		||||
        Skip(ctx.GetDataPayloadOffset(), false);
 | 
			
		||||
        // TIPC does not have data payload offset
 | 
			
		||||
        if (!ctx.IsTipc()) {
 | 
			
		||||
            ASSERT_MSG(ctx.GetDataPayloadOffset(), "context is incomplete");
 | 
			
		||||
            Skip(ctx.GetDataPayloadOffset(), false);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Skip the u64 command id, it's already stored in the context
 | 
			
		||||
        static constexpr u32 CommandIdSize = 2;
 | 
			
		||||
        Skip(CommandIdSize, false);
 | 
			
		||||
 
 | 
			
		||||
@@ -117,7 +117,7 @@ AOC_U::AOC_U(Core::System& system_)
 | 
			
		||||
        {7, &AOC_U::PrepareAddOnContent, "PrepareAddOnContent"},
 | 
			
		||||
        {8, &AOC_U::GetAddOnContentListChangedEvent, "GetAddOnContentListChangedEvent"},
 | 
			
		||||
        {9, nullptr, "GetAddOnContentLostErrorCode"},
 | 
			
		||||
        {10, nullptr, "GetAddOnContentListChangedEventWithProcessId"},
 | 
			
		||||
        {10, &AOC_U::GetAddOnContentListChangedEventWithProcessId, "GetAddOnContentListChangedEventWithProcessId"},
 | 
			
		||||
        {100, &AOC_U::CreateEcPurchasedEventManager, "CreateEcPurchasedEventManager"},
 | 
			
		||||
        {101, &AOC_U::CreatePermanentEcPurchasedEventManager, "CreatePermanentEcPurchasedEventManager"},
 | 
			
		||||
        {110, nullptr, "CreateContentsServiceManager"},
 | 
			
		||||
@@ -257,6 +257,14 @@ void AOC_U::GetAddOnContentListChangedEvent(Kernel::HLERequestContext& ctx) {
 | 
			
		||||
    rb.PushCopyObjects(aoc_change_event.GetReadableEvent());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void AOC_U::GetAddOnContentListChangedEventWithProcessId(Kernel::HLERequestContext& ctx) {
 | 
			
		||||
    LOG_WARNING(Service_AOC, "(STUBBED) called");
 | 
			
		||||
 | 
			
		||||
    IPC::ResponseBuilder rb{ctx, 2, 1};
 | 
			
		||||
    rb.Push(ResultSuccess);
 | 
			
		||||
    rb.PushCopyObjects(aoc_change_event.GetReadableEvent());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void AOC_U::CreateEcPurchasedEventManager(Kernel::HLERequestContext& ctx) {
 | 
			
		||||
    LOG_WARNING(Service_AOC, "(STUBBED) called");
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -28,6 +28,7 @@ private:
 | 
			
		||||
    void GetAddOnContentBaseId(Kernel::HLERequestContext& ctx);
 | 
			
		||||
    void PrepareAddOnContent(Kernel::HLERequestContext& ctx);
 | 
			
		||||
    void GetAddOnContentListChangedEvent(Kernel::HLERequestContext& ctx);
 | 
			
		||||
    void GetAddOnContentListChangedEventWithProcessId(Kernel::HLERequestContext& ctx);
 | 
			
		||||
    void CreateEcPurchasedEventManager(Kernel::HLERequestContext& ctx);
 | 
			
		||||
    void CreatePermanentEcPurchasedEventManager(Kernel::HLERequestContext& ctx);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -253,7 +253,11 @@ void HwOpus::GetWorkBufferSize(Kernel::HLERequestContext& ctx) {
 | 
			
		||||
    rb.Push<u32>(worker_buffer_sz);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void HwOpus::OpenOpusDecoder(Kernel::HLERequestContext& ctx) {
 | 
			
		||||
void HwOpus::GetWorkBufferSizeEx(Kernel::HLERequestContext& ctx) {
 | 
			
		||||
    GetWorkBufferSize(ctx);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void HwOpus::OpenHardwareOpusDecoder(Kernel::HLERequestContext& ctx) {
 | 
			
		||||
    IPC::RequestParser rp{ctx};
 | 
			
		||||
    const auto sample_rate = rp.Pop<u32>();
 | 
			
		||||
    const auto channel_count = rp.Pop<u32>();
 | 
			
		||||
@@ -291,14 +295,47 @@ void HwOpus::OpenOpusDecoder(Kernel::HLERequestContext& ctx) {
 | 
			
		||||
        system, OpusDecoderState{std::move(decoder), sample_rate, channel_count});
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void HwOpus::OpenHardwareOpusDecoderEx(Kernel::HLERequestContext& ctx) {
 | 
			
		||||
    IPC::RequestParser rp{ctx};
 | 
			
		||||
    const auto sample_rate = rp.Pop<u32>();
 | 
			
		||||
    const auto channel_count = rp.Pop<u32>();
 | 
			
		||||
 | 
			
		||||
    LOG_CRITICAL(Audio, "called sample_rate={}, channel_count={}", sample_rate, channel_count);
 | 
			
		||||
 | 
			
		||||
    ASSERT_MSG(sample_rate == 48000 || sample_rate == 24000 || sample_rate == 16000 ||
 | 
			
		||||
                   sample_rate == 12000 || sample_rate == 8000,
 | 
			
		||||
               "Invalid sample rate");
 | 
			
		||||
    ASSERT_MSG(channel_count == 1 || channel_count == 2, "Invalid channel count");
 | 
			
		||||
 | 
			
		||||
    const int num_stereo_streams = channel_count == 2 ? 1 : 0;
 | 
			
		||||
    const auto mapping_table = CreateMappingTable(channel_count);
 | 
			
		||||
 | 
			
		||||
    int error = 0;
 | 
			
		||||
    OpusDecoderPtr decoder{
 | 
			
		||||
        opus_multistream_decoder_create(sample_rate, static_cast<int>(channel_count), 1,
 | 
			
		||||
                                        num_stereo_streams, mapping_table.data(), &error)};
 | 
			
		||||
    if (error != OPUS_OK || decoder == nullptr) {
 | 
			
		||||
        LOG_ERROR(Audio, "Failed to create Opus decoder (error={}).", error);
 | 
			
		||||
        IPC::ResponseBuilder rb{ctx, 2};
 | 
			
		||||
        // TODO(ogniK): Use correct error code
 | 
			
		||||
        rb.Push(ResultUnknown);
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    IPC::ResponseBuilder rb{ctx, 2, 0, 1};
 | 
			
		||||
    rb.Push(ResultSuccess);
 | 
			
		||||
    rb.PushIpcInterface<IHardwareOpusDecoderManager>(
 | 
			
		||||
        system, OpusDecoderState{std::move(decoder), sample_rate, channel_count});
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
HwOpus::HwOpus(Core::System& system_) : ServiceFramework{system_, "hwopus"} {
 | 
			
		||||
    static const FunctionInfo functions[] = {
 | 
			
		||||
        {0, &HwOpus::OpenOpusDecoder, "OpenOpusDecoder"},
 | 
			
		||||
        {0, &HwOpus::OpenHardwareOpusDecoder, "OpenHardwareOpusDecoder"},
 | 
			
		||||
        {1, &HwOpus::GetWorkBufferSize, "GetWorkBufferSize"},
 | 
			
		||||
        {2, nullptr, "OpenOpusDecoderForMultiStream"},
 | 
			
		||||
        {3, nullptr, "GetWorkBufferSizeForMultiStream"},
 | 
			
		||||
        {4, nullptr, "OpenHardwareOpusDecoderEx"},
 | 
			
		||||
        {5, nullptr, "GetWorkBufferSizeEx"},
 | 
			
		||||
        {4, &HwOpus::OpenHardwareOpusDecoderEx, "OpenHardwareOpusDecoderEx"},
 | 
			
		||||
        {5, &HwOpus::GetWorkBufferSizeEx, "GetWorkBufferSizeEx"},
 | 
			
		||||
        {6, nullptr, "OpenHardwareOpusDecoderForMultiStreamEx"},
 | 
			
		||||
        {7, nullptr, "GetWorkBufferSizeForMultiStreamEx"},
 | 
			
		||||
    };
 | 
			
		||||
 
 | 
			
		||||
@@ -18,8 +18,10 @@ public:
 | 
			
		||||
    ~HwOpus() override;
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    void OpenOpusDecoder(Kernel::HLERequestContext& ctx);
 | 
			
		||||
    void OpenHardwareOpusDecoder(Kernel::HLERequestContext& ctx);
 | 
			
		||||
    void OpenHardwareOpusDecoderEx(Kernel::HLERequestContext& ctx);
 | 
			
		||||
    void GetWorkBufferSize(Kernel::HLERequestContext& ctx);
 | 
			
		||||
    void GetWorkBufferSizeEx(Kernel::HLERequestContext& ctx);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
} // namespace Service::Audio
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user