use of android.hardware.Camera in project barcodescanner by dm77.
the class ZXingScannerView method onPreviewFrame.
@Override
public void onPreviewFrame(byte[] data, Camera camera) {
if (mResultHandler == null) {
return;
}
try {
Camera.Parameters parameters = camera.getParameters();
Camera.Size size = parameters.getPreviewSize();
int width = size.width;
int height = size.height;
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;
}
Result rawResult = null;
PlanarYUVLuminanceSource source = buildLuminanceSource(data, width, height);
if (source != null) {
BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
try {
rawResult = mMultiFormatReader.decodeWithState(bitmap);
} catch (ReaderException re) {
// continue
} catch (NullPointerException npe) {
// This is terrible
} catch (ArrayIndexOutOfBoundsException aoe) {
} finally {
mMultiFormatReader.reset();
}
}
final Result finalRawResult = rawResult;
if (finalRawResult != null) {
Handler handler = new Handler(Looper.getMainLooper());
handler.post(new Runnable() {
@Override
public void run() {
// Stopping the preview can take a little long.
// So we want to set result handler to null to discard subsequent calls to
// onPreviewFrame.
ResultHandler tmpResultHandler = mResultHandler;
mResultHandler = null;
stopCameraPreview();
if (tmpResultHandler != null) {
tmpResultHandler.handleResult(finalRawResult);
}
}
});
} else {
camera.setOneShotPreviewCallback(this);
}
} catch (RuntimeException e) {
// TODO: Terrible hack. It is possible that this method is invoked after camera is released.
Log.e(TAG, e.toString(), e);
}
}
use of android.hardware.Camera in project libstreaming by fyhertz.
the class VideoStream method measureFramerate.
/**
* Computes the average frame rate at which the preview callback is called.
* We will then use this average frame rate with the MediaCodec.
* Blocks the thread in which this function is called.
*/
private void measureFramerate() {
final Semaphore lock = new Semaphore(0);
final Camera.PreviewCallback callback = new Camera.PreviewCallback() {
int i = 0, t = 0;
long now, oldnow, count = 0;
@Override
public void onPreviewFrame(byte[] data, Camera camera) {
i++;
now = System.nanoTime() / 1000;
if (i > 3) {
t += now - oldnow;
count++;
}
if (i > 20) {
mQuality.framerate = (int) (1000000 / (t / count) + 1);
lock.release();
}
oldnow = now;
}
};
mCamera.setPreviewCallback(callback);
try {
lock.tryAcquire(2, TimeUnit.SECONDS);
Log.d(TAG, "Actual framerate: " + mQuality.framerate);
if (mSettings != null) {
Editor editor = mSettings.edit();
editor.putInt(PREF_PREFIX + "fps" + mRequestedQuality.framerate + "," + mCameraImageFormat + "," + mRequestedQuality.resX + mRequestedQuality.resY, mQuality.framerate);
editor.commit();
}
} catch (InterruptedException e) {
}
mCamera.setPreviewCallback(null);
}
use of android.hardware.Camera in project zxing-android-embedded by journeyapps.
the class CameraManager method startPreview.
/**
* Asks the camera hardware to begin drawing preview frames to the screen.
*
* Must be called from camera thread.
*/
public void startPreview() {
Camera theCamera = camera;
if (theCamera != null && !previewing) {
theCamera.startPreview();
previewing = true;
autoFocusManager = new AutoFocusManager(camera, settings);
ambientLightManager = new AmbientLightManager(context, this, settings);
ambientLightManager.start();
}
}
use of android.hardware.Camera in project zxing-android-embedded by journeyapps.
the class CameraManager method setParameters.
private void setParameters() {
try {
this.rotationDegrees = calculateDisplayRotation();
setCameraDisplayOrientation(rotationDegrees);
} catch (Exception e) {
Log.w(TAG, "Failed to set rotation.");
}
try {
setDesiredParameters(false);
} catch (Exception e) {
// Failed, use safe mode
try {
setDesiredParameters(true);
} catch (Exception e2) {
// Well, darn. Give up
Log.w(TAG, "Camera rejected even safe-mode parameters! No configuration");
}
}
Camera.Size realPreviewSize = camera.getParameters().getPreviewSize();
if (realPreviewSize == null) {
previewSize = requestedPreviewSize;
} else {
previewSize = new Size(realPreviewSize.width, realPreviewSize.height);
}
cameraPreviewCallback.setResolution(previewSize);
}
use of android.hardware.Camera in project zxing-lib by kennydude.
the class CameraConfigurationManager method setDesiredCameraParameters.
void setDesiredCameraParameters(Camera camera, boolean safeMode) {
Camera.Parameters parameters = camera.getParameters();
if (parameters == null) {
Log.w(TAG, "Device error: no camera parameters are available. Proceeding without configuration.");
return;
}
Log.i(TAG, "Initial camera parameters: " + parameters.flatten());
if (safeMode) {
Log.w(TAG, "In camera config safe mode -- most settings will not be honored");
}
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
initializeTorch(parameters, prefs, safeMode);
String focusMode = null;
if (prefs.getBoolean(PreferencesActivity.KEY_AUTO_FOCUS, true)) {
if (safeMode || prefs.getBoolean(PreferencesActivity.KEY_DISABLE_CONTINUOUS_FOCUS, false)) {
focusMode = findSettableValue(parameters.getSupportedFocusModes(), Camera.Parameters.FOCUS_MODE_AUTO);
} else {
focusMode = findSettableValue(parameters.getSupportedFocusModes(), // Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE in 4.0+
"continuous-picture", // Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO in 4.0+
"continuous-video", Camera.Parameters.FOCUS_MODE_AUTO);
}
}
// Maybe selected auto-focus but not available, so fall through here:
if (!safeMode && focusMode == null) {
focusMode = findSettableValue(parameters.getSupportedFocusModes(), Camera.Parameters.FOCUS_MODE_MACRO, // Camera.Parameters.FOCUS_MODE_EDOF in 2.2+
"edof");
}
if (focusMode != null) {
parameters.setFocusMode(focusMode);
}
parameters.setPreviewSize(cameraResolution.x, cameraResolution.y);
camera.setParameters(parameters);
}
Aggregations