vp9 codec was slow and produced no keyframes. Trying vp8 instead.
[meviz.git] / src / main / java / eu / svjatoslav / meviz / htmlindexer / metadata / fileTypes / Picture.java
index dfc883f..274b8ca 100755 (executable)
@@ -18,7 +18,6 @@ import java.awt.image.ImageFilter;
 import java.awt.image.ImageProducer;
 import java.io.File;
 import java.io.FileOutputStream;
-import java.io.IOException;
 import java.io.OutputStream;
 import java.util.ArrayList;
 import java.util.List;
@@ -28,12 +27,20 @@ import javax.swing.ImageIcon;
 
 import eu.svjatoslav.commons.file.FilePathParser;
 import eu.svjatoslav.meviz.htmlindexer.Constants;
-import eu.svjatoslav.meviz.htmlindexer.ImageFormatError;
 import eu.svjatoslav.meviz.htmlindexer.Utils;
 import eu.svjatoslav.meviz.htmlindexer.metadata.Dimension;
 
 public class Picture extends AbstractFile {
 
+       private static final long serialVersionUID = -4156533490858298387L;
+
+       private static void ensureNonzeroImageArea(final java.awt.Dimension result) {
+               if (result.width < 1)
+                       result.width = 1;
+               if (result.height < 1)
+                       result.height = 1;
+       }
+
        /**
         * Actual returned target thumbnail size will be adjusted from desired one
         * by attempting to generate as large as possible thumbnail, while not
@@ -55,6 +62,8 @@ public class Picture extends AbstractFile {
                                        desiredTargetDimension.width,
                                        (int) (desiredTargetDimension.width / inputImageWidthToHeightRatio));
 
+                       ensureNonzeroImageArea(result);
+
                        return result;
                } else {
 
@@ -62,6 +71,8 @@ public class Picture extends AbstractFile {
                                        (int) (desiredTargetDimension.height * inputImageWidthToHeightRatio),
                                        desiredTargetDimension.height);
 
+                       ensureNonzeroImageArea(result);
+
                        return result;
                }
        }
@@ -124,19 +135,16 @@ public class Picture extends AbstractFile {
        public static Image scaleImage(final Image srcImage, final int width,
                        final int height) {
 
-               ImageFilter filter;
-               filter = new java.awt.image.AreaAveragingScaleFilter(width, height);
+               final ImageFilter filter = new java.awt.image.AreaAveragingScaleFilter(
+                               width, height);
 
                final ImageProducer prod = new FilteredImageSource(
                                srcImage.getSource(), filter);
 
                final Image newImage = Toolkit.getDefaultToolkit().createImage(prod);
 
-               final ImageIcon imageIcon = new ImageIcon(newImage);
-               return imageIcon.getImage();
-       }
-
-       private static final long serialVersionUID = -4156533490858298387L;;
+               return new ImageIcon(newImage).getImage();
+       };
 
        /**
         * Picture dimensions.
@@ -144,7 +152,7 @@ public class Picture extends AbstractFile {
        private Dimension dimensions;
 
        public Picture(final File parentDirectory, final String fileName)
-                       throws IOException, ImageFormatError {
+                       throws Exception {
                super(parentDirectory, fileName);
        }
 
@@ -175,14 +183,9 @@ public class Picture extends AbstractFile {
        }
 
        @Override
-       public void updateFileMetainfo(final File parentDirectory)
-                       throws IOException {
-               BufferedImage image;
-               try {
-                       image = Utils.getBufferedImage(getFile(parentDirectory));
-               } catch (final ImageFormatError e) {
-                       throw new RuntimeException(e);
-               }
+       public void updateFileMetainfo(final File parentDirectory) throws Exception {
+               final BufferedImage image = Utils
+                               .getBufferedImage(getFile(parentDirectory));
                dimensions = new Dimension(image.getWidth(), image.getHeight());
        }