diff --git a/include/vlc_threads.h b/include/vlc_threads.h index 3b6c9d7abfcf369b3a98e559c5dff7180be3d1eb..b6ecd787164b1d4f8cd14a86f9ef6184dccaf938 100644 --- a/include/vlc_threads.h +++ b/include/vlc_threads.h @@ -3,7 +3,7 @@ * This header provides portable declarations for mutexes & conditions ***************************************************************************** * Copyright (C) 1999, 2002 VideoLAN - * $Id: vlc_threads.h,v 1.35 2003/11/07 19:30:28 massiot Exp $ + * $Id: vlc_threads.h,v 1.36 2003/11/22 00:41:07 titer Exp $ * * Authors: Jean-Marc Dressler * Samuel Hocevar @@ -14,7 +14,7 @@ * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @@ -42,6 +42,11 @@ #elif defined( WIN32 ) # include /* Win32 API */ +#elif defined( HAVE_KERNEL_SCHEDULER_H ) /* BeOS */ +# include +# include +# include + #elif defined( PTHREAD_COND_T_IN_PTHREAD_H ) /* pthreads (like Linux & BSD) */ # include # ifdef DEBUG @@ -54,11 +59,6 @@ #elif defined( HAVE_CTHREADS_H ) /* GNUMach */ # include -#elif defined( HAVE_KERNEL_SCHEDULER_H ) /* BeOS */ -# include -# include -# include - #else # error no threads available on your system ! @@ -76,6 +76,13 @@ # define VLC_THREAD_PRIORITY_VIDEO (-47) # define VLC_THREAD_PRIORITY_OUTPUT 37 +#elif defined(SYS_BEOS) +# define VLC_THREAD_PRIORITY_LOW 5 +# define VLC_THREAD_PRIORITY_INPUT 10 +# define VLC_THREAD_PRIORITY_AUDIO 10 +# define VLC_THREAD_PRIORITY_VIDEO 5 +# define VLC_THREAD_PRIORITY_OUTPUT 15 + #elif defined(PTHREAD_COND_T_IN_PTHREAD_H) # define VLC_THREAD_PRIORITY_LOW 0 # define VLC_THREAD_PRIORITY_INPUT 20 @@ -97,13 +104,6 @@ # define VLC_THREAD_PRIORITY_HIGHEST \ (IS_WINNT ? THREAD_PRIORITY_TIME_CRITICAL : 0) -#elif defined(SYS_BEOS) -# define VLC_THREAD_PRIORITY_LOW 5 -# define VLC_THREAD_PRIORITY_INPUT 10 -# define VLC_THREAD_PRIORITY_AUDIO 10 -# define VLC_THREAD_PRIORITY_VIDEO 5 -# define VLC_THREAD_PRIORITY_OUTPUT 15 - #else # define VLC_THREAD_PRIORITY_LOW 0 # define VLC_THREAD_PRIORITY_INPUT 0 @@ -172,6 +172,29 @@ typedef struct vlc_object_t * p_this; } vlc_cond_t; +#elif defined( HAVE_KERNEL_SCHEDULER_H ) +/* This is the BeOS implementation of the vlc threads, note that the mutex is + * not a real mutex and the cond_var is not like a pthread cond_var but it is + * enough for what wee need */ + +typedef thread_id vlc_thread_t; + +typedef struct +{ + int32_t init; + sem_id lock; + + vlc_object_t * p_this; +} vlc_mutex_t; + +typedef struct +{ + int32_t init; + thread_id thread; + + vlc_object_t * p_this; +} vlc_cond_t; + #elif defined( PTHREAD_COND_T_IN_PTHREAD_H ) typedef pthread_t vlc_thread_t; typedef struct @@ -211,28 +234,5 @@ typedef struct vlc_object_t * p_this; } vlc_cond_t; -#elif defined( HAVE_KERNEL_SCHEDULER_H ) -/* This is the BeOS implementation of the vlc threads, note that the mutex is - * not a real mutex and the cond_var is not like a pthread cond_var but it is - * enough for what wee need */ - -typedef thread_id vlc_thread_t; - -typedef struct -{ - int32_t init; - sem_id lock; - - vlc_object_t * p_this; -} vlc_mutex_t; - -typedef struct -{ - int32_t init; - thread_id thread; - - vlc_object_t * p_this; -} vlc_cond_t; - #endif diff --git a/include/vlc_threads_funcs.h b/include/vlc_threads_funcs.h index 932cd0cd0af8e8990a5e10134c676cadf1c53bc5..51d71c6847b4c63b32fca7ec0816050fa7325dbe 100644 --- a/include/vlc_threads_funcs.h +++ b/include/vlc_threads_funcs.h @@ -3,7 +3,7 @@ * This header provides a portable threads implementation. ***************************************************************************** * Copyright (C) 1999, 2002 VideoLAN - * $Id: vlc_threads_funcs.h,v 1.15 2003/03/02 01:35:30 gbazin Exp $ + * $Id: vlc_threads_funcs.h,v 1.16 2003/11/22 00:41:07 titer Exp $ * * Authors: Jean-Marc Dressler * Samuel Hocevar @@ -93,18 +93,6 @@ static inline int __vlc_mutex_lock( char * psz_file, int i_line, } i_result = 0; -#elif defined( PTHREAD_COND_T_IN_PTHREAD_H ) - i_result = pthread_mutex_lock( &p_mutex->mutex ); - if ( i_result ) - { - i_thread = (int)pthread_self(); - psz_error = strerror(i_result); - } - -#elif defined( HAVE_CTHREADS_H ) - mutex_lock( p_mutex->mutex ); - i_result = 0; - #elif defined( HAVE_KERNEL_SCHEDULER_H ) if( p_mutex == NULL ) { @@ -118,6 +106,19 @@ static inline int __vlc_mutex_lock( char * psz_file, int i_line, { i_result = acquire_sem( p_mutex->lock ); } + +#elif defined( PTHREAD_COND_T_IN_PTHREAD_H ) + i_result = pthread_mutex_lock( &p_mutex->mutex ); + if ( i_result ) + { + i_thread = (int)pthread_self(); + psz_error = strerror(i_result); + } + +#elif defined( HAVE_CTHREADS_H ) + mutex_lock( p_mutex->mutex ); + i_result = 0; + #endif if( i_result ) @@ -164,18 +165,6 @@ static inline int __vlc_mutex_unlock( char * psz_file, int i_line, } i_result = 0; -#elif defined( PTHREAD_COND_T_IN_PTHREAD_H ) - i_result = pthread_mutex_unlock( &p_mutex->mutex ); - if ( i_result ) - { - i_thread = (int)pthread_self(); - psz_error = strerror(i_result); - } - -#elif defined( HAVE_CTHREADS_H ) - mutex_unlock( p_mutex ); - i_result = 0; - #elif defined( HAVE_KERNEL_SCHEDULER_H ) if( p_mutex == NULL ) { @@ -190,6 +179,19 @@ static inline int __vlc_mutex_unlock( char * psz_file, int i_line, release_sem( p_mutex->lock ); return B_OK; } + +#elif defined( PTHREAD_COND_T_IN_PTHREAD_H ) + i_result = pthread_mutex_unlock( &p_mutex->mutex ); + if ( i_result ) + { + i_thread = (int)pthread_self(); + psz_error = strerror(i_result); + } + +#elif defined( HAVE_CTHREADS_H ) + mutex_unlock( p_mutex ); + i_result = 0; + #endif if( i_result ) @@ -279,22 +281,6 @@ static inline int __vlc_cond_signal( char * psz_file, int i_line, } i_result = 0; -#elif defined( PTHREAD_COND_T_IN_PTHREAD_H ) - i_result = pthread_cond_signal( &p_condvar->cond ); - if ( i_result ) - { - i_thread = (int)pthread_self(); - psz_error = strerror(i_result); - } - -#elif defined( HAVE_CTHREADS_H ) - /* condition_signal() */ - if ( p_condvar->queue.head || p_condvar->implications ) - { - cond_signal( (condition_t)p_condvar ); - } - i_result = 0; - #elif defined( HAVE_KERNEL_SCHEDULER_H ) if( p_condvar == NULL ) { @@ -331,6 +317,23 @@ static inline int __vlc_cond_signal( char * psz_file, int i_line, } i_result = 0; } + +#elif defined( PTHREAD_COND_T_IN_PTHREAD_H ) + i_result = pthread_cond_signal( &p_condvar->cond ); + if ( i_result ) + { + i_thread = (int)pthread_self(); + psz_error = strerror(i_result); + } + +#elif defined( HAVE_CTHREADS_H ) + /* condition_signal() */ + if ( p_condvar->queue.head || p_condvar->implications ) + { + cond_signal( (condition_t)p_condvar ); + } + i_result = 0; + #endif if( i_result ) @@ -425,22 +428,6 @@ static inline int __vlc_cond_broadcast( char * psz_file, int i_line, } i_result = 0; -#elif defined( PTHREAD_COND_T_IN_PTHREAD_H ) - i_result = pthread_cond_broadcast( &p_condvar->cond ); - if ( i_result ) - { - i_thread = (int)pthread_self(); - psz_error = strerror(i_result); - } - -#elif defined( HAVE_CTHREADS_H ) - /* condition_signal() */ - if ( p_condvar->queue.head || p_condvar->implications ) - { - cond_signal( (condition_t)p_condvar ); - } - i_result = 0; - #elif defined( HAVE_KERNEL_SCHEDULER_H ) if( p_condvar == NULL ) { @@ -477,6 +464,23 @@ static inline int __vlc_cond_broadcast( char * psz_file, int i_line, } i_result = 0; } + +#elif defined( PTHREAD_COND_T_IN_PTHREAD_H ) + i_result = pthread_cond_broadcast( &p_condvar->cond ); + if ( i_result ) + { + i_thread = (int)pthread_self(); + psz_error = strerror(i_result); + } + +#elif defined( HAVE_CTHREADS_H ) + /* condition_signal() */ + if ( p_condvar->queue.head || p_condvar->implications ) + { + cond_signal( (condition_t)p_condvar ); + } + i_result = 0; + #endif if( i_result ) @@ -599,6 +603,31 @@ static inline int __vlc_cond_wait( char * psz_file, int i_line, i_result = 0; +#elif defined( HAVE_KERNEL_SCHEDULER_H ) + if( p_condvar == NULL ) + { + i_result = B_BAD_VALUE; + } + else if( p_mutex == NULL ) + { + i_result = B_BAD_VALUE; + } + else if( p_condvar->init < 2000 ) + { + i_result = B_NO_INIT; + } + + /* The p_condvar->thread var is initialized before the unlock because + * it enables to identify when the thread is interrupted beetwen the + * unlock line and the suspend_thread line */ + p_condvar->thread = find_thread( NULL ); + vlc_mutex_unlock( p_mutex ); + suspend_thread( p_condvar->thread ); + p_condvar->thread = -1; + + vlc_mutex_lock( p_mutex ); + i_result = 0; + #elif defined( PTHREAD_COND_T_IN_PTHREAD_H ) # ifdef DEBUG @@ -638,31 +667,6 @@ static inline int __vlc_cond_wait( char * psz_file, int i_line, condition_wait( (condition_t)p_condvar, (mutex_t)p_mutex ); i_result = 0; -#elif defined( HAVE_KERNEL_SCHEDULER_H ) - if( p_condvar == NULL ) - { - i_result = B_BAD_VALUE; - } - else if( p_mutex == NULL ) - { - i_result = B_BAD_VALUE; - } - else if( p_condvar->init < 2000 ) - { - i_result = B_NO_INIT; - } - - /* The p_condvar->thread var is initialized before the unlock because - * it enables to identify when the thread is interrupted beetwen the - * unlock line and the suspend_thread line */ - p_condvar->thread = find_thread( NULL ); - vlc_mutex_unlock( p_mutex ); - suspend_thread( p_condvar->thread ); - p_condvar->thread = -1; - - vlc_mutex_lock( p_mutex ); - i_result = 0; - #endif if( i_result ) diff --git a/modules/misc/freetype.c b/modules/misc/freetype.c index 66fbfe06f27d2d46af77c9c7193aa2d2c7a39347..3fdb4ba8dc6ffff584852c217eef187ff7d49971 100644 --- a/modules/misc/freetype.c +++ b/modules/misc/freetype.c @@ -2,7 +2,7 @@ * freetype.c : Put text on the video, using freetype2 ***************************************************************************** * Copyright (C) 2002, 2003 VideoLAN - * $Id: freetype.c,v 1.34 2003/11/19 13:25:48 hartman Exp $ + * $Id: freetype.c,v 1.35 2003/11/22 00:41:07 titer Exp $ * * Authors: Sigmund Augdal * @@ -94,7 +94,7 @@ static line_desc_t *NewLine( byte_t * ); #define FONTSIZER_TEXT N_("Font size") #define FONTSIZER_LONGTEXT N_("The size of the fonts used by the osd module" ) -static int *pi_sizes[] = { 20, 18, 16, 12, 6 }; +static int pi_sizes[] = { 20, 18, 16, 12, 6 }; static char *ppsz_sizes_text[] = { N_("Smaller"), N_("Small"), N_("Normal"), N_("Large"), N_("Larger") }; @@ -250,7 +250,7 @@ static int Create( vlc_object_t *p_this ) FT_HAS_KERNING(p_vout->p_text_renderer_data->p_face); var_Get( p_vout, "freetype-fontsize", &val ); - + if( val.i_int ) { i_fontsize = val.i_int; @@ -472,7 +472,7 @@ static void RenderYUY2( vout_thread_t *p_vout, picture_t *p_pic, int i_pic_width = p_pic->p[0].i_visible_pitch; p_in = p_pic->p[0].p_pixels; - + if ( p_string->i_flags & OSD_ALIGN_BOTTOM ) { pen_y = p_pic->p[0].i_lines - p_string->i_height - @@ -496,7 +496,7 @@ static void RenderYUY2( vout_thread_t *p_vout, picture_t *p_pic, { pen_x = i_pic_width / 2 /2 - p_line->i_width / 2 + p_string->i_x_margin; } - + for( i = 0; p_line->pp_glyphs[i] != NULL; i++ ) { FT_BitmapGlyph p_glyph = p_line->pp_glyphs[ i ]; @@ -543,7 +543,7 @@ static void RenderRV32( vout_thread_t *p_vout, picture_t *p_pic, line_desc_t *p_line; i_plane = 0; - + for( p_line = p_subpic->p_sys->p_lines; p_line != NULL; p_line = p_line->p_next ) { uint8_t *p_in; @@ -551,7 +551,7 @@ static void RenderRV32( vout_thread_t *p_vout, picture_t *p_pic, int i_pic_width = p_pic->p[ i_plane ].i_visible_pitch; p_in = p_pic->p[ i_plane ].p_pixels; - + if ( p_string->i_flags & OSD_ALIGN_BOTTOM ) { pen_y = p_pic->p[ i_plane ].i_lines - p_string->i_height - @@ -576,7 +576,7 @@ static void RenderRV32( vout_thread_t *p_vout, picture_t *p_pic, pen_x = i_pic_width / 2 / 4 - p_line->i_width / 2 + p_string->i_x_margin; } - + for( i = 0; p_line->pp_glyphs[i] != NULL; i++ ) { FT_BitmapGlyph p_glyph = p_line->pp_glyphs[ i ]; @@ -640,7 +640,7 @@ static int AddText ( vout_thread_t *p_vout, byte_t *psz_string, uint32_t *p_unicode_string, i_char; int i_string_length; iconv_t iconv_handle; - + FT_BBox line; FT_BBox glyph_size; FT_Vector result; @@ -706,7 +706,7 @@ static int AddText ( vout_thread_t *p_vout, byte_t *psz_string, } #if defined(WORDS_BIGENDIAN) iconv_handle = iconv_open( "UCS-4BE", "UTF-8" ); -#else +#else iconv_handle = iconv_open( "UCS-4LE", "UTF-8" ); #endif if( iconv_handle == (iconv_t)-1 ) @@ -732,7 +732,7 @@ static int AddText ( vout_thread_t *p_vout, byte_t *psz_string, *(uint32_t*)p_out_buffer = 0; i_string_length = ( i_out_bytes - i_out_bytes_left ) / sizeof(uint32_t); } - + #if defined(HAVE_FRIBIDI) { uint32_t *p_fribidi_string; @@ -747,7 +747,7 @@ static int AddText ( vout_thread_t *p_vout, byte_t *psz_string, } #endif #endif - + /* Calculate relative glyph positions and a bounding box for the * entire string */ p_line = NewLine( psz_string ); @@ -876,7 +876,7 @@ static void FreeString( subpicture_t *p_subpic ) free( p_line->p_glyph_pos ); free( p_line ); } - + free( p_string->psz_text ); free( p_string ); } diff --git a/src/libvlc.h b/src/libvlc.h index ab6d64eed9fe7641a478ee2dab6b92f6bbafab13..365f83585ee00f407445824c91c3a0d500fb163e 100644 --- a/src/libvlc.h +++ b/src/libvlc.h @@ -2,7 +2,7 @@ * libvlc.h: main libvlc header ***************************************************************************** * Copyright (C) 1998-2002 VideoLAN - * $Id: libvlc.h,v 1.107 2003/11/16 21:07:31 gbazin Exp $ + * $Id: libvlc.h,v 1.108 2003/11/22 00:41:07 titer Exp $ * * Authors: Vincent Seguin * Samuel Hocevar @@ -428,7 +428,7 @@ static char *ppsz_language_text[] = #define PLAYLIST_CAT_LONGTEXT N_( \ "These options define the behaviour of the playlist. Some " \ - "of them can be overriden in the playlist dialog box." ) + "of them can be overriden in the playlist dialog box." ) #define RANDOM_TEXT N_("Play files randomly forever") #define RANDOM_LONGTEXT N_( \ @@ -439,7 +439,7 @@ static char *ppsz_language_text[] = #define LOOP_LONGTEXT N_( \ "If you want VLC to keep playing the playlist indefinitely then enable " \ "this option.") - + #define REPEAT_TEXT N_("Repeat the current playlistitem") #define REPEAT_LONGTEXT N_( \ "When this is active VLC will keep playing the current playlistitem " \ @@ -593,7 +593,7 @@ vlc_module_begin(); add_module( "intf", "interface", NULL, NULL, INTF_TEXT, INTF_LONGTEXT, VLC_TRUE ); change_short('I'); - add_string( "extraintf", NULL, NULL, EXTRAINTF_TEXT, + add_string( "extraintf", NULL, NULL, EXTRAINTF_TEXT, EXTRAINTF_LONGTEXT, VLC_FALSE ); add_integer( "verbose", 0, NULL, VERBOSE_TEXT, VERBOSE_LONGTEXT, VLC_FALSE ); @@ -604,9 +604,9 @@ vlc_module_begin(); VLC_FALSE ); change_string_list( ppsz_language, ppsz_language_text, 0 ); add_bool( "color", 0, NULL, COLOR_TEXT, COLOR_LONGTEXT, VLC_TRUE ); - add_bool( "advanced", 0, NULL, ADVANCED_TEXT, + add_bool( "advanced", 0, NULL, ADVANCED_TEXT, ADVANCED_LONGTEXT, VLC_FALSE ); - add_directory( "search-path", NULL, NULL, INTF_PATH_TEXT, + add_directory( "search-path", NULL, NULL, INTF_PATH_TEXT, INTF_PATH_LONGTEXT, VLC_TRUE ); add_directory( "plugin-path", NULL, NULL, PLUGIN_PATH_TEXT, PLUGIN_PATH_LONGTEXT, VLC_TRUE ); @@ -629,13 +629,13 @@ vlc_module_begin(); #endif add_bool( "spdif", 0, NULL, SPDIF_TEXT, SPDIF_LONGTEXT, VLC_FALSE ); #if 0 - add_bool( "headphone-opt", 0, NULL, HEADPHONE_TEXT, + add_bool( "headphone-opt", 0, NULL, HEADPHONE_TEXT, HEADPHONE_LONGTEXT, VLC_FALSE ); #endif add_integer( "audio-desync", 0, NULL, DESYNC_TEXT, DESYNC_LONGTEXT, VLC_TRUE ); add_string("audio-filter",0,NULL,AUDIO_FILTER_TEXT, AUDIO_FILTER_LONGTEXT,VLC_FALSE); - + /* Video options */ add_category_hint( N_("Video"), VOUT_CAT_LONGTEXT , VLC_FALSE ); add_module( "vout", "video output", NULL, NULL, VOUT_TEXT, VOUT_LONGTEXT, @@ -647,12 +647,12 @@ vlc_module_begin(); add_integer( "align", -1, NULL, ALIGN_TEXT, ALIGN_LONGTEXT, VLC_TRUE ); add_float( "zoom", 1, NULL, ZOOM_TEXT, ZOOM_LONGTEXT, VLC_TRUE ); add_bool( "grayscale", 0, NULL, GRAYSCALE_TEXT, GRAYSCALE_LONGTEXT, VLC_TRUE ); - add_bool( "fullscreen", 0, NULL, FULLSCREEN_TEXT, + add_bool( "fullscreen", 0, NULL, FULLSCREEN_TEXT, FULLSCREEN_LONGTEXT, VLC_FALSE ); #ifndef SYS_DARWIN add_bool( "overlay", 1, NULL, OVERLAY_TEXT, OVERLAY_LONGTEXT, VLC_TRUE ); #endif - add_integer( "spumargin", -1, NULL, SPUMARGIN_TEXT, + add_integer( "spumargin", -1, NULL, SPUMARGIN_TEXT, SPUMARGIN_LONGTEXT, VLC_TRUE ); add_bool( "osd", 1, NULL, OSD_TEXT, OSD_LONGTEXT, VLC_FALSE ); add_module( "filter", "video filter", NULL, NULL, @@ -703,19 +703,19 @@ vlc_module_begin(); /* Stream output options */ add_category_hint( N_("Stream output"), SOUT_CAT_LONGTEXT , VLC_TRUE ); add_string( "sout", NULL, NULL, SOUT_TEXT, SOUT_LONGTEXT, VLC_TRUE ); - add_bool( "sout-display", VLC_FALSE, NULL, SOUT_DISPLAY_TEXT, + add_bool( "sout-display", VLC_FALSE, NULL, SOUT_DISPLAY_TEXT, SOUT_DISPLAY_LONGTEXT, VLC_TRUE ); - add_bool( "sout-keep", VLC_FALSE, NULL, SOUT_KEEP_TEXT, + add_bool( "sout-keep", VLC_FALSE, NULL, SOUT_KEEP_TEXT, SOUT_KEEP_LONGTEXT, VLC_TRUE ); - add_bool( "sout-audio", 1, NULL, SOUT_AUDIO_TEXT, + add_bool( "sout-audio", 1, NULL, SOUT_AUDIO_TEXT, SOUT_AUDIO_LONGTEXT, VLC_TRUE ); - add_bool( "sout-video", 1, NULL, SOUT_VIDEO_TEXT, + add_bool( "sout-video", 1, NULL, SOUT_VIDEO_TEXT, SOUT_VIDEO_LONGTEXT, VLC_TRUE ); add_module( "packetizer", "packetizer", NULL, NULL, PACKETIZER_TEXT, PACKETIZER_LONGTEXT, VLC_TRUE ); - add_module( "mux", "sout mux", NULL, NULL, MUX_TEXT, + add_module( "mux", "sout mux", NULL, NULL, MUX_TEXT, MUX_LONGTEXT, VLC_TRUE ); add_module( "access_output", "sout access", NULL, NULL, ACCESS_OUTPUT_TEXT, ACCESS_OUTPUT_LONGTEXT, VLC_TRUE ); @@ -749,7 +749,7 @@ vlc_module_begin(); add_module( "access", "access", NULL, NULL, ACCESS_TEXT, ACCESS_LONGTEXT, VLC_TRUE ); add_module( "demux", "demux", NULL, NULL, DEMUX_TEXT, DEMUX_LONGTEXT, VLC_TRUE ); -#if !defined(SYS_DARWIN) && defined(PTHREAD_COND_T_IN_PTHREAD_H) +#if !defined(SYS_DARWIN) && !defined(SYS_BEOS) && defined(PTHREAD_COND_T_IN_PTHREAD_H) add_bool( "rt-priority", 0, NULL, RT_PRIORITY_TEXT, RT_PRIORITY_LONGTEXT, VLC_TRUE ); #endif diff --git a/src/misc/threads.c b/src/misc/threads.c index 7205237362fc5636a8d0bea93c437f1e889d66a1..8d018c77d80c0a2eb5ed17902aa335bc214c3784 100644 --- a/src/misc/threads.c +++ b/src/misc/threads.c @@ -2,7 +2,7 @@ * threads.c : threads implementation for the VideoLAN client ***************************************************************************** * Copyright (C) 1999, 2000, 2001, 2002, 2003 VideoLAN - * $Id: threads.c,v 1.43 2003/11/07 19:30:28 massiot Exp $ + * $Id: threads.c,v 1.44 2003/11/22 00:41:07 titer Exp $ * * Authors: Jean-Marc Dressler * Samuel Hocevar @@ -41,10 +41,10 @@ static volatile int i_initializations = 0; #elif defined( ST_INIT_IN_ST_H ) #elif defined( UNDER_CE ) #elif defined( WIN32 ) +#elif defined( HAVE_KERNEL_SCHEDULER_H ) #elif defined( PTHREAD_COND_T_IN_PTHREAD_H ) static pthread_mutex_t once_mutex = PTHREAD_MUTEX_INITIALIZER; #elif defined( HAVE_CTHREADS_H ) -#elif defined( HAVE_KERNEL_SCHEDULER_H ) #endif /***************************************************************************** @@ -81,10 +81,10 @@ int __vlc_threads_init( vlc_object_t *p_this ) #elif defined( UNDER_CE ) #elif defined( WIN32 ) HINSTANCE hInstLib; +#elif defined( HAVE_KERNEL_SCHEDULER_H ) #elif defined( PTHREAD_COND_T_IN_PTHREAD_H ) pthread_mutex_lock( &once_mutex ); #elif defined( HAVE_CTHREADS_H ) -#elif defined( HAVE_KERNEL_SCHEDULER_H ) #endif if( i_status == VLC_THREADS_UNINITIALIZED ) @@ -124,9 +124,9 @@ int __vlc_threads_init( vlc_object_t *p_this ) p_libvlc->b_fast_mutex = 0; p_libvlc->i_win9x_cv = 0; +#elif defined( HAVE_KERNEL_SCHEDULER_H ) #elif defined( PTHREAD_COND_T_IN_PTHREAD_H ) #elif defined( HAVE_CTHREADS_H ) -#elif defined( HAVE_KERNEL_SCHEDULER_H ) #endif vlc_object_create( p_libvlc, VLC_OBJECT_ROOT ); @@ -157,12 +157,12 @@ int __vlc_threads_init( vlc_object_t *p_this ) while( i_status == VLC_THREADS_PENDING ) msleep( THREAD_SLEEP ); #elif defined( WIN32 ) while( i_status == VLC_THREADS_PENDING ) msleep( THREAD_SLEEP ); +#elif defined( HAVE_KERNEL_SCHEDULER_H ) + while( i_status == VLC_THREADS_PENDING ) msleep( THREAD_SLEEP ); #elif defined( PTHREAD_COND_T_IN_PTHREAD_H ) pthread_mutex_unlock( &once_mutex ); #elif defined( HAVE_CTHREADS_H ) while( i_status == VLC_THREADS_PENDING ) msleep( THREAD_SLEEP ); -#elif defined( HAVE_KERNEL_SCHEDULER_H ) - while( i_status == VLC_THREADS_PENDING ) msleep( THREAD_SLEEP ); #endif if( i_status != VLC_THREADS_READY ) @@ -197,6 +197,9 @@ int __vlc_threads_end( vlc_object_t *p_this ) #elif defined( WIN32 ) i_initializations--; +#elif defined( HAVE_KERNEL_SCHEDULER_H ) + i_initializations--; + #elif defined( PTHREAD_COND_T_IN_PTHREAD_H ) pthread_mutex_lock( &once_mutex ); i_initializations--; @@ -205,9 +208,6 @@ int __vlc_threads_end( vlc_object_t *p_this ) #elif defined( HAVE_CTHREADS_H ) i_initializations--; -#elif defined( HAVE_KERNEL_SCHEDULER_H ) - i_initializations--; - #endif return VLC_SUCCESS; } @@ -249,26 +249,6 @@ int __vlc_mutex_init( vlc_object_t *p_this, vlc_mutex_t *p_mutex ) return 0; } -#elif defined( PTHREAD_COND_T_IN_PTHREAD_H ) -# if defined(DEBUG) && defined(SYS_LINUX) - { - /* Create error-checking mutex to detect problems more easily. */ - pthread_mutexattr_t attr; - int i_result; - - pthread_mutexattr_init( &attr ); - pthread_mutexattr_setkind_np( &attr, PTHREAD_MUTEX_ERRORCHECK_NP ); - i_result = pthread_mutex_init( &p_mutex->mutex, &attr ); - pthread_mutexattr_destroy( &attr ); - return( i_result ); - } -# endif - return pthread_mutex_init( &p_mutex->mutex, NULL ); - -#elif defined( HAVE_CTHREADS_H ) - mutex_init( p_mutex ); - return 0; - #elif defined( HAVE_KERNEL_SCHEDULER_H ) /* check the arguments and whether it's already been initialized */ if( p_mutex == NULL ) @@ -290,6 +270,26 @@ int __vlc_mutex_init( vlc_object_t *p_this, vlc_mutex_t *p_mutex ) p_mutex->init = 9999; return B_OK; +#elif defined( PTHREAD_COND_T_IN_PTHREAD_H ) +# if defined(DEBUG) && defined(SYS_LINUX) + { + /* Create error-checking mutex to detect problems more easily. */ + pthread_mutexattr_t attr; + int i_result; + + pthread_mutexattr_init( &attr ); + pthread_mutexattr_setkind_np( &attr, PTHREAD_MUTEX_ERRORCHECK_NP ); + i_result = pthread_mutex_init( &p_mutex->mutex, &attr ); + pthread_mutexattr_destroy( &attr ); + return( i_result ); + } +# endif + return pthread_mutex_init( &p_mutex->mutex, NULL ); + +#elif defined( HAVE_CTHREADS_H ) + mutex_init( p_mutex ); + return 0; + #endif } @@ -324,6 +324,15 @@ int __vlc_mutex_destroy( char * psz_file, int i_line, vlc_mutex_t *p_mutex ) } return 0; +#elif defined( HAVE_KERNEL_SCHEDULER_H ) + if( p_mutex->init == 9999 ) + { + delete_sem( p_mutex->lock ); + } + + p_mutex->init = 0; + return B_OK; + #elif defined( PTHREAD_COND_T_IN_PTHREAD_H ) i_result = pthread_mutex_destroy( &p_mutex->mutex ); if ( i_result ) @@ -335,14 +344,6 @@ int __vlc_mutex_destroy( char * psz_file, int i_line, vlc_mutex_t *p_mutex ) #elif defined( HAVE_CTHREADS_H ) return 0; -#elif defined( HAVE_KERNEL_SCHEDULER_H ) - if( p_mutex->init == 9999 ) - { - delete_sem( p_mutex->lock ); - } - - p_mutex->init = 0; - return B_OK; #endif if( i_result ) @@ -418,18 +419,6 @@ int __vlc_cond_init( vlc_object_t *p_this, vlc_cond_t *p_condvar ) return !p_condvar->semaphore || !p_condvar->event; } -#elif defined( PTHREAD_COND_T_IN_PTHREAD_H ) - return pthread_cond_init( &p_condvar->cond, NULL ); - -#elif defined( HAVE_CTHREADS_H ) - /* condition_init() */ - spin_lock_init( &p_condvar->lock ); - cthread_queue_init( &p_condvar->queue ); - p_condvar->name = 0; - p_condvar->implications = 0; - - return 0; - #elif defined( HAVE_KERNEL_SCHEDULER_H ) if( !p_condvar ) { @@ -444,6 +433,19 @@ int __vlc_cond_init( vlc_object_t *p_this, vlc_cond_t *p_condvar ) p_condvar->thread = -1; p_condvar->init = 9999; return 0; + +#elif defined( PTHREAD_COND_T_IN_PTHREAD_H ) + return pthread_cond_init( &p_condvar->cond, NULL ); + +#elif defined( HAVE_CTHREADS_H ) + /* condition_init() */ + spin_lock_init( &p_condvar->lock ); + cthread_queue_init( &p_condvar->queue ); + p_condvar->name = 0; + p_condvar->implications = 0; + + return 0; + #endif } @@ -473,6 +475,10 @@ int __vlc_cond_destroy( char * psz_file, int i_line, vlc_cond_t *p_condvar ) i_result = !CloseHandle( p_condvar->event ) || !CloseHandle( p_condvar->semaphore ); +#elif defined( HAVE_KERNEL_SCHEDULER_H ) + p_condvar->init = 0; + return 0; + #elif defined( PTHREAD_COND_T_IN_PTHREAD_H ) i_result = pthread_cond_destroy( &p_condvar->cond ); if ( i_result ) @@ -484,9 +490,6 @@ int __vlc_cond_destroy( char * psz_file, int i_line, vlc_cond_t *p_condvar ) #elif defined( HAVE_CTHREADS_H ) return 0; -#elif defined( HAVE_KERNEL_SCHEDULER_H ) - p_condvar->init = 0; - return 0; #endif if( i_result ) @@ -549,6 +552,11 @@ int __vlc_thread_create( vlc_object_t *p_this, char * psz_file, int i_line, i_ret = ( p_this->thread_id ? 0 : 1 ); +#elif defined( HAVE_KERNEL_SCHEDULER_H ) + p_this->thread_id = spawn_thread( (thread_func)func, psz_name, + i_priority, p_data ); + i_ret = resume_thread( p_this->thread_id ); + #elif defined( PTHREAD_COND_T_IN_PTHREAD_H ) i_ret = pthread_create( &p_this->thread_id, NULL, func, p_data ); @@ -588,11 +596,6 @@ int __vlc_thread_create( vlc_object_t *p_this, char * psz_file, int i_line, p_this->thread_id = cthread_fork( (cthread_fn_t)func, (any_t)p_data ); i_ret = 0; -#elif defined( HAVE_KERNEL_SCHEDULER_H ) - p_this->thread_id = spawn_thread( (thread_func)func, psz_name, - i_priority, p_data ); - i_ret = resume_thread( p_this->thread_id ); - #endif if( i_ret == 0 ) @@ -662,7 +665,7 @@ int __vlc_thread_set_priority( vlc_object_t *p_this, char * psz_file, if ( (i_error = pthread_setschedparam( pthread_self(), i_policy, ¶m )) ) { - msg_Warn( p_this, "couldn't set thread priority (%s:%d): %s", + msg_Warn( p_this, "couldn't set thread priority (%s:%d): %s", psz_file, i_line, strerror(i_error) ); i_priority = 0; } @@ -703,6 +706,10 @@ void __vlc_thread_join( vlc_object_t *p_this, char * psz_file, int i_line ) #elif defined( WIN32 ) WaitForSingleObject( p_this->thread_id, INFINITE ); +#elif defined( HAVE_KERNEL_SCHEDULER_H ) + int32_t exit_value; + wait_for_thread( p_this->thread_id, &exit_value ); + #elif defined( PTHREAD_COND_T_IN_PTHREAD_H ) i_ret = pthread_join( p_this->thread_id, NULL ); @@ -710,10 +717,6 @@ void __vlc_thread_join( vlc_object_t *p_this, char * psz_file, int i_line ) cthread_join( p_this->thread_id ); i_ret = 1; -#elif defined( HAVE_KERNEL_SCHEDULER_H ) - int32_t exit_value; - wait_for_thread( p_this->thread_id, &exit_value ); - #endif if( i_ret )