diff --git a/ring-android/app/src/main/java/cx/ring/services/CameraService.java b/ring-android/app/src/main/java/cx/ring/services/CameraService.java index d6d917c7df3f7dfc3d8bb1fa54ac7ae591afc573..b9f2d97a92d20a43b556daca8f48af4e5192b2df 100644 --- a/ring-android/app/src/main/java/cx/ring/services/CameraService.java +++ b/ring-android/app/src/main/java/cx/ring/services/CameraService.java @@ -512,7 +512,10 @@ public class CameraService { } } catch (Exception e) { Log.e(TAG, "Can't open codec", e); - codec = null; + if (codec != null) { + codec.release(); + codec = null; + } if (encoderInput != null) { encoderInput.release(); encoderInput = null; @@ -771,8 +774,12 @@ public class CameraService { @Override public void onCaptureStarted(@NonNull CameraCaptureSession session, @NonNull CaptureRequest request, long timestamp, long frameNumber) { if (frameNumber == 1) { - codec.first.start(); - codecStarted[0] = true; + try { + codec.first.start(); + codecStarted[0] = true; + } catch (Exception e) { + listener.onError(); + } } } } : null, handler); @@ -820,12 +827,19 @@ public class CameraService { Log.w(TAG, "onClosed"); if (previewCamera == camera) previewCamera = null; - if (codec != null && codec.first != null) { - if (codecStarted[0]) - codec.first.signalEndOfInputStream(); - codec.first.release(); - if (codec.first == currentCodec) - currentCodec = null; + if (codec != null) { + if (codec.first != null) { + if (codecStarted[0]) + codec.first.signalEndOfInputStream(); + codec.first.release(); + if (codec.first == currentCodec) + currentCodec = null; + } + if (codec.second != null) + codec.second.release(); + } + if (reader != null) { + reader.close(); } s.release(); } diff --git a/ring-android/app/src/main/java/cx/ring/services/HardwareServiceImpl.java b/ring-android/app/src/main/java/cx/ring/services/HardwareServiceImpl.java index 6811d741e81760f0f52742a971d9c39394375e27..c695f70dbd8a36a6e9d7f2d24a5baa13a2a89d33 100644 --- a/ring-android/app/src/main/java/cx/ring/services/HardwareServiceImpl.java +++ b/ring-android/app/src/main/java/cx/ring/services/HardwareServiceImpl.java @@ -478,6 +478,10 @@ public class HardwareServiceImpl extends HardwareService implements AudioManager @Override public void startCapture(@Nullable String camId) { + if (mIsScreenSharing) { + cameraService.stopScreenSharing(); + mIsScreenSharing = false; + } mShouldCapture = true; if (mIsCapturing && mCapturingId != null && mCapturingId.equals(camId)) { return; @@ -544,6 +548,10 @@ public class HardwareServiceImpl extends HardwareService implements AudioManager Log.d(TAG, "stopCapture: " + cameraService.isOpen()); mShouldCapture = false; endCapture(); + if (mIsScreenSharing) { + cameraService.stopScreenSharing(); + mIsScreenSharing = false; + } } public void requestKeyFrame() {