]> git.sesse.net Git - vlc/blobdiff - modules/codec/avcodec/deinterlace.c
Allocated mod16 D3D surfaces.
[vlc] / modules / codec / avcodec / deinterlace.c
index f44289ab2843913f5cc4db1915fb4af9419587fb..9006346e08204dbe3e6d22b6ad3d6691ebc18c60 100644 (file)
@@ -31,7 +31,6 @@
 
 #include <vlc_common.h>
 #include <vlc_codec.h>
-#include <vlc_vout.h>
 #include <vlc_filter.h>
 
 /* ffmpeg header */
@@ -44,7 +43,6 @@
 #endif
 
 #include "avcodec.h"
-#include "chroma.h"
 
 static picture_t *Deinterlace( filter_t *p_filter, picture_t *p_pic );
 
@@ -75,8 +73,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;
     }
 
@@ -88,8 +87,12 @@ int OpenDeinterlace( vlc_object_t *p_this )
     }
 
     /* 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" );
@@ -122,9 +125,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++ )
@@ -144,7 +150,8 @@ 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;
     }