From 207f83b082dcdf5d96badde0b1d7e898e3fcebba Mon Sep 17 00:00:00 2001 From: srowen Date: Thu, 12 Mar 2009 21:10:53 +0000 Subject: [PATCH] Slightly smarter version of last change git-svn-id: http://zxing.googlecode.com/svn/trunk@891 59b500cc-1b3d-0410-9834-0bbf25fbcc57 --- .../zxing/client/j2me/SnapshotThread.java | 48 +++++++++++-------- 1 file changed, 28 insertions(+), 20 deletions(-) diff --git a/javame/src/com/google/zxing/client/j2me/SnapshotThread.java b/javame/src/com/google/zxing/client/j2me/SnapshotThread.java index e64e010c..3777be9b 100644 --- a/javame/src/com/google/zxing/client/j2me/SnapshotThread.java +++ b/javame/src/com/google/zxing/client/j2me/SnapshotThread.java @@ -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; + } + } -- 2.20.1