gboolean gst_core_audio_bind_device (GstCoreAudio * core_audio) { OSStatus status; /* Specify which device we're using. */ GST_DEBUG_OBJECT (core_audio->osxbuf, "Bind AudioUnit to device %d", (int) core_audio->device_id); status = AudioUnitSetProperty (core_audio->audiounit, kAudioOutputUnitProperty_CurrentDevice, kAudioUnitScope_Global, 0, &core_audio->device_id, sizeof (AudioDeviceID)); if (status) { GST_ERROR_OBJECT (core_audio->osxbuf, "Failed binding to device: %" GST_FOURCC_FORMAT, GST_FOURCC_ARGS (status)); goto audiounit_error; } return TRUE; audiounit_error: if (core_audio->recBufferList) { buffer_list_free (core_audio->recBufferList); core_audio->recBufferList = NULL; } return FALSE; }
void gst_core_audio_unitialize (GstCoreAudio * core_audio) { AudioUnitUninitialize (core_audio->audiounit); if (core_audio->recBufferList) { buffer_list_free (core_audio->recBufferList); core_audio->recBufferList = NULL; } }
static struct pf_set * pf_init_from_file(const char *fn) { struct buffer_list *bl = buffer_list_file(fn, PF_MAX_LINE_LEN); if (bl) { struct pf_set *pfs = pf_init(bl, fn, true); buffer_list_free(bl); return pfs; } else { msg(D_PF_INFO|M_ERRNO, "PF: %s: cannot open", fn); return NULL; } }
gboolean gst_core_audio_initialize (GstCoreAudio * core_audio, AudioStreamBasicDescription format, GstCaps * caps, gboolean is_passthrough) { guint32 frame_size; OSStatus status; GST_DEBUG_OBJECT (core_audio, "Initializing: passthrough:%d caps:%" GST_PTR_FORMAT, is_passthrough, caps); if (!gst_core_audio_initialize_impl (core_audio, format, caps, is_passthrough, &frame_size)) { goto error; } if (core_audio->is_src) { /* create AudioBufferList needed for recording */ core_audio->recBufferList = buffer_list_alloc (format.mChannelsPerFrame, frame_size * format.mBytesPerFrame); } /* Initialize the AudioUnit */ status = AudioUnitInitialize (core_audio->audiounit); if (status) { GST_ERROR_OBJECT (core_audio, "Failed to initialise AudioUnit: %d", (int) status); goto error; } return TRUE; error: if (core_audio->is_src && core_audio->recBufferList) { buffer_list_free (core_audio->recBufferList); core_audio->recBufferList = NULL; } return FALSE; }