Просмотр исходного кода

Merge pull request #2658 from ogniK5377/QueryAudioDeviceOutputEvent

IAudioDevice::QueryAudioDeviceOutputEvent
bunnei 7 лет назад
Родитель
Сommit
3c7eed16dc
1 измененных файлов с 16 добавлено и 3 удалено
  1. 16 3
      src/core/hle/service/audio/audren_u.cpp

+ 16 - 3
src/core/hle/service/audio/audren_u.cpp

@@ -167,13 +167,12 @@ public:
             {3, &IAudioDevice::GetActiveAudioDeviceName, "GetActiveAudioDeviceName"},
             {3, &IAudioDevice::GetActiveAudioDeviceName, "GetActiveAudioDeviceName"},
             {4, &IAudioDevice::QueryAudioDeviceSystemEvent, "QueryAudioDeviceSystemEvent"},
             {4, &IAudioDevice::QueryAudioDeviceSystemEvent, "QueryAudioDeviceSystemEvent"},
             {5, &IAudioDevice::GetActiveChannelCount, "GetActiveChannelCount"},
             {5, &IAudioDevice::GetActiveChannelCount, "GetActiveChannelCount"},
-            {6, &IAudioDevice::ListAudioDeviceName,
-             "ListAudioDeviceNameAuto"}, // TODO(ogniK): Confirm if autos are identical to non auto
+            {6, &IAudioDevice::ListAudioDeviceName, "ListAudioDeviceNameAuto"},
             {7, &IAudioDevice::SetAudioDeviceOutputVolume, "SetAudioDeviceOutputVolumeAuto"},
             {7, &IAudioDevice::SetAudioDeviceOutputVolume, "SetAudioDeviceOutputVolumeAuto"},
             {8, nullptr, "GetAudioDeviceOutputVolumeAuto"},
             {8, nullptr, "GetAudioDeviceOutputVolumeAuto"},
             {10, &IAudioDevice::GetActiveAudioDeviceName, "GetActiveAudioDeviceNameAuto"},
             {10, &IAudioDevice::GetActiveAudioDeviceName, "GetActiveAudioDeviceNameAuto"},
             {11, nullptr, "QueryAudioDeviceInputEvent"},
             {11, nullptr, "QueryAudioDeviceInputEvent"},
-            {12, nullptr, "QueryAudioDeviceOutputEvent"},
+            {12, &IAudioDevice::QueryAudioDeviceOutputEvent, "QueryAudioDeviceOutputEvent"},
             {13, nullptr, "GetAudioSystemMasterVolumeSetting"},
             {13, nullptr, "GetAudioSystemMasterVolumeSetting"},
         };
         };
         RegisterHandlers(functions);
         RegisterHandlers(functions);
@@ -181,6 +180,11 @@ public:
         auto& kernel = Core::System::GetInstance().Kernel();
         auto& kernel = Core::System::GetInstance().Kernel();
         buffer_event = Kernel::WritableEvent::CreateEventPair(kernel, Kernel::ResetType::Automatic,
         buffer_event = Kernel::WritableEvent::CreateEventPair(kernel, Kernel::ResetType::Automatic,
                                                               "IAudioOutBufferReleasedEvent");
                                                               "IAudioOutBufferReleasedEvent");
+
+        // Should only be signalled when an audio output device has been changed, example: speaker
+        // to headset
+        audio_output_device_switch_event = Kernel::WritableEvent::CreateEventPair(
+            kernel, Kernel::ResetType::Automatic, "IAudioDevice:AudioOutputDeviceSwitchedEvent");
     }
     }
 
 
 private:
 private:
@@ -237,7 +241,16 @@ private:
         rb.Push<u32>(1);
         rb.Push<u32>(1);
     }
     }
 
 
+    void QueryAudioDeviceOutputEvent(Kernel::HLERequestContext& ctx) {
+        LOG_DEBUG(Service_Audio, "called");
+
+        IPC::ResponseBuilder rb{ctx, 2, 1};
+        rb.Push(RESULT_SUCCESS);
+        rb.PushCopyObjects(audio_output_device_switch_event.readable);
+    }
+
     Kernel::EventPair buffer_event;
     Kernel::EventPair buffer_event;
+    Kernel::EventPair audio_output_device_switch_event;
 
 
 }; // namespace Audio
 }; // namespace Audio