Update code for OpenTelePresence features
This commit is contained in:
parent
079030a700
commit
4ac9b38614
|
@ -46,6 +46,7 @@ typedef struct tdav_speakup_jitterBuffer_s
|
|||
uint64_t ref_timestamp;
|
||||
uint32_t frame_duration;
|
||||
uint32_t rate;
|
||||
uint32_t _10ms_size_bytes;
|
||||
}
|
||||
tdav_speakup_jitterbuffer_t;
|
||||
|
||||
|
|
|
@ -142,6 +142,7 @@ tdav_audiounit_handle_t* tdav_audiounit_handle_create(uint64_t session_id, uint3
|
|||
if((inst = tsk_object_new(tdav_audiounit_instance_def_t))){
|
||||
OSStatus status = noErr;
|
||||
tdav_audiounit_instance_t* _inst;
|
||||
#if TARGET_OS_IPHONE
|
||||
// set preferred buffer size
|
||||
Float32 preferredBufferSize = ((Float32)ptime / 1000.f); // in seconds
|
||||
status = AudioSessionSetProperty(kAudioSessionProperty_PreferredHardwareIOBufferDuration, sizeof(preferredBufferSize), &preferredBufferSize);
|
||||
|
@ -160,7 +161,7 @@ tdav_audiounit_handle_t* tdav_audiounit_handle_create(uint64_t session_id, uint3
|
|||
TSK_DEBUG_ERROR("AudioSessionGetProperty(kAudioSessionProperty_CurrentHardwareIOBufferDuration, %f) failed", preferredBufferSize);
|
||||
}
|
||||
|
||||
#if TARGET_OS_IPHONE
|
||||
|
||||
UInt32 audioCategory = kAudioSessionCategory_PlayAndRecord;
|
||||
status = AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(audioCategory), &audioCategory);
|
||||
if(status){
|
||||
|
@ -249,11 +250,14 @@ int tdav_audiounit_handle_mute(tdav_audiounit_handle_t* self, tsk_bool_t mute)
|
|||
TSK_DEBUG_ERROR("Invalid parameter");
|
||||
return -1;
|
||||
}
|
||||
|
||||
#if TARGET_OS_IPHONE
|
||||
status = AudioUnitSetProperty(inst->audioUnit, kAUVoiceIOProperty_MuteOutput,
|
||||
kAudioUnitScope_Output, kOutputBus, mute ? &kOne : &kZero, mute ? sizeof(kOne) : sizeof(kZero));
|
||||
|
||||
return status ? -2 : 0;
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
int tdav_audiounit_handle_stop(tdav_audiounit_handle_t* self)
|
||||
|
|
|
@ -43,8 +43,6 @@
|
|||
# include <sys/time.h>
|
||||
#endif
|
||||
|
||||
static int _10ms_size_bytes = 160;
|
||||
|
||||
#define TDAV_SPEAKUP_10MS 10
|
||||
#define TDAV_SPEAKUP_10MS_FRAME_SIZE(self) (((self)->rate * TDAV_SPEAKUP_10MS)/1000)
|
||||
#define TDAV_SPEAKUP_PTIME_FRAME_SIZE(self) (((self)->rate * (self)->framesize)/1000)
|
||||
|
@ -62,6 +60,7 @@ int tdav_speakup_jitterbuffer_open(tmedia_jitterbuffer_t* self, uint32_t frame_d
|
|||
jitterbuffer->ref_timestamp = 0;
|
||||
jitterbuffer->frame_duration = frame_duration;
|
||||
jitterbuffer->rate = rate;
|
||||
jitterbuffer->_10ms_size_bytes = 160 * (rate/8000);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -124,9 +123,9 @@ int tdav_speakup_jitterbuffer_put(tmedia_jitterbuffer_t* self, void* data, tsk_s
|
|||
now = (long) (tsk_time_now()-jitterbuffer->ref_timestamp);
|
||||
ts = (long)(rtp_hdr->timestamp/(jitterbuffer->rate/1000));
|
||||
pdata = (uint8_t*)data;
|
||||
for(i=0; i<(int)(data_size/_10ms_size_bytes);i++){
|
||||
if((_10ms_buf = tsk_calloc(_10ms_size_bytes, 1))){
|
||||
memcpy(_10ms_buf, &pdata[i*_10ms_size_bytes], _10ms_size_bytes);
|
||||
for(i=0; i<(int)(data_size/jitterbuffer->_10ms_size_bytes);i++){
|
||||
if((_10ms_buf = tsk_calloc(jitterbuffer->_10ms_size_bytes, 1))){
|
||||
memcpy(_10ms_buf, &pdata[i*jitterbuffer->_10ms_size_bytes], jitterbuffer->_10ms_size_bytes);
|
||||
jb_put(jitterbuffer->jbuffer, _10ms_buf, JB_TYPE_VOICE, TDAV_SPEAKUP_10MS, ts, now, jitterbuffer->jcodec);
|
||||
_10ms_buf = tsk_null;
|
||||
}
|
||||
|
@ -146,12 +145,12 @@ tsk_size_t tdav_speakup_jitterbuffer_get(tmedia_jitterbuffer_t* self, void* out_
|
|||
short* _10ms_buf = tsk_null;
|
||||
uint8_t* pout_data = (uint8_t*)out_data;
|
||||
|
||||
if(!out_data || (out_size % _10ms_size_bytes)){
|
||||
if(!out_data || (out_size % jitterbuffer->_10ms_size_bytes)){
|
||||
TSK_DEBUG_ERROR("Invalid parameter");
|
||||
return 0;
|
||||
}
|
||||
|
||||
_10ms_count = (out_size/_10ms_size_bytes);
|
||||
_10ms_count = (out_size/jitterbuffer->_10ms_size_bytes);
|
||||
now = (long) (tsk_time_now() - jitterbuffer->ref_timestamp);
|
||||
for(i=0; i<_10ms_count; i++){
|
||||
|
||||
|
@ -160,7 +159,7 @@ tsk_size_t tdav_speakup_jitterbuffer_get(tmedia_jitterbuffer_t* self, void* out_
|
|||
case JB_INTERP:
|
||||
TSK_DEBUG_INFO("JB_INTERP");
|
||||
jb_reset_all(jitterbuffer->jbuffer);
|
||||
memset(&pout_data[i*_10ms_size_bytes], 0, (_10ms_count*_10ms_size_bytes)-(i*_10ms_size_bytes));
|
||||
memset(&pout_data[i*jitterbuffer->_10ms_size_bytes], 0, (_10ms_count*jitterbuffer->_10ms_size_bytes)-(i*jitterbuffer->_10ms_size_bytes));
|
||||
i = _10ms_count; // for exit
|
||||
break;
|
||||
case JB_OK:
|
||||
|
@ -170,11 +169,11 @@ tsk_size_t tdav_speakup_jitterbuffer_get(tmedia_jitterbuffer_t* self, void* out_
|
|||
{
|
||||
if(_10ms_buf && (jret == JB_OK)){
|
||||
/* copy data */
|
||||
memcpy(&pout_data[i*_10ms_size_bytes], _10ms_buf, _10ms_size_bytes);
|
||||
memcpy(&pout_data[i*jitterbuffer->_10ms_size_bytes], _10ms_buf, jitterbuffer->_10ms_size_bytes);
|
||||
}
|
||||
else{
|
||||
/* copy silence */
|
||||
memset(&pout_data[i*_10ms_size_bytes], 0, _10ms_size_bytes);
|
||||
memset(&pout_data[i*jitterbuffer->_10ms_size_bytes], 0, jitterbuffer->_10ms_size_bytes);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -184,7 +183,7 @@ tsk_size_t tdav_speakup_jitterbuffer_get(tmedia_jitterbuffer_t* self, void* out_
|
|||
TSK_FREE(_10ms_buf);
|
||||
}
|
||||
|
||||
return (_10ms_count * _10ms_size_bytes);
|
||||
return (_10ms_count * jitterbuffer->_10ms_size_bytes);
|
||||
}
|
||||
|
||||
int tdav_speakup_jitterbuffer_reset(tmedia_jitterbuffer_t* self)
|
||||
|
|
|
@ -94,7 +94,7 @@
|
|||
# define HAVE_IFADDRS 1
|
||||
# define HAVE_DNS_H 1
|
||||
# define TNET_HAVE_SS_LEN 1
|
||||
# define TNET_HAVE_SA_LEN 1
|
||||
# define TNET_HAVE_SA_LEN 0
|
||||
#else
|
||||
# define HAVE_IFADDRS 0
|
||||
# define HAVE_DNS_H 0
|
||||
|
|
|
@ -580,6 +580,7 @@ void *tnet_transport_mainthread(void *param)
|
|||
int ret;
|
||||
tsk_size_t i;
|
||||
|
||||
struct sockaddr_storage remote_addr = {0};
|
||||
transport_socket_t* active_socket;
|
||||
|
||||
/* check whether the transport is already prepared */
|
||||
|
@ -700,14 +701,24 @@ void *tnet_transport_mainthread(void *param)
|
|||
len = tlslen;
|
||||
}
|
||||
}
|
||||
else if((ret = tnet_sockfd_recv(active_socket->fd, buffer, len, 0)) < 0){
|
||||
TSK_FREE(buffer);
|
||||
else {
|
||||
if(TNET_SOCKET_TYPE_IS_STREAM(transport->master->type)){
|
||||
ret = tnet_sockfd_recv(active_socket->fd, buffer, len, 0);
|
||||
}
|
||||
else {
|
||||
ret = tnet_sockfd_recvfrom(active_socket->fd, buffer, len, 0, (struct sockaddr*)&remote_addr);
|
||||
}
|
||||
|
||||
removeSocket(i, context);
|
||||
TNET_PRINT_LAST_ERROR("recv have failed.");
|
||||
continue;
|
||||
if(ret < 0){
|
||||
TSK_FREE(buffer);
|
||||
|
||||
removeSocket(i, context);
|
||||
TNET_PRINT_LAST_ERROR("recv/recvfrom have failed.");
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else if((len != (tsk_size_t)ret) && len){ /* useless test? */
|
||||
|
||||
if((len != (tsk_size_t)ret) && len){ /* useless test? */
|
||||
len = (tsk_size_t)ret;
|
||||
/* buffer = tsk_realloc(buffer, len); */
|
||||
}
|
||||
|
@ -715,6 +726,7 @@ void *tnet_transport_mainthread(void *param)
|
|||
e = tnet_transport_event_create(event_data, transport->callback_data, active_socket->fd);
|
||||
e->data = buffer;
|
||||
e->size = len;
|
||||
e->remote_addr = remote_addr;
|
||||
|
||||
TSK_RUNNABLE_ENQUEUE_OBJECT_SAFE(TSK_RUNNABLE(transport), e);
|
||||
|
||||
|
|
|
@ -43,11 +43,9 @@
|
|||
#endif
|
||||
|
||||
#include <time.h>
|
||||
#if defined __APPLE__ && 0
|
||||
#if defined (__APPLE__)
|
||||
# include <mach/mach.h>
|
||||
# include <mach/mach_time.h>
|
||||
|
||||
static mach_timebase_info_data_t __apple_timebase_info = {0, 0};
|
||||
#endif
|
||||
|
||||
/**@defgroup tsk_time_group Datetime functions.
|
||||
|
@ -56,7 +54,7 @@ static mach_timebase_info_data_t __apple_timebase_info = {0, 0};
|
|||
#if !HAVE_GETTIMEOFDAY
|
||||
#if TSK_UNDER_WINDOWS
|
||||
|
||||
/* Thanks to "http://www.cpp-programming.net/c-tidbits/gettimeofday-function-for-windows" */
|
||||
/* For windows implementation of "gettimeofday" Thanks to "http://www.cpp-programming.net/c-tidbits/gettimeofday-function-for-windows" */
|
||||
#if defined(_MSC_VER) || defined(_MSC_EXTENSIONS)
|
||||
#define DELTA_EPOCH_IN_MICROSECS 11644473600000000Ui64
|
||||
#else
|
||||
|
@ -164,6 +162,12 @@ uint64_t tsk_time_now()
|
|||
struct timespec ts;
|
||||
clock_gettime(CLOCK_MONOTONIC, &ts);
|
||||
return (((uint64_t)ts.tv_sec)*(uint64_t)1000) + (((uint64_t)ts.tv_nsec)/(uint64_t)1000000);
|
||||
#elif defined(__APPLE__)
|
||||
static mach_timebase_info_data_t __apple_timebase_info = {0, 0};
|
||||
if (__apple_timebase_info.denom == 0) {
|
||||
(void) mach_timebase_info(&__apple_timebase_info);
|
||||
}
|
||||
return (uint64_t)((mach_absolute_time() * __apple_timebase_info.numer) / (1e+6 * __apple_timebase_info.denom));
|
||||
#else
|
||||
struct timeval tv;
|
||||
gettimeofday(&tv, 0);
|
||||
|
|
Loading…
Reference in New Issue