diff --git a/javame/src-basic/com/google/zxing/client/j2me/AdvancedMultimediaManager.java b/javame/src-basic/com/google/zxing/client/j2me/AdvancedMultimediaManager.java index 84e43c298..848464538 100644 --- a/javame/src-basic/com/google/zxing/client/j2me/AdvancedMultimediaManager.java +++ b/javame/src-basic/com/google/zxing/client/j2me/AdvancedMultimediaManager.java @@ -17,7 +17,6 @@ package com.google.zxing.client.j2me; import javax.microedition.media.Controllable; -import javax.microedition.media.MediaException; /** *

See this exact same class under the "src" source root for a full explanation. @@ -34,7 +33,7 @@ final class AdvancedMultimediaManager { // These signatures must match those in the other class exactly - static void setFocus(Controllable player) throws MediaException { + static void setFocus(Controllable player) { // do nothing } @@ -42,4 +41,8 @@ final class AdvancedMultimediaManager { // do nothing } + static void setExposure(Controllable player) { + // do nothing + } + } \ No newline at end of file diff --git a/javame/src/com/google/zxing/client/j2me/AdvancedMultimediaManager.java b/javame/src/com/google/zxing/client/j2me/AdvancedMultimediaManager.java index 5f1d792e1..227180033 100644 --- a/javame/src/com/google/zxing/client/j2me/AdvancedMultimediaManager.java +++ b/javame/src/com/google/zxing/client/j2me/AdvancedMultimediaManager.java @@ -16,6 +16,7 @@ package com.google.zxing.client.j2me; +import javax.microedition.amms.control.camera.ExposureControl; import javax.microedition.amms.control.camera.FocusControl; import javax.microedition.amms.control.camera.ZoomControl; import javax.microedition.media.Controllable; @@ -38,30 +39,31 @@ final class AdvancedMultimediaManager { private static final int NO_ZOOM = 100; private static final int MAX_ZOOM = 200; private static final long FOCUS_TIME_MS = 750L; + private static final String DESIRED_METERING = "center-weighted"; private AdvancedMultimediaManager() { // do nothing } - static void setFocus(Controllable player) throws MediaException { + static void setFocus(Controllable player) { FocusControl focusControl = (FocusControl) player.getControl("javax.microedition.amms.control.camera.FocusControl"); if (focusControl != null) { - if (focusControl.isMacroSupported() && !focusControl.getMacro()) { - focusControl.setMacro(true); - } - if (focusControl.isAutoFocusSupported()) { - focusControl.setFocus(FocusControl.AUTO); - try { - Thread.sleep(FOCUS_TIME_MS); // let it focus... - } catch (InterruptedException ie) { - // continue + try { + if (focusControl.isMacroSupported() && !focusControl.getMacro()) { + focusControl.setMacro(true); } - try { + if (focusControl.isAutoFocusSupported()) { + focusControl.setFocus(FocusControl.AUTO); + try { + Thread.sleep(FOCUS_TIME_MS); // let it focus... + } catch (InterruptedException ie) { + // continue + } focusControl.setFocus(FocusControl.AUTO_LOCK); - } catch (MediaException me) { - // continue; some phones like the SE K850 don't support this? } + } catch (MediaException me) { + // continue } } } @@ -84,4 +86,37 @@ final class AdvancedMultimediaManager { } } + static void setExposure(Controllable player) { + ExposureControl exposureControl = + (ExposureControl) player.getControl("javax.microedition.amms.control.camera.ExposureControl"); + if (exposureControl != null) { + + int[] supportedISOs = exposureControl.getSupportedISOs(); + if (supportedISOs != null && supportedISOs.length > 0) { + int maxISO = Integer.MIN_VALUE; + for (int i = 0; i < supportedISOs.length; i++) { + if (supportedISOs[i] > maxISO) { + maxISO = supportedISOs[i]; + } + } + try { + exposureControl.setISO(maxISO); + } catch (MediaException me) { + // continue + } + } + + String[] supportedMeterings = exposureControl.getSupportedLightMeterings(); + if (supportedMeterings != null) { + for (int i = 0; i < supportedMeterings.length; i++) { + if (DESIRED_METERING.equals(supportedMeterings[i])) { + exposureControl.setLightMetering(DESIRED_METERING); + break; + } + } + } + + } + } + } \ No newline at end of file diff --git a/javame/src/com/google/zxing/client/j2me/ZXingMIDlet.java b/javame/src/com/google/zxing/client/j2me/ZXingMIDlet.java index 8f4372b14..101026278 100644 --- a/javame/src/com/google/zxing/client/j2me/ZXingMIDlet.java +++ b/javame/src/com/google/zxing/client/j2me/ZXingMIDlet.java @@ -71,6 +71,7 @@ public final class ZXingMIDlet extends MIDlet { player = createPlayer(); player.realize(); AdvancedMultimediaManager.setZoom(player); + AdvancedMultimediaManager.setExposure(player); videoControl = (VideoControl) player.getControl("VideoControl"); canvas = new VideoCanvas(this); canvas.setFullScreenMode(true);