+ if ( !error && *image && *format == mlt_image_yuv422 )
+ {
+ // Get the following frame's image
+ error = mlt_frame_get_image( next_frame, &next_image, format, &next_width, &next_height, 0 );
+
+ if ( !error && next_image && *format == mlt_image_yuv422 )
+ {
+ yadif_filter *yadif = init_yadif( *width, *height );
+ if ( yadif )
+ {
+ const int order = mlt_properties_get_int( properties, "top_field_first" );
+ const int pitch = *width << 1;
+ const int parity = 0;
+
+ // Convert packed to planar
+ YUY2ToPlanes( *image, pitch, *width, *height, yadif->ysrc,
+ yadif->ypitch, yadif->usrc, yadif->vsrc, yadif->uvpitch, yadif->cpu );
+ YUY2ToPlanes( previous_image, pitch, *width, *height, yadif->yprev,
+ yadif->ypitch, yadif->uprev, yadif->vprev, yadif->uvpitch, yadif->cpu );
+ YUY2ToPlanes( next_image, pitch, *width, *height, yadif->ynext,
+ yadif->ypitch, yadif->unext, yadif->vnext, yadif->uvpitch, yadif->cpu );
+
+ // Deinterlace each plane
+ filter_plane( mode, yadif->ydest, yadif->ypitch, yadif->yprev, yadif->ysrc,
+ yadif->ynext, yadif->ypitch, *width, *height, parity, order, yadif->cpu);
+ filter_plane( mode, yadif->udest, yadif->uvpitch,yadif->uprev, yadif->usrc,
+ yadif->unext, yadif->uvpitch, *width >> 1, *height, parity, order, yadif->cpu);
+ filter_plane( mode, yadif->vdest, yadif->uvpitch, yadif->vprev, yadif->vsrc,
+ yadif->vnext, yadif->uvpitch, *width >> 1, *height, parity, order, yadif->cpu);
+
+ // Convert planar to packed
+ YUY2FromPlanes( *image, pitch, *width, *height, yadif->ydest,
+ yadif->ypitch, yadif->udest, yadif->vdest, yadif->uvpitch, yadif->cpu);
+
+ close_yadif( yadif );
+ }
+ }
+ }
+ }
+ else
+ {
+ // Get the current frame's image
+ error = mlt_frame_get_image( frame, image, format, width, height, 0 );
+ }
+ return error;