forked from eden-emu/eden
		
	Merge pull request #6526 from bunnei/doom-update
services: Misc. minor changes for latest SDK update.
This commit is contained in:
		
						commit
						432fab7c4f
					
				
					 6 changed files with 61 additions and 9 deletions
				
			
		|  | @ -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
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 bunnei
						bunnei