]> git.sesse.net Git - vlc/commitdiff
* modules/stream_out/transcode.c, src/input/decoder.c, src/input/control.c: fixed...
authorGildas Bazin <gbazin@videolan.org>
Wed, 31 Aug 2005 20:37:23 +0000 (20:37 +0000)
committerGildas Bazin <gbazin@videolan.org>
Wed, 31 Aug 2005 20:37:23 +0000 (20:37 +0000)
modules/stream_out/transcode.c
src/input/control.c
src/input/decoder.c

index e7ee6e53c369749742875eac84f4f42f98935f6d..eeb8f18cb4b22622255c008a354a0b486a259765 100644 (file)
@@ -849,7 +849,11 @@ static sout_stream_id_t *Add( sout_stream_t *p_stream, es_format_t *p_fmt )
         id->id = p_sys->p_out->pf_add( p_sys->p_out, &id->p_encoder->fmt_out );
         id->b_transcode = VLC_TRUE;
 
-        if( !id->id ) goto error;
+        if( !id->id )
+        {
+            transcode_audio_close( p_stream, id );
+            goto error;
+        }
 
         date_Init( &id->interpolated_pts, p_fmt->audio.i_rate, 1 );
     }
@@ -904,7 +908,11 @@ static sout_stream_id_t *Add( sout_stream_t *p_stream, es_format_t *p_fmt )
         id->id = p_sys->p_out->pf_add( p_sys->p_out, &id->p_encoder->fmt_out );
         id->b_transcode = VLC_TRUE;
 
-        if( !id->id ) goto error;
+        if( !id->id )
+        {
+            transcode_spu_close( p_stream, id );
+            goto error;
+        }
     }
     else if( p_fmt->i_cat == SPU_ES && p_sys->b_soverlay )
     {
@@ -955,6 +963,7 @@ static sout_stream_id_t *Add( sout_stream_t *p_stream, es_format_t *p_fmt )
     if( id->p_encoder )
     {
         vlc_object_detach( id->p_encoder );
+        es_format_Clean( &id->p_encoder->fmt_out );
         vlc_object_destroy( id->p_encoder );
     }
 
@@ -996,6 +1005,7 @@ static int Del( sout_stream_t *p_stream, sout_stream_id_t *id )
     if( id->p_encoder )
     {
         vlc_object_detach( id->p_encoder );
+        es_format_Clean( &id->p_encoder->fmt_out );
         vlc_object_destroy( id->p_encoder );
     }
 
@@ -2352,13 +2362,13 @@ static int transcode_osd_new( sout_stream_t *p_stream, sout_stream_id_t *id )
 {
     sout_stream_sys_t *p_sys = p_stream->p_sys;
     es_format_t fmt;
-    
+
     fmt.i_cat = SPU_ES;
     fmt.i_id = 0xbd1f; /* pid ?? */
     fmt.i_group = 3;   /* pmt entry ?? */
     fmt.i_codec = VLC_FOURCC( 'Y', 'U', 'V', 'A' );
     fmt.psz_language = strdup( "osd" );
-    
+
     id = malloc( sizeof( sout_stream_id_t ) );
     memset( id, 0, sizeof(sout_stream_id_t) );
 
index d03b339f7e77c5a36eae763ef3271240c6f8ab4d..3170f3cc64df53dfdc1d8041467dd8cc81c207ff 100644 (file)
@@ -196,6 +196,7 @@ int input_vaControl( input_thread_t *p_input, int i_query, va_list args )
             NotifyPlaylist( p_input );
         }
         return VLC_SUCCESS;
+
         case INPUT_DEL_INFO:
         {
             char *psz_cat = (char *)va_arg( args, char * );
@@ -224,6 +225,10 @@ int input_vaControl( input_thread_t *p_input, int i_query, va_list args )
             {
                 if( !strcmp( p_cat->pp_infos[i]->psz_name, psz_name ) )
                 {
+                    free( p_cat->pp_infos[i]->psz_name );
+                    if( p_cat->pp_infos[i]->psz_value )
+                        free( p_cat->pp_infos[i]->psz_value );
+                    free( p_cat->pp_infos[i] );
                     REMOVE_ELEM( p_cat->pp_infos, p_cat->i_infos, i );
                     break;
                 }
index 576749454c284426aff60179251c2826df2a1dcb..7589356e91da8867d7e93ec8148ffb419fa938eb 100644 (file)
@@ -537,6 +537,8 @@ static int DecoderDecode( decoder_t *p_dec, block_t *p_block )
                 p_dec->p_owner->sout.i_id = p_dec->fmt_in.i_id;
                 if( p_dec->fmt_in.psz_language )
                 {
+                    if( p_dec->p_owner->sout.psz_language )
+                        free( p_dec->p_owner->sout.psz_language );
                     p_dec->p_owner->sout.psz_language =
                         strdup( p_dec->fmt_in.psz_language );
                 }
@@ -547,7 +549,8 @@ static int DecoderDecode( decoder_t *p_dec, block_t *p_block )
 
                 if( p_dec->p_owner->p_sout_input == NULL )
                 {
-                    msg_Err( p_dec, "cannot create packetizer output" );
+                    msg_Err( p_dec, "cannot create packetizer output (%4.4s)",
+                             (char *)&p_dec->p_owner->sout.i_codec );
                     p_dec->b_error = VLC_TRUE;
 
                     while( p_sout_block )