summaryrefslogtreecommitdiff
path: root/pjmedia
diff options
context:
space:
mode:
Diffstat (limited to 'pjmedia')
-rw-r--r--pjmedia/src/pjmedia-audiodev/coreaudio_dev.c46
-rw-r--r--pjmedia/src/pjmedia-audiodev/pa_dev.c2
2 files changed, 48 insertions, 0 deletions
diff --git a/pjmedia/src/pjmedia-audiodev/coreaudio_dev.c b/pjmedia/src/pjmedia-audiodev/coreaudio_dev.c
index b235b7e5..e8c77e60 100644
--- a/pjmedia/src/pjmedia-audiodev/coreaudio_dev.c
+++ b/pjmedia/src/pjmedia-audiodev/coreaudio_dev.c
@@ -417,6 +417,49 @@ static pj_status_t ca_factory_refresh(pjmedia_aud_dev_factory *f)
*/
return PJMEDIA_EAUD_INIT;
}
+
+ if (dev_size > 1) {
+ AudioDeviceID dev_id = kAudioObjectUnknown;
+ unsigned idx = 0;
+
+ /* Find default audio input device */
+ addr.mSelector = kAudioHardwarePropertyDefaultInputDevice;
+ addr.mScope = kAudioObjectPropertyScopeGlobal;
+ addr.mElement = kAudioObjectPropertyElementMaster;
+ size = sizeof(dev_id);
+
+ ostatus = AudioObjectGetPropertyData(kAudioObjectSystemObject,
+ &addr, 0, NULL,
+ &size, (void *)&dev_id);
+ if (ostatus != noErr && dev_id != dev_ids[idx]) {
+ AudioDeviceID temp_id = dev_ids[idx];
+
+ for (i = idx + 1; i < dev_size; i++) {
+ if (dev_ids[i] == dev_id) {
+ dev_ids[idx++] = dev_id;
+ dev_ids[i] = temp_id;
+ break;
+ }
+ }
+ }
+
+ /* Find default audio output device */
+ addr.mSelector = kAudioHardwarePropertyDefaultOutputDevice;
+ ostatus = AudioObjectGetPropertyData(kAudioObjectSystemObject,
+ &addr, 0, NULL,
+ &size, (void *)&dev_id);
+ if (ostatus != noErr && dev_id != dev_ids[idx]) {
+ AudioDeviceID temp_id = dev_ids[idx];
+
+ for (i = idx + 1; i < dev_size; i++) {
+ if (dev_ids[i] == dev_id) {
+ dev_ids[idx] = dev_id;
+ dev_ids[i] = temp_id;
+ break;
+ }
+ }
+ }
+ }
/* Build the devices' info */
cf->dev_info = (struct coreaudio_dev_info*)
@@ -649,6 +692,7 @@ static OSStatus resample_callback(void *inRefCon,
*/
if (strm->rec_thread_initialized == 0 || !pj_thread_is_registered())
{
+ pj_bzero(strm->rec_thread_desc, sizeof(pj_thread_desc));
status = pj_thread_register("ca_rec", strm->rec_thread_desc,
&strm->rec_thread);
strm->rec_thread_initialized = 1;
@@ -789,6 +833,7 @@ static OSStatus input_callback(void *inRefCon,
*/
if (strm->rec_thread_initialized == 0 || !pj_thread_is_registered())
{
+ pj_bzero(strm->rec_thread_desc, sizeof(pj_thread_desc));
status = pj_thread_register("ca_rec", strm->rec_thread_desc,
&strm->rec_thread);
strm->rec_thread_initialized = 1;
@@ -904,6 +949,7 @@ static OSStatus output_renderer(void *inRefCon,
*/
if (stream->play_thread_initialized == 0 || !pj_thread_is_registered())
{
+ pj_bzero(stream->play_thread_desc, sizeof(pj_thread_desc));
status = pj_thread_register("coreaudio", stream->play_thread_desc,
&stream->play_thread);
stream->play_thread_initialized = 1;
diff --git a/pjmedia/src/pjmedia-audiodev/pa_dev.c b/pjmedia/src/pjmedia-audiodev/pa_dev.c
index 095f7725..1188b8ab 100644
--- a/pjmedia/src/pjmedia-audiodev/pa_dev.c
+++ b/pjmedia/src/pjmedia-audiodev/pa_dev.c
@@ -185,6 +185,7 @@ static int PaRecorderCallback(const void *input,
*/
if (stream->rec_thread_initialized == 0 || !pj_thread_is_registered())
{
+ pj_bzero(stream->rec_thread_desc, sizeof(pj_thread_desc));
status = pj_thread_register("pa_rec", stream->rec_thread_desc,
&stream->rec_thread);
stream->rec_thread_initialized = 1;
@@ -297,6 +298,7 @@ static int PaPlayerCallback( const void *input,
*/
if (stream->play_thread_initialized == 0 || !pj_thread_is_registered())
{
+ pj_bzero(stream->play_thread_desc, sizeof(pj_thread_desc));
status = pj_thread_register("portaudio", stream->play_thread_desc,
&stream->play_thread);
stream->play_thread_initialized = 1;