/* destructor */ static tsk_object_t* tdav_consumer_audiounit_dtor(tsk_object_t * self) { tdav_consumer_audiounit_t *consumer = self; if(consumer){ /* deinit self */ // Stop the consumer if not done if(consumer->started){ tdav_consumer_audiounit_stop(self); } // destroy handle if(consumer->audioUnitHandle){ tdav_audiounit_handle_destroy(&consumer->audioUnitHandle); } TSK_FREE(consumer->ring.chunck.buffer); if(consumer->ring.buffer){ speex_buffer_destroy(consumer->ring.buffer); } if(consumer->ring.mutex){ tsk_mutex_destroy(&consumer->ring.mutex); } /* deinit base */ tdav_consumer_audio_deinit(TDAV_CONSUMER_AUDIO(consumer)); } 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; }
/**@ingroup tsk_condwait_group * Safely free a condwait variable previously created using @ref tsk_condwait_create. * @param handle The condwait handle to free. * @sa @ref tsk_condwait_create */ void tsk_condwait_destroy(tsk_condwait_handle_t** handle) { tsk_condwait_t **condwait = (tsk_condwait_t**)handle; if(condwait && *condwait){ #if TSK_UNDER_WINDOWS CloseHandle((*condwait)->pcond); #else tsk_mutex_destroy(&((*condwait)->mutex)); pthread_cond_destroy((*condwait)->pcond); TSK_FREE((*condwait)->pcond); #endif tsk_free((void**)condwait); } else{ TSK_DEBUG_WARN("Cannot free an uninitialized condwait object"); } }
/* destructor */ static tsk_object_t* tdav_consumer_audiounit_dtor(tsk_object_t * self) { tdav_consumer_audiounit_t *consumer = self; if(consumer) { /* deinit self */ tdav_consumer_audiounit_deinit(TMEDIA_CONSUMER(self)); TSK_FREE(consumer->ring.chunck.buffer); if(consumer->ring.buffer) { speex_buffer_destroy(consumer->ring.buffer); } if(consumer->ring.mutex) { tsk_mutex_destroy(&consumer->ring.mutex); } /* deinit base */ tdav_consumer_audio_deinit(TDAV_CONSUMER_AUDIO(consumer)); TSK_DEBUG_INFO("*** AudioUnit Consumer destroyed ***"); } return self; }