/* destructor */ static tsk_object_t* tdav_producer_audioqueue_dtor(tsk_object_t * self) { tdav_producer_audioqueue_t *producer = self; if(producer){ // Stop the producer if not done if(producer->started){ tdav_producer_audioqueue_stop(self); } // Free all buffers and dispose the queue if (producer->queue) { tsk_size_t i; for(i=0; i<CoreAudioRecordBuffers; i++){ AudioQueueFreeBuffer(producer->queue, producer->buffers[i]); } AudioQueueDispose(producer->queue, true); } /* deinit base */ tdav_producer_audio_deinit(TDAV_PRODUCER_AUDIO(producer)); } return self; }
/* destructor */ static tsk_object_t* tdav_producer_audiounit_dtor(tsk_object_t * self) { tdav_producer_audiounit_t *producer = self; if(producer){ // Stop the producer if not done if(producer->started){ tdav_producer_audiounit_stop(self); } // Free all buffers and dispose the queue if (producer->audioUnitHandle) { tdav_audiounit_handle_destroy(&producer->audioUnitHandle); } if(producer->ring.mutex){ tsk_mutex_destroy(&producer->ring.mutex); } TSK_FREE(producer->ring.chunck.buffer); if(producer->ring.buffer){ speex_buffer_destroy(producer->ring.buffer); } if(producer->senderCondWait){ tsk_condwait_destroy(&producer->senderCondWait); } /* deinit base */ tdav_producer_audio_deinit(TDAV_PRODUCER_AUDIO(producer)); } return self; }
/* destructor */ static tsk_object_t* tdav_producer_dsound_dtor(tsk_object_t * self) { tdav_producer_dsound_t *dsound = self; if(dsound){ tsk_size_t i; /* stop */ if(dsound->started){ tdav_producer_dsound_stop(self); } /* deinit base */ tdav_producer_audio_deinit(TDAV_PRODUCER_AUDIO(dsound)); /* deinit self */ if(dsound->captureBuffer){ IDirectSoundCaptureBuffer_Release(dsound->captureBuffer); } if(dsound->device){ IDirectSoundCapture_Release(dsound->device); } for(i = 0; i<sizeof(dsound->notifEvents)/sizeof(HANDLE); i++){ if(dsound->notifEvents[i]){ CloseHandle(dsound->notifEvents[i]); } } } return self; }
/* destructor */ static tsk_object_t* tdav_producer_waveapi_dtor(tsk_object_t * self) { tdav_producer_waveapi_t *producer = self; if(producer){ tsk_size_t i; /* stop */ if(producer->started){ tdav_producer_waveapi_stop(self); } /* deinit base */ tdav_producer_audio_deinit(TDAV_PRODUCER_AUDIO(producer)); /* deinit self */ for(i = 0; i< sizeof(producer->hWaveHeaders)/sizeof(LPWAVEHDR); i++){ free_wavehdr(producer, i); } if(producer->hWaveIn){ waveInClose(producer->hWaveIn); } if(producer->events[0]){ CloseHandle(producer->events[0]); } if(producer->events[1]){ CloseHandle(producer->events[1]); } DeleteCriticalSection(&producer->cs); } return self; }
/* destructor */ static tsk_object_t* tdav_producer_audiounit_dtor(tsk_object_t * self) { tdav_producer_audiounit_t *producer = self; if(producer){ // Stop the producer if not done if(producer->started){ tdav_producer_audiounit_stop(self); } // Free all buffers and dispose the queue if (producer->audioUnitHandle) { tdav_audiounit_handle_destroy(&producer->audioUnitHandle); } TSK_FREE(producer->ring.chunck.buffer); if(producer->ring.buffer){ speex_buffer_destroy(producer->ring.buffer); } /* deinit base */ tdav_producer_audio_deinit(TDAV_PRODUCER_AUDIO(producer)); TSK_DEBUG_INFO("*** AudioUnit Producer destroyed ***"); } return self; }