]> git.sesse.net Git - vlc/blobdiff - modules/codec/realaudio.c
Make shine really not re-entrant
[vlc] / modules / codec / realaudio.c
index b68cffc9bda378ab47641a7b3b9ad1184d6e68cb..2d0fcca3159cbbcdb38eaf694c22cae64f233784 100644 (file)
@@ -76,7 +76,9 @@ static int  OpenDll( decoder_t * );
 #ifndef WIN32
 static int  OpenNativeDll( decoder_t *, char *, char * );
 #endif
+#if defined(LOADER) || defined(WIN32)
 static int  OpenWin32Dll( decoder_t *, char *, char * );
+#endif
 static void CloseDll( decoder_t * );
 
 static aout_buffer_t *Decode( decoder_t *, block_t ** );
@@ -154,8 +156,10 @@ typedef struct __attribute__((__packed__)) {
     void* extradata;
 } wra_init_t;
 
+#if 0 /* I have no idea what this is doing here */
 void *__builtin_new(unsigned long size) {return malloc(size);}
 void __builtin_delete(void *p) {free(p);}
+#endif
 
 static const int pi_channels_maps[7] =
 {
@@ -270,7 +274,7 @@ static int OpenDll( decoder_t *p_dec )
     int i, i_result;
 
     /** Find the good path for the dlls.**/
-    char *ppsz_path[] =
+    const char *ppsz_path[] =
     {
       ".",
 #ifndef WIN32
@@ -349,7 +353,7 @@ static int OpenDll( decoder_t *p_dec )
         if( asprintf( &psz_dll, "%s/%4.4s.so.6.0", ppsz_path[i],
                   (char *)&p_dec->fmt_in.i_codec ) != -1 )
         {
-            i_result = OpenNativeDll( p_dec, ppsz_path[i], psz_dll );
+            i_result = OpenNativeDll( p_dec, (char *)ppsz_path[i], psz_dll );
             free( psz_dll );
             if( i_result == VLC_SUCCESS ) return VLC_SUCCESS;
         }
@@ -358,7 +362,7 @@ static int OpenDll( decoder_t *p_dec )
         if( asprintf( &psz_dll, "%s/%4.4s.so", ppsz_path[i],
                   (char *)&p_dec->fmt_in.i_codec ) != -1 )
         {
-            i_result = OpenNativeDll( p_dec, ppsz_path[i], psz_dll );
+            i_result = OpenNativeDll( p_dec, (char *)ppsz_path[i], psz_dll );
             free( psz_dll );
             if( i_result == VLC_SUCCESS ) return VLC_SUCCESS;
         }
@@ -503,9 +507,9 @@ static int OpenNativeDll( decoder_t *p_dec, char *psz_path, char *psz_dll )
 }
 #endif /* Win32 */
 
+#if defined(LOADER) || defined(WIN32)
 static int OpenWin32Dll( decoder_t *p_dec, char *psz_path, char *psz_dll )
 {
-#if defined(LOADER) || defined(WIN32)
     decoder_sys_t *p_sys = p_dec->p_sys;
     void *handle = 0, *context = 0;
     unsigned int i_result;
@@ -610,10 +614,10 @@ static int OpenWin32Dll( decoder_t *p_dec, char *psz_path, char *psz_dll )
     if( context ) p_sys->wraFreeDecoder( context );
     if( context ) p_sys->wraCloseCodec( context );
     FreeLibrary( handle );
-#endif
 
     return VLC_EGENERIC;
 }
+#endif
 
 /*****************************************************************************
  * CloseDll:
@@ -696,7 +700,7 @@ static aout_buffer_t *Decode( decoder_t *p_dec, block_t **pp_block )
 #endif
 
     /* Date management */
-    if( p_block->i_pts > 0 &&
+    if( p_block->i_pts > VLC_TS_INVALID &&
         p_block->i_pts != date_Get( &p_sys->end_date ) )
     {
         date_Set( &p_sys->end_date, p_block->i_pts );
@@ -719,9 +723,9 @@ static aout_buffer_t *Decode( decoder_t *p_dec, block_t **pp_block )
         memcpy( p_aout_buffer->p_buffer, p_sys->p_out, p_sys->i_out );
 
         /* Date management */
-        p_aout_buffer->start_date = date_Get( &p_sys->end_date );
-        p_aout_buffer->end_date =
-            date_Increment( &p_sys->end_date, i_samples );
+        p_aout_buffer->i_pts = date_Get( &p_sys->end_date );
+        p_aout_buffer->i_length = date_Increment( &p_sys->end_date, i_samples )
+                                  - p_aout_buffer->i_pts;
     }
 
     block_Release( p_block );