@@ -126,9 +126,11 @@ public void run() {
126126 } catch (Exception e ) {
127127 stdout .println ("Error writing image: " + e .getMessage ());
128128 TermuxApiLogger .error ("Error writing image" , e );
129- } finally {
130- closeCamera (camera , looper );
131129 }
130+ } finally {
131+ mImageReader .close ();
132+ releaseSurfaces (outputSurfaces );
133+ closeCamera (camera , looper );
132134 }
133135 }
134136 }.start (), null );
@@ -156,8 +158,6 @@ public void onConfigured(final CameraCaptureSession session) {
156158 Thread .sleep (500 );
157159 session .stopRepeating ();
158160 TermuxApiLogger .info ("preview stoppend" );
159- previewTexture .release ();
160- dummySurface .release ();
161161
162162 final CaptureRequest .Builder jpegRequest = camera .createCaptureRequest (CameraDevice .TEMPLATE_STILL_CAPTURE );
163163 // Render to our image reader:
@@ -170,13 +170,17 @@ public void onConfigured(final CameraCaptureSession session) {
170170 saveImage (camera , session , jpegRequest .build ());
171171 } catch (Exception e ) {
172172 TermuxApiLogger .error ("onConfigured() error in preview" , e );
173+ mImageReader .close ();
174+ releaseSurfaces (outputSurfaces );
173175 closeCamera (camera , looper );
174176 }
175177 }
176178
177179 @ Override
178180 public void onConfigureFailed (CameraCaptureSession session ) {
179181 TermuxApiLogger .error ("onConfigureFailed() error in preview" );
182+ mImageReader .close ();
183+ releaseSurfaces (outputSurfaces );
180184 closeCamera (camera , looper );
181185 }
182186 }, null );
@@ -187,7 +191,6 @@ static void saveImage(final CameraDevice camera, CameraCaptureSession session, C
187191 @ Override
188192 public void onCaptureCompleted (CameraCaptureSession completedSession , CaptureRequest request , TotalCaptureResult result ) {
189193 TermuxApiLogger .info ("onCaptureCompleted()" );
190- closeCamera (camera , null );
191194 }
192195 }, null );
193196 }
@@ -244,6 +247,13 @@ static int correctOrientation(final Context context, final CameraCharacteristics
244247 return jpegOrientation ;
245248 }
246249
250+ static void releaseSurfaces (List <Surface > outputSurfaces ) {
251+ for (Surface outputSurface : outputSurfaces ) {
252+ outputSurface .release ();
253+ }
254+ TermuxApiLogger .info ("surfaces released" );
255+ }
256+
247257 static void closeCamera (CameraDevice camera , Looper looper ) {
248258 try {
249259 camera .close ();
0 commit comments