Search code examples
javafilterxuggle

How can i deinterlace image in Java?


I am using Xuggle to play interlaced video from ip-camera and really need in deinterlace option, which exists in FFMpeg (Xuggle is a java wrapper over FFMpeg library).

Unfortunately, deinterlace option ("-vf yadif", if i'm not mistake) is not exposed by Xuggle. So, i'm interested in either pure java solution of Java BufferedImage deinterlacing or some way to make Xuggle do that.

Now i simply duplicate odd lines and discard even. It is quick but quality of course is not very well.

// Interlaced image
BufferedImage img = (BufferedImage) event.getImage();

//duplicate odd lines
WritableRaster raster = img.getRaster();
for (int i = 0; i < raster.getHeight(); i += 2) {
    int[] arr2  = null;
    raster.setPixels(0, i + 1, raster.getWidth(), 1, 
            raster.getPixels(0, i, raster.getWidth(), 1,arr2));
}    
//now img is deinterlaced

Could somebody help me in this regard?


Solution

  • I used FFMPEG's yadif filter through JNI. Java realisations were very slow.