Commit eae53f7c authored by Eric Petit's avatar Eric Petit

+ modules/misc/freetype.c: fixed a couple of typos

 + *threads*, src/libvlc.h:
   test HAVE_KERNEL_SCHEDULER_H before PTHREAD_COND_T_IN_PTHREAD_H
   for now because Zeta now has a pthread implementation but it's doesn't
   seem to be (enough) POSIX compliant atm.
parent 09d99720
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
* This header provides portable declarations for mutexes & conditions * This header provides portable declarations for mutexes & conditions
***************************************************************************** *****************************************************************************
* Copyright (C) 1999, 2002 VideoLAN * 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 <polux@via.ecp.fr> * Authors: Jean-Marc Dressler <polux@via.ecp.fr>
* Samuel Hocevar <sam@via.ecp.fr> * Samuel Hocevar <sam@via.ecp.fr>
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or * the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
...@@ -42,6 +42,11 @@ ...@@ -42,6 +42,11 @@
#elif defined( WIN32 ) #elif defined( WIN32 )
# include <process.h> /* Win32 API */ # include <process.h> /* Win32 API */
#elif defined( HAVE_KERNEL_SCHEDULER_H ) /* BeOS */
# include <kernel/OS.h>
# include <kernel/scheduler.h>
# include <byteorder.h>
#elif defined( PTHREAD_COND_T_IN_PTHREAD_H ) /* pthreads (like Linux & BSD) */ #elif defined( PTHREAD_COND_T_IN_PTHREAD_H ) /* pthreads (like Linux & BSD) */
# include <pthread.h> # include <pthread.h>
# ifdef DEBUG # ifdef DEBUG
...@@ -54,11 +59,6 @@ ...@@ -54,11 +59,6 @@
#elif defined( HAVE_CTHREADS_H ) /* GNUMach */ #elif defined( HAVE_CTHREADS_H ) /* GNUMach */
# include <cthreads.h> # include <cthreads.h>
#elif defined( HAVE_KERNEL_SCHEDULER_H ) /* BeOS */
# include <kernel/OS.h>
# include <kernel/scheduler.h>
# include <byteorder.h>
#else #else
# error no threads available on your system ! # error no threads available on your system !
...@@ -76,6 +76,13 @@ ...@@ -76,6 +76,13 @@
# define VLC_THREAD_PRIORITY_VIDEO (-47) # define VLC_THREAD_PRIORITY_VIDEO (-47)
# define VLC_THREAD_PRIORITY_OUTPUT 37 # 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) #elif defined(PTHREAD_COND_T_IN_PTHREAD_H)
# define VLC_THREAD_PRIORITY_LOW 0 # define VLC_THREAD_PRIORITY_LOW 0
# define VLC_THREAD_PRIORITY_INPUT 20 # define VLC_THREAD_PRIORITY_INPUT 20
...@@ -97,13 +104,6 @@ ...@@ -97,13 +104,6 @@
# define VLC_THREAD_PRIORITY_HIGHEST \ # define VLC_THREAD_PRIORITY_HIGHEST \
(IS_WINNT ? THREAD_PRIORITY_TIME_CRITICAL : 0) (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 #else
# define VLC_THREAD_PRIORITY_LOW 0 # define VLC_THREAD_PRIORITY_LOW 0
# define VLC_THREAD_PRIORITY_INPUT 0 # define VLC_THREAD_PRIORITY_INPUT 0
...@@ -172,6 +172,29 @@ typedef struct ...@@ -172,6 +172,29 @@ typedef struct
vlc_object_t * p_this; vlc_object_t * p_this;
} vlc_cond_t; } 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 ) #elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
typedef pthread_t vlc_thread_t; typedef pthread_t vlc_thread_t;
typedef struct typedef struct
...@@ -211,28 +234,5 @@ typedef struct ...@@ -211,28 +234,5 @@ typedef struct
vlc_object_t * p_this; vlc_object_t * p_this;
} vlc_cond_t; } 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 #endif
...@@ -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, 2002 VideoLAN * 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 <polux@via.ecp.fr> * Authors: Jean-Marc Dressler <polux@via.ecp.fr>
* Samuel Hocevar <sam@via.ecp.fr> * Samuel Hocevar <sam@via.ecp.fr>
...@@ -93,18 +93,6 @@ static inline int __vlc_mutex_lock( char * psz_file, int i_line, ...@@ -93,18 +93,6 @@ static inline int __vlc_mutex_lock( char * psz_file, int i_line,
} }
i_result = 0; 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 ) #elif defined( HAVE_KERNEL_SCHEDULER_H )
if( p_mutex == NULL ) if( p_mutex == NULL )
{ {
...@@ -118,6 +106,19 @@ static inline int __vlc_mutex_lock( char * psz_file, int i_line, ...@@ -118,6 +106,19 @@ static inline int __vlc_mutex_lock( char * psz_file, int i_line,
{ {
i_result = acquire_sem( p_mutex->lock ); 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 #endif
if( i_result ) if( i_result )
...@@ -164,18 +165,6 @@ static inline int __vlc_mutex_unlock( char * psz_file, int i_line, ...@@ -164,18 +165,6 @@ static inline int __vlc_mutex_unlock( char * psz_file, int i_line,
} }
i_result = 0; 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 ) #elif defined( HAVE_KERNEL_SCHEDULER_H )
if( p_mutex == NULL ) if( p_mutex == NULL )
{ {
...@@ -190,6 +179,19 @@ static inline int __vlc_mutex_unlock( char * psz_file, int i_line, ...@@ -190,6 +179,19 @@ static inline int __vlc_mutex_unlock( char * psz_file, int i_line,
release_sem( p_mutex->lock ); release_sem( p_mutex->lock );
return B_OK; 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 #endif
if( i_result ) if( i_result )
...@@ -279,22 +281,6 @@ static inline int __vlc_cond_signal( char * psz_file, int i_line, ...@@ -279,22 +281,6 @@ static inline int __vlc_cond_signal( char * psz_file, int i_line,
} }
i_result = 0; 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 ) #elif defined( HAVE_KERNEL_SCHEDULER_H )
if( p_condvar == NULL ) if( p_condvar == NULL )
{ {
...@@ -331,6 +317,23 @@ static inline int __vlc_cond_signal( char * psz_file, int i_line, ...@@ -331,6 +317,23 @@ static inline int __vlc_cond_signal( char * psz_file, int i_line,
} }
i_result = 0; 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 #endif
if( i_result ) if( i_result )
...@@ -425,22 +428,6 @@ static inline int __vlc_cond_broadcast( char * psz_file, int i_line, ...@@ -425,22 +428,6 @@ static inline int __vlc_cond_broadcast( char * psz_file, int i_line,
} }
i_result = 0; 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 ) #elif defined( HAVE_KERNEL_SCHEDULER_H )
if( p_condvar == NULL ) if( p_condvar == NULL )
{ {
...@@ -477,6 +464,23 @@ static inline int __vlc_cond_broadcast( char * psz_file, int i_line, ...@@ -477,6 +464,23 @@ static inline int __vlc_cond_broadcast( char * psz_file, int i_line,
} }
i_result = 0; 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 #endif
if( i_result ) if( i_result )
...@@ -599,6 +603,31 @@ static inline int __vlc_cond_wait( char * psz_file, int i_line, ...@@ -599,6 +603,31 @@ static inline int __vlc_cond_wait( char * psz_file, int i_line,
i_result = 0; 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 ) #elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
# ifdef DEBUG # ifdef DEBUG
...@@ -638,31 +667,6 @@ static inline int __vlc_cond_wait( char * psz_file, int i_line, ...@@ -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 ); condition_wait( (condition_t)p_condvar, (mutex_t)p_mutex );
i_result = 0; 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 #endif
if( i_result ) if( i_result )
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* freetype.c : Put text on the video, using freetype2 * freetype.c : Put text on the video, using freetype2
***************************************************************************** *****************************************************************************
* Copyright (C) 2002, 2003 VideoLAN * 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 <sigmunau@idi.ntnu.no> * Authors: Sigmund Augdal <sigmunau@idi.ntnu.no>
* *
...@@ -94,7 +94,7 @@ static line_desc_t *NewLine( byte_t * ); ...@@ -94,7 +94,7 @@ static line_desc_t *NewLine( byte_t * );
#define FONTSIZER_TEXT N_("Font size") #define FONTSIZER_TEXT N_("Font size")
#define FONTSIZER_LONGTEXT N_("The size of the fonts used by the osd module" ) #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"), static char *ppsz_sizes_text[] = { N_("Smaller"), N_("Small"), N_("Normal"),
N_("Large"), N_("Larger") }; N_("Large"), N_("Larger") };
...@@ -250,7 +250,7 @@ static int Create( vlc_object_t *p_this ) ...@@ -250,7 +250,7 @@ static int Create( vlc_object_t *p_this )
FT_HAS_KERNING(p_vout->p_text_renderer_data->p_face); FT_HAS_KERNING(p_vout->p_text_renderer_data->p_face);
var_Get( p_vout, "freetype-fontsize", &val ); var_Get( p_vout, "freetype-fontsize", &val );
if( val.i_int ) if( val.i_int )
{ {
i_fontsize = val.i_int; i_fontsize = val.i_int;
...@@ -472,7 +472,7 @@ static void RenderYUY2( vout_thread_t *p_vout, picture_t *p_pic, ...@@ -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; int i_pic_width = p_pic->p[0].i_visible_pitch;
p_in = p_pic->p[0].p_pixels; p_in = p_pic->p[0].p_pixels;
if ( p_string->i_flags & OSD_ALIGN_BOTTOM ) if ( p_string->i_flags & OSD_ALIGN_BOTTOM )
{ {
pen_y = p_pic->p[0].i_lines - p_string->i_height - 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, ...@@ -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; 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++ ) for( i = 0; p_line->pp_glyphs[i] != NULL; i++ )
{ {
FT_BitmapGlyph p_glyph = p_line->pp_glyphs[ 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, ...@@ -543,7 +543,7 @@ static void RenderRV32( vout_thread_t *p_vout, picture_t *p_pic,
line_desc_t *p_line; line_desc_t *p_line;
i_plane = 0; i_plane = 0;
for( p_line = p_subpic->p_sys->p_lines; p_line != NULL; p_line = p_line->p_next ) for( p_line = p_subpic->p_sys->p_lines; p_line != NULL; p_line = p_line->p_next )
{ {
uint8_t *p_in; uint8_t *p_in;
...@@ -551,7 +551,7 @@ static void RenderRV32( vout_thread_t *p_vout, picture_t *p_pic, ...@@ -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; int i_pic_width = p_pic->p[ i_plane ].i_visible_pitch;
p_in = p_pic->p[ i_plane ].p_pixels; p_in = p_pic->p[ i_plane ].p_pixels;
if ( p_string->i_flags & OSD_ALIGN_BOTTOM ) if ( p_string->i_flags & OSD_ALIGN_BOTTOM )
{ {
pen_y = p_pic->p[ i_plane ].i_lines - p_string->i_height - 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, ...@@ -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 pen_x = i_pic_width / 2 / 4 - p_line->i_width / 2
+ p_string->i_x_margin; + p_string->i_x_margin;
} }
for( i = 0; p_line->pp_glyphs[i] != NULL; i++ ) for( i = 0; p_line->pp_glyphs[i] != NULL; i++ )
{ {
FT_BitmapGlyph p_glyph = p_line->pp_glyphs[ 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, ...@@ -640,7 +640,7 @@ static int AddText ( vout_thread_t *p_vout, byte_t *psz_string,
uint32_t *p_unicode_string, i_char; uint32_t *p_unicode_string, i_char;
int i_string_length; int i_string_length;
iconv_t iconv_handle; iconv_t iconv_handle;
FT_BBox line; FT_BBox line;
FT_BBox glyph_size; FT_BBox glyph_size;
FT_Vector result; FT_Vector result;
...@@ -706,7 +706,7 @@ static int AddText ( vout_thread_t *p_vout, byte_t *psz_string, ...@@ -706,7 +706,7 @@ static int AddText ( vout_thread_t *p_vout, byte_t *psz_string,
} }
#if defined(WORDS_BIGENDIAN) #if defined(WORDS_BIGENDIAN)
iconv_handle = iconv_open( "UCS-4BE", "UTF-8" ); iconv_handle = iconv_open( "UCS-4BE", "UTF-8" );
#else #else
iconv_handle = iconv_open( "UCS-4LE", "UTF-8" ); iconv_handle = iconv_open( "UCS-4LE", "UTF-8" );
#endif #endif
if( iconv_handle == (iconv_t)-1 ) if( iconv_handle == (iconv_t)-1 )
...@@ -732,7 +732,7 @@ static int AddText ( vout_thread_t *p_vout, byte_t *psz_string, ...@@ -732,7 +732,7 @@ static int AddText ( vout_thread_t *p_vout, byte_t *psz_string,
*(uint32_t*)p_out_buffer = 0; *(uint32_t*)p_out_buffer = 0;
i_string_length = ( i_out_bytes - i_out_bytes_left ) / sizeof(uint32_t); i_string_length = ( i_out_bytes - i_out_bytes_left ) / sizeof(uint32_t);
} }
#if defined(HAVE_FRIBIDI) #if defined(HAVE_FRIBIDI)
{ {
uint32_t *p_fribidi_string; uint32_t *p_fribidi_string;
...@@ -747,7 +747,7 @@ static int AddText ( vout_thread_t *p_vout, byte_t *psz_string, ...@@ -747,7 +747,7 @@ static int AddText ( vout_thread_t *p_vout, byte_t *psz_string,
} }
#endif #endif
#endif #endif
/* Calculate relative glyph positions and a bounding box for the /* Calculate relative glyph positions and a bounding box for the
* entire string */ * entire string */
p_line = NewLine( psz_string ); p_line = NewLine( psz_string );
...@@ -876,7 +876,7 @@ static void FreeString( subpicture_t *p_subpic ) ...@@ -876,7 +876,7 @@ static void FreeString( subpicture_t *p_subpic )
free( p_line->p_glyph_pos ); free( p_line->p_glyph_pos );
free( p_line ); free( p_line );
} }
free( p_string->psz_text ); free( p_string->psz_text );
free( p_string ); free( p_string );
} }
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* libvlc.h: main libvlc header * libvlc.h: main libvlc header
***************************************************************************** *****************************************************************************
* Copyright (C) 1998-2002 VideoLAN * 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 <seguin@via.ecp.fr> * Authors: Vincent Seguin <seguin@via.ecp.fr>
* Samue