]> git.sesse.net Git - vlc/blobdiff - modules/codec/avcodec/deinterlace.c
Fix segfault on 64 bit archs. (0 != NULL)
[vlc] / modules / codec / avcodec / deinterlace.c
index c9299c2b00d32385440b30f501b3f6e2704456e1..fbc553d7016433a6d8eb597b13cccfd0e357b91f 100644 (file)
@@ -75,8 +75,9 @@ int OpenDeinterlace( vlc_object_t *p_this )
     filter_sys_t *p_sys;
 
     /* Check if we can handle that formats */
-    if( GetFfmpegChroma( p_filter->fmt_in.video.i_chroma ) < 0 )
+    if( TestFfmpegChroma( -1, p_filter->fmt_in.i_codec  ) != VLC_SUCCESS )
     {
+        msg_Err( p_filter, "Failed to match chroma type" );
         return VLC_EGENERIC;
     }
 
@@ -84,13 +85,16 @@ int OpenDeinterlace( vlc_object_t *p_this )
     if( ( p_filter->p_sys = p_sys =
           (filter_sys_t *)malloc(sizeof(filter_sys_t)) ) == NULL )
     {
-        msg_Err( p_filter, "out of memory" );
         return VLC_EGENERIC;
     }
 
     /* Misc init */
-    p_sys->i_src_ffmpeg_chroma =
-        GetFfmpegChroma( p_filter->fmt_in.video.i_chroma );
+    p_filter->fmt_in.video.i_chroma = p_filter->fmt_in.i_codec;
+    if( GetFfmpegChroma( &p_sys->i_src_ffmpeg_chroma, p_filter->fmt_in.video ) != VLC_SUCCESS )
+    {
+        msg_Err( p_filter, "Failed to match chroma type" );
+        return VLC_EGENERIC;
+    }
     p_filter->pf_video_filter = Deinterlace;
 
     msg_Dbg( p_filter, "deinterlacing" );
@@ -123,9 +127,12 @@ static picture_t *Deinterlace( filter_t *p_filter, picture_t *p_pic )
     int i, i_res = -1;
 
     /* Request output picture */
-    p_pic_dst = p_filter->pf_vout_buffer_new( p_filter );
+    p_pic_dst = filter_NewPicture( p_filter );
     if( !p_pic_dst )
+    {
+        picture_Release( p_pic );
         return NULL;
+    }
 
     /* Prepare the AVPictures for the conversion */
     for( i = 0; i < p_pic->i_planes; i++ )
@@ -145,15 +152,13 @@ static picture_t *Deinterlace( filter_t *p_filter, picture_t *p_pic )
     if( i_res == -1 )
     {
         msg_Err( p_filter, "deinterlacing picture failed" );
-        p_filter->pf_vout_buffer_del( p_filter, p_pic_dst );
+        filter_DeletePicture( p_filter, p_pic_dst );
+        picture_Release( p_pic );
         return NULL;
     }
-    p_pic_dst->date = p_pic->date;
-    p_pic_dst->b_force = p_pic->b_force;
-    p_pic_dst->i_nb_fields = p_pic->i_nb_fields;
-    p_pic_dst->b_progressive = true;
-    p_pic_dst->b_top_field_first = p_pic->b_top_field_first;
 
-    p_pic->pf_release( p_pic );
+    picture_CopyProperties( p_pic_dst, p_pic );
+    p_pic_dst->b_progressive = true;
+    picture_Release( p_pic );
     return p_pic_dst;
 }