Skip to content

Commit

Permalink
Update
Browse files Browse the repository at this point in the history
  • Loading branch information
YooJia.Chen committed Nov 20, 2015
1 parent 12983b9 commit cf20b34
Show file tree
Hide file tree
Showing 9 changed files with 116 additions and 95 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ public void onPreviewFrame(byte[] data, Camera camera) {
surfaceView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mCamera.getCameraManager().getAutoFocusManager().requestAutoFocus();
mCamera.getCameraManager().getFocusManager().requestAutoFocus();
}
});
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,8 @@
package com.github.yoojia.zxing.camera;

/**
* @author : Yoojia.Chen (yoojiachen@163.com)
* 自动聚焦回调接口
* @author YOOJIA.CHEN (yoojiachen@gmail.com)
*/
public interface AutoFocusListener {

/**
* 聚集完成时此接口被回调
* @param focusSuccess 是否聚集成功
*/
void onFocus(boolean focusSuccess);
@Deprecated
public interface AutoFocusListener extends FocusEventsListener{
}
Original file line number Diff line number Diff line change
@@ -1,75 +1,11 @@
package com.github.yoojia.zxing.camera;

import android.hardware.Camera;
import android.os.Handler;
import android.os.Looper;

import java.util.concurrent.atomic.AtomicInteger;
@Deprecated
public class AutoFocusManager extends FocusManager{

/**
* @author 陈小锅 (yoojia.chen@gmail.com)
* @since 1.0
*/
public class AutoFocusManager implements Camera.AutoFocusCallback{

private final Camera mCamera;
private final AutoFocusListener mAutoFocusListener;
private final boolean mAutoFocusEnabled;

private final AtomicInteger mPeriod = new AtomicInteger(0);

private final Handler mFocusHandler = new Handler(Looper.getMainLooper());

private final Runnable mFocusTask = new Runnable() {
@Override
public void run() {
requestAutoFocus();
final int period = mPeriod.get();
if (period > 0) {
repeatAutoFocus(period);
}
}
};

public AutoFocusManager(Camera camera, AutoFocusListener autoFocusListener) {
mCamera = camera;
mAutoFocusListener = autoFocusListener;
final String mode = camera.getParameters().getFocusMode();
if (Camera.Parameters.FOCUS_MODE_AUTO.equals(mode) || Camera.Parameters.FOCUS_MODE_MACRO.equals(mode)){
mAutoFocusEnabled = true;
}else{
mAutoFocusEnabled = false;
}
}

@Override
public void onAutoFocus(boolean success, Camera camera) {
mAutoFocusListener.onFocus(success);
}

public void requestAutoFocus(){
mCamera.autoFocus(this);
}

public void startAutoFocus(int ms){
if (ms < 100) {
throw new IllegalArgumentException("Auto Focus period time must more than 100ms !");
}
if( ! mAutoFocusEnabled) {
return;
}
mFocusHandler.removeCallbacks(mFocusTask);
mPeriod.set(ms);
mFocusHandler.post(mFocusTask);
}

private void repeatAutoFocus(int period){
mFocusHandler.postDelayed(mFocusTask, period);
}

public void stopAutoFocus(){
mPeriod.set(0);
mFocusHandler.removeCallbacks(mFocusTask);
public AutoFocusManager(Camera camera, FocusEventsListener focusEventsListener) {
super(camera, focusEventsListener);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -36,11 +36,11 @@ public void surfaceCreated(SurfaceHolder holder) {
Log.w(TAG, ioe);
return;
}
mCameraManager.startPreview(mAutoFocusListener);
mCameraManager.startPreview(mFocusEventsListener);
}
};

private final AutoFocusListener mAutoFocusListener = new AutoFocusListener() {
private final FocusEventsListener mFocusEventsListener = new FocusEventsListener() {
@Override
public void onFocus(boolean focusSuccess) {
// 对焦成功后,请求触发生成 **一次** 预览图片
Expand Down Expand Up @@ -84,7 +84,7 @@ public void onPause(){
* 请求相机对焦
*/
public void requestFocus(){
final AutoFocusManager focusManager = mCameraManager.getAutoFocusManager();
final FocusManager focusManager = mCameraManager.getFocusManager();
if (focusManager != null) {
focusManager.requestAutoFocus();
}else{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ public final class CameraManager {
private final Context mContext;

private Camera mCamera;
private AutoFocusManager mAutoFocusManager;
private FocusManager mFocusManager;

private Rect mFramingRect;
private Rect mFramingRectInPreview;
Expand All @@ -66,8 +66,8 @@ public CameraManager(Context context) {
this.mContext = context;
}

public AutoFocusManager getAutoFocusManager() {
return mAutoFocusManager;
public FocusManager getFocusManager() {
return mFocusManager;
}

public void requestPreview(Camera.PreviewCallback callback){
Expand Down Expand Up @@ -134,23 +134,23 @@ public synchronized void closeDriver() {
}

/**
* Asks the mCamera hardware to begin drawing preview frames to the screen.
* Asks the camera hardware to begin drawing preview frames to the screen.
*/
public synchronized void startPreview(AutoFocusListener autoFocusListener) {
public synchronized void startPreview(FocusEventsListener focusEventsListener) {
if (mCamera != null && !mPreviewing) {
mCamera.startPreview();
mPreviewing = true;
mAutoFocusManager = new AutoFocusManager(mCamera, autoFocusListener);
mFocusManager = new FocusManager(mCamera, focusEventsListener);
}
}

/**
* Tells the mCamera to stop drawing preview frames.
*/
public synchronized void stopPreview() {
if (mAutoFocusManager != null) {
mAutoFocusManager.stopAutoFocus();
mAutoFocusManager = null;
if (mFocusManager != null) {
mFocusManager.stopAutoFocus();
mFocusManager = null;
}
if (mCamera != null && mPreviewing) {
mCamera.stopPreview();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ public void surfaceCreated(SurfaceHolder holder) {
}
};

private final AutoFocusListener mAutoFocusListener = new AutoFocusListener() {
private final FocusEventsListener mFocusEventsListener = new FocusEventsListener() {
@Override
public void onFocus(boolean focusSuccess) {
// 对焦成功后,请求触发生成 **一次** 预览图片
Expand Down Expand Up @@ -99,7 +99,7 @@ private void initCamera(SurfaceHolder holder){
if (mPreviewCallback != null){
mCameraManager.requestPreview(mPreviewCallback);
}
mCameraManager.startPreview(mAutoFocusListener);
mCameraManager.startPreview(mFocusEventsListener);
}

public static final class CameraPreview{
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.github.yoojia.zxing.camera;

/**
* 自动聚焦回调接口
* @author : YOOJIA.CHEN (yoojiachen@gmail.com)
*/
public interface FocusEventsListener {

/**
* 聚集完成时此接口被回调
* @param focusSuccess 是否聚集成功
*/
void onFocus(boolean focusSuccess);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
package com.github.yoojia.zxing.camera;

import android.hardware.Camera;
import android.os.Handler;
import android.os.Looper;

import java.util.concurrent.atomic.AtomicInteger;

/**
* @author 陈小锅 (yoojia.chen@gmail.com)
* @since 1.0
*/
public class FocusManager {

private final Camera mCamera;
private final FocusEventsListener mFocusEventsListener;
private final boolean mAutoFocusEnabled;

private final AtomicInteger mPeriod = new AtomicInteger(0);

private final Handler mFocusHandler = new Handler(Looper.getMainLooper());

private final Runnable mFocusTask = new Runnable() {
@Override
public void run() {
requestAutoFocus();
final int period = mPeriod.get();
if (period > 0) {
repeatAutoFocus(period);
}
}
};

private final Camera.AutoFocusCallback mAutoFocusCallback = new Camera.AutoFocusCallback() {
@Override
public void onAutoFocus(boolean success, Camera camera) {
mFocusEventsListener.onFocus(success);
}
};

public FocusManager(Camera camera, FocusEventsListener focusEventsListener) {
mCamera = camera;
mFocusEventsListener = focusEventsListener;
final String mode = camera.getParameters().getFocusMode();
if (Camera.Parameters.FOCUS_MODE_AUTO.equals(mode) || Camera.Parameters.FOCUS_MODE_MACRO.equals(mode)){
mAutoFocusEnabled = true;
}else{
mAutoFocusEnabled = false;
}
}

public void requestAutoFocus(){
mCamera.autoFocus(mAutoFocusCallback);
}

public void startAutoFocus(int ms){
if (ms < 100) {
throw new IllegalArgumentException("Auto Focus period time must more than 100ms !");
}
if( ! mAutoFocusEnabled) {
return;
}
mFocusHandler.removeCallbacks(mFocusTask);
mPeriod.set(ms);
mFocusHandler.post(mFocusTask);
}

private void repeatAutoFocus(int period){
mFocusHandler.postDelayed(mFocusTask, period);
}

public void stopAutoFocus(){
mPeriod.set(0);
mFocusHandler.removeCallbacks(mFocusTask);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -60,15 +60,15 @@ public void setCapturePreview(ImageView capturePreview){
}

public void requestDecode(){
mCameraController.getCameraManager().getAutoFocusManager().requestAutoFocus();
mCameraController.getCameraManager().getFocusManager().requestAutoFocus();
}

public void startAuto(int period){
mCameraController.getCameraManager().getAutoFocusManager().startAutoFocus(period);
mCameraController.getCameraManager().getFocusManager().startAutoFocus(period);
}

public void stopAuto(){
mCameraController.getCameraManager().getAutoFocusManager().stopAutoFocus();
mCameraController.getCameraManager().getFocusManager().stopAutoFocus();
}

private class PreviewQRCodeDecodeTask extends DecodeTask {
Expand Down

0 comments on commit cf20b34

Please sign in to comment.