]> git.sesse.net Git - vlc/commitdiff
Fixed image_Convert by properly overriding release policy.
authorLaurent Aimar <fenrir@videolan.org>
Thu, 17 Jul 2008 19:23:19 +0000 (21:23 +0200)
committerLaurent Aimar <fenrir@videolan.org>
Thu, 17 Jul 2008 19:24:44 +0000 (21:24 +0200)
src/misc/image.c

index 4fc679a7a2947bec82263df0270e8b9f1642c95e..09c399f6504b499b6815a1e2f3709a108e424683 100644 (file)
@@ -70,6 +70,9 @@ static filter_t *CreateFilter( vlc_object_t *, es_format_t *,
 static void DeleteFilter( filter_t * );
 
 static vlc_fourcc_t Ext2Fourcc( const char * );
+
+static void video_release_buffer_dummy( picture_t *p_pic );
+
 /*static const char *Fourcc2Ext( vlc_fourcc_t );*/
 
 /**
@@ -445,8 +448,14 @@ static picture_t *ImageConvert( image_handler_t *p_image, picture_t *p_pic,
         p_image->p_filter->fmt_out.video = *p_fmt_out;
     }
 
-    p_pic->i_refcount++; /* pf_video_filter() will call pf_release() */
+    /* We have to override the current release scheme for p_pic.
+     * (You cannot suppose what pf_release will do or even if it
+     * is defined) */
+    void (*pf_sav_release)( picture_t * ) = p_pic->pf_release;
+
+    p_pic->pf_release = video_release_buffer_dummy;
     p_pif = p_image->p_filter->pf_video_filter( p_image->p_filter, p_pic );
+    p_pic->pf_release = pf_sav_release;
 
     if( p_fmt_in->i_chroma == p_fmt_out->i_chroma &&
         p_fmt_in->i_width == p_fmt_out->i_width &&
@@ -563,6 +572,10 @@ static const char *Fourcc2Ext( vlc_fourcc_t i_codec )
 }
 */
 
+static void video_release_buffer_dummy( picture_t *p_pic )
+{
+    VLC_UNUSED( p_pic );
+}
 static void video_release_buffer( picture_t *p_pic )
 {
     if( --p_pic->i_refcount > 0 ) return;