googlearchive/android-Camera2Video

Camera2Video app crashes on Nexus 7 device with android version 5.0.2

Closed this issue · 33 comments

Steps to reproduce:

  1. Download android-Camera2Video source and check-out b934312
  2. build app via ./gradlew assembleDebug run from project root
  3. install to device via adb install Application/build/outputs/apk/Application-debug.apk
  4. run app by tapping app icon - it will show preview video from front-facing camera.
  5. press start button. It will cause start button to change label to stop, preview will still show video from front-facing camera
  6. press stop button. It will cause stop button to change to start. Preview picture will freeze.
  7. After around 1-2 second since pressing stop application will just quit automatically without displaying any error/information. logcat will contain a couple of exceptions and errors. Whole logcat (starting just before application was launched) is pasted below. Note that probably the most interesting errors happen just after start is pressed.

I run the same binary on nexus-5 and it worked correctly. After pressing stop preview didn't freeze and toast appeared informing where video file was saved on device.

LOGCAT

I/ActivityManager( 482): START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.example.android.camera2video/.CameraActivity (has extras)} from uid 10033 on display 0
I/ActivityManager( 482): Start proc com.example.android.camera2video for activity com.example.android.camera2video/.CameraActivity: pid=2992 uid=10074 gids={50074, 9997} abi=armeabi-v7a
I/art ( 2992): Late-enabling -Xcheck:jni
D/OpenGLRenderer( 2992): Render dirty regions requested: false
D/Atlas ( 2992): Validating map...
D/libEGL ( 2992): loaded /system/lib/egl/libEGL_tegra.so
D/libEGL ( 2992): loaded /system/lib/egl/libGLESv1_CM_tegra.so
D/libEGL ( 2992): loaded /system/lib/egl/libGLESv2_tegra.so
I/OpenGLRenderer( 2992): Initialized EGL, version 1.4
D/OpenGLRenderer( 2992): Enabling debug mode 0
I/CameraService( 135): getCameraCharacteristics: Switching to HAL1 shim implementation...
W/ArrayUtils( 2992): Ignoring invalid value nv-vivid
W/ArrayUtils( 2992): Ignoring invalid value nv-emboss
E/Camera2VideoFragment( 2992): Couldn't find any suitable preview size
W/ArrayUtils( 2992): Ignoring invalid value nv-vivid
W/ArrayUtils( 2992): Ignoring invalid value nv-emboss
I/CameraManager( 2992): Using legacy camera HAL.
W/AudioFlinger( 135): acquireAudioSessionId() unknown client 2992 for session 13
W/AudioFlinger( 135): acquireAudioSessionId() unknown client 2992 for session 14
I/CameraClient( 135): Opening camera 0
I/NvOmxCamera( 135): HAL_camera_device_open: open camera 0
E/ ( 135): ioctl SetWhiteBalance failed: -1
E/NvOmxCameraSettingsParser( 135): Param type 70 not supported
I/NvOmxCamera( 135): HAL_camera_device_open: opened camera 0 (0x420c4cb8)
W/ArrayUtils( 2992): Ignoring invalid value nv-vivid
W/ArrayUtils( 2992): Ignoring invalid value nv-emboss
I/ActivityManager( 482): Displayed com.example.android.camera2video/.CameraActivity: +854ms
E/OMXNodeInstance( 135): OMX_SetParameter() failed for StoreMetaDataInBuffers: 0x80001005
E/ACodec ( 135): [OMX.Nvidia.h264.encoder] storeMetaDataInBuffers (output) failed w/ err -2147483648
W/ACodec ( 135): do not know color format 0x7f000789 = 2130708361
D/NvOsDebugPrintf( 135): NvMMLiteOpen : Block : BlockType = 4
D/NvOsDebugPrintf( 135): NvRmPowerModuleClockControl on MOD[29] INST[0]
D/NvOsDebugPrintf( 135): NvRmModuleResetWithHold deassert MOD[29] INST[0]
D/NvOsDebugPrintf( 135): NvMMLiteBlockCreate : Block : BlockType = 4
I/ACodec ( 135): setupVideoEncoder succeeded
W/ACodec ( 135): do not know color format 0x7f000789 = 2130708361
E/OMXNodeInstance( 135): OMX_EnableAndroidNativeBuffers failed with error -2147479547 (0x80001005)
D/NvOsDebugPrintf( 135): +NvxVideoEncoderSetNvMMAttributes
D/NvOsDebugPrintf( 135): -NvxVideoEncoderSetNvMMAttributes
I/AudioFlinger( 135): AudioFlinger's thread 0x4177c008 ready to run
W/AudioFlinger( 135): acquireAudioSessionId() unknown client 2992 for session 15
I/CameraDeviceState( 2992): Legacy camera service transitioning to state CONFIGURING
I/RequestThread-0( 2992): Configure outputs: 2 surfaces configured.
D/Camera ( 2992): app passed NULL surface
I/CameraDeviceState( 2992): Legacy camera service transitioning to state IDLE
I/RequestQueue( 2992): Repeating capture request set.
W/LegacyRequestMapper( 2992): convertRequestMetadata - control.awbRegions setting is not supported, ignoring value
W/LegacyRequestMapper( 2992): convertRequestToMetadata - Ignoring android.lens.focusDistance false, only 0.0f is supported
D/ ( 135): Camera fd open as: 119
E/NvOmxCamera( 135): OMX_ERRORTYPE android::NvOmxCamera::getCameraStereoMode(NvxComponent_, NvOmxCameraUserStereoMode&): Error: invalid NVX mode 0.
E/NvOmxCamera( 135): OMX_ERRORTYPE android::NvOmxCamera::getCameraStereoModeAndCaptureInfo(NvxComponent_, NvOmxCameraUserStereoMode&, NVX_STEREOCAPTUREINFO&): getCameraStereoMode failed with 0x00000000
I/CameraDeviceState( 2992): Legacy camera service transitioning to state CAPTURING
E/WifiStateMachine( 482): WifiStateMachine CMD_START_SCAN source -2 txSuccessRate=0.03 rxSuccessRate=0.03 targetRoamBSSID=64:70:02:c0:3b:e0 RSSI=-53
I/wpa_supplicant( 726): wlan0: CTRL-EVENT-SCAN-STARTED
I/MPEG4Writer( 135): limits: 4294967295/0 bytes/us, bit rate: 10012200 bps and the estimated moov size 3072 bytes
I/MPEG4Writer( 135): Start time offset: 200000 us
I/MediaCodecSource( 135): MediaCodecSource (video) starting
I/MediaCodecSource( 135): MediaCodecSource (video) started
I/MPEG4Writer( 135): Start time offset: 200000 us
I/MediaCodecSource( 135): MediaCodecSource (audio) starting
I/MediaCodecSource( 135): MediaCodecSource (audio) started
D/TaskPersister( 482): removeObsoleteFile: deleting file=16_task.xml
D/TaskPersister( 482): removeObsoleteFile: deleting file=16_task_thumbnail.png
I/MPEG4Writer( 135): setStartTimestampUs: 25290
I/MPEG4Writer( 135): Earliest track starting time: 25290
I/MPEG4Writer( 135): setStartTimestampUs: 4075
I/MPEG4Writer( 135): Earliest track starting time: 4075
D/MPEG4Writer( 135): Video track stopping
D/MPEG4Writer( 135): Video track source stopping
I/MediaCodecSource( 135): encoder (video) stopping
I/MPEG4Writer( 135): Received total/0-length (34/0) buffers and encoded 33 frames. - Video
W/GraphicBufferSource( 135): Dropped back down to Loaded without Executing
D/NvOsDebugPrintf( 135): NvRmPowerModuleClockControl off MOD[29] INST[0]
I/MediaCodecSource( 135): encoder (video) stopped
D/MPEG4Writer( 135): Video track source stopped
D/MPEG4Writer( 135): Video track stopped
D/MPEG4Writer( 135): Audio track stopping
D/MPEG4Writer( 135): Audio track source stopping
I/MediaCodecSource( 135): encoder (audio) stopping
I/MPEG4Writer( 135): Received total/0-length (18/0) buffers and encoded 17 frames. - Audio
I/MPEG4Writer( 135): Audio track drift time: 0 us
I/MediaCodecSource( 135): encoder (audio) stopped
I/MediaCodecSource( 135): puller (audio) stopping
E/BufferQueueProducer( 135): [GraphicBufferSource] dequeueBuffer: BufferQueue has been abandoned
W/nvwsi ( 2992): dequeueBuffer failed, error -19
E/libEGL ( 2992): eglMakeCurrent:777 error 300b (EGL_BAD_NATIVE_WINDOW)
E/CameraDeviceGLThread-0( 2992): Received exception on GL render thread:
E/CameraDeviceGLThread-0( 2992): java.lang.IllegalStateException: makeCurrent: EGL error: 0x300b
E/CameraDeviceGLThread-0( 2992): at android.hardware.camera2.legacy.SurfaceTextureRenderer.checkEglError(SurfaceTextureRenderer.java:487)
E/CameraDeviceGLThread-0( 2992): at android.hardware.camera2.legacy.SurfaceTextureRenderer.makeCurrent(SurfaceTextureRenderer.java:475)
E/CameraDeviceGLThread-0( 2992): at android.hardware.camera2.legacy.SurfaceTextureRenderer.drawIntoSurfaces(SurfaceTextureRenderer.java:675)
E/CameraDeviceGLThread-0( 2992): at android.hardware.camera2.legacy.GLThreadManager$1.handleMessage(GLThreadManager.java:103)
E/CameraDeviceGLThread-0( 2992): at android.os.Handler.dispatchMessage(Handler.java:98)
E/CameraDeviceGLThread-0( 2992): at android.os.Looper.loop(Looper.java:135)
E/CameraDeviceGLThread-0( 2992): at android.os.HandlerThread.run(HandlerThread.java:61)
I/CameraDeviceState( 2992): Legacy camera service transitioning to state ERROR
I/MediaCodecSource( 135): puller (audio) stopped
D/MPEG4Writer( 135): Audio track source stopped
D/MPEG4Writer( 135): Audio track stopped
D/MPEG4Writer( 135): Duration from tracks range is [2176000, 2198741] us
D/MPEG4Writer( 135): Stopping writer thread
D/MPEG4Writer( 135): 0 chunks are written in the last batch
D/MPEG4Writer( 135): Writer thread stopped
D/MPEG4Writer( 135): Video track stopping
D/MPEG4Writer( 135): Audio track stopping
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
W/ALooperRoster( 135): failed to deliver message. Target handler not registered.
E/OMXNodeInstance( 135): OMX_SetParameter() failed for StoreMetaDataInBuffers: 0x80001005
E/ACodec ( 135): [OMX.Nvidia.h264.encoder] storeMetaDataInBuffers (output) failed w/ err -2147483648
W/ACodec ( 135): do not know color format 0x7f000789 = 2130708361
D/NvOsDebugPrintf( 135): NvMMLiteOpen : Block : BlockType = 4
D/NvOsDebugPrintf( 135): NvRmPowerModuleClockControl on MOD[29] INST[0]
D/NvOsDebugPrintf( 135): NvRmModuleResetWithHold deassert MOD[29] INST[0]
D/NvOsDebugPrintf( 135): NvMMLiteBlockCreate : Block : BlockType = 4
I/ACodec ( 135): setupVideoEncoder succeeded
W/ACodec ( 135): do not know color format 0x7f000789 = 2130708361
E/OMXNodeInstance( 135): OMX_EnableAndroidNativeBuffers failed with error -2147479547 (0x80001005)
D/NvOsDebugPrintf( 135): +NvxVideoEncoderSetNvMMAttributes
D/NvOsDebugPrintf( 135): -NvxVideoEncoderSetNvMMAttributes
I/AudioFlinger( 135): AudioFlinger's thread 0x4250e008 ready to run
W/AudioFlinger( 135): acquireAudioSessionId() unknown client 2992 for session 19
W/AudioFlinger( 135): session id 15 not found for pid 2992
W/System.err( 2992): android.hardware.camera2.CameraAccessException: The camera device has encountered a serious error
W/System.err( 2992): at android.hardware.camera2.impl.CameraDeviceImpl.checkIfCameraClosedOrInError(CameraDeviceImpl.java:1478)
W/System.err( 2992): at android.hardware.camera2.impl.CameraDeviceImpl.createCaptureRequest(CameraDeviceImpl.java:476)
W/System.err( 2992): at com.example.android.camera2video.Camera2VideoFragment.startPreview(Camera2VideoFragment.java:408)
W/System.err( 2992): at com.example.android.camera2video.Camera2VideoFragment.stopRecordingVideo(Camera2VideoFragment.java:543)
W/System.err( 2992): at com.example.android.camera2video.Camera2VideoFragment.onClick(Camera2VideoFragment.java:292)
W/System.err( 2992): at android.view.View.performClick(View.java:4756)
W/System.err( 2992): at android.view.View$PerformClick.run(View.java:19749)
W/System.err( 2992): at android.os.Handler.handleCallback(Handler.java:739)
W/System.err( 2992): at android.os.Handler.dispatchMessage(Handler.java:95)
W/System.err( 2992): at android.os.Looper.loop(Looper.java:135)
W/System.err( 2992): at android.app.ActivityThread.main(ActivityThread.java:5221)
W/System.err( 2992): at java.lang.reflect.Method.invoke(Native Method)
W/System.err( 2992): at java.lang.reflect.Method.invoke(Method.java:372)
W/System.err( 2992): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
W/System.err( 2992): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
E/RequestThread-0( 2992): Timed out while waiting for request to complete.
W/CaptureCollector( 2992): Preview buffers dropped for request: 0
E/CameraDeviceState( 2992): Cannot receive result while in state: 0
E/CameraDeviceState( 2992): Cannot receive result while in state: 0
E/CameraDeviceState( 2992): Cannot receive result while in state: 0
W/MessageQueue( 2992): Handler (android.graphics.SurfaceTexture$1) {156a802e} sending message to a Handler on a dead thread
W/MessageQueue( 2992): java.lang.IllegalStateException: Handler (android.graphics.SurfaceTexture$1) {156a802e} sending message to a Handler on a dead thread
W/MessageQueue( 2992): at android.os.MessageQueue.enqueueMessage(MessageQueue.java:325)
W/MessageQueue( 2992): at android.os.Handler.enqueueMessage(Handler.java:631)
W/MessageQueue( 2992): at android.os.Handler.sendMessageAtTime(Handler.java:600)
W/MessageQueue( 2992): at android.os.Handler.sendMessageDelayed(Handler.java:570)
W/MessageQueue( 2992): at android.os.Handler.sendEmptyMessageDelayed(Handler.java:534)
W/MessageQueue( 2992): at android.os.Handler.sendEmptyMessage(Handler.java:519)
W/MessageQueue( 2992): at android.graphics.SurfaceTexture.postEventFromNative(SurfaceTexture.java:368)
E/BufferQueueProducer( 2992): [unnamed-2992-1] queueBuffer: BufferQueue has been abandoned
E/Surface ( 135): queueBuffer: error queuing buffer to SurfaceTexture, -19
E/NvOmxCamera( 135): Queue Buffer Failed. Skipping buffer.
E/BufferQueueProducer( 2992): [unnamed-2992-1] dequeueBuffer: BufferQueue has been abandoned
E/NvOmxCamera( 135): Dequeue Buffer Failed
E/BufferQueueProducer( 2992): [unnamed-2992-1] queueBuffer: BufferQueue has been abandoned
E/Surface ( 135): queueBuffer: error queuing buffer to SurfaceTexture, -19
E/NvOmxCamera( 135): Queue Buffer Failed. Skipping buffer.
E/BufferQueueProducer( 2992): [unnamed-2992-1] dequeueBuffer: BufferQueue has been abandoned
E/NvOmxCamera( 135): Dequeue Buffer Failed
E/BufferQueueProducer( 2992): [unnamed-2992-1] cancelBuffer: BufferQueue has been abandoned
E/BufferQueueProducer( 2992): [unnamed-2992-1] cancelBuffer: BufferQueue has been abandoned
D/ ( 135): Camera fd close (MI1040)
E/NvOmxCamera( 135): Already called release()
I/CameraClient( 135): Destroying camera 0
W/NvOmxCamera( 135): Already called release()
D/NuPlayerDriver( 135): reset(0x40d727e0)
D/NuPlayerDriver( 135): notifyResetComplete(0x40d727e0)
D/NuPlayerDriver( 135): reset(0x4004ed00)
D/NuPlayerDriver( 135): notifyResetComplete(0x4004ed00)
I/Choreographer( 2992): Skipped 184 frames! The application may be doing too much work on its main thread.
D/MPEG4Writer( 135): Video track stopping
E/MPEG4Writer( 135): Stop() called but track is not started
W/GraphicBufferSource( 135): Dropped back down to Loaded without Executing
D/NvOsDebugPrintf( 135): NvRmPowerModuleClockControl off MOD[29] INST[0]
D/MPEG4Writer( 135): Audio track stopping
E/MPEG4Writer( 135): Stop() called but track is not started
W/AudioFlinger( 135): session id 19 not found for pid 2992
I/ActivityManager( 482): Killing 2460:com.google.android.inputmethod.korean/u0a30 (adj 15): empty #17
W/libprocessgroup( 482): failed to open /acct/uid_10030/pid_2460/cgroup.procs: No such file or directory
W/MessageQueue( 2992): Handler (android.os.Handler) {1d22713a} sending message to a Handler on a dead thread
W/MessageQueue( 2992): java.lang.IllegalStateException: Handler (android.os.Handler) {1d22713a} sending message to a Handler on a dead thread
W/MessageQueue( 2992): at android.os.MessageQueue.enqueueMessage(MessageQueue.java:325)
W/MessageQueue( 2992): at android.os.Handler.enqueueMessage(Handler.java:631)
W/MessageQueue( 2992): at android.os.Handler.sendMessageAtFrontOfQueue(Handler.java:623)
W/MessageQueue( 2992): at android.hardware.camera2.legacy.RequestThreadManager.quit(RequestThreadManager.java:941)
W/MessageQueue( 2992): at android.hardware.camera2.legacy.LegacyCameraDevice.close(LegacyCameraDevice.java:444)
W/MessageQueue( 2992): at android.hardware.camera2.legacy.LegacyCameraDevice.finalize(LegacyCameraDevice.java:468)
W/MessageQueue( 2992): at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:190)
W/MessageQueue( 2992): at java.lang.Daemons$FinalizerDaemon.run(Daemons.java:173)
W/MessageQueue( 2992): at java.lang.Thread.run(Thread.java:818)
E/WifiStateMachine( 482): WifiStateMachine CMD_START_SCAN source -2 txSuccessRate=0.00 rxSuccessRate=0.25 targetRoamBSSID=64:70:02:c0:3b:e0 RSSI=-51
E/WifiStateMachine( 482): WifiStateMachine starting scan for "moria"WPA_PSK with 2437
I/wpa_supplicant( 726): wlan0: CTRL-EVENT-SCAN-STARTED

Thanks for your detailed issue report!
Over to yaraki for comment, but my understanding is that the Nexus 7 only supports a part of the camera2 API, not the full API. Either way, the sample should not crash with an exception.

(Internal: 19083047)

Thanks a lot for so quick response.

As this problem blocks some of my daily job tasks I would be grateful if you could provide some details about root cause of the problem once you pinpoint it.

My understanding is that basic functionality of camera2 that is used by camera2video app should be supported by any lollipop device. This means we have a bug in android 5.0.2 as it doesn't provide basic camera functionality on some devices. This would force me to use old camera API on those devices but I prefer to wait for results of your investigation.

Hey there, same problems happens on Moto X, is there any fix around this?

I have the same.
nexus 7, Android 5.0.2

Nexus 7 only supports a part of the camera2 API, not the full API

May be Nexus 7 doesn't support some other parts of API?
How can i understand it? I have Android 5.0.2 and it means i can use API 21, i think.
Can i use some workaround?

I have seen this same behavior recently. Anyone have a work-around?

I have.. but i have specific situation: I don't need preview without recording. I start recording after starting preview immediately. So, i changed code a bit. If it is OK for you, i will share it.

I don't need preview at all..but sure, share what you have.

https://gist.github.com/anonymous/be03bb6f5fa5287bc52b
I changed stopRecordingVideo() method.
And I start recording automatically after adding fragment, see startPreview() or switchCamera(). It works OK for me.

One issue I had w/ the Nexus 7 was assuming that a back camera would be available (there's none on the first version). I needed to fall back to CameraCharacteristics.LENS_FACING_FRONT in this case.

Crashes as soon as you hit stop on my Nexus 4 Android 5.0.1 as well.
The video file gets successfully written but it seems to create a new media recorder with a new file and then crash. I can tell coz I changed the filename to a timestamp, and every time it crashes the activity i can see 1 file for the video and a new file of 0k with the timestamp of the second i hit stop.

This is really annoying as I was hoping to use the new APIs rather than the old ones for my app.

04-12 18:08:38.706 24717-24743/com.example.android.camera2video D/OpenGLRenderer﹕ Render dirty regions requested: true
04-12 18:08:38.715 24717-24717/com.example.android.camera2video D/Atlas﹕ Validating map...
04-12 18:08:38.914 24717-24743/com.example.android.camera2video I/Adreno-EGL﹕ <qeglDrvAPI_eglInitialize:410>: QUALCOMM Build: 10/28/14, c33033c, Ia6306ec328
04-12 18:08:38.915 24717-24743/com.example.android.camera2video I/OpenGLRenderer﹕ Initialized EGL, version 1.4
04-12 18:08:38.940 24717-24743/com.example.android.camera2video D/OpenGLRenderer﹕ Enabling debug mode 0
04-12 18:08:39.010 24717-24717/com.example.android.camera2video W/ArrayUtils﹕ Ignoring invalid value normal
04-12 18:08:39.010 24717-24717/com.example.android.camera2video W/ArrayUtils﹕ Ignoring invalid value emboss
04-12 18:08:39.011 24717-24717/com.example.android.camera2video W/ArrayUtils﹕ Ignoring invalid value sketch
04-12 18:08:39.011 24717-24717/com.example.android.camera2video W/ArrayUtils﹕ Ignoring invalid value neon
04-12 18:08:39.011 24717-24717/com.example.android.camera2video W/ArrayUtils﹕ Ignoring invalid value asd
04-12 18:08:39.011 24717-24717/com.example.android.camera2video W/ArrayUtils﹕ Ignoring invalid value backlight
04-12 18:08:39.011 24717-24717/com.example.android.camera2video W/ArrayUtils﹕ Ignoring invalid value flowers
04-12 18:08:39.011 24717-24717/com.example.android.camera2video W/ArrayUtils﹕ Ignoring invalid value AR
04-12 18:08:39.023 24717-24717/com.example.android.camera2video E/Camera2VideoFragment﹕ Couldn't find any suitable preview size
04-12 18:08:39.029 24717-24717/com.example.android.camera2video W/ArrayUtils﹕ Ignoring invalid value normal
04-12 18:08:39.030 24717-24717/com.example.android.camera2video W/ArrayUtils﹕ Ignoring invalid value emboss
04-12 18:08:39.030 24717-24717/com.example.android.camera2video W/ArrayUtils﹕ Ignoring invalid value sketch
04-12 18:08:39.030 24717-24717/com.example.android.camera2video W/ArrayUtils﹕ Ignoring invalid value neon
04-12 18:08:39.030 24717-24717/com.example.android.camera2video W/ArrayUtils﹕ Ignoring invalid value asd
04-12 18:08:39.030 24717-24717/com.example.android.camera2video W/ArrayUtils﹕ Ignoring invalid value backlight
04-12 18:08:39.030 24717-24717/com.example.android.camera2video W/ArrayUtils﹕ Ignoring invalid value flowers
04-12 18:08:39.030 24717-24717/com.example.android.camera2video W/ArrayUtils﹕ Ignoring invalid value AR
04-12 18:08:39.035 24717-24717/com.example.android.camera2video I/CameraManager﹕ Using legacy camera HAL.
04-12 18:08:39.296 24717-24717/com.example.android.camera2video W/ArrayUtils﹕ Ignoring invalid value normal
04-12 18:08:39.296 24717-24717/com.example.android.camera2video W/ArrayUtils﹕ Ignoring invalid value emboss
04-12 18:08:39.296 24717-24717/com.example.android.camera2video W/ArrayUtils﹕ Ignoring invalid value sketch
04-12 18:08:39.296 24717-24717/com.example.android.camera2video W/ArrayUtils﹕ Ignoring invalid value neon
04-12 18:08:39.296 24717-24717/com.example.android.camera2video W/ArrayUtils﹕ Ignoring invalid value asd
04-12 18:08:39.296 24717-24717/com.example.android.camera2video W/ArrayUtils﹕ Ignoring invalid value backlight
04-12 18:08:39.296 24717-24717/com.example.android.camera2video W/ArrayUtils﹕ Ignoring invalid value flowers
04-12 18:08:39.296 24717-24717/com.example.android.camera2video W/ArrayUtils﹕ Ignoring invalid value AR
04-12 18:08:39.544 24717-24717/com.example.android.camera2video I/CameraDeviceState﹕ Legacy camera service transitioning to state CONFIGURING
04-12 18:08:39.545 24717-24766/com.example.android.camera2video I/RequestThread-0﹕ Configure outputs: 2 surfaces configured.
04-12 18:08:39.545 24717-24766/com.example.android.camera2video D/Camera﹕ app passed NULL surface
04-12 18:08:39.610 24717-24717/com.example.android.camera2video I/CameraDeviceState﹕ Legacy camera service transitioning to state IDLE
04-12 18:08:39.622 24717-24739/com.example.android.camera2video I/RequestQueue﹕ Repeating capture request set.
04-12 18:08:39.628 24717-24766/com.example.android.camera2video W/LegacyRequestMapper﹕ convertRequestMetadata - control.awbRegions setting is not supported, ignoring value
04-12 18:08:39.631 24717-24766/com.example.android.camera2video W/LegacyRequestMapper﹕ Only received metering rectangles with weight 0.
04-12 18:08:39.631 24717-24766/com.example.android.camera2video W/LegacyRequestMapper﹕ Only received metering rectangles with weight 0.
04-12 18:08:40.067 24717-24782/com.example.android.camera2video I/CameraDeviceState﹕ Legacy camera service transitioning to state CAPTURING
04-12 18:08:50.287 24717-24782/com.example.android.camera2video W/Adreno-EGLSUB﹕ DequeueBuffer:721: dequeue native buffer fail: No such device, buffer=0x0, handle=0x0
04-12 18:08:50.287 24717-24782/com.example.android.camera2video W/Adreno-EGL﹕ <qeglDrvAPI_eglSwapBuffers:3720>: EGL_BAD_SURFACE
04-12 18:08:50.290 24717-24782/com.example.android.camera2video E/CameraDeviceGLThread-0﹕ Received exception on GL render thread:
java.lang.IllegalStateException: swapBuffers: EGL error: 0x300d
at android.hardware.camera2.legacy.SurfaceTextureRenderer.checkEglError(SurfaceTextureRenderer.java:487)
at android.hardware.camera2.legacy.SurfaceTextureRenderer.swapBuffers(SurfaceTextureRenderer.java:480)
at android.hardware.camera2.legacy.SurfaceTextureRenderer.drawIntoSurfaces(SurfaceTextureRenderer.java:681)
at android.hardware.camera2.legacy.GLThreadManager$1.handleMessage(GLThreadManager.java:103)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:135)
at android.os.HandlerThread.run(HandlerThread.java:61)
04-12 18:08:50.290 24717-24782/com.example.android.camera2video I/CameraDeviceState﹕ Legacy camera service transitioning to state ERROR
04-12 18:08:50.320 24717-24782/com.example.android.camera2video W/Adreno-EGLSUB﹕ DequeueBuffer:721: dequeue native buffer fail: No such device, buffer=0x0, handle=0x0
04-12 18:08:50.320 24717-24782/com.example.android.camera2video W/Adreno-ES20﹕ <core_glFlush:52>: GL_OUT_OF_MEMORY
04-12 18:08:50.322 24717-24782/com.example.android.camera2video W/GLConsumer﹕ [unnamed-24717-1] bindTextureImage: clearing GL error: 0x505
04-12 18:08:50.323 24717-24782/com.example.android.camera2video W/Adreno-EGLSUB﹕ DequeueBuffer:721: dequeue native buffer fail: No such device, buffer=0x0, handle=0x0
04-12 18:08:50.356 24717-24782/com.example.android.camera2video W/Adreno-EGLSUB﹕ DequeueBuffer:721: dequeue native buffer fail: No such device, buffer=0x0, handle=0x0
04-12 18:08:50.356 24717-24782/com.example.android.camera2video W/Adreno-ES20﹕ <core_glFlush:52>: GL_OUT_OF_MEMORY
04-12 18:08:50.357 24717-24782/com.example.android.camera2video W/GLConsumer﹕ [unnamed-24717-1] bindTextureImage: clearing GL error: 0x505
04-12 18:08:50.721 24717-24717/com.example.android.camera2video W/System.err﹕ android.hardware.camera2.CameraAccessException: The camera device has encountered a serious error
04-12 18:08:50.722 24717-24717/com.example.android.camera2video W/System.err﹕ at android.hardware.camera2.impl.CameraDeviceImpl.checkIfCameraClosedOrInError(CameraDeviceImpl.java:1478)
04-12 18:08:50.722 24717-24717/com.example.android.camera2video W/System.err﹕ at android.hardware.camera2.impl.CameraDeviceImpl.createCaptureRequest(CameraDeviceImpl.java:476)
04-12 18:08:50.722 24717-24717/com.example.android.camera2video W/System.err﹕ at com.example.android.camera2video.Camera2VideoFragment.startPreview(Camera2VideoFragment.java:408)
04-12 18:08:50.722 24717-24717/com.example.android.camera2video W/System.err﹕ at com.example.android.camera2video.Camera2VideoFragment.stopRecordingVideo(Camera2VideoFragment.java:543)
04-12 18:08:50.722 24717-24717/com.example.android.camera2video W/System.err﹕ at com.example.android.camera2video.Camera2VideoFragment.onClick(Camera2VideoFragment.java:292)
04-12 18:08:50.722 24717-24717/com.example.android.camera2video W/System.err﹕ at android.view.View.performClick(View.java:4756)
04-12 18:08:50.722 24717-24717/com.example.android.camera2video W/System.err﹕ at android.view.View$PerformClick.run(View.java:19749)
04-12 18:08:50.722 24717-24717/com.example.android.camera2video W/System.err﹕ at android.os.Handler.handleCallback(Handler.java:739)
04-12 18:08:50.722 24717-24717/com.example.android.camera2video W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:95)
04-12 18:08:50.722 24717-24717/com.example.android.camera2video W/System.err﹕ at android.os.Looper.loop(Looper.java:135)
04-12 18:08:50.722 24717-24717/com.example.android.camera2video W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:5221)
04-12 18:08:50.722 24717-24717/com.example.android.camera2video W/System.err﹕ at java.lang.reflect.Method.invoke(Native Method)
04-12 18:08:50.722 24717-24717/com.example.android.camera2video W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:372)
04-12 18:08:50.722 24717-24717/com.example.android.camera2video W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
04-12 18:08:50.723 24717-24717/com.example.android.camera2video W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
04-12 18:08:53.309 24717-24766/com.example.android.camera2video E/RequestThread-0﹕ Timed out while waiting for request to complete.
04-12 18:08:53.325 24717-24766/com.example.android.camera2video W/CaptureCollector﹕ Preview buffers dropped for request: 0
04-12 18:08:53.326 24717-24766/com.example.android.camera2video E/CameraDeviceState﹕ Cannot receive result while in state: 0
04-12 18:08:53.326 24717-24766/com.example.android.camera2video E/CameraDeviceState﹕ Cannot receive result while in state: 0
04-12 18:08:53.402 24717-24766/com.example.android.camera2video E/CameraDeviceState﹕ Cannot receive result while in state: 0
04-12 18:08:53.410 24717-24782/com.example.android.camera2video W/Adreno-EGLSUB﹕ DequeueBuffer:721: dequeue native buffer fail: No such device, buffer=0x0, handle=0x0
04-12 18:08:53.410 24717-24782/com.example.android.camera2video W/Adreno-ES20﹕ <core_glFlushInternal:37>: GL_OUT_OF_MEMORY
04-12 18:08:53.422 24717-24733/com.example.android.camera2video W/MessageQueue﹕ Handler (android.graphics.SurfaceTexture$1) {2b83a144} sending message to a Handler on a dead thread
java.lang.IllegalStateException: Handler (android.graphics.SurfaceTexture$1) {2b83a144} sending message to a Handler on a dead thread
at android.os.MessageQueue.enqueueMessage(MessageQueue.java:325)
at android.os.Handler.enqueueMessage(Handler.java:631)
at android.os.Handler.sendMessageAtTime(Handler.java:600)
at android.os.Handler.sendMessageDelayed(Handler.java:570)
at android.os.Handler.sendEmptyMessageDelayed(Handler.java:534)
at android.os.Handler.sendEmptyMessage(Handler.java:519)
at android.graphics.SurfaceTexture.postEventFromNative(SurfaceTexture.java:368)
04-12 18:08:53.445 24717-24766/com.example.android.camera2video E/BufferQueueProducer﹕ [unnamed-24717-1] cancelBuffer: BufferQueue has been abandoned
04-12 18:08:53.449 24717-24766/com.example.android.camera2video E/BufferQueueProducer﹕ [unnamed-24717-1] cancelBuffer: BufferQueue has been abandoned
04-12 18:08:53.453 24717-24766/com.example.android.camera2video E/BufferQueueProducer﹕ [unnamed-24717-1] cancelBuffer: BufferQueue has been abandoned
04-12 18:08:53.457 24717-24766/com.example.android.camera2video E/BufferQueueProducer﹕ [unnamed-24717-1] cancelBuffer: BufferQueue has been abandoned
04-12 18:08:53.460 24717-24766/com.example.android.camera2video E/BufferQueueProducer﹕ [unnamed-24717-1] cancelBuffer: BufferQueue has been abandoned
04-12 18:08:53.573 24717-24717/com.example.android.camera2video I/Choreographer﹕ Skipped 170 frames! The application may be doing too much work on its main thread.
04-12 18:08:59.716 24717-24729/com.example.android.camera2video W/MessageQueue﹕ Handler (android.os.Handler) {6bb8db0} sending message to a Handler on a dead thread
java.lang.IllegalStateException: Handler (android.os.Handler) {6bb8db0} sending message to a Handler on a dead thread
at android.os.MessageQueue.enqueueMessage(MessageQueue.java:325)
at android.os.Handler.enqueueMessage(Handler.java:631)
at android.os.Handler.sendMessageAtFrontOfQueue(Handler.java:623)
at android.hardware.camera2.legacy.RequestThreadManager.quit(RequestThreadManager.java:941)
at android.hardware.camera2.legacy.LegacyCameraDevice.close(LegacyCameraDevice.java:444)
at android.hardware.camera2.legacy.LegacyCameraDevice.finalize(LegacyCameraDevice.java:468)
at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:190)
at java.lang.Daemons$FinalizerDaemon.run(Daemons.java:173)
at java.lang.Thread.run(Thread.java:818)

I think what’s happening here is that when MediaRecorder is reset, it kills the surface while the background thread is still trying to draw captured images onto it. I’m suspecting this based on the EGL error codes 0x300b and 0x300d (EGL_BAD_NATIVE_WINDOW and EGL_BAD_SURFACE, respectively.)

Closing the camera before resetting the recorder and reopening it afterwards works around the issue.

I’ve experimented with different ways of handling this when stopping recording. The snippet below is pretty clean and it results in less than a second of delay on a 2013 Nexus 7.

tl;dr: No need to close the camera, just create a new session after the recorder is ready again.

try {
    // Abort all pending captures.
    cameraCaptureSession.abortCaptures();
} catch (CameraAccessException e) {
    e.printStackTrace();
}

mediaRecorder.stop();

// Prepare the recorder again, nothing special about it.
prepareMediaRecorder();

try {
    // Create a new session with a new set of surfaces.
    // This causes the old session to be handed off gracefully.
    camera.createCaptureSession(getSurfaces(), sessionCallback, backgroundHandler);
} catch (CameraAccessException e) {
    e.printStackTrace();
}

@lnikkila Thank you! It helped me on Moto G, Lollipop 5.0.2.

Since be annoyed by bugs for a period of time,finally,I found it the problem is emulator!
Here,I want to say: Must use the actual device !

I see the same problem on a Galaxy Note 3, when I cloned from master. Is a fix for this in a branch of this repo, or in a fork?

@lnikkila It's not 100% clear what code this snippet is intended to replace. It might be in "stopRecordingVideo()", but I"m not certain of that.

@lnikkila Thanks! that code works on my Nexus 7 as well, perhaps make a pull request for this?

@lnikkila Thanks!!!

Testing on some 5.1 devices from LG... I found that another thing to try is to stop the preview explicitly before stopping the media recorder. Reference: http://stackoverflow.com/questions/27907090/android-camera-2-api

private void stopRecordingVideo() {
    // UI
    mIsRecordingVideo = false;
    mButtonVideo.setText(R.string.record);
    // Added by Ben Ning, to resolve exception issue when stop recording.
    try {
        mPreviewSession.stopRepeating();
        mPreviewSession.abortCaptures();
    } catch (CameraAccessException e) {
        e.printStackTrace();
    } 

    // Stop recording
    mMediaRecorder.stop();
    mMediaRecorder.reset();
}

RoundSparrow's approach worked well on my Galaxy S5 whihc had a similar issue.

@RoundSparrow that code work well ! no crash at more !

@RoundSparrow Hello I tired adding

try {
mPreviewSession.stopRepeating();
mPreviewSession.abortCaptures();
} catch (CameraAccessException e) {
e.printStackTrace();
}

It worked perfectly for Nexus and Moto devices. but on Samsung S6, it is causing
void onConfigureFailed(CameraCaptureSession cameraCaptureSession) called. Is there any workaround for this??

Failed to recreate the session
W/System.err: android.hardware.camera2.CameraAccessException: Operation timed out in camera service
W/System.err: at android.hardware.camera2.utils.CameraBinderDecorator.throwOnError(CameraBinderDecorator.java:118)
W/System.err: at android.hardware.camera2.utils.CameraBinderDecorator$CameraBinderDecoratorListener.onAfterInvocation(CameraBinderDecorator.java:73)
W/System.err: at android.hardware.camera2.utils.Decorator.invoke(Decorator.java:81)
W/System.err: at java.lang.reflect.Proxy.invoke(Proxy.java:393)
W/System.err: at $Proxy1.waitUntilIdle(Unknown Source)
W/System.err: at android.hardware.camera2.impl.CameraDeviceImpl.waitUntilIdle(CameraDeviceImpl.java:950)
W/System.err: at android.hardware.camera2.impl.CameraDeviceImpl.configureStreamsChecked(CameraDeviceImpl.java:399)
W/System.err: at android.hardware.camera2.impl.CameraDeviceImpl.createCaptureSessionInternal(CameraDeviceImpl.java:561)
W/System.err: at android.hardware.camera2.impl.CameraDeviceImpl.createCaptureSession(CameraDeviceImpl.java:476)

Make sure you reboot the device (prefer a cold power off and on) when testing this code - as it's possible on some of the Android 5.0/5.1 hardware I've tried to get the driver in a state that it fails even when the code itself is good because it doesn't properly recover from previous attempts.

Thank you, I think pull request #6 fixed my problem. It basically reopens the camera, looks like good workaround until I find proper solution for this

Application is getting crash while recording a video in Intex Aqua Shine 5.0 and above. my applictaion is using api for version till 4.4.4. And now i want include video functionality for 5.0 and above. How can i make it? please provide me solution.

Fixed the problem for my Samsung S5.
@RoundSparrow ... I updated your function to the latest sample code

    private void stopRecordingVideo() {
        // UI
        mIsRecordingVideo = false;
        mButtonVideo.setText(R.string.record);
        // Added by Ben Ning, to resolve exception issue when stop recording.
        try {
            mPreviewSession.stopRepeating();
            mPreviewSession.abortCaptures();
        } catch (CameraAccessException e) {
            e.printStackTrace();
        }

        // Stop recording
        mMediaRecorder.stop();
        mMediaRecorder.reset();

        Activity activity = getActivity();
        if (null != activity) {
            Toast.makeText(activity, "Video saved: " + mNextVideoAbsolutePath,
                    Toast.LENGTH_SHORT).show();
            Log.d(TAG, "Video saved: " + mNextVideoAbsolutePath);
        }
        mNextVideoAbsolutePath = null;
        startPreview();
    }

I am getting crash with "IMediaDeathNotifier: media server died" while starting recording.
I am getting this crash on LG Q7 device with OS 7.1.1.
Let me know if anybody has solution.

You just have to stopRepeating before stopping the MediaRecorder

I get what occurs. Sure frameworks, API and life provide bugs/challenges that need triage and most are discovered are not deliberate. I understand android.hardware.camera2 pipeline with nested callback and handlers but I thought the implementation would be a cleaner. I know it can change and have adapted my code to reflect the different functional changes between API levels but I could use help or could someone provide the source code for the Android OS built-in camera app. I think it would serve as a better camera or api guide.
'''
Start Preview
try {

        if(!view.surfacesAvailable()) return;

        this.setDefaultBufferSize(view);

        CameraData primaryData = getCameraData(true);
        primaryData.surfaces[0] = view.getPrimarySurface();
        primaryData.surfaces[1] = view.getSecondarySurface();

        primaryData.device.createCaptureSession(Collections.singletonList(primaryData.surfaces[0]),
                captureSessionCallback, null);

        CameraData secondaryData = getCameraData(false);
        secondaryData.surfaces[0] = view.getSecondarySurface();
        secondaryData.surfaces[1] =  view.getPrimarySurface();
        secondaryData.device.createCaptureSession(Collections.singletonList(secondaryData.surfaces[0]),
                captureSessionCallback, null);


    } catch(CameraAccessException e ) {
        e.printStackTrace();
    }
3 use cases #UC to a new createCaptureSession. 

Want to change camera surface used.

// Documentation states setting the output parameter to an empty list
// or null will close the current session. This causes the app to crash
// and hang.
primaryData.device.createCaptureSession(null, captureSessionCallback, null);
secondaryData.device.createCaptureSession(null, captureSessionCallback, null);

// Documentation states this is the quickest method to stop the current
// pending and in-progress captures before a new session is created.
// Its not the most efficient due to camera pipelinie response from a new
// camera session request.
primaryData.session.abortCaptures();
secondaryData.session.abortCaptures();

// Documentation states additional calls to the createCaptureSession will
// close any previous sessions. This causes the app to crash and hang. primaryData.device.createCaptureSession(Collections.singletonList(primaryData.surfaces[1]),
captureSessionCallback, null); secondaryData.device.createCaptureSession(Collections.singletonList(secondaryData.surfaces[0]),
captureSessionCallback, null);


NOTE: There are no immediate plans to share my codebase on github public or privately at the moment but once its I think is prod ready. I will think about publishing.


This sample has been migrated to a new location where we can accept Pull Requests (check README for more information).

As recommended by GitHub, we are closing all issues and pull requests now that this older repo will be archived.

If you still see this issue in the updated repo, please reopen the issue/PR there. Thank you!