Commit fe95288a authored by Christophe Massiot's avatar Christophe Massiot

Mac OS X-specific :

* We now use real-time threads ;
* Worked around a bug when seeking ;
All :
* Removed my patch to the video output since it causes problems for some
  people.
parent dec3c9e9
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
* This header provides a portable threads implementation. * This header provides a portable threads implementation.
***************************************************************************** *****************************************************************************
* Copyright (C) 1999, 2000 VideoLAN * Copyright (C) 1999, 2000 VideoLAN
* $Id: threads_funcs.h,v 1.3 2002/05/18 17:47:46 sam Exp $ * $Id: threads_funcs.h,v 1.4 2002/05/19 23:51:37 massiot Exp $
* *
* Authors: Jean-Marc Dressler <polux@via.ecp.fr> * Authors: Jean-Marc Dressler <polux@via.ecp.fr>
* Samuel Hocevar <sam@via.ecp.fr> * Samuel Hocevar <sam@via.ecp.fr>
...@@ -751,6 +751,17 @@ static inline int _vlc_thread_create( char * psz_file, int i_line, ...@@ -751,6 +751,17 @@ static inline int _vlc_thread_create( char * psz_file, int i_line,
#elif defined( PTHREAD_COND_T_IN_PTHREAD_H ) #elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
i_ret = pthread_create( p_thread, NULL, func, p_data ); i_ret = pthread_create( p_thread, NULL, func, p_data );
#ifdef SYS_DARWIN
{
struct sched_param param;
param.sched_priority = 10;
if (pthread_setschedparam(*p_thread, SCHED_RR, &param))
{
intf_ErrMsg("pthread_setschedparam failed");
}
}
#endif
#elif defined( HAVE_CTHREADS_H ) #elif defined( HAVE_CTHREADS_H )
*p_thread = cthread_fork( (cthread_fn_t)func, (any_t)p_data ); *p_thread = cthread_fork( (cthread_fn_t)func, (any_t)p_data );
i_ret = 0; i_ret = 0;
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* aout_macosx.c : CoreAudio output plugin * aout_macosx.c : CoreAudio output plugin
***************************************************************************** *****************************************************************************
* Copyright (C) 2001 VideoLAN * Copyright (C) 2001 VideoLAN
* $Id: aout_macosx.m,v 1.2 2002/05/19 00:34:54 massiot Exp $ * $Id: aout_macosx.m,v 1.3 2002/05/19 23:51:37 massiot Exp $
* *
* Authors: Colin Delacroix <colin@zoy.org> * Authors: Colin Delacroix <colin@zoy.org>
* Jon Lech Johansen <jon-vl@nanocrew.net> * Jon Lech Johansen <jon-vl@nanocrew.net>
...@@ -106,12 +106,6 @@ static int aout_Open( aout_thread_t *p_aout ) ...@@ -106,12 +106,6 @@ static int aout_Open( aout_thread_t *p_aout )
OSStatus err; OSStatus err;
UInt32 ui_param_size; UInt32 ui_param_size;
struct thread_time_constraint_policy ttcpolicy;
int mib[2];
unsigned int miblen;
int i_busspeed;
size_t len;
/* allocate instance */ /* allocate instance */
p_aout->p_sys = malloc( sizeof( aout_sys_t ) ); p_aout->p_sys = malloc( sizeof( aout_sys_t ) );
if( p_aout->p_sys == NULL ) if( p_aout->p_sys == NULL )
...@@ -182,40 +176,6 @@ static int aout_Open( aout_thread_t *p_aout ) ...@@ -182,40 +176,6 @@ static int aout_Open( aout_thread_t *p_aout )
return( -1 ); return( -1 );
} }
/* Go to time-constrained thread policy */
/* Get bus speed */
mib[0] = CTL_HW;
mib[1] = HW_BUS_FREQ;
miblen = 2;
len = 4;
if( sysctl(mib, miblen, &i_busspeed, &len, NULL, 0) == -1 )
{
intf_ErrMsg("vout error: couldn't go to time-constrained policy (bus speed)");
}
else
{
/* This is in AbsoluteTime units, which are equal to
* 1/4 the bus speed on most machines. */
/* FIXME : these are random numbers ! */
/* hard-coded numbers are approximations for 100 MHz bus speed.
* assume that app deals in frame-sized chunks, e.g. 30 per second.
* ttcpolicy.period = 833333; */
ttcpolicy.period = i_busspeed / 120;
/* ttcpolicy.computation = 60000; */
ttcpolicy.computation = i_busspeed / 1440;
/* ttcpolicy.constraint = 120000; */
ttcpolicy.constraint = i_busspeed / 720;
ttcpolicy.preemptible = 1;
if (thread_policy_set(mach_thread_self(),
THREAD_TIME_CONSTRAINT_POLICY, (int *)&ttcpolicy,
THREAD_TIME_CONSTRAINT_POLICY_COUNT) != KERN_SUCCESS)
{
intf_ErrMsg("vout error: couldn't go to time-constrained policy (thread_policy_set)");
}
}
return( 0 ); return( 0 );
} }
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* intf_controller.c: MacOS X plugin for vlc * intf_controller.c: MacOS X plugin for vlc
***************************************************************************** *****************************************************************************
* Copyright (C) 2001 VideoLAN * Copyright (C) 2001 VideoLAN
* $Id: intf_controller.m,v 1.2 2002/05/18 13:33:44 massiot Exp $ * $Id: intf_controller.m,v 1.3 2002/05/19 23:51:37 massiot Exp $
* *
* Authors: Florian G. Pflug <fgp@phlo.org> * Authors: Florian G. Pflug <fgp@phlo.org>
* Jon Lech Johansen <jon-vl@nanocrew.net> * Jon Lech Johansen <jon-vl@nanocrew.net>
...@@ -191,7 +191,7 @@ ...@@ -191,7 +191,7 @@
switch( [[NSApp currentEvent] type] ) switch( [[NSApp currentEvent] type] )
{ {
case NSLeftMouseDown: case NSLeftMouseDown:
[o_slider_lock lock]; [o_slider_lock tryLock];
break; break;
case NSLeftMouseUp: case NSLeftMouseUp:
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* intf_vlc_wrapper.c: MacOS X plugin for vlc * intf_vlc_wrapper.c: MacOS X plugin for vlc
***************************************************************************** *****************************************************************************
* Copyright (C) 2001 VideoLAN * Copyright (C) 2001 VideoLAN
* $Id: intf_vlc_wrapper.m,v 1.5 2002/05/19 19:16:40 jlj Exp $ * $Id: intf_vlc_wrapper.m,v 1.6 2002/05/19 23:51:37 massiot Exp $
* *
* Authors: Florian G. Pflug <fgp@phlo.org> * Authors: Florian G. Pflug <fgp@phlo.org>
* Jon Lech Johansen <jon-vl@nanocrew.net> * Jon Lech Johansen <jon-vl@nanocrew.net>
...@@ -316,28 +316,20 @@ static Intf_VLCWrapper *o_intf = nil; ...@@ -316,28 +316,20 @@ static Intf_VLCWrapper *o_intf = nil;
{ {
float f_time = 0.0; float f_time = 0.0;
vlc_mutex_lock( &p_input_bank->lock );
if( p_input_bank->pp_input[0] != NULL ) if( p_input_bank->pp_input[0] != NULL )
{ {
f_time = (float)p_area->i_tell / (float)p_area->i_size; f_time = (float)p_area->i_tell / (float)p_area->i_size;
} }
vlc_mutex_unlock( &p_input_bank->lock );
return( f_time ); return( f_time );
} }
- (void)setTimeAsFloat:(float)f_position - (void)setTimeAsFloat:(float)f_position
{ {
vlc_mutex_lock( &p_input_bank->lock );
if( p_input_bank->pp_input[0] != NULL ) if( p_input_bank->pp_input[0] != NULL )
{ {
input_Seek( p_input_bank->pp_input[0], p_area->i_size * f_position ); input_Seek( p_input_bank->pp_input[0], p_area->i_size * f_position );
} }
vlc_mutex_unlock( &p_input_bank->lock );
} }
#undef p_area #undef p_area
......
...@@ -184,12 +184,6 @@ static int vout_Init( vout_thread_t *p_vout ) ...@@ -184,12 +184,6 @@ static int vout_Init( vout_thread_t *p_vout )
int i_index; int i_index;
picture_t *p_pic; picture_t *p_pic;
struct thread_time_constraint_policy ttcpolicy;
int mib[2];
unsigned int miblen;
int i_busspeed;
size_t len;
I_OUTPUTPICTURES = 0; I_OUTPUTPICTURES = 0;
/* Initialize the output structure; we already found a codec, /* Initialize the output structure; we already found a codec,
...@@ -237,40 +231,6 @@ static int vout_Init( vout_thread_t *p_vout ) ...@@ -237,40 +231,6 @@ static int vout_Init( vout_thread_t *p_vout )
I_OUTPUTPICTURES++; I_OUTPUTPICTURES++;
} }
/* Go to time-constrained thread policy */
/* Get bus speed */
mib[0] = CTL_HW;
mib[1] = HW_BUS_FREQ;
miblen = 2;
len = 4;
if( sysctl(mib, miblen, &i_busspeed, &len, NULL, 0) == -1 )
{
intf_ErrMsg("vout error: couldn't go to time-constrained policy (bus speed)");
}
else
{
/* This is in AbsoluteTime units, which are equal to
* 1/4 the bus speed on most machines. */
/* hard-coded numbers are approximations for 100 MHz bus speed.
* assume that app deals in frame-sized chunks, e.g. 30 per second.
* ttcpolicy.period = 833333; */
ttcpolicy.period = i_busspeed / 120;
/* ttcpolicy.computation = 60000; */
ttcpolicy.computation = i_busspeed / 1440;
/* ttcpolicy.constraint = 120000; */
ttcpolicy.constraint = i_busspeed / 720;
ttcpolicy.preemptible = 1;
if (thread_policy_set(mach_thread_self(),
THREAD_TIME_CONSTRAINT_POLICY, (int *)&ttcpolicy,
THREAD_TIME_CONSTRAINT_POLICY_COUNT) != KERN_SUCCESS)
{
intf_ErrMsg("vout error: couldn't go to time-constrained policy (thread_policy_set)");
}
}
return( 0 ); return( 0 );
} }
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* darwin_specific.c: Darwin specific features * darwin_specific.c: Darwin specific features
***************************************************************************** *****************************************************************************
* Copyright (C) 2001 VideoLAN * Copyright (C) 2001 VideoLAN
* $Id: darwin_specific.c,v 1.8 2002/04/26 00:20:00 jlj Exp $ * $Id: darwin_specific.c,v 1.9 2002/05/19 23:51:37 massiot Exp $
* *
* Authors: Samuel Hocevar <sam@zoy.org> * Authors: Samuel Hocevar <sam@zoy.org>
* *
...@@ -53,8 +53,16 @@ void system_Init( int *pi_argc, char *ppsz_argv[], char *ppsz_env[] ) ...@@ -53,8 +53,16 @@ void system_Init( int *pi_argc, char *ppsz_argv[], char *ppsz_env[] )
p_char++; p_char++;
} }
return; /* Run the interface with a real-time priority too */
{
struct sched_param param;
param.sched_priority = 10;
if (pthread_setschedparam(pthread_self(), SCHED_RR, &param))
{
intf_ErrMsg("pthread_setschedparam failed");
}
}
} }
/***************************************************************************** /*****************************************************************************
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
* thread, and destroy a previously oppened video output thread. * thread, and destroy a previously oppened video output thread.
***************************************************************************** *****************************************************************************
* Copyright (C) 2000-2001 VideoLAN * Copyright (C) 2000-2001 VideoLAN
* $Id: video_output.c,v 1.176 2002/05/17 14:17:05 lool Exp $ * $Id: video_output.c,v 1.177 2002/05/19 23:51:37 massiot Exp $
* *
* Authors: Vincent Seguin <seguin@via.ecp.fr> * Authors: Vincent Seguin <seguin@via.ecp.fr>
* *
...@@ -577,6 +577,8 @@ static void RunThread( vout_thread_t *p_vout) ...@@ -577,6 +577,8 @@ static void RunThread( vout_thread_t *p_vout)
continue; continue;
} }
#if 0
/* Removed because it causes problems for some people --Meuuh */
else if( display_date > current_date + VOUT_BOGUS_DELAY ) else if( display_date > current_date + VOUT_BOGUS_DELAY )
{ {
/* Picture is waaay too early: it will be destroyed */ /* Picture is waaay too early: it will be destroyed */
...@@ -599,6 +601,7 @@ static void RunThread( vout_thread_t *p_vout) ...@@ -599,6 +601,7 @@ static void RunThread( vout_thread_t *p_vout)
continue; continue;
} }
#endif
else if( display_date > current_date + VOUT_DISPLAY_DELAY ) else if( display_date > current_date + VOUT_DISPLAY_DELAY )
{ {
/* A picture is ready to be rendered, but its rendering date /* A picture is ready to be rendered, but its rendering date
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment