Git Product home page Git Product logo

cameraview's Introduction

Deprecated

CameraView is deprecated. No more development will be taking place.

Use Jetpack CameraX instead.

CameraView

This is not an official Google product.

CameraView aims to help Android developers easily integrate Camera features.

Requires API Level 9. The library uses Camera 1 API on API Level 9-20 and Camera2 on 21 and above.

API Level Camera API Preview View
9-13 Camera1 SurfaceView
14-20 Camera1 TextureView
21-23 Camera2 TextureView
24 Camera2 SurfaceView

Features

  • Camera preview by placing it in a layout XML (and calling the start method)
  • Configuration by attributes
    • Aspect ratio (app:aspectRatio)
    • Auto-focus (app:autoFocus)
    • Flash (app:flash)

Usage

<com.google.android.cameraview.CameraView
    android:id="@+id/camera"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:keepScreenOn="true"
    android:adjustViewBounds="true"
    app:autoFocus="true"
    app:aspectRatio="4:3"
    app:facing="back"
    app:flash="auto"/>
    @Override
    protected void onResume() {
        super.onResume();
        mCameraView.start();
    }

    @Override
    protected void onPause() {
        mCameraView.stop();
        super.onPause();
    }

You can see a complete usage in the demo app.

Contribution

See CONTRIBUTING.md.

cameraview's People

Contributors

alec-desouza avatar andreidiaconu avatar dumazy avatar elevenfive avatar fabinpaul avatar guhongya avatar ivacf avatar kevinpelgrims avatar keyboardsurfer avatar lexer avatar lytefast avatar marsvard avatar mkotyk avatar nashlegend avatar vanniktech avatar yaraki avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

cameraview's Issues

Result File is Strange

This is Preview in App.
device-2016-12-06-163137

This is Result File.
htct1_20161206163146

Why the result picture is dark ??

Device OS version: 6.0.1
Devide Manufacturer: HTC
Device Name: HTC_M910X

Bug on Note 4

Hi.
I'm using you library.
In some cellphones like Samsung Note 4 when I use front camera it dose not work with this Log:

15726-23967/com.google.android.cameraview.demo W/LegacyRequestMapper: convertRequestMetadata - control.awbRegions setting is not supported, ignoring value
15726-23967/com.google.android.cameraview.demo W/LegacyMetadataMapper: convertAfModeToLegacy - ignoring unsupported mode 4, defaulting to fixed
15726-23967/com.google.android.cameraview.demo W/LegacyRequestMapper: convertRequestMetadata - control.awbRegions setting is not supported, ignoring value
15726-23967/com.google.android.cameraview.demo W/LegacyMetadataMapper: convertAfModeToLegacy - ignoring unsupported mode 4, defaulting to fixed

Camera3 Support failing

Getting a black screen on my Pixel device. Logcat shows this error:

12-10 09:51:35.518   570  1434 E mm-camera: <C2D   ><ERROR> 394: c2d_module_start_session: Cannot open ION
12-10 09:51:35.521   570  1441 E mm-camera: <STATS_AIS ><ERROR> 605: sensor_native_thread_handler: Laser Sensor not found!
12-10 09:51:35.548   570 30919 E mm-camera: <MCT   ><ERROR> 537: mct_pipeline_lookup_session_data: Couldn't find stream for sessionid 15
12-10 09:51:35.548   570 30919 E mm-camera: <CPP   ><ERROR> 2206: cpp_module_notify_add_stream: failed, CPP current version can not support rotation
12-10 09:51:35.576   570   570 E Camera2-Metadata: Mismatched tag type when updating entry enable (-2146893824) of type byte; got type int32 data instead
12-10 09:51:35.576   570   570 E Camera2-Metadata: Mismatched tag type when updating entry is_main (-2146893823) of type byte; got type int32 data instead
12-10 09:51:35.578   570  9921 E QCamera : <MCI><ERROR> mm_channel_fsm_fn_stopped: 893: invalid state (1) for evt (6)
12-10 09:51:35.578   570  9921 E QCamera3HWI: int qcamera::QCamera3HardwareInterface::configureStreamsPerfLocked(camera3_stream_configuration_t *): Blob size greater than 4k and multiple streams are on encoder output
12-10 09:51:35.578   570  9921 E Camera3-Device: Camera 0: configureStreamsLocked: Set of requested inputs/outputs not supported by HAL
12-10 09:51:35.578   570  9921 E CameraDeviceClient: endConfigure: Camera 0: Unsupported set of inputs/outputs provided
12-10 09:51:35.579 32440 32440 E CameraCaptureSession: Session 0: Failed to create capture session; configuration failed
12-10 09:51:35.581   570 30919 E QCamera : <MCI><ERROR> mm_channel_fsm_fn_stopped: 893: invalid state (1) for evt (6)
12-10 09:51:35.582   570 30919 E QCamera3HWI: int qcamera::QCamera3HardwareInterface::configureStreamsPerfLocked(camera3_stream_configuration_t *): Blob size greater than 4k and multiple streams are on encoder output
12-10 09:51:35.582   570 30919 E Camera3-Device: Camera 0: configureStreamsLocked: Set of requested inputs/outputs not supported by HAL
12-10 09:51:35.582   570 30919 E CameraDeviceClient: endConfigure: Camera 0: Unsupported set of inputs/outputs provided
12-10 09:51:35.582 32440 32440 E CameraCaptureSession: Session 1: Failed to create capture session; configuration failed
12-10 09:51:35.599 32440 32440 E Camera2 : Failed to configure capture session.
12-10 09:51:35.599 32440 32440 E Camera2 : Failed to configure capture session.
12-10 09:51:35.634   570  1420 E mm-camera: <SENSOR><ERROR> 37: af_actuator_power_up: failed: rc = -1
12-10 09:51:35.634   570  1420 E mm-camera: <SENSOR><ERROR> 688: af_actuator_init: failed rc -5
12-10 09:51:35.957   570  9921 E QCamera : <MCI><ERROR> mm_channel_fsm_fn_stopped: 893: invalid state (1) for evt (6)
12-10 09:51:35.957   570  9921 E QCamera3HWI: int qcamera::QCamera3HardwareInterface::configureStreamsPerfLocked(camera3_stream_configuration_t *): Blob size greater than 4k and multiple streams are on encoder output
12-10 09:51:35.957   570  9921 E Camera3-Device: Camera 0: configureStreamsLocked: Set of requested inputs/outputs not supported by HAL
12-10 09:51:35.958   570  9921 E CameraDeviceClient: endConfigure: Camera 0: Unsupported set of inputs/outputs provided
12-10 09:51:35.959 32440 32440 E CameraCaptureSession: Session 2: Failed to create capture session; configuration failed
12-10 09:51:35.960 32440 32440 E Camera2 : Failed to configure capture session.
12-10 09:51:40.808  2205  2213 E DataBuffer: Internal data leak within a DataBuffer object detected!  Be sure to explicitly call release() on all DataBuffer extending objects when you are done with them. (internal object: com.google.android.gms.common.data.DataHolder@c2c7b1b)
12-10 09:51:40.809  2205  2213 E DataBuffer: Internal data leak within a DataBuffer object detected!  Be sure to explicitly call release() on all DataBuffer extending objects when you are done with them. (internal object: com.google.android.gms.common.data.DataHolder@e54d4b8)
12-10 09:51:40.809  2205  2213 E DataBuffer: Internal data leak within a DataBuffer object detected!  Be sure to explicitly call release() on all DataBuffer extending objects when you are done with them. (internal object: com.google.android.gms.common.data.DataHolder@13ed291)

Camera capture timer

Please add timer functionality. Currently, I'm going with:

private int timer;

public void capture(int seconds, final OnCapturingListener listener) {
    this.timer = seconds;

    final Handler handler = new Handler();
    handler.post(new Runnable() {
        @Override
        public void run() {
            if (timer > 0) {
                timer--;
                listener.onTicking(timer);
                handler.postDelayed(this, 1000);
            } else {
                listener.onCapturing();
                takePicture();
            }
        }
    });
}

public interface OnCapturingListener {

    void onTicking(int remainingSeconds);

    void onCapturing();
}

Prefix library attributes

Because android attributes are shared in a common namespace, it's a good habit to prefix attributes like aspectRatio in order to prevent conflicts with other libraries that a project may use.

I'd suggest prefixing the attributes this library adds with cam or cv for example so that app:aspectRatio would become app:camAspectRatio or app:cvAspectRatio.

Preview callback

it would be helpful if there was a callback for reading preview frame.

java.lang.RuntimeException: autoFocus failed

On tapping multiple times on the capture image button the demo app crashes.
The issue appeared on Samsung GT-I9300I running Android 4.4.4
(By the way very helpful library. Can't even begin to tell how big a help this has been.)

com.google.android.cameraview.demo E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.google.android.cameraview.demo, PID: 22695
java.lang.RuntimeException: autoFocus failed
at android.hardware.Camera.native_autoFocus(Native Method)
at android.hardware.Camera.autoFocus(Camera.java:1131)
at com.google.android.cameraview.Camera1.takePicture(Camera1.java:212)
at com.google.android.cameraview.CameraView.takePicture(CameraView.java:378)
at com.google.android.cameraview.demo.MainActivity$1.onClick(MainActivity.java:91)
at android.view.View.performClick(View.java:4741)
at android.view.View$PerformClick.run(View.java:19384)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:146)
at android.app.ActivityThread.main(ActivityThread.java:5679)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107)
at dalvik.system.NativeStart.main(Native Method)

PictureCaptureCallback waits for focus but it never happens

Version: d0b508a
Affected device: HTC One M9
API: 23

Hi,
I'm having some issues with taking picture on device mentioned above. The problem occurs when picture is taken and camera is not auto-focused. process() method of PictureCaptureCallback class is called as expected, but condition

if (af == CaptureResult.CONTROL_AF_STATE_FOCUSED_LOCKED ||
     af == CaptureResult.CONTROL_AF_STATE_NOT_FOCUSED_LOCKED) {
   //...   
}

is never satisfied. capture() request is set as expected with CONTROL_AF_TRIGGER flag. If i turn autofocus off via setAutoFocus(false), everything works fine.

I think this is Camera2 API issue but maybe there is something I'm missing.

java.lang.IllegalStateException: Session has been closed; further changes are illegal.

When calling cameraView.start(); I get the following exception:

java.lang.IllegalStateException: Session has been closed; further changes are illegal.
at android.hardware.camera2.impl.CameraCaptureSessionImpl.checkNotClosed(CameraCaptureSessionImpl.java:606)
at android.hardware.camera2.impl.CameraCaptureSessionImpl.setRepeatingRequest(CameraCaptureSessionImpl.java:227)
at com.google.android.cameraview.Camera2$3.onConfigured(Camera2.java:132)
at java.lang.reflect.Method.invoke(Native Method)
at android.hardware.camera2.dispatch.InvokeDispatcher.dispatch(InvokeDispatcher.java:39)
at android.hardware.camera2.dispatch.HandlerDispatcher$1.run(HandlerDispatcher.java:65)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)

Note: I'm not calling it in onResume. Rather after the Camera permisison has been granted.

No camera access lead to collapse,need help.

Hello, I think I met a big trouble, I'm going to do facial recognition to develop a custom camera, through a variety of ways to solve, so find the CameraView, really very good, I can use this to make a small demo, but into my project always quote exception no camera, I really don't know what's wrong, very helpless, who can help me, thank you

E/Camera2: Failed to start camera preview.

E/Camera2: Failed to start camera preview.
java.lang.IllegalStateException: Session has been closed; further changes are illegal.
at android.hardware.camera2.impl.CameraCaptureSessionImpl.checkNotClosed(CameraCaptureSessionImpl.java:606)
at android.hardware.camera2.impl.CameraCaptureSessionImpl.setRepeatingRequest(CameraCaptureSessionImpl.java:227)
at com.google.android.cameraview.Camera2$2.onConfigured(Camera2.java:98)
at java.lang.reflect.Method.invoke(Native Method)
at android.hardware.camera2.dispatch.InvokeDispatcher.dispatch(InvokeDispatcher.java:39)
at android.hardware.camera2.dispatch.HandlerDispatcher$1.run(HandlerDispatcher.java:65)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5422)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

Saves only highest-resolution image?

Thanks for this incredible library. When you save, it seems to save the highest-available resolution matching the ratio. Often you want mid-resolution. (1) where to look in the code to change this? (2) Perhaps in the future it would be possible to add a tag app:save_resolution="high" "mid" "low". Thanks again.

Attribute name

Because of the attribute names i cant use it as other libs are using the same names.
Can you change them? (add "cam_" prefix)

Preview doesn't show whole picture

I've build a fragment containing a CameraView instance and a toolbar, just like the default Android Camera app. I am trying to achive a smooth transition between a preview and a taken photo, but on some devices preview showing only a part of a picture, while resulting image is looking normal. I've tried to tweak the adjustViewBounds parameter, but it changes nothing. It seems like photo is top-cropped inside a CameraView preview, so user can't see a whole picture before taking a shot.
P.S.
I've figured out that changing of a width and height according to an optimal size value here may help, but a preview image is not centered according to its frame.

Demo using Fragment

Hi There,

I'm embedding the cameraview in a Fragment (within an Activity) and have run into the following exception when mCameraView.start() is called in onResume():

java.lang.IllegalStateException: Session has been closed; further changes are illegal.
at android.hardware.camera2.impl.CameraCaptureSessionImpl.checkNotClosed(CameraCaptureSessionImpl.java:606)
at android.hardware.camera2.impl.CameraCaptureSessionImpl.setRepeatingRequest(CameraCaptureSessionImpl.java:227)
at com.google.android.cameraview.Camera2$3.onConfigured(Camera2.java:132)
at java.lang.reflect.Method.invoke(Native Method)
at android.hardware.camera2.dispatch.InvokeDispatcher.dispatch(InvokeDispatcher.java:39)
at android.hardware.camera2.dispatch.HandlerDispatcher$1.run(HandlerDispatcher.java:65)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

I'm running on a Nexus 6P with Android 6.0.

Is there a working example that illustrates how to do this?

Thanks

NPE when camera does not support flash modes

I experienced a crash of the demo app when running on an API level 17 device. This is the stacktrace:

com.google.android.cameraview.demo E/AndroidRuntime: FATAL EXCEPTION: main
    java.lang.RuntimeException: Unable to resume activity {com.google.android.cameraview.demo/com.google.android.cameraview.demo.MainActivity}: java.lang.NullPointerException
        at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2957)
        at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2986)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2421)
        at android.app.ActivityThread.access$600(ActivityThread.java:166)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1379)
        at android.os.Handler.dispatchMessage(Handler.java:107)
        at android.os.Looper.loop(Looper.java:194)
        at android.app.ActivityThread.main(ActivityThread.java:5455)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:525)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:966)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:733)
        at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.NullPointerException
        at com.google.android.cameraview.Camera1.setFlashInternal(Camera1.java:405)
        at com.google.android.cameraview.Camera1.adjustCameraParameters(Camera1.java:327)
        at com.google.android.cameraview.Camera1.openCamera(Camera1.java:294)
        at com.google.android.cameraview.Camera1.start(Camera1.java:114)
        at com.google.android.cameraview.CameraView.start(CameraView.java:226)
        at com.google.android.cameraview.demo.MainActivity.onResume(MainActivity.java:140)
        at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1190)
        at android.app.Activity.performResume(Activity.java:5289)
        at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2944)
        at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2986) 
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2421) 
        at android.app.ActivityThread.access$600(ActivityThread.java:166) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1379) 
        at android.os.Handler.dispatchMessage(Handler.java:107) 
        at android.os.Looper.loop(Looper.java:194) 
        at android.app.ActivityThread.main(ActivityThread.java:5455) 
        at java.lang.reflect.Method.invokeNative(Native Method) 
        at java.lang.reflect.Method.invoke(Method.java:525) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:966) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:733) 
        at dalvik.system.NativeStart.main(Native Method)

The cause seems to be that Camera1 does not expect devices to not support flash modes, which is possible by the Camera.Parameters API.

Failed to start camera session

I try to start camera after user set permission

@OverRide
public void onRequestPermissionsResult(int requestCode, @nonnull String[] permissions,
@nonnull int[] grantResults) {
switch (requestCode) {
case REQUEST_CAMERA_PERMISSION:
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
cameraView.start();
}
break;
}
}

but I get exception:

FATAL EXCEPTION: main
Process: ua.com.oncreate.infitting, PID: 15583
java.lang.RuntimeException: Failed to start camera session
at com.google.android.cameraview.Camera2.startCaptureSession(Camera2.java:443)
at com.google.android.cameraview.Camera2$1.onOpened(Camera2.java:65)
at android.hardware.camera2.impl.CameraDeviceImpl$1.run(CameraDeviceImpl.java:134)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7225)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)

Samsung Note 4 API 6.0.1

Demo app crashes when trying to open non-existent front facing camera

The demo app crashes when running on a phone with only 1 back camera and clicking the switch_camera icon. This is the stack trace:

com.google.android.cameraview.demo E/AndroidRuntime: FATAL EXCEPTION: main
    java.lang.RuntimeException: Fail to connect to camera service
        at android.hardware.Camera.native_setup(Native Method)
        at android.hardware.Camera.<init>(Camera.java:429)
        at android.hardware.Camera.open(Camera.java:388)
        at com.google.android.cameraview.Camera1.openCamera(Camera1.java:278)
        at com.google.android.cameraview.Camera1.start(Camera1.java:114)
        at com.google.android.cameraview.Camera1.setFacing(Camera1.java:152)
        at com.google.android.cameraview.CameraView.setFacing(CameraView.java:292)
        at com.google.android.cameraview.demo.MainActivity.onOptionsItemSelected(MainActivity.java:220)
        at android.app.Activity.onMenuItemSelected(Activity.java:2592)
        at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:421)
        at android.support.v7.app.AppCompatActivity.onMenuItemSelected(AppCompatActivity.java:188)
        at android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:103)
        at android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:103)
        at android.support.v7.app.ToolbarActionBar$2.onMenuItemClick(ToolbarActionBar.java:69)
        at android.support.v7.widget.Toolbar$1.onMenuItemClick(Toolbar.java:202)
        at android.support.v7.widget.ActionMenuView$MenuBuilderCallback.onMenuItemSelected(ActionMenuView.java:761)
        at android.support.v7.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:810)
        at android.support.v7.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:152)
        at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:957)
        at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:947)
        at android.support.v7.widget.ActionMenuView.invokeItem(ActionMenuView.java:618)
        at android.support.v7.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:155)
        at android.view.View.performClick(View.java:4220)
        at android.view.View$PerformClick.run(View.java:17513)
        at android.os.Handler.handleCallback(Handler.java:800)
        at android.os.Handler.dispatchMessage(Handler.java:100)
        at android.os.Looper.loop(Looper.java:194)
        at android.app.ActivityThread.main(ActivityThread.java:5455)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:525)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:966)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:733)
        at dalvik.system.NativeStart.main(Native Method)

Perhaps it's not the library's responsibility to check which cameras are supported on the device, but I guess it would be nice if the demo app doesn't crash in this cases.

Unable to capture

java.lang.NullPointerException: Attempt to invoke virtual method 'int android.hardware.camera2.CameraCaptureSession.capture(android.hardware.camera2.CaptureRequest, android.hardware.camera2.CameraCaptureSession$CaptureCallback, android.os.Handler)' on a null object reference

Flaky capturing

Not every single click results in onPictureTaken() callback.

I'm not talking about throttling when you click too fast, as you can see, it's enough time between clicks. It's just skipped randomly.

OnePlus One, 6.0.1

TL;DR of this log: Capture, Skip, Capture

18:30:24.111 D/MainActivity: onClick:
18:30:24.158 W/LegacyRequestMapper: convertRequestMetadata - control.awbRegions setting is not supported, ignoring value
18:30:24.158 W/LegacyRequestMapper: Only received metering rectangles with weight 0.
18:30:24.158 W/LegacyRequestMapper: Only received metering rectangles with weight 0.
18:30:24.211 D/LegacyFocusStateMapper: onAutoFocusMoving - ignoring move callbacks from old af run1
18:30:24.213 W/LegacyRequestMapper: convertRequestMetadata - control.awbRegions setting is not supported, ignoring value
18:30:24.213 W/LegacyRequestMapper: Only received metering rectangles with weight 0.
18:30:24.213 W/LegacyRequestMapper: Only received metering rectangles with weight 0.
18:30:24.269 I/RequestQueue: Repeating capture request cancelled.
18:30:24.302 W/LegacyRequestMapper: convertRequestMetadata - control.awbRegions setting is not supported, ignoring value
18:30:24.303 W/LegacyRequestMapper: Only received metering rectangles with weight 0.
18:30:24.303 W/LegacyRequestMapper: Only received metering rectangles with weight 0.
18:30:24.883 I/RequestThread-0: Received jpeg.
18:30:24.884 I/RequestThread-0: Producing jpeg buffer...
18:30:24.887 D/ImageReader_JNI: ImageReader_lockedImageSetup: Receiving JPEG in HAL_PIXEL_FORMAT_RGBA_8888 buffer.
18:30:24.889 D/MainActivity: onPictureTaken 1026780
18:30:24.922 I/RequestQueue: Repeating capture request set.
18:30:24.924 W/LegacyRequestMapper: convertRequestMetadata - control.awbRegions setting is not supported, ignoring value
18:30:24.924 W/LegacyRequestMapper: Only received metering rectangles with weight 0.
18:30:24.924 W/LegacyRequestMapper: Only received metering rectangles with weight 0.
18:30:25.053 D/LegacyFocusStateMapper: onAutoFocusMoving - ignoring move callbacks from old af run2
18:30:25.155 W/LegacyRequestMapper: convertRequestMetadata - control.awbRegions setting is not supported, ignoring value
18:30:25.155 W/LegacyRequestMapper: Only received metering rectangles with weight 0.
18:30:25.157 W/LegacyRequestMapper: Only received metering rectangles with weight 0.

18:30:29.720 D/MainActivity: onClick:
18:30:29.771 W/LegacyRequestMapper: convertRequestMetadata - control.awbRegions setting is not supported, ignoring value
18:30:29.772 W/LegacyRequestMapper: Only received metering rectangles with weight 0.
18:30:29.772 W/LegacyRequestMapper: Only received metering rectangles with weight 0.
18:30:29.796 W/LegacyRequestMapper: convertRequestMetadata - control.awbRegions setting is not supported, ignoring value
18:30:29.796 W/LegacyRequestMapper: Only received metering rectangles with weight 0.
18:30:29.796 W/LegacyRequestMapper: Only received metering rectangles with weight 0.

18:30:36.730 D/MainActivity: onClick:
18:30:36.796 W/LegacyRequestMapper: convertRequestMetadata - control.awbRegions setting is not supported, ignoring value
18:30:36.796 W/LegacyRequestMapper: Only received metering rectangles with weight 0.
18:30:36.796 W/LegacyRequestMapper: Only received metering rectangles with weight 0.
18:30:36.818 D/LegacyFocusStateMapper: onAutoFocusMoving - ignoring move callbacks from old af run4
18:30:36.872 W/LegacyRequestMapper: convertRequestMetadata - control.awbRegions setting is not supported, ignoring value
18:30:36.872 W/LegacyRequestMapper: Only received metering rectangles with weight 0.
18:30:36.872 W/LegacyRequestMapper: Only received metering rectangles with weight 0.
18:30:36.873 I/RequestQueue: Repeating capture request cancelled.
18:30:36.941 W/LegacyRequestMapper: convertRequestMetadata - control.awbRegions setting is not supported, ignoring value
18:30:36.941 W/LegacyRequestMapper: Only received metering rectangles with weight 0.
18:30:36.941 W/LegacyRequestMapper: Only received metering rectangles with weight 0.
18:30:37.702 I/RequestThread-0: Received jpeg.
18:30:37.702 I/RequestThread-0: Producing jpeg buffer...
18:30:37.703 D/ImageReader_JNI: ImageReader_lockedImageSetup: Receiving JPEG in HAL_PIXEL_FORMAT_RGBA_8888 buffer.
18:30:37.704 D/MainActivity: onPictureTaken 1022546

Non-default aspect ratio will be ignored w/ Camera2

In Camera2.setAspectRatio(AspectRatio ratio), you have this check at the start of the method:

if (ratio == null || ratio.equals(mAspectRatio) ||
                **!mPreviewSizes.ratios().contains(ratio)**) {
            // TODO: Better error handling
            return;
}

setAspectRatio() is called in the constructor of CameraView once the custom XML attribute value for app:aspectRatio is retrieved. At this time mPreviewSizes.ratios() will always be empty because camera info has not been collected yet, which happens on Camera2.start(). So, this method will always return without doing anything, and the default aspect ratio -- 4:3 -- will always be used.

I fixed this by collecting camera info before this check

chooseCameraIdByFacing();
collectCameraInfo();
if (ratio == null || ratio.equals(mAspectRatio) ||
                !mPreviewSizes.ratios().contains(ratio)) {
            // TODO: Better error handling
            return;
}

Bag after update library

Hi!
After last update: f0eef9a I get next bug (not olways, but offen):

FATAL EXCEPTION: main
Process: ua.com.oncreate.infitting, PID: 6792
java.lang.RuntimeException: takePicture failed
at android.hardware.Camera.native_takePicture(Native Method)
at android.hardware.Camera.takePicture(Camera.java:1523)
at com.google.android.cameraview.Camera1.takePictureInternal(Camera1.java:227)
at com.google.android.cameraview.Camera1.takePicture(Camera1.java:222)
at com.google.android.cameraview.CameraView.takePicture(CameraView.java:388)
at ua.com.oncreate.infitting.activity.camera.CameraActivity.onClick(CameraActivity.java:264)
at android.view.View.performClick(View.java:5697)
at android.view.View$PerformClick.run(View.java:22526)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7225)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)

I run project on Note 4 (6.0.1), but library used camera1 API, why? What I should do with this bug?

ArrayIndexOutOfBoundsException

FATAL EXCEPTION: main
Process: com.google.android.cameraview.demo, PID: 3438
java.lang.RuntimeException: Unable to resume activity {com.google.android.cameraview.demo/com.google.android.cameraview.demo.MainActivity}: java.lang.ArrayIndexOutOfBoundsException: length=0; index=0
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3103)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3134)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2481)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.ArrayIndexOutOfBoundsException: length=0; index=0
at com.google.android.cameraview.Camera2.chooseCameraIdByFacing(Camera2.java:388)
at com.google.android.cameraview.Camera2.start(Camera2.java:233)
at com.google.android.cameraview.CameraView.start(CameraView.java:226)
at com.google.android.cameraview.demo.MainActivity.onResume(MainActivity.java:140)
at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1258)
at android.app.Activity.performResume(Activity.java:6312)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3092)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3134) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2481) 
at android.app.ActivityThread.-wrap11(ActivityThread.java) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:148) 
at android.app.ActivityThread.main(ActivityThread.java:5417) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

jcenter support ?

Could you publish it to jcenter so that we can use it more easily?

Feature request: record video

Recording video is very hard in android and recording video has not security problem because it's possible to do but hard (a feature that is hard for implementing is a negative point of android)

also it's aspect ratio is not OK with front camera (Samsung galaxy note 3)

Fatal Exception: java.lang.IllegalArgumentException: previewSize must not be wider than activeArray

Hi, Crashlytics is reporting following issue in production:

Fatal Exception: java.lang.IllegalArgumentException: previewSize must not be wider than activeArray at android.hardware.camera2.legacy.ParameterUtils.getPreviewCropRectangleUnzoomed(ParameterUtils.java:494) at android.hardware.camera2.legacy.ParameterUtils.getClosestAvailableZoomCrop(ParameterUtils.java:395) at android.hardware.camera2.legacy.ParameterUtils.convertScalerCropRegion(ParameterUtils.java:764) at android.hardware.camera2.legacy.LegacyRequestMapper.convertRequestMetadata(LegacyRequestMapper.java:72) at android.hardware.camera2.legacy.LegacyMetadataMapper.convertRequestMetadata(LegacyMetadataMapper.java:1163) at android.hardware.camera2.legacy.RequestThreadManager$5.handleMessage(RequestThreadManager.java:744) at android.os.Handler.dispatchMessage(Handler.java:107) at android.os.Looper.loop(Looper.java:194) at android.os.HandlerThread.run(HandlerThread.java:61)

Move the Camera permission and uses-feature tags to the library module

As every user of the library will need the CAMERA permission, the <uses-permission> and <uses-feature> tags should be moved to the library module.

The android.hardware.camera.autofocus feature should probably have required="false" as well to ensure that CameraView can be used even on devices without autofocus.

Cannot Instantiate CameraView in content_main.xml

I am getting the following error trace when I try to place the CameraView in the content_main.xml file. My gradle settings are configured for APK 9-24. I am currently able to take images using the camera2 API but I wanted to switch to CameraView to avoid writing code for the old API as well.

<com.google.android.cameraview.CameraView android:id="@+id/camera" android:layout_width="10px" android:layout_height="10px" android:adjustViewBounds="true" app:autoFocus="true" app:aspectRatio="4:3" app:facing="back"/>

java.lang.UnsupportedOperationException: Unsupported Service: camera at com.android.layoutlib.bridge.android.BridgeContext.getSystemService(BridgeContext.java:602) at com.google.android.cameraview.Camera2.<init>(Camera2.java:191) at com.google.android.cameraview.CameraView.<init>(CameraView.java:102) at com.google.android.cameraview.CameraView.<init>(CameraView.java:85) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at org.jetbrains.android.uipreview.ViewLoader.createNewInstance(ViewLoader.java:465) at org.jetbrains.android.uipreview.ViewLoader.loadClass(ViewLoader.java:172) at org.jetbrains.android.uipreview.ViewLoader.loadView(ViewLoader.java:105) at com.android.tools.idea.rendering.LayoutlibCallbackImpl.loadView(LayoutlibCallbackImpl.java:186) at android.view.BridgeInflater.loadCustomView(BridgeInflater.java:334) at android.view.BridgeInflater.loadCustomView(BridgeInflater.java:345) at android.view.BridgeInflater.createViewFromTag(BridgeInflater.java:245) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:727) at android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:858) at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:70) at android.view.LayoutInflater.rInflate(LayoutInflater.java:834) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821) at android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:861) at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:70) at android.view.LayoutInflater.rInflate(LayoutInflater.java:834) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821) at android.view.LayoutInflater_Delegate.parseInclude(LayoutInflater_Delegate.java:197) at android.view.LayoutInflater.parseInclude(LayoutInflater.java:902) at android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:854) at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:70) at android.view.LayoutInflater.rInflate(LayoutInflater.java:834) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821) at android.view.LayoutInflater.inflate(LayoutInflater.java:518) at android.view.LayoutInflater.inflate(LayoutInflater.java:397) at com.android.layoutlib.bridge.impl.RenderSessionImpl.inflate(RenderSessionImpl.java:324) at com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:429) at com.android.ide.common.rendering.LayoutLibrary.createSession(LayoutLibrary.java:389) at com.android.tools.idea.rendering.RenderTask$2.compute(RenderTask.java:548) at com.android.tools.idea.rendering.RenderTask$2.compute(RenderTask.java:533) at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:966) at com.android.tools.idea.rendering.RenderTask.createRenderSession(RenderTask.java:533) at com.android.tools.idea.rendering.RenderTask.lambda$inflate$72(RenderTask.java:659) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745)

private View.OnClickListener mOnClickListener = new View.OnClickListener() { @Override public void onClick(View v) { if (mCameraView != null) { mCameraView.takePicture(); } } };

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); mCameraView = (CameraView) findViewById(R.id.camera); ... shootB.setOnClickListener(mOnClickListener);
`private CameraView.Callback mCallback
= new CameraView.Callback() {

    @Override
    public void onCameraOpened(CameraView cameraView) {
        Log.d("", "onCameraOpened");
    }

    @Override
    public void onCameraClosed(CameraView cameraView) {
        Log.d("", "onCameraClosed");
    }

    @Override
    public void onPictureTaken(CameraView cameraView, final byte[] data) {
        Log.d("", "onPictureTaken " + data.length);
        handler.post(new Runnable() {
            @Override
            public void run() {
                // This demo app saves the taken picture to a constant file.
                // $ adb pull /sdcard/Android/data/com.google.android.cameraview.demo/files/Pictures/picture.jpg
                File file = new File(Environment.getExternalStorageDirectory()+"/"+DATA_COLLECTOR_FOLDER+"/"+mChosenFile+"/picture.jpg");
                OutputStream os = null;
                try {
                    os = new FileOutputStream(file);
                    os.write(data);
                    os.close();
                } catch (IOException e) {
                    Log.w("", "Cannot write to " + file, e);
                } finally {
                    if (os != null) {
                        try {
                            os.close();
                        } catch (IOException e) {
                            // Ignore
                        }
                    }
                }
            }
        });
    }

};`

This is the error log that I get when I try to take a photo
10-14 20:15:19.315 26409-26409/com.thesis.ahmed.datacollector E/AndroidRuntime: FATAL EXCEPTION: main Process: com.thesis.ahmed.datacollector, PID: 26409 java.lang.NullPointerException: Attempt to invoke virtual method 'void android.hardware.camera2.CaptureRequest$Builder.set(android.hardware.camera2.CaptureRequest$Key, java.lang.Object)' on a null object reference at com.google.android.cameraview.Camera2.lockFocus(Camera2.java:547) at com.google.android.cameraview.Camera2.takePicture(Camera2.java:323) at com.google.android.cameraview.CameraView.takePicture(CameraView.java:376) at com.thesis.ahmed.datacollector.MainActivity$1.onClick(MainActivity.java:79) at android.view.View.performClick(View.java:4856) at android.view.View$PerformClick.run(View.java:19956) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:211) at android.app.ActivityThread.main(ActivityThread.java:5389) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1020) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:815)

Camera2 always crashes after Permission Dialog

  1. Build and run the Demo app
  2. When the Permission dialog pops up, just accept it
  3. Demo app crashes immediately
    --- or ---
  4. Revoke the Permission from Setting and re-enter the app,
  5. after the Permission Rationale dialog is shown, just accept the Permission Dialog
  6. watch it crash again.

Device: Nexus 5x running on Nougat (NRD90M)

https://github.com/google/cameraview/blob/master/library/src/main/camera2/com/google/android/cameraview/Camera2.java#L132

09-11 07:05:44.562 23963-23963/com.google.android.cameraview.demo E/AndroidRuntime: FATAL EXCEPTION: main
     Process: com.google.android.cameraview.demo, PID: 23963
     java.lang.IllegalStateException: Session has been closed; further changes are illegal.
         at android.hardware.camera2.impl.CameraCaptureSessionImpl.checkNotClosed(CameraCaptureSessionImpl.java:606)
         at android.hardware.camera2.impl.CameraCaptureSessionImpl.setRepeatingRequest(CameraCaptureSessionImpl.java:227)
         at com.google.android.cameraview.Camera2$3.onConfigured(Camera2.java:132)
         at java.lang.reflect.Method.invoke(Native Method)
         at android.hardware.camera2.dispatch.InvokeDispatcher.dispatch(InvokeDispatcher.java:39)
         at android.hardware.camera2.dispatch.HandlerDispatcher$1.run(HandlerDispatcher.java:65)
         at android.os.Handler.handleCallback(Handler.java:751)
         at android.os.Handler.dispatchMessage(Handler.java:95)
         at android.os.Looper.loop(Looper.java:154)
         at android.app.ActivityThread.main(ActivityThread.java:6077)
         at java.lang.reflect.Method.invoke(Native Method)
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)

Wrong picture orientation on Samsung devices

Hi,

After taking a picture with this library I create a Bitmap and set it in an ImageView as follow:

 public void onPictureTaken(CameraView cameraView, byte[] data) {
     Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
     imageView.setImageBitmap(bitmap);
}

This works fine on a Nexus 5X, however on Samsung devices the picture orientation appears to be incorrectly rotated 90 degrees to the left when the device orientation is portrait. Is there a way to fix this issue?

Video record

It's a nice library to take picture easily.
But is it possible to add the video record feature ?

thank you

Flash not working correctly

I tried your demo application on a OnePlus 3 and Nexus 5x and the image was not flashed correctly see the attached image. I took the image in a completely dark room with flash enabled.
I was writing kind of the same camera api 3 months ago and had exactly the same issue, but I was not able to fix it. It took me quite a long time to investigate into the issue and find a fix, but I was not able to find a working solution.

OnePlus 3:
picture

Nexus 5x (completely white)
picture_nexus_5x

what is this :\

Process: com.google.android.cameraview.demo, PID: 17229
java.lang.NullPointerException: Attempt to invoke virtual method 'android.hardware.camera2.CaptureRequest$Builder android.hardware.camera2.CameraDevice.createCaptureRequest(int)' on a null object reference
at com.google.android.cameraview.Camera2.captureStillPicture(Camera2.java:562)
at com.google.android.cameraview.Camera2.takePicture(Camera2.java:325)
at com.google.android.cameraview.CameraView.takePicture(CameraView.java:376)
at com.google.android.cameraview.demo.MainActivity$1.onClick(MainActivity.java:91)
at android.view.View.performClick(View.java:5280)
at android.view.View$PerformClick.run(View.java:21239)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:234)
at android.app.ActivityThread.main(ActivityThread.java:5526)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

Raw data callback

Encoding JPEG before calling a callback function takes some amount of a precious time and freezing an app. Also it is not suitable for in-place editors, when user makes a shot, applies some filters, and only after that decides to save, or not to save a resulting image.

P.S. Figured it out, it seems like Android does not provide bitmap data in camera callback...Please, correct me if I am wrong, and we can use that raw data callback.

Why back to SurfaceView on API >= 24?

This is more of a question than an issue:

Why are you guys reverting back to the usage of a SurfaceView for API >= 24? What's wrong with TextureView on Nougat+?

Null Pointer Exception when capture session is started

I have following exception reported twice from Crashlytics in my app. Attaching device statistics.
device statistics

Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Surface android.media.ImageReader.getSurface()' on a null object reference
at com.google.android.cameraview.Camera2.startCaptureSession(SourceFile:470)
at com.google.android.cameraview.Camera2.access$200(SourceFile:50)
at com.google.android.cameraview.Camera2$1.onSurfaceTextureAvailable(SourceFile:70)
at android.view.TextureView.getHardwareLayer(TextureView.java:370)
at android.view.View.updateDisplayListIfDirty(View.java:14076)
at android.view.View.getDisplayList(View.java:14122)
at android.view.View.draw(View.java:14898)
at android.view.ViewGroup.drawChild(ViewGroup.java:3407)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3201)
at android.view.View.updateDisplayListIfDirty(View.java:14094)
at android.view.View.getDisplayList(View.java:14122)
at android.view.View.draw(View.java:14898)
at android.view.ViewGroup.drawChild(ViewGroup.java:3407)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3201)
at android.view.View.draw(View.java:15177)
at android.view.View.updateDisplayListIfDirty(View.java:14099)
at android.view.View.getDisplayList(View.java:14122)
at android.view.View.draw(View.java:14898)
at android.view.ViewGroup.drawChild(ViewGroup.java:3407)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3201)
at android.view.View.updateDisplayListIfDirty(View.java:14094)
at android.view.View.getDisplayList(View.java:14122)
at android.view.View.draw(View.java:14898)
at android.view.ViewGroup.drawChild(ViewGroup.java:3407)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3201)
at android.view.View.updateDisplayListIfDirty(View.java:14094)
at android.view.View.getDisplayList(View.java:14122)
at android.view.View.draw(View.java:14898)
at android.view.ViewGroup.drawChild(ViewGroup.java:3407)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3201)
at android.view.View.updateDisplayListIfDirty(View.java:14094)
at android.view.View.getDisplayList(View.java:14122)
at android.view.View.draw(View.java:14898)
at android.view.ViewGroup.drawChild(ViewGroup.java:3407)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3201)
at android.view.View.updateDisplayListIfDirty(View.java:14094)
at android.view.View.getDisplayList(View.java:14122)
at android.view.View.draw(View.java:14898)
at android.view.ViewGroup.drawChild(ViewGroup.java:3407)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3201)
at android.view.View.updateDisplayListIfDirty(View.java:14094)
at android.view.View.getDisplayList(View.java:14122)
at android.view.View.draw(View.java:14898)
at android.view.ViewGroup.drawChild(ViewGroup.java:3407)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3201)
at android.view.View.draw(View.java:15177)
at android.widget.FrameLayout.draw(FrameLayout.java:592)
at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2695)
at android.view.View.updateDisplayListIfDirty(View.java:14099)
at android.view.View.getDisplayList(View.java:14122)
at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:266)
at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:272)
at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:311)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:2531)
at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2367)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1998)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1078)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5885)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
at android.view.Choreographer.doCallbacks(Choreographer.java:580)
at android.view.Choreographer.doFrame(Choreographer.java:550)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5376)
at java.lang.reflect.Method.invoke(Method.java)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:908)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:703)

java.lang.RuntimeException: setParameters failed

When I click the switch_camera in menu

E/AndroidRuntime: FATAL EXCEPTION: main Process: cn.yibulz.caviewtest, PID: 10550 java.lang.RuntimeException: setParameters failed at android.hardware.Camera.native_setParameters(Native Method) at android.hardware.Camera.setParameters(Camera.java:1671) at com.google.android.cameraview.Camera1.adjustCameraParameters(Camera1.java:323) at com.google.android.cameraview.Camera1.openCamera(Camera1.java:288) at com.google.android.cameraview.Camera1.start(Camera1.java:86) at com.google.android.cameraview.Camera1.setFacing(Camera1.java:136) at com.google.android.cameraview.CameraView.setFacing(CameraView.java:292) at cn.yibulz.caviewtest.MainActivity.onOptionsItemSelected(MainActivity.java:194) at android.app.Activity.onMenuItemSelected(Activity.java:2614) at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:406) at android.support.v7.app.AppCompatActivity.onMenuItemSelected(AppCompatActivity.java:195) at android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:103) at android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:103) at android.support.v7.app.ToolbarActionBar$2.onMenuItemClick(ToolbarActionBar.java:69) at android.support.v7.widget.Toolbar$1.onMenuItemClick(Toolbar.java:203) at android.support.v7.widget.ActionMenuView$MenuBuilderCallback.onMenuItemSelected(ActionMenuView.java:762) at android.support.v7.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:810) at android.support.v7.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:152) at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:957) at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:947) at android.support.v7.widget.ActionMenuView.invokeItem(ActionMenuView.java:616) at android.support.v7.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:153) at android.view.View.performClick(View.java:4444) at android.view.View$PerformClick.run(View.java:18440) at android.os.Handler.handleCallback(Handler.java:733) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5016) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:611) at dalvik.system.NativeStart.main(Native Method)

NULL reference exception on takePicture()

I only got this error on my Huawei Ascend P7 device and not on a Samsung Galaxy S5. When taking a picture, it crashes.

mTakePicture.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if (mCameraView.isCameraOpened()) {
            mCameraView.takePicture();
        }
    }
});

mCameraView.addCallback(new CameraView.Callback() {
    @Override
    public void onPictureTaken(CameraView cameraView, byte[] data) {
        super.onPictureTaken(cameraView, data);
        mListener.onPictureTaken(data); // Custom method to process the data
        mCameraView.stop();
        getActivity().getSupportFragmentManager().popBackStack();
    }
});

When deleting the following line it works, however I need to close the camera fragment.
getActivity().getSupportFragmentManager().popBackStack();

This is the error:

java.lang.NullPointerException: Attempt to invoke virtual method 'int android.hardware.camera2.CameraCaptureSession.capture(android.hardware.camera2.CaptureRequest, android.hardware.camera2.CameraCaptureSession$CaptureCallback, android.os.Handler)' on a null object reference
    at com.google.android.cameraview.Camera2.unlockFocus(Camera2.java:625)
    at com.google.android.cameraview.Camera2.access$900(Camera2.java:45)
    at com.google.android.cameraview.Camera2$6.onCaptureCompleted(Camera2.java:609)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at android.hardware.camera2.dispatch.InvokeDispatcher.dispatch(InvokeDispatcher.java:39)
    at android.hardware.camera2.dispatch.HandlerDispatcher$1.run(HandlerDispatcher.java:65)
    at android.os.Handler.handleCallback(Handler.java:739)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:135)
    at android.app.ActivityThread.main(ActivityThread.java:5569)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:931)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:726)

My guess is that I need to listen to another callback before killing the camera, but I couldn't find one.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.