Skip to content

Commit a630f28

Browse files
authored
Get default audio devices (#50)
* Get default audio devices on Windows * Get default audio devices on macOS * Get default audio devices on Linux
1 parent 674b6af commit a630f28

File tree

12 files changed

+184
-238
lines changed

12 files changed

+184
-238
lines changed

webrtc-jni/src/main/cpp/include/JNI_MediaDevices.h

+22-6
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

webrtc-jni/src/main/cpp/include/media/audio/AudioDeviceManager.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@ namespace jni
3737
AudioDeviceManager();
3838
virtual ~AudioDeviceManager() {};
3939

40-
AudioDevicePtr getDefaultAudioCaptureDevice();
41-
AudioDevicePtr getDefaultAudioPlaybackDevice();
40+
virtual AudioDevicePtr getDefaultAudioCaptureDevice();
41+
virtual AudioDevicePtr getDefaultAudioPlaybackDevice();
4242

4343
virtual std::set<AudioDevicePtr> getAudioCaptureDevices() = 0;
4444
virtual std::set<AudioDevicePtr> getAudioPlaybackDevices() = 0;

webrtc-jni/src/main/cpp/include/media/audio/linux/AlsaAudioDeviceManager.h

-44
This file was deleted.

webrtc-jni/src/main/cpp/include/media/audio/linux/PulseAudioDeviceManager.h

+6-2
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ namespace jni
3232
PulseAudioDeviceManager();
3333
~PulseAudioDeviceManager();
3434

35-
AudioDevicePtr getDefaultAudioCaptureDevice();
36-
AudioDevicePtr getDefaultAudioPlaybackDevice();
35+
AudioDevicePtr getDefaultAudioCaptureDevice() override;
36+
AudioDevicePtr getDefaultAudioPlaybackDevice() override;
3737

3838
std::set<AudioDevicePtr> getAudioCaptureDevices() override;
3939
std::set<AudioDevicePtr> getAudioPlaybackDevices() override;
@@ -47,8 +47,10 @@ namespace jni
4747
static void stateCallback(pa_context * ctx, void * userdata);
4848
static void serverInfoCallback(pa_context * ctx, const pa_server_info * info, void * userdata);
4949
static void subscribeCallback(pa_context * ctx, pa_subscription_event_type_t t, uint32_t idx, void * userdata);
50+
static void getSourceInfoCallback(pa_context * ctx, const pa_source_info * info, int last, void * userdata);
5051
static void getSourceCallback(pa_context * ctx, const pa_source_info * info, int last, void * userdata);
5152
static void newSourceCallback(pa_context * ctx, const pa_source_info * info, int last, void * userdata);
53+
static void getSinkInfoCallback(pa_context * ctx, const pa_sink_info * info, int last, void * userdata);
5254
static void getSinkCallback(pa_context * ctx, const pa_sink_info * info, int last, void * userdata);
5355
static void newSinkCallback(pa_context * ctx, const pa_sink_info * info, int last, void * userdata);
5456

@@ -60,7 +62,9 @@ namespace jni
6062
pa_context * context;
6163

6264
std::string defaultCaptureName;
65+
std::string defaultCaptureDescName;
6366
std::string defaultPlaybackName;
67+
std::string defaultPlaybackDescName;
6468

6569
std::unordered_map<uint32_t, AudioDevicePtr> deviceMap;
6670
};

webrtc-jni/src/main/cpp/include/media/audio/macos/CoreAudioDeviceManager.h

+4
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,15 @@ namespace jni
3434
std::set<AudioDevicePtr> getAudioCaptureDevices() override;
3535
std::set<AudioDevicePtr> getAudioPlaybackDevices() override;
3636

37+
AudioDevicePtr getDefaultAudioCaptureDevice() override;
38+
AudioDevicePtr getDefaultAudioPlaybackDevice() override;
39+
3740
private:
3841
void enumerateDevices(const AudioObjectPropertyScope & scope);
3942
void onDevicesChanged();
4043
void onDefaultDeviceChanged(const AudioObjectPropertyScope & scope, DeviceList<AudioDevicePtr> & devices, const AudioDevicePtr & device);
4144
void checkDeviceGone(DeviceList<AudioDevicePtr> & devices, AudioDeviceID * devIDs, const int numDevIDs, const AudioObjectPropertyScope & scope);
45+
AudioDevicePtr createDefaultAudioDevice(const AudioObjectPropertyScope & scope);
4246
AudioDevicePtr createAudioDevice(const AudioDeviceID & deviceID, const AudioObjectPropertyScope & scope);
4347
bool insertAudioDevice(const AudioDevicePtr & device, const AudioObjectPropertyScope & scope);
4448
int getChannelCount(const AudioDeviceID & deviceID, const AudioObjectPropertyScope & scope);

webrtc-jni/src/main/cpp/include/media/audio/windows/WindowsAudioDeviceManager.h

+4
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,14 @@ namespace jni
3636
std::set<AudioDevicePtr> getAudioCaptureDevices() override;
3737
std::set<AudioDevicePtr> getAudioPlaybackDevices() override;
3838

39+
AudioDevicePtr getDefaultAudioCaptureDevice() override;
40+
AudioDevicePtr getDefaultAudioPlaybackDevice() override;
41+
3942
private:
4043
void enumerateDevices(EDataFlow dataFlow);
4144
void addDevice(LPCWSTR deviceId);
4245
void removeDevice(LPCWSTR deviceId);
46+
AudioDevicePtr createDefaultAudioDevice(const EDataFlow & dataFlow);
4347
AudioDevicePtr createAudioDevice(LPCWSTR deviceId, EDataFlow * dataFlow);
4448
bool insertAudioDevice(AudioDevicePtr device, EDataFlow dataFlow);
4549
void removeAudioDevice(DeviceList<AudioDevicePtr> & devices, std::string id);

webrtc-jni/src/main/cpp/src/JNI_MediaDevices.cpp

+34
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,40 @@ JNIEXPORT void JNICALL Java_dev_onvoid_webrtc_media_MediaDevices_removeDeviceCha
6060
}
6161
}
6262

63+
JNIEXPORT jobject JNICALL Java_dev_onvoid_webrtc_media_MediaDevices_getDefaultAudioRenderDevice
64+
(JNIEnv * env, jclass caller)
65+
{
66+
jni::WebRTCContext * context = static_cast<jni::WebRTCContext *>(javaContext);
67+
68+
auto device = context->getAudioDeviceManager()->getDefaultAudioPlaybackDevice();
69+
70+
try {
71+
return jni::AudioDevice::toJavaAudioDevice(env, device).release();
72+
}
73+
catch (...) {
74+
ThrowCxxJavaException(env);
75+
}
76+
77+
return nullptr;
78+
}
79+
80+
JNIEXPORT jobject JNICALL Java_dev_onvoid_webrtc_media_MediaDevices_getDefaultAudioCaptureDevice
81+
(JNIEnv * env, jclass caller)
82+
{
83+
jni::WebRTCContext * context = static_cast<jni::WebRTCContext *>(javaContext);
84+
85+
auto device = context->getAudioDeviceManager()->getDefaultAudioCaptureDevice();
86+
87+
try {
88+
return jni::AudioDevice::toJavaAudioDevice(env, device).release();
89+
}
90+
catch (...) {
91+
ThrowCxxJavaException(env);
92+
}
93+
94+
return nullptr;
95+
}
96+
6397
JNIEXPORT jobject JNICALL Java_dev_onvoid_webrtc_media_MediaDevices_getAudioRenderDevices
6498
(JNIEnv * env, jclass caller)
6599
{

webrtc-jni/src/main/cpp/src/media/audio/linux/AlsaAudioDeviceManager.cpp

-143
This file was deleted.

0 commit comments

Comments
 (0)