Update code for OpenTelePresence features

This commit is contained in:
bossiel 2011-08-26 01:27:53 +00:00
parent 079030a700
commit 4ac9b38614
6 changed files with 44 additions and 24 deletions

View File

@ -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;

View File

@ -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)

View File

@ -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)

View File

@ -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

View File

@ -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);

View File

@ -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);