/* get data drom the jitter buffer (consumers should always have ptime of 20ms) */ tsk_size_t tdav_consumer_video_get(tdav_consumer_video_t* self, void* out_data, tsk_size_t out_size) { tsk_size_t ret_size = 0; if(!self && self->jitterbuffer){ TSK_DEBUG_ERROR("Invalid parameter"); return 0; } tsk_safeobj_lock(self); if(!TMEDIA_JITTER_BUFFER(self->jitterbuffer)->opened){ int ret; uint32_t frame_duration = (1000 / TMEDIA_CONSUMER(self)->video.fps); static uint32_t rate = 90000; static uint32_t channles = 1; if((ret = tmedia_jitterbuffer_open(TMEDIA_JITTER_BUFFER(self->jitterbuffer), frame_duration, rate, channles))){ TSK_DEBUG_ERROR("Failed to open jitterbuffer (%d)", ret); tsk_safeobj_unlock(self); return 0; } } ret_size = tmedia_jitterbuffer_get(TMEDIA_JITTER_BUFFER(self->jitterbuffer), out_data, out_size); tsk_safeobj_unlock(self); return ret_size; }
/* get data from the jitter buffer (consumers should always have ptime of 20ms) */ tsk_size_t tdav_consumer_audio_get(tdav_consumer_audio_t* self, void* out_data, tsk_size_t out_size) { tsk_size_t ret_size = 0; if(!self || !self->jitterbuffer){ TSK_DEBUG_ERROR("Invalid parameter"); return 0; } tsk_safeobj_lock(self); if(!TMEDIA_JITTER_BUFFER(self->jitterbuffer)->opened){ int ret; uint32_t frame_duration = TMEDIA_CONSUMER(self)->audio.ptime; uint32_t rate = TMEDIA_CONSUMER(self)->audio.out.rate ? TMEDIA_CONSUMER(self)->audio.out.rate : TMEDIA_CONSUMER(self)->audio.in.rate; uint32_t channels = TMEDIA_CONSUMER(self)->audio.out.channels ? TMEDIA_CONSUMER(self)->audio.out.channels : tmedia_defaults_get_audio_channels_playback(); if((ret = tmedia_jitterbuffer_open(TMEDIA_JITTER_BUFFER(self->jitterbuffer), frame_duration, rate, channels))){ TSK_DEBUG_ERROR("Failed to open jitterbuffer (%d)", ret); tsk_safeobj_unlock(self); return 0; } } ret_size = tmedia_jitterbuffer_get(TMEDIA_JITTER_BUFFER(self->jitterbuffer), out_data, out_size); tsk_safeobj_unlock(self); // denoiser if(self->denoise && self->denoise->opened && (self->denoise->echo_supp_enabled || self->denoise->noise_supp_enabled)){ if(self->denoise->echo_supp_enabled){ // Echo process last frame if(self->denoise->last_frame && self->denoise->last_frame->size){ tmedia_denoise_echo_playback(self->denoise, self->denoise->last_frame->data, self->denoise->last_frame->size); } if(ret_size){ // save tsk_buffer_copy(self->denoise->last_frame, 0, out_data, ret_size); } } #if 1 // suppress noise if not supported by remote party's encoder // suppress noise if(self->denoise->noise_supp_enabled){ tmedia_denoise_process_playback(self->denoise, out_data, out_size); } #endif } return ret_size; }