mirror of
https://github.com/zxing/zxing.git
synced 2025-03-05 20:48:51 -08:00
Use preview buffer approach to avoid excessive GC
This commit is contained in:
parent
461d15a890
commit
d5852ff9ef
|
@ -15,6 +15,7 @@
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
-->
|
-->
|
||||||
<resources>
|
<resources>
|
||||||
|
<item type="id" name="decode_start"/>
|
||||||
<item type="id" name="decode"/>
|
<item type="id" name="decode"/>
|
||||||
<item type="id" name="decode_failed"/>
|
<item type="id" name="decode_failed"/>
|
||||||
<item type="id" name="decode_succeeded"/>
|
<item type="id" name="decode_succeeded"/>
|
||||||
|
|
|
@ -147,7 +147,7 @@ public final class CaptureActivity extends Activity implements SurfaceHolder.Cal
|
||||||
camera.setPreviewDisplay(holder);
|
camera.setPreviewDisplay(holder);
|
||||||
camera.startPreview();
|
camera.startPreview();
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
Log.e(TAG, "Cannot start prevew", e);
|
Log.e(TAG, "Cannot start preview", e);
|
||||||
}
|
}
|
||||||
|
|
||||||
decodeRunnable = new DecodeRunnable(this, camera);
|
decodeRunnable = new DecodeRunnable(this, camera);
|
||||||
|
|
|
@ -47,6 +47,7 @@ final class DecodeRunnable implements Runnable, Camera.PreviewCallback {
|
||||||
private final Camera camera;
|
private final Camera camera;
|
||||||
private final int height;
|
private final int height;
|
||||||
private final int width;
|
private final int width;
|
||||||
|
private final byte[] previewBuffer;
|
||||||
private boolean running;
|
private boolean running;
|
||||||
private Handler handler;
|
private Handler handler;
|
||||||
private final CountDownLatch handlerInitLatch;
|
private final CountDownLatch handlerInitLatch;
|
||||||
|
@ -58,6 +59,7 @@ final class DecodeRunnable implements Runnable, Camera.PreviewCallback {
|
||||||
Camera.Size previewSize = parameters.getPreviewSize();
|
Camera.Size previewSize = parameters.getPreviewSize();
|
||||||
height = previewSize.height;
|
height = previewSize.height;
|
||||||
width = previewSize.width;
|
width = previewSize.width;
|
||||||
|
previewBuffer = new byte[(height * width * 3) / 2];
|
||||||
running = true;
|
running = true;
|
||||||
handlerInitLatch = new CountDownLatch(1);
|
handlerInitLatch = new CountDownLatch(1);
|
||||||
}
|
}
|
||||||
|
@ -81,7 +83,7 @@ final class DecodeRunnable implements Runnable, Camera.PreviewCallback {
|
||||||
}
|
}
|
||||||
|
|
||||||
void startScanning() {
|
void startScanning() {
|
||||||
getHandler().obtainMessage(R.id.decode_failed).sendToTarget();
|
getHandler().obtainMessage(R.id.decode_start).sendToTarget();
|
||||||
}
|
}
|
||||||
|
|
||||||
void stop() {
|
void stop() {
|
||||||
|
@ -111,6 +113,10 @@ final class DecodeRunnable implements Runnable, Camera.PreviewCallback {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
switch (message.what) {
|
switch (message.what) {
|
||||||
|
case R.id.decode_start:
|
||||||
|
camera.setPreviewCallbackWithBuffer(DecodeRunnable.this);
|
||||||
|
camera.addCallbackBuffer(previewBuffer);
|
||||||
|
break;
|
||||||
case R.id.decode:
|
case R.id.decode:
|
||||||
decode((byte[]) message.obj);
|
decode((byte[]) message.obj);
|
||||||
break;
|
break;
|
||||||
|
@ -124,7 +130,7 @@ final class DecodeRunnable implements Runnable, Camera.PreviewCallback {
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
case R.id.decode_failed:
|
case R.id.decode_failed:
|
||||||
camera.setOneShotPreviewCallback(DecodeRunnable.this);
|
camera.addCallbackBuffer(previewBuffer);
|
||||||
break;
|
break;
|
||||||
case R.id.quit:
|
case R.id.quit:
|
||||||
running = false;
|
running = false;
|
||||||
|
|
Loading…
Reference in a new issue