Skip to content

Commit 2acb1be

Browse files
committed
address #313 (don't unbind service more than once!) and refactor Preview to CameraViewHolder
1 parent 85de67b commit 2acb1be

File tree

2 files changed

+20
-23
lines changed

2 files changed

+20
-23
lines changed

src/main/java/org/havenapp/main/sensors/motion/Preview.java renamed to src/main/java/org/havenapp/main/sensors/motion/CameraViewHolder.java

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
import android.content.Intent;
1515
import android.content.ServiceConnection;
1616
import android.graphics.Bitmap;
17-
import android.hardware.Camera;
1817
import android.os.Environment;
1918
import android.os.Handler;
2019
import android.os.IBinder;
@@ -29,16 +28,11 @@
2928
import org.havenapp.main.PreferenceManager;
3029
import org.havenapp.main.model.EventTrigger;
3130
import org.havenapp.main.service.MonitorService;
32-
import org.jcodec.api.SequenceEncoder;
3331
import org.jcodec.api.android.AndroidSequenceEncoder;
34-
import org.jcodec.codecs.vpx.IVFMuxer;
35-
import org.jcodec.codecs.vpx.VP8Encoder;
36-
import org.jcodec.common.io.SeekableByteChannel;
3732

3833
import java.io.File;
3934
import java.io.FileOutputStream;
4035
import java.io.IOException;
41-
import java.nio.ByteBuffer;
4236
import java.util.ArrayList;
4337
import java.util.Date;
4438
import java.util.List;
@@ -49,7 +43,7 @@
4943

5044
import io.github.silvaren.easyrs.tools.Nv21Image;
5145

52-
public class Preview {
46+
public class CameraViewHolder {
5347

5448
/**
5549
* Object to retrieve and set shared preferences
@@ -118,7 +112,7 @@ public void onServiceDisconnected(ComponentName arg0) {
118112
}
119113
};
120114

121-
public Preview (Context context, CameraView cameraView) {
115+
public CameraViewHolder(Context context, CameraView cameraView) {
122116
//super(context);
123117
this.context = context;
124118
this.cameraView = cameraView;
@@ -175,14 +169,14 @@ public void initCamera() {
175169
cameraView.setOnFrameListener((data, width, height, rotationDegrees) -> {
176170

177171
long now = System.currentTimeMillis();
178-
if (now < Preview.this.lastTimestamp + PREVIEW_INTERVAL)
172+
if (now < CameraViewHolder.this.lastTimestamp + PREVIEW_INTERVAL)
179173
return;
180174

181-
Preview.this.lastTimestamp = now;
175+
CameraViewHolder.this.lastTimestamp = now;
182176

183177
if (!doingVideoProcessing) {
184178

185-
Log.i("Preview", "Processing new image");
179+
Log.i("CameraViewHolder", "Processing new image");
186180

187181
mDecodeThreadPool.execute(() -> processNewFrame(data, width, height, rotationDegrees));
188182
}
@@ -304,7 +298,7 @@ private void processNewFrame (byte[] data, int width, int height, int rotationDe
304298

305299
} catch (Exception e) {
306300
// Cannot happen
307-
Log.e("Preview", "error creating image", e);
301+
Log.e("CameraViewHolder", "error creating image", e);
308302
}
309303
}
310304
}
@@ -343,19 +337,23 @@ private synchronized boolean recordVideo() {
343337
}
344338

345339

346-
public void stopCamera ()
340+
public synchronized void stopCamera ()
347341
{
348342
if (cameraView != null) {
349-
// Surface will be destroyed when we return, so stop the preview.
350-
// Because the CameraDevice object is not a shared resource, it's very
351-
// important to release it when the activity is paused.
352-
this.context.unbindService(mConnection);
353-
354343
cameraView.stop();
355344
}
356345
}
357346

358347
public int getCameraFacing() {
359348
return cameraView.getFacing();
360349
}
350+
351+
public void destroy ()
352+
{
353+
if (mConnection != null) {
354+
this.context.unbindService(mConnection);
355+
mConnection = null;
356+
}
357+
stopCamera();
358+
}
361359
}

src/main/java/org/havenapp/main/ui/CameraFragment.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010

1111
import android.os.Bundle;
1212
import android.support.v4.app.Fragment;
13-
import android.hardware.Camera;
1413
import android.hardware.SensorEvent;
1514
import android.view.LayoutInflater;
1615
import android.view.View;
@@ -21,12 +20,11 @@
2120

2221
import org.havenapp.main.PreferenceManager;
2322
import org.havenapp.main.R;
24-
import org.havenapp.main.sensors.media.ImageCodec;
25-
import org.havenapp.main.sensors.motion.Preview;
23+
import org.havenapp.main.sensors.motion.CameraViewHolder;
2624

2725
public final class CameraFragment extends Fragment {
2826

29-
private Preview cameraViewHolder;
27+
private CameraViewHolder cameraViewHolder;
3028
private ImageView newImage;
3129

3230
@Override
@@ -85,7 +83,7 @@ private void initCamera ()
8583

8684
CameraView cameraView = getActivity().findViewById(R.id.camera_view);
8785

88-
cameraViewHolder = new Preview(getContext().getApplicationContext(),cameraView);
86+
cameraViewHolder = new CameraViewHolder(getContext().getApplicationContext(),cameraView);
8987

9088
newImage = getActivity().findViewById(R.id.new_image);
9189

@@ -100,6 +98,7 @@ private void initCamera ()
10098
@Override
10199
public void onDestroy() {
102100
super.onDestroy();
101+
cameraViewHolder.destroy();
103102

104103
}
105104

0 commit comments

Comments
 (0)