際際滷

際際滷Share a Scribd company logo
Android
Camera2
唹駝タ軅躄反喀
Takuma@Android Study Group
1
Takuma Lee@Android Study Group
vmgsahm1@gmail.com
Individual App Developer@?徭姙少T
App Developer@蜘畜
Today¨s source code
http://bit.ly/android-camera2-sample
Google Repo
https://github.com/googlesamples/android-Camera2Basic
Licensed under the Charlie Tsai
2
Android Developer _lx
? 髄曖┌殖 Android 議?匯蛤?繁詔鹿議芙蛤
? 芙蛤嶄械l?伏?匯 Android 祥柳肇 iOS 恷瘁撹 iOS ?垢殻議並周
? O羨2013 / 09
? 芙蛤?繁毅7455DevFest r 6745
? Google Community Group
? 耽L眉ek和詔
? 耽?埖ek?埖麼}音泯
3
Android camera2
泌採孀欺x
? FB 芙蛤http://bit.ly/TADSG_FB
? Githubhttps://github.com/TADSG
? Meetuphttps://www.meetup.com/Taiwan-
Android-Developer-Study-Group/
? Telegramhttp://bit.ly/TADSG_Telegram
Agenda
? Guide
? Setting
? Preview Callback
? Face Detection
? 甚
6
Guide
Setting
/**?
* ID of the current {@link CameraDevice}.?
*/?
private String mCameraId;?
?
/**?
* An {@link AutoFitTextureView} for camera preview.?
*/?
private AutoFitTextureView mTextureView;?
?
/**?
* A {@link CameraCaptureSession } for camera preview.?
*/?
private CameraCaptureSession mCaptureSession;?
?
/**?
* A reference to the opened {@link CameraDevice}.?
*/?
private CameraDevice mCameraDevice;?
?
/**?
* The {@link android.util.Size} of camera preview.?
*/?
private Size mPreviewSize;
Setting
/**?
* {@link CameraDevice.StateCallback} is called when {@link CameraDevice} changes its state.?
*/?
private final CameraDevice.StateCallback mStateCallback = new CameraDevice.StateCallback() {?
?
@Override?
public void onOpened(@NonNull CameraDevice cameraDevice) {?
// This method is called when the camera is opened. We start camera preview here.?
mCameraOpenCloseLock.release();?
mCameraDevice = cameraDevice;?
createCameraPreviewSession();?
}?
?
@Override?
public void onDisconnected(@NonNull CameraDevice cameraDevice) {?
mCameraOpenCloseLock.release();?
cameraDevice.close();?
mCameraDevice = null;?
}?
?
@Override?
public void onError(@NonNull CameraDevice cameraDevice, int error) {?
mCameraOpenCloseLock.release();?
cameraDevice.close();?
mCameraDevice = null;?
Activity activity = getActivity();?
if (null != activity) {?
activity.finish();?
}?
}?
?
};
Setting
/**?
* An additional thread for running tasks that shouldn't block the UI.?
*/?
private HandlerThread mBackgroundThread;?
?
/**?
* A {@link Handler} for running tasks in the background.?
*/?
private Handler mBackgroundHandler;?
?
/**?
* An {@link ImageReader} that handles still image capture.?
*/?
private ImageReader mImageReader;
Setting
@Override?
public void onResume() {?
super.onResume();?
startBackgroundThread();?
?
// When the screen is turned off and turned back on, the SurfaceTexture is already?
// available, and "onSurfaceTextureAvailable" will not be called. In that case, we
can open?
// a camera and start preview from here (otherwise, we wait until the surface is
ready in?
// the SurfaceTextureListener).?
if (mTextureView.isAvailable()) {?
openCamera(mTextureView.getWidth(), mTextureView.getHeight());?
} else {?
mTextureView.setSurfaceTextureListener(mSurfaceTextureListener);?
}?
}?
?
@Override?
public void onPause() {?
closeCamera();?
stopBackgroundThread();?
super.onPause();?
}
Setting
/**?
* A {@link CameraCaptureSession.CaptureCallback} that handles events related to
JPEG capture.?
*/?
private CameraCaptureSession.CaptureCallback mCaptureCallback?
= new CameraCaptureSession.CaptureCallback() {?
?
?
?
@Override?
public void onCaptureProgressed(@NonNull CameraCaptureSession session,?
@NonNull CaptureRequest request,?
@NonNull CaptureResult partialResult) {?
process(partialResult);?
}?
?
@Override?
public void onCaptureCompleted(@NonNull CameraCaptureSession session,?
@NonNull CaptureRequest request,?
@NonNull TotalCaptureResult result) {?
process(result);?
}
};
Setting
private void openCamera(int width, int height) {?
if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.CAMERA)?
!= PackageManager.PERMISSION_GRANTED) {?
requestCameraPermission();?
return;?
}?
setUpCameraOutputs(width, height);?
configureTransform(width, height);?
Activity activity = getActivity();?
CameraManager manager = (CameraManager)
activity.getSystemService(Context.CAMERA_SERVICE);?
try {?
if (!mCameraOpenCloseLock.tryAcquire(2500, TimeUnit.MILLISECONDS)) {?
throw new RuntimeException("Time out waiting to lock camera opening.");?
}?
manager.openCamera(mCameraId, mStateCallback, mBackgroundHandler);?
} catch (CameraAccessException e) {?
e.printStackTrace();?
} catch (InterruptedException e) {?
throw new RuntimeException("Interrupted while trying to lock camera
opening.", e);?
}?
}
Preview Callback
/**?
* Creates a new {@link CameraCaptureSession} for camera preview.?
*/?
private void createCameraPreviewSession() {?
try {?
SurfaceTexture texture = mTextureView.getSurfaceTexture();?
assert texture != null;?
?
// We configure the size of default buffer to be the size of camera preview we want.?
texture.setDefaultBufferSize(mPreviewSize.getWidth(), mPreviewSize.getHeight());?
?
// This is the output Surface we need to start preview.?
Surface surface = new Surface(texture);?
?
// We set up a CaptureRequest.Builder with the output Surface.?
mPreviewRequestBuilder?
= mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);?
mPreviewRequestBuilder.addTarget(surface);
createCameraSession();?
?
?
} catch (CameraAccessException e) {?
e.printStackTrace();?
}?
}
Preview Callback
// Here, we create a CameraCaptureSession for camera preview.?
mCameraDevice.createCaptureSession(Arrays.asList(surface, mImageReader.getSurface()),?
new CameraCaptureSession.StateCallback() {?
?
@Override?
public void onConfigured(@NonNull CameraCaptureSession cameraCaptureSession) {?
// The camera is already closed?
if (null == mCameraDevice) {?
return;?
}?
?
// When the session is ready, we start displaying the preview.?
mCaptureSession = cameraCaptureSession;?
try {?
// Auto focus should be continuous for camera preview.?
mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE,?
CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);?
// Flash is automatically enabled when necessary.?
setAutoFlash(mPreviewRequestBuilder);?
?
// Finally, we start displaying the camera preview.?
mPreviewRequest = mPreviewRequestBuilder.build();?
mCaptureSession.setRepeatingRequest(mPreviewRequest,?
mCaptureCallback, mBackgroundHandler);?
} catch (CameraAccessException e) {?
e.printStackTrace();?
}?
}?
?
@Override?
public void onConfigureFailed(?
@NonNull CameraCaptureSession cameraCaptureSession) {?
showToast("Failed");?
}?
}, null?
);
Face Detection
// Here, we create a CameraCaptureSession for camera preview.?
mCameraDevice.createCaptureSession(Arrays.asList(surface, mImageReader.getSurface()),?
new CameraCaptureSession.StateCallback() {?
?
@Override?
public void onConfigured(@NonNull CameraCaptureSession cameraCaptureSession) {?
// The camera is already closed?
if (null == mCameraDevice) {?
return;?
}?
?
// When the session is ready, we start displaying the preview.?
mCaptureSession = cameraCaptureSession;?
try {?
// Auto focus should be continuous for camera preview.?
mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE,?
CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);?
// Face detection mode setting?
mPreviewRequestBuilder.set(CaptureRequest.STATISTICS_FACE_DETECT_MODE, faceDetectMode);?
// Flash is automatically enabled when necessary.?
setAutoFlash(mPreviewRequestBuilder);?
?
// Finally, we start displaying the camera preview.?
mPreviewRequest = mPreviewRequestBuilder.build();?
mCaptureSession.setRepeatingRequest(mPreviewRequest,?
mCaptureCallback, mBackgroundHandler);?
} catch (CameraAccessException e) {?
e.printStackTrace();?
}?
}?
?
@Override?
public void onConfigureFailed(?
@NonNull CameraCaptureSession cameraCaptureSession) {?
showToast("Failed");?
}?
}, null?
);
CameraDevice
public static final int TEMPLATE_PREVIEW = 1;
public static final int TEMPLATE_STILL_CAPTURE = 2;
public static final int TEMPLATE_RECORD = 3;
public static final int TEMPLATE_VIDEO_SNAPSHOT = 4;
public static final int TEMPLATE_ZERO_SHUTTER_LAG = 5;
public static final int TEMPLATE_MANUAL = 6;
Preview Callback
// For still image captures, we use the largest available
size.?
Size largest = Collections.max(?
Arrays.asList(map.getOutputSizes(ImageFormat.JPEG)),?
new CompareSizesByArea());?
mImageReader = ImageReader.newInstance(largest.getWidth(),
largest.getHeight(),?
ImageFormat.JPEG, /*maxImages*/2);?
mImageReader.setOnImageAvailableListener(?
mOnImageAvailableListener, mBackgroundHandler);
Preview Callback
/**?
* Creates a new {@link CameraCaptureSession} for camera preview.?
*/?
private void createCameraPreviewSession() {?
try {?
SurfaceTexture texture = mTextureView.getSurfaceTexture();?
assert texture != null;?
?
// We configure the size of default buffer to be the size of camera preview we want.?
texture.setDefaultBufferSize(mPreviewSize.getWidth(), mPreviewSize.getHeight());?
?
// This is the output Surface we need to start preview.?
Surface surface = new Surface(texture);?
?
// We set up a CaptureRequest.Builder with the output Surface.?
mPreviewRequestBuilder?
= mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);?
mPreviewRequestBuilder.addTarget(surface);
createCameraSession();?
?
?
} catch (CameraAccessException e) {?
e.printStackTrace();?
}?
}
Preview Callback
// Use Preview Callback?
mPreviewRequestBuilder.addTarget(mImageReader.getSurface());
Preview Callback
Demo
Face Detection
Demo
甚
甚 - 何y
26
Q&A
Ad

Recommended

PDF
More android code puzzles
Danny Preussler
?
PDF
Android code puzzlers + tips & tricks
NLJUG
?
PDF
Android Wear Essentials
Nilhcem
?
PDF
The 2016 Android Developer Toolbox [MOBILIZATION]
Nilhcem
?
PDF
The 2016 Android Developer Toolbox [NANTES]
Nilhcem
?
PDF
Knock, knock, who is there? Doze.
Yonatan Levin
?
PDF
Android swedroid
Johan Nilsson
?
ODP
Android Camera Architecture
Picker Weng
?
PPTX
How to create a camera2
Booch Lin
?
DOCX
Camera
Almeda Asuncion
?
PDF
Android Camera
Michal Kostic
?
PPTX
Android Lab Test : Using the camera preview (english)
Bruno Delb
?
PDF
Droidcon NYC 2014: Building Custom Camera Applications
Huyen Tue Dao
?
PDF
Droidcon NYC 2014: Building Custom Camera Applications
Huyen Dao
?
PDF
Exploring CameraX from JetPack
Hassan Abid
?
PDF
Camera2 API: Overview
Suhyun Park
?
PDF
Building a Native Camera Access Library - Part II - Transcript.pdf
ShaiAlmog1
?
PDF
Capture image on eye blink
InnovationM
?
PDF
Building a Native Camera Access Library - Part II.pdf
ShaiAlmog1
?
PPTX
Camera 2.0 in Android 4.2
Balwinder Kaur
?
PDF
Building a Native Camera Access Library - Part I.pdf
ShaiAlmog1
?
PDF
Building a Native Camera Access Library - Part I - Transcript.pdf
ShaiAlmog1
?
DOCX
package org dev
jaya lakshmi
?
DOCX
Package org dev
jaya lakshmi
?
PDF
Mobile AR
Seyed Jafari
?
PDF
What¨s new in Android JetPack
Hassan Abid
?
PPTX
Android 5.0 Camera2 APIs
Balwinder Kaur
?
PDF
Android Crawler Web
Takuma Lee
?
PDF
FcmD2D
Takuma Lee
?

More Related Content

Similar to Android camera2 (20)

PPTX
How to create a camera2
Booch Lin
?
DOCX
Camera
Almeda Asuncion
?
PDF
Android Camera
Michal Kostic
?
PPTX
Android Lab Test : Using the camera preview (english)
Bruno Delb
?
PDF
Droidcon NYC 2014: Building Custom Camera Applications
Huyen Tue Dao
?
PDF
Droidcon NYC 2014: Building Custom Camera Applications
Huyen Dao
?
PDF
Exploring CameraX from JetPack
Hassan Abid
?
PDF
Camera2 API: Overview
Suhyun Park
?
PDF
Building a Native Camera Access Library - Part II - Transcript.pdf
ShaiAlmog1
?
PDF
Capture image on eye blink
InnovationM
?
PDF
Building a Native Camera Access Library - Part II.pdf
ShaiAlmog1
?
PPTX
Camera 2.0 in Android 4.2
Balwinder Kaur
?
PDF
Building a Native Camera Access Library - Part I.pdf
ShaiAlmog1
?
PDF
Building a Native Camera Access Library - Part I - Transcript.pdf
ShaiAlmog1
?
DOCX
package org dev
jaya lakshmi
?
DOCX
Package org dev
jaya lakshmi
?
PDF
Mobile AR
Seyed Jafari
?
PDF
What¨s new in Android JetPack
Hassan Abid
?
PPTX
Android 5.0 Camera2 APIs
Balwinder Kaur
?
How to create a camera2
Booch Lin
?
Android Camera
Michal Kostic
?
Android Lab Test : Using the camera preview (english)
Bruno Delb
?
Droidcon NYC 2014: Building Custom Camera Applications
Huyen Tue Dao
?
Droidcon NYC 2014: Building Custom Camera Applications
Huyen Dao
?
Exploring CameraX from JetPack
Hassan Abid
?
Camera2 API: Overview
Suhyun Park
?
Building a Native Camera Access Library - Part II - Transcript.pdf
ShaiAlmog1
?
Capture image on eye blink
InnovationM
?
Building a Native Camera Access Library - Part II.pdf
ShaiAlmog1
?
Camera 2.0 in Android 4.2
Balwinder Kaur
?
Building a Native Camera Access Library - Part I.pdf
ShaiAlmog1
?
Building a Native Camera Access Library - Part I - Transcript.pdf
ShaiAlmog1
?
package org dev
jaya lakshmi
?
Package org dev
jaya lakshmi
?
Mobile AR
Seyed Jafari
?
What¨s new in Android JetPack
Hassan Abid
?
Android 5.0 Camera2 APIs
Balwinder Kaur
?

More from Takuma Lee (6)

PDF
Android Crawler Web
Takuma Lee
?
PDF
FcmD2D
Takuma Lee
?
PDF
Firebase Cloud Messaging Device to Device
Takuma Lee
?
PDF
或姻馨光鉛庄恢姻温姻霞丼嬬蛍裂嚥聞喘
Takuma Lee
?
PDF
Proguard by android studio
Takuma Lee
?
PPTX
Custom view2
Takuma Lee
?
Android Crawler Web
Takuma Lee
?
FcmD2D
Takuma Lee
?
Firebase Cloud Messaging Device to Device
Takuma Lee
?
或姻馨光鉛庄恢姻温姻霞丼嬬蛍裂嚥聞喘
Takuma Lee
?
Proguard by android studio
Takuma Lee
?
Custom view2
Takuma Lee
?
Ad

Android camera2

  • 2. Takuma Lee@Android Study Group vmgsahm1@gmail.com Individual App Developer@?徭姙少T App Developer@蜘畜 Today¨s source code http://bit.ly/android-camera2-sample Google Repo https://github.com/googlesamples/android-Camera2Basic Licensed under the Charlie Tsai 2
  • 3. Android Developer _lx ? 髄曖┌殖 Android 議?匯蛤?繁詔鹿議芙蛤 ? 芙蛤嶄械l?伏?匯 Android 祥柳肇 iOS 恷瘁撹 iOS ?垢殻議並周 ? O羨2013 / 09 ? 芙蛤?繁毅7455DevFest r 6745 ? Google Community Group ? 耽L眉ek和詔 ? 耽?埖ek?埖麼}音泯 3
  • 5. 泌採孀欺x ? FB 芙蛤http://bit.ly/TADSG_FB ? Githubhttps://github.com/TADSG ? Meetuphttps://www.meetup.com/Taiwan- Android-Developer-Study-Group/ ? Telegramhttp://bit.ly/TADSG_Telegram
  • 6. Agenda ? Guide ? Setting ? Preview Callback ? Face Detection ? 甚 6
  • 8. Setting /**? * ID of the current {@link CameraDevice}.? */? private String mCameraId;? ? /**? * An {@link AutoFitTextureView} for camera preview.? */? private AutoFitTextureView mTextureView;? ? /**? * A {@link CameraCaptureSession } for camera preview.? */? private CameraCaptureSession mCaptureSession;? ? /**? * A reference to the opened {@link CameraDevice}.? */? private CameraDevice mCameraDevice;? ? /**? * The {@link android.util.Size} of camera preview.? */? private Size mPreviewSize;
  • 9. Setting /**? * {@link CameraDevice.StateCallback} is called when {@link CameraDevice} changes its state.? */? private final CameraDevice.StateCallback mStateCallback = new CameraDevice.StateCallback() {? ? @Override? public void onOpened(@NonNull CameraDevice cameraDevice) {? // This method is called when the camera is opened. We start camera preview here.? mCameraOpenCloseLock.release();? mCameraDevice = cameraDevice;? createCameraPreviewSession();? }? ? @Override? public void onDisconnected(@NonNull CameraDevice cameraDevice) {? mCameraOpenCloseLock.release();? cameraDevice.close();? mCameraDevice = null;? }? ? @Override? public void onError(@NonNull CameraDevice cameraDevice, int error) {? mCameraOpenCloseLock.release();? cameraDevice.close();? mCameraDevice = null;? Activity activity = getActivity();? if (null != activity) {? activity.finish();? }? }? ? };
  • 10. Setting /**? * An additional thread for running tasks that shouldn't block the UI.? */? private HandlerThread mBackgroundThread;? ? /**? * A {@link Handler} for running tasks in the background.? */? private Handler mBackgroundHandler;? ? /**? * An {@link ImageReader} that handles still image capture.? */? private ImageReader mImageReader;
  • 11. Setting @Override? public void onResume() {? super.onResume();? startBackgroundThread();? ? // When the screen is turned off and turned back on, the SurfaceTexture is already? // available, and "onSurfaceTextureAvailable" will not be called. In that case, we can open? // a camera and start preview from here (otherwise, we wait until the surface is ready in? // the SurfaceTextureListener).? if (mTextureView.isAvailable()) {? openCamera(mTextureView.getWidth(), mTextureView.getHeight());? } else {? mTextureView.setSurfaceTextureListener(mSurfaceTextureListener);? }? }? ? @Override? public void onPause() {? closeCamera();? stopBackgroundThread();? super.onPause();? }
  • 12. Setting /**? * A {@link CameraCaptureSession.CaptureCallback} that handles events related to JPEG capture.? */? private CameraCaptureSession.CaptureCallback mCaptureCallback? = new CameraCaptureSession.CaptureCallback() {? ? ? ? @Override? public void onCaptureProgressed(@NonNull CameraCaptureSession session,? @NonNull CaptureRequest request,? @NonNull CaptureResult partialResult) {? process(partialResult);? }? ? @Override? public void onCaptureCompleted(@NonNull CameraCaptureSession session,? @NonNull CaptureRequest request,? @NonNull TotalCaptureResult result) {? process(result);? } };
  • 13. Setting private void openCamera(int width, int height) {? if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.CAMERA)? != PackageManager.PERMISSION_GRANTED) {? requestCameraPermission();? return;? }? setUpCameraOutputs(width, height);? configureTransform(width, height);? Activity activity = getActivity();? CameraManager manager = (CameraManager) activity.getSystemService(Context.CAMERA_SERVICE);? try {? if (!mCameraOpenCloseLock.tryAcquire(2500, TimeUnit.MILLISECONDS)) {? throw new RuntimeException("Time out waiting to lock camera opening.");? }? manager.openCamera(mCameraId, mStateCallback, mBackgroundHandler);? } catch (CameraAccessException e) {? e.printStackTrace();? } catch (InterruptedException e) {? throw new RuntimeException("Interrupted while trying to lock camera opening.", e);? }? }
  • 14. Preview Callback /**? * Creates a new {@link CameraCaptureSession} for camera preview.? */? private void createCameraPreviewSession() {? try {? SurfaceTexture texture = mTextureView.getSurfaceTexture();? assert texture != null;? ? // We configure the size of default buffer to be the size of camera preview we want.? texture.setDefaultBufferSize(mPreviewSize.getWidth(), mPreviewSize.getHeight());? ? // This is the output Surface we need to start preview.? Surface surface = new Surface(texture);? ? // We set up a CaptureRequest.Builder with the output Surface.? mPreviewRequestBuilder? = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);? mPreviewRequestBuilder.addTarget(surface); createCameraSession();? ? ? } catch (CameraAccessException e) {? e.printStackTrace();? }? }
  • 15. Preview Callback // Here, we create a CameraCaptureSession for camera preview.? mCameraDevice.createCaptureSession(Arrays.asList(surface, mImageReader.getSurface()),? new CameraCaptureSession.StateCallback() {? ? @Override? public void onConfigured(@NonNull CameraCaptureSession cameraCaptureSession) {? // The camera is already closed? if (null == mCameraDevice) {? return;? }? ? // When the session is ready, we start displaying the preview.? mCaptureSession = cameraCaptureSession;? try {? // Auto focus should be continuous for camera preview.? mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE,? CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);? // Flash is automatically enabled when necessary.? setAutoFlash(mPreviewRequestBuilder);? ? // Finally, we start displaying the camera preview.? mPreviewRequest = mPreviewRequestBuilder.build();? mCaptureSession.setRepeatingRequest(mPreviewRequest,? mCaptureCallback, mBackgroundHandler);? } catch (CameraAccessException e) {? e.printStackTrace();? }? }? ? @Override? public void onConfigureFailed(? @NonNull CameraCaptureSession cameraCaptureSession) {? showToast("Failed");? }? }, null? );
  • 16. Face Detection // Here, we create a CameraCaptureSession for camera preview.? mCameraDevice.createCaptureSession(Arrays.asList(surface, mImageReader.getSurface()),? new CameraCaptureSession.StateCallback() {? ? @Override? public void onConfigured(@NonNull CameraCaptureSession cameraCaptureSession) {? // The camera is already closed? if (null == mCameraDevice) {? return;? }? ? // When the session is ready, we start displaying the preview.? mCaptureSession = cameraCaptureSession;? try {? // Auto focus should be continuous for camera preview.? mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE,? CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);? // Face detection mode setting? mPreviewRequestBuilder.set(CaptureRequest.STATISTICS_FACE_DETECT_MODE, faceDetectMode);? // Flash is automatically enabled when necessary.? setAutoFlash(mPreviewRequestBuilder);? ? // Finally, we start displaying the camera preview.? mPreviewRequest = mPreviewRequestBuilder.build();? mCaptureSession.setRepeatingRequest(mPreviewRequest,? mCaptureCallback, mBackgroundHandler);? } catch (CameraAccessException e) {? e.printStackTrace();? }? }? ? @Override? public void onConfigureFailed(? @NonNull CameraCaptureSession cameraCaptureSession) {? showToast("Failed");? }? }, null? );
  • 17. CameraDevice public static final int TEMPLATE_PREVIEW = 1; public static final int TEMPLATE_STILL_CAPTURE = 2; public static final int TEMPLATE_RECORD = 3; public static final int TEMPLATE_VIDEO_SNAPSHOT = 4; public static final int TEMPLATE_ZERO_SHUTTER_LAG = 5; public static final int TEMPLATE_MANUAL = 6;
  • 18. Preview Callback // For still image captures, we use the largest available size.? Size largest = Collections.max(? Arrays.asList(map.getOutputSizes(ImageFormat.JPEG)),? new CompareSizesByArea());? mImageReader = ImageReader.newInstance(largest.getWidth(), largest.getHeight(),? ImageFormat.JPEG, /*maxImages*/2);? mImageReader.setOnImageAvailableListener(? mOnImageAvailableListener, mBackgroundHandler);
  • 19. Preview Callback /**? * Creates a new {@link CameraCaptureSession} for camera preview.? */? private void createCameraPreviewSession() {? try {? SurfaceTexture texture = mTextureView.getSurfaceTexture();? assert texture != null;? ? // We configure the size of default buffer to be the size of camera preview we want.? texture.setDefaultBufferSize(mPreviewSize.getWidth(), mPreviewSize.getHeight());? ? // This is the output Surface we need to start preview.? Surface surface = new Surface(texture);? ? // We set up a CaptureRequest.Builder with the output Surface.? mPreviewRequestBuilder? = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);? mPreviewRequestBuilder.addTarget(surface); createCameraSession();? ? ? } catch (CameraAccessException e) {? e.printStackTrace();? }? }
  • 20. Preview Callback // Use Preview Callback? mPreviewRequestBuilder.addTarget(mImageReader.getSurface());
  • 23. Demo
  • 24.
  • 26. 26
  • 27. Q&A