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.
|
||||
-->
|
||||
<resources>
|
||||
<item type="id" name="decode_start"/>
|
||||
<item type="id" name="decode"/>
|
||||
<item type="id" name="decode_failed"/>
|
||||
<item type="id" name="decode_succeeded"/>
|
||||
|
|
|
@ -147,7 +147,7 @@ public final class CaptureActivity extends Activity implements SurfaceHolder.Cal
|
|||
camera.setPreviewDisplay(holder);
|
||||
camera.startPreview();
|
||||
} catch (IOException e) {
|
||||
Log.e(TAG, "Cannot start prevew", e);
|
||||
Log.e(TAG, "Cannot start preview", e);
|
||||
}
|
||||
|
||||
decodeRunnable = new DecodeRunnable(this, camera);
|
||||
|
|
|
@ -47,6 +47,7 @@ final class DecodeRunnable implements Runnable, Camera.PreviewCallback {
|
|||
private final Camera camera;
|
||||
private final int height;
|
||||
private final int width;
|
||||
private final byte[] previewBuffer;
|
||||
private boolean running;
|
||||
private Handler handler;
|
||||
private final CountDownLatch handlerInitLatch;
|
||||
|
@ -58,6 +59,7 @@ final class DecodeRunnable implements Runnable, Camera.PreviewCallback {
|
|||
Camera.Size previewSize = parameters.getPreviewSize();
|
||||
height = previewSize.height;
|
||||
width = previewSize.width;
|
||||
previewBuffer = new byte[(height * width * 3) / 2];
|
||||
running = true;
|
||||
handlerInitLatch = new CountDownLatch(1);
|
||||
}
|
||||
|
@ -81,7 +83,7 @@ final class DecodeRunnable implements Runnable, Camera.PreviewCallback {
|
|||
}
|
||||
|
||||
void startScanning() {
|
||||
getHandler().obtainMessage(R.id.decode_failed).sendToTarget();
|
||||
getHandler().obtainMessage(R.id.decode_start).sendToTarget();
|
||||
}
|
||||
|
||||
void stop() {
|
||||
|
@ -111,6 +113,10 @@ final class DecodeRunnable implements Runnable, Camera.PreviewCallback {
|
|||
return;
|
||||
}
|
||||
switch (message.what) {
|
||||
case R.id.decode_start:
|
||||
camera.setPreviewCallbackWithBuffer(DecodeRunnable.this);
|
||||
camera.addCallbackBuffer(previewBuffer);
|
||||
break;
|
||||
case R.id.decode:
|
||||
decode((byte[]) message.obj);
|
||||
break;
|
||||
|
@ -124,7 +130,7 @@ final class DecodeRunnable implements Runnable, Camera.PreviewCallback {
|
|||
});
|
||||
break;
|
||||
case R.id.decode_failed:
|
||||
camera.setOneShotPreviewCallback(DecodeRunnable.this);
|
||||
camera.addCallbackBuffer(previewBuffer);
|
||||
break;
|
||||
case R.id.quit:
|
||||
running = false;
|
||||
|
|
Loading…
Reference in a new issue