X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=libhb%2Fports.c;h=85e009a366114d0d31fa726525a07e2072899f2a;hb=f93c2a10768843b2f8900695bb1ab276ffc168ab;hp=6368bcba49d420208718f3fe9e1852cbbea365fd;hpb=3d055d99a614461665c909a1e9012c61a465d163;p=handbrake-jp%2Fhandbrake-jp-git.git diff --git a/libhb/ports.c b/libhb/ports.c index 6368bcba..85e009a3 100644 --- a/libhb/ports.c +++ b/libhb/ports.c @@ -604,6 +604,35 @@ void hb_cond_wait( hb_cond_t * c, hb_lock_t * lock ) #endif } +void hb_clock_gettime( struct timespec *tp ) +{ + struct timeval tv; + time_t sec; + + sec = time( NULL ); + gettimeofday( &tv, NULL ); + tp->tv_sec = tv.tv_sec; + tp->tv_nsec = tv.tv_usec * 1000; +} + +void hb_cond_timedwait( hb_cond_t * c, hb_lock_t * lock, int msec ) +{ +#if defined( SYS_BEOS ) + c->thread = find_thread( NULL ); + release_sem( lock->sem ); + suspend_thread( c->thread ); + acquire_sem( lock->sem ); + c->thread = -1; +#elif USE_PTHREAD + struct timespec ts; + hb_clock_gettime(&ts); + ts.tv_nsec += (msec % 1000) * 1000000; + ts.tv_sec += msec / 1000 + (ts.tv_nsec / 1000000000); + ts.tv_nsec %= 1000000000; + pthread_cond_timedwait( &c->cond, &lock->mutex, &ts ); +#endif +} + void hb_cond_signal( hb_cond_t * c ) { #if defined( SYS_BEOS ) @@ -628,6 +657,13 @@ void hb_cond_signal( hb_cond_t * c ) #endif } +void hb_cond_broadcast( hb_cond_t * c ) +{ +#if USE_PTHREAD + pthread_cond_broadcast( &c->cond ); +#endif +} + /************************************************************************ * Network ***********************************************************************/ @@ -644,6 +680,23 @@ hb_net_t * hb_net_open( char * address, int port ) struct sockaddr_in sock; struct hostent * host; +#ifdef SYS_MINGW + WSADATA wsaData; + int iResult, winsock_init = 0; + + // Initialize Winsock + if (!winsock_init) + { + iResult = WSAStartup(MAKEWORD(2, 2), &wsaData); + if (iResult != 0) + { + hb_log("WSAStartup failed: %d", iResult); + return NULL; + } + winsock_init = 1; + } +#endif + /* TODO: find out why this doesn't work on Win32 */ if( !( host = gethostbyname( address ) ) ) {