Skip to content

Commit d86e90a

Browse files
committed
Reverted synchronous camera initialization
1 parent 1b75b89 commit d86e90a

File tree

2 files changed

+85
-39
lines changed

2 files changed

+85
-39
lines changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ allprojects {
2424
}
2525

2626
project.ext {
27-
sdkVersion='0.7.12'
27+
sdkVersion='0.7.13'
2828
versionCode=1
2929

3030
compileSdkVersion=27

ui/src/main/java/io/snabble/sdk/ui/scanner/BarcodeScannerView.java

Lines changed: 84 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -149,8 +149,22 @@ public void start() {
149149
throw new RuntimeException("Missing camera permission");
150150
}
151151

152-
startRequested = true;
153-
startIfRequested();
152+
backgroundHandler.post(new Runnable() {
153+
@Override
154+
public void run() {
155+
startRequested = true;
156+
startIfRequestedAsync();
157+
}
158+
});
159+
}
160+
161+
private void startIfRequestedAsync(){
162+
backgroundHandler.post(new Runnable() {
163+
@Override
164+
public void run() {
165+
startIfRequested();
166+
}
167+
});
154168
}
155169

156170
/**
@@ -160,10 +174,15 @@ public void pause() {
160174
isPaused = true;
161175

162176
if (running) {
177+
backgroundHandler.removeCallbacksAndMessages(null);
163178
isProcessing = false;
164-
165-
camera.stopPreview();
166-
decodeEnabled = false;
179+
backgroundHandler.post(new Runnable() {
180+
@Override
181+
public void run() {
182+
camera.stopPreview();
183+
decodeEnabled = false;
184+
}
185+
});
167186
}
168187
}
169188

@@ -176,22 +195,31 @@ public void resume() {
176195
if (!running) {
177196
start();
178197
} else {
179-
// as stated in the documentation:
180-
// focus parameters may not be preserved across preview restarts
181-
Camera.Parameters parameters = camera.getParameters();
182-
chooseFocusMode(parameters);
183-
camera.setParameters(parameters);
184-
camera.startPreview();
198+
backgroundHandler.post(new Runnable() {
199+
@Override
200+
public void run() {
201+
if(!running){
202+
return;
203+
}
185204

186-
clearBuffers();
187-
decodeEnabled = true;
205+
// as stated in the documentation:
206+
// focus parameters may not be preserved across preview restarts
207+
Camera.Parameters parameters = camera.getParameters();
208+
chooseFocusMode(parameters);
209+
camera.setParameters(parameters);
210+
camera.startPreview();
188211

189-
synchronized (frameBufferLock) {
190-
// some Samsung devices are sometimes unregistering the preview callback
191-
// when calling stopPreview, so we are registering it here again
192-
camera.setPreviewCallbackWithBuffer(BarcodeScannerView.this);
193-
camera.addCallbackBuffer(backBuffer);
194-
}
212+
clearBuffers();
213+
decodeEnabled = true;
214+
215+
synchronized (frameBufferLock) {
216+
// some Samsung devices are sometimes unregistering the preview callback
217+
// when calling stopPreview, so we are registering it here again
218+
camera.setPreviewCallbackWithBuffer(BarcodeScannerView.this);
219+
camera.addCallbackBuffer(backBuffer);
220+
}
221+
}
222+
});
195223
}
196224
}
197225

@@ -304,6 +332,9 @@ private void startIfRequested() {
304332
// extra buffer that will be used for image rotations
305333
rotateBuffer = new byte[bufferSize];
306334

335+
camera.setPreviewCallbackWithBuffer(this);
336+
camera.addCallbackBuffer(backBuffer);
337+
307338
if (manualAutoFocus) {
308339
scheduleAutoFocus();
309340
}
@@ -318,10 +349,13 @@ private void startIfRequested() {
318349
isProcessing = false;
319350

320351
setTorchEnabled(torchEnabled);
321-
updateTransform();
322352

323-
camera.setPreviewCallbackWithBuffer(this);
324-
camera.addCallbackBuffer(backBuffer);
353+
mainThreadHandler.post(new Runnable() {
354+
@Override
355+
public void run() {
356+
updateTransform();
357+
}
358+
});
325359

326360
if (isPaused) {
327361
camera.stopPreview();
@@ -371,13 +405,18 @@ private void chooseFocusMode(Camera.Parameters parameters) {
371405
}
372406

373407
private void showError(final boolean show) {
374-
if (show) {
375-
cameraUnavailableView.setVisibility(View.VISIBLE);
376-
scanIndicatorView.setVisibility(View.GONE);
377-
} else {
378-
cameraUnavailableView.setVisibility(View.GONE);
379-
scanIndicatorView.setVisibility(View.VISIBLE);
380-
}
408+
mainThreadHandler.post(new Runnable() {
409+
@Override
410+
public void run() {
411+
if (show) {
412+
cameraUnavailableView.setVisibility(View.VISIBLE);
413+
scanIndicatorView.setVisibility(View.GONE);
414+
} else {
415+
cameraUnavailableView.setVisibility(View.GONE);
416+
scanIndicatorView.setVisibility(View.VISIBLE);
417+
}
418+
}
419+
});
381420
}
382421

383422
/**
@@ -399,7 +438,8 @@ public void setTorchEnabled(boolean enabled) {
399438
parameters.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
400439
}
401440
}
402-
441+
startRequested = true;
442+
startIfRequestedAsync();
403443
try {
404444
camera.setParameters(parameters);
405445
torchEnabled = enabled;
@@ -504,19 +544,24 @@ public void removeBarcodeFormat(BarcodeFormat format) {
504544
}
505545

506546
public void stop() {
507-
if (running) {
508-
camera.stopPreview();
509-
camera.release();
510-
camera = null;
511-
running = false;
512-
}
547+
backgroundHandler.post(new Runnable() {
548+
@Override
549+
public void run() {
550+
if (running) {
551+
camera.stopPreview();
552+
camera.release();
553+
camera = null;
554+
running = false;
555+
}
513556

514-
startRequested = false;
557+
startRequested = false;
558+
}
559+
});
515560
}
516561

517562
@Override
518563
public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
519-
startIfRequested();
564+
startIfRequestedAsync();
520565

521566
surfaceWidth = width;
522567
surfaceHeight = height;
@@ -563,6 +608,7 @@ public void onPreviewFrame(byte[] data, final Camera camera) {
563608
}
564609

565610
swapBuffers();
611+
566612
camera.addCallbackBuffer(backBuffer);
567613

568614
isProcessing = true;

0 commit comments

Comments
 (0)