[vlc-commits] commit: transcode: destroy spu on transcode_spu_close (Ilkka Ollakka )

git at videolan.org git at videolan.org
Wed Sep 22 11:53:27 CEST 2010


vlc | branch: master | Ilkka Ollakka <ileoo at videolan.org> | Wed Sep 22 12:48:41 2010 +0300| [41b8c2e1f660c767ee7a96ab69204b94b1470ca8] | committer: Ilkka Ollakka 

transcode: destroy spu on transcode_spu_close

Fixes issue for me when doing transcode{}:gather: --sout-keep and subtitle
overlaying from dvbs. Otherwise keeps last subtitles on video if new channel
doesn't contain dvbs track.

also consistenty as spu_Create is called on transcode_spu_new()

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=41b8c2e1f660c767ee7a96ab69204b94b1470ca8
---

 modules/stream_out/transcode/spu.c       |   11 +++++++++--
 modules/stream_out/transcode/transcode.c |    2 +-
 modules/stream_out/transcode/transcode.h |    2 +-
 3 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/modules/stream_out/transcode/spu.c b/modules/stream_out/transcode/spu.c
index 85f45d3..3f1540b 100644
--- a/modules/stream_out/transcode/spu.c
+++ b/modules/stream_out/transcode/spu.c
@@ -99,8 +99,9 @@ int transcode_spu_new( sout_stream_t *p_stream, sout_stream_id_t *id )
     return VLC_SUCCESS;
 }
 
-void transcode_spu_close( sout_stream_id_t *id)
+void transcode_spu_close( sout_stream_t *p_stream, sout_stream_id_t *id)
 {
+    sout_stream_sys_t *p_sys = p_stream->p_sys;
     /* Close decoder */
     if( id->p_decoder->p_module )
         module_unneed( id->p_decoder, id->p_decoder->p_module );
@@ -110,6 +111,12 @@ void transcode_spu_close( sout_stream_id_t *id)
     /* Close encoder */
     if( id->p_encoder->p_module )
         module_unneed( id->p_encoder, id->p_encoder->p_module );
+
+    if( p_sys->p_spu )
+    {
+        spu_Destroy( p_sys->p_spu );
+        p_sys->p_spu = NULL;
+    }
 }
 
 int transcode_spu_process( sout_stream_t *p_stream,
@@ -179,7 +186,7 @@ bool transcode_spu_add( sout_stream_t *p_stream, es_format_t *p_fmt,
 
         if( !id->id )
         {
-            transcode_spu_close( id );
+            transcode_spu_close( p_stream, id );
             return false;
         }
     }
diff --git a/modules/stream_out/transcode/transcode.c b/modules/stream_out/transcode/transcode.c
index 6db76ca..fd5fad2 100644
--- a/modules/stream_out/transcode/transcode.c
+++ b/modules/stream_out/transcode/transcode.c
@@ -616,7 +616,7 @@ static int Del( sout_stream_t *p_stream, sout_stream_id_t *id )
             if( p_sys->b_osd )
                 transcode_osd_close( p_stream, id );
             else
-                transcode_spu_close( id );
+                transcode_spu_close( p_stream, id );
             break;
         }
     }
diff --git a/modules/stream_out/transcode/transcode.h b/modules/stream_out/transcode/transcode.h
index 23f9ab7..cde0072 100644
--- a/modules/stream_out/transcode/transcode.h
+++ b/modules/stream_out/transcode/transcode.h
@@ -107,7 +107,7 @@ bool transcode_osd_add    ( sout_stream_t *, es_format_t *, sout_stream_id_t *);
 /* SPU */
 
 int  transcode_spu_new    ( sout_stream_t *, sout_stream_id_t * );
-void transcode_spu_close  ( sout_stream_id_t * );
+void transcode_spu_close  ( sout_stream_t *, sout_stream_id_t * );
 int  transcode_spu_process( sout_stream_t *, sout_stream_id_t *,
                                    block_t *, block_t ** );
 bool transcode_spu_add    ( sout_stream_t *, es_format_t *, sout_stream_id_t *);



More information about the vlc-commits mailing list