Slightly smarter version of last change
authorsrowen <srowen@59b500cc-1b3d-0410-9834-0bbf25fbcc57>
Thu, 12 Mar 2009 21:10:53 +0000 (21:10 +0000)
committersrowen <srowen@59b500cc-1b3d-0410-9834-0bbf25fbcc57>
Thu, 12 Mar 2009 21:10:53 +0000 (21:10 +0000)
git-svn-id: http://zxing.googlecode.com/svn/trunk@891 59b500cc-1b3d-0410-9834-0bbf25fbcc57

javame/src/com/google/zxing/client/j2me/SnapshotThread.java

index e64e010..3777be9 100644 (file)
@@ -38,6 +38,7 @@ final class SnapshotThread implements Runnable {
   private final Object waitLock;
   private volatile boolean done;
   private final MultimediaManager multimediaManager;
+  private String bestEncoding;
 
   SnapshotThread(ZXingMIDlet zXingMIDlet) {
     this.zXingMIDlet = zXingMIDlet;
@@ -92,30 +93,12 @@ final class SnapshotThread implements Runnable {
 
   private byte[] takeSnapshot() throws MediaException {
 
-    // Check this property, present on some Nokias?
-    String supportsVideoCapture = System.getProperty("supports.video.capture");
-    if ("false".equals(supportsVideoCapture)) {
-      throw new MediaException("supports.video.capture is false");
-    }
-
-    String bestEncoding = null;
-    String videoSnapshotEncodings = System.getProperty("video.snapshot.encodings");
-    if (videoSnapshotEncodings != null) {
-      // We know explicitly what the camera supports; see if PNG is among them since
-      // Image.createImage() should always support it
-      int pngEncodingStart = videoSnapshotEncodings.indexOf("encoding=png");
-      if (pngEncodingStart >= 0) {
-        int space = videoSnapshotEncodings.indexOf(' ', pngEncodingStart);
-        bestEncoding = space >= 0 ?
-            videoSnapshotEncodings.substring(pngEncodingStart, space) : 
-            videoSnapshotEncodings.substring(pngEncodingStart);
-      }
-    }
+    String bestEncoding = guessBestEncoding();
 
     VideoControl videoControl = zXingMIDlet.getVideoControl();
     byte[] snapshot = null;
     try {
-      snapshot = videoControl.getSnapshot(bestEncoding);
+      snapshot = videoControl.getSnapshot("".equals(bestEncoding) ? null : bestEncoding);
     } catch (MediaException me) {
     }
     if (snapshot == null) {
@@ -129,4 +112,29 @@ final class SnapshotThread implements Runnable {
     return snapshot;
   }
 
+  private synchronized String guessBestEncoding() throws MediaException {
+    if (bestEncoding == null) {
+      // Check this property, present on some Nokias?
+      String supportsVideoCapture = System.getProperty("supports.video.capture");
+      if ("false".equals(supportsVideoCapture)) {
+        throw new MediaException("supports.video.capture is false");
+      }
+
+      bestEncoding = "";
+      String videoSnapshotEncodings = System.getProperty("video.snapshot.encodings");
+      if (videoSnapshotEncodings != null) {
+        // We know explicitly what the camera supports; see if PNG is among them since
+        // Image.createImage() should always support it
+        int pngEncodingStart = videoSnapshotEncodings.indexOf("encoding=png");
+        if (pngEncodingStart >= 0) {
+          int space = videoSnapshotEncodings.indexOf(' ', pngEncodingStart);
+          bestEncoding = space >= 0 ?
+              videoSnapshotEncodings.substring(pngEncodingStart, space) :
+              videoSnapshotEncodings.substring(pngEncodingStart);
+        }
+      }
+    }
+    return bestEncoding;
+  }
+
 }