Samsung s4 zoom does not support smooth scaling isSmoothZoomSupported () == false

I tried to process ZoomIn / ZoomOut on the 's4 zoom' device in a camera recording application. Since it only supports regular zoom, i.e. parameters.isZoomSupported()==true , parameters.isSmoothZoomSupported()==false , I usually used parameters.setZoom(mZoomVal); mCamera.setParameters(parameters); . The problem is that Zoom is jerky, noisy and nonsmooth. Does anyone know how to control the zoom speed in 's4 zoom', as was done in the Samsung camera app?

 public boolean onKeyDown(int keyCode, KeyEvent event) { Log.v("onKeyDown keyCode="+keyCode+" event="+event.toString()); boolean handled = false; switch(keyCode){ case KeyEvent.KEYCODE_FOCUS: setAutoFocus(); handled = true; break; case KeyEvent.KEYCODE_CAMERA: if(event.getRepeatCount() == 0){ if (isRec()) { stopRec(1, 0); } else { startRec(); } } handled = true; break; case 256: //KeyEvent.KEYCODE_CAMERA_ZOOM_RING_MOVE: handled = true; break; case 261: //KeyEvent.KEYCODE_CAMERA_ZOOM_RING_SPEED2 handled = true; break; case KeyEvent.KEYCODE_ZOOM_IN: setZoomIn(); //AutoFocus(); handled = true; break; case KeyEvent.KEYCODE_ZOOM_OUT: setZoomOut(); //AutoFocus(); handled = true; break; } if(handled) Log.v("onKeyDown HANDLED!"); else return super.onKeyDown(keyCode, event); return handled; } public int setZoomIn(){ if(mCamera == null){ return 0; } Parameters parameters = mCamera.getParameters(); List<Integer> zoom_list = parameters.getZoomRatios(); if(mZoomVal >= mZoomMax) return zoom_list.get(mZoomMax); /* if(isAutoFocusing){ mCamera.cancelAutoFocus(); isAutoFocusing = false; }*/ mZoomVal++; isFocused = false; parameters.setZoom(mZoomVal); mCamera.setParameters(parameters); mZoomVal = parameters.getZoom(); return zoom_list.get(mZoomVal); } public int setZoomOut(){ if(mCamera == null){ return 0; } Parameters parameters = mCamera.getParameters(); List<Integer> zoom_list = parameters.getZoomRatios(); if(mZoomVal <= 0) return zoom_list.get(0); /* if(isAutoFocusing){ mCamera.cancelAutoFocus(); isAutoFocusing = false; }*/ mZoomVal--; isFocused = false; parameters.setZoom(mZoomVal); mCamera.setParameters(parameters); mZoomVal = parameters.getZoom(); return zoom_list.get(mZoomVal); } public void setAutoFocus(){ if(mCamera == null){ return; } if(isFocused) return; if(isAutoFocusing){ mCamera.cancelAutoFocus(); isAutoFocusing = false; } isAutoFocusing = true; mCamera.autoFocus(new Camera.AutoFocusCallback() { @Override public void onAutoFocus(boolean success, Camera camera) { Log.v("onAutoFocus success="+success); isAutoFocusing = false; isFocused = success; } }); } 
+2
source share
2 answers

I already found a solution for smoothly controlling the Shutter lens on a Samsung S4 Zoom device. Install the device in intelligent mode : parameters.set("mode", "smart-auto");

For Zoom In start : parameters.set("zoom-action", "optical-tele-start");

To start scaling : parameters.set("zoom-action", "optical-wide-start");

To Stop scaling : parameters.set("zoom-action", "zoom-stop");

Shutter Speed : parameters.set("zoom-speed", 1); //1,2,... parameters.set("zoom-speed", 1); //1,2,...

Do not forget to save the parameters in the camera instance mCamera.setParameters(parameters);

This works great on my device, now the shutter is quiet and smooth. :) Best regards.

+4
source

Also, to get the current scaling value , use this code:

  Parameters parameters = mCamera.getParameters(); List<Integer> zoom_list = parameters.getZoomRatios(); int val = 0; if(isSamsungS4Zoom){ //FOR S4 ZOOM mZoomVal = parameters.getInt("curr_zoom_level"); val = zoom_list.get(mZoomVal); }else{ val = zoom_list.get(mZoomVal); } 
+2
source

All Articles