/** * Decode the data within the viewfinder rectangle, and time how long it took. For efficiency, * reuse the same reader objects from one decode to the next. * * @param data The YUV preview frame. * @param width The width of the preview frame. * @param height The height of the preview frame. */ private void decode(byte[] data, int width, int height) { // long start = System.currentTimeMillis(); // Result rawResult = null; // PlanarYUVLuminanceSource source = CameraManager.get().buildLuminanceSource(data, width, // height); // BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source)); // try { // rawResult = multiFormatReader.decodeWithState(bitmap); // } catch (ReaderException re) { // // continue // } finally { // multiFormatReader.reset(); // } // // if (rawResult != null) { // long end = System.currentTimeMillis(); // Log.d(TAG, "Found barcode (" + (end - start) + " ms):\n" + rawResult.toString()); // Message message = Message.obtain(activity.getHandler(), R.id.decode_succeeded, // rawResult); // Bundle bundle = new Bundle(); // bundle.putParcelable(DecodeThread.BARCODE_BITMAP, // source.renderCroppedGreyscaleBitmap()); // message.setData(bundle); // //Log.d(TAG, "Sending decode succeeded message..."); // message.sendToTarget(); // } else { // Message message = Message.obtain(activity.getHandler(), R.id.decode_failed); // message.sendToTarget(); // } long start = System.currentTimeMillis(); Result rawResult = null; // modify here 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; // Here we are swapping, that's the difference to #11 width = height; height = tmp; PlanarYUVLuminanceSource source = CameraManager.get().buildLuminanceSource(rotatedData, width, height); BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source)); try { rawResult = multiFormatReader.decodeWithState(bitmap); } catch (ReaderException re) { // continue } finally { multiFormatReader.reset(); } if (rawResult != null) { long end = System.currentTimeMillis(); Log.d(TAG, "Found barcode (" + (end - start) + " ms):\n" + rawResult.toString()); Message message = Message.obtain(activity.getHandler(), R.id.decode_succeeded, rawResult); Bundle bundle = new Bundle(); bundle.putParcelable(DecodeThread.BARCODE_BITMAP, source.renderCroppedGreyscaleBitmap()); message.setData(bundle); // Log.d(TAG, "Sending decode succeeded message..."); message.sendToTarget(); } else { Message message = Message.obtain(activity.getHandler(), R.id.decode_failed); message.sendToTarget(); } }