Skip to content
This repository has been archived by the owner on Jul 1, 2020. It is now read-only.

Fixed Nexus 5x zxing barcode scanning issue(Nexus upside down issue) #315

Merged
merged 2 commits into from
Jul 29, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,10 @@ public abstract class BarcodeScannerView extends FrameLayout implements Camera.P
private boolean mAutofocusState = true;
private boolean mShouldScaleToFill = true;

public CameraPreview getCameraPreview() {
return mPreview;
}

public BarcodeScannerView(Context context) {
super(context);
}
Expand Down
2 changes: 1 addition & 1 deletion zxing/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ ext {
}

dependencies {
//compile project(":core")
compile project(":core")
compile libraries.barcodescanner_core
compile libraries.zxing_core
}
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ public void onPreviewFrame(byte[] data, Camera camera) {
int width = size.width;
int height = size.height;

if (DisplayUtils.getScreenOrientation(getContext()) == Configuration.ORIENTATION_PORTRAIT) {
/*if (DisplayUtils.getScreenOrientation(getContext()) == Configuration.ORIENTATION_PORTRAIT) {
byte[] rotatedData = new byte[data.length];
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++)
Expand All @@ -116,6 +116,45 @@ public void onPreviewFrame(byte[] data, Camera camera) {
width = height;
height = tmp;
data = rotatedData;
}*/

/**
* Fixed Nexus 5x barcode scanning issues
* https://github.com/dm77/barcodescanner/issues/280
* https://github.com/dm77/barcodescanner/issues/313
* The above commented code actually rotates only 90 degree.It works fine
* if device having normal camera orientation(Landscape).But
* for Nexus 5X device camera orientation is reverse landscape and
* it rotates 90 degree,so the preview data will be upside down.
* Normally when we use rectangle at center,it is very hard to identify this issue,
* because zxing scans barcode even if it is in reverse angle.When we move the
* rectangle points we can identify this issue.
* To fix this issue,I have rotated data based on camera orientation.Now it rotates
* 270 degree on Nexus device and 90 degree on normal orientation devices.
*/
int displayOrientation = getCameraPreview().getDisplayOrientation();

int rotationCount = 0;
switch (displayOrientation) {
case 0: rotationCount = 0; break;
case 90: rotationCount = 1; break;
case 180: rotationCount = 2; break;
case 270: rotationCount = 3; break;
}

for (int i = 0; i < rotationCount; i++) {
if (DisplayUtils.getScreenOrientation(getContext()) == Configuration.ORIENTATION_PORTRAIT) {
byte[] rotatedData = new byte[data.length];
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++)
rotatedData[x * height + height - y - 1] = data[x + y * width];
}
int tmp = width;
width = height;
height = tmp;
data = rotatedData;
Log.d(TAG, "onPreviewFrame: rotated data");
}
}

Result rawResult = null;
Expand Down