Refactring. Bug fix.
This commit is contained in:
parent
a942747046
commit
c1d42664bc
@ -57,13 +57,16 @@ public class JavaCameraView extends CameraBridgeViewBase implements PreviewCallb
|
|||||||
|
|
||||||
public JavaCameraView(Context context, AttributeSet attrs) {
|
public JavaCameraView(Context context, AttributeSet attrs) {
|
||||||
super(context, attrs);
|
super(context, attrs);
|
||||||
|
Log.d(TAG, "Java camera view ctor");
|
||||||
}
|
}
|
||||||
|
|
||||||
@TargetApi(11)
|
@TargetApi(11)
|
||||||
protected boolean initializeCamera(int width, int height) {
|
protected boolean initializeCamera(int width, int height) {
|
||||||
|
Log.d(TAG, "Initialize java camera");
|
||||||
synchronized (this) {
|
synchronized (this) {
|
||||||
mCamera = null;
|
mCamera = null;
|
||||||
|
|
||||||
|
Log.d(TAG, "Trying to open camera with old open()");
|
||||||
try {
|
try {
|
||||||
mCamera = Camera.open();
|
mCamera = Camera.open();
|
||||||
}
|
}
|
||||||
@ -72,31 +75,30 @@ public class JavaCameraView extends CameraBridgeViewBase implements PreviewCallb
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(mCamera == null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {
|
if(mCamera == null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {
|
||||||
|
boolean connected = false;
|
||||||
for (int camIdx = 0; camIdx < Camera.getNumberOfCameras(); ++camIdx) {
|
for (int camIdx = 0; camIdx < Camera.getNumberOfCameras(); ++camIdx) {
|
||||||
|
Log.d(TAG, "Trying to open camera with new open(" + Integer.valueOf(camIdx) + ")");
|
||||||
try {
|
try {
|
||||||
mCamera = Camera.open(camIdx);
|
mCamera = Camera.open(camIdx);
|
||||||
}
|
connected = true;
|
||||||
catch (RuntimeException e) {
|
} catch (RuntimeException e) {
|
||||||
Log.e(TAG, "Camera #" + camIdx + "failed to open: " + e.getLocalizedMessage());
|
Log.e(TAG, "Camera #" + camIdx + "failed to open: " + e.getLocalizedMessage());
|
||||||
}
|
}
|
||||||
|
if (connected) break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mCamera == null)
|
if (mCamera == null)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
mCamera.setPreviewCallbackWithBuffer(this);
|
|
||||||
|
|
||||||
List<android.hardware.Camera.Size> sizes = mCamera.getParameters().getSupportedPreviewSizes();
|
|
||||||
/* Select the size that fits surface considering maximum size allowed */
|
|
||||||
Size frameSize = calculateCameraFrameSize(sizes, new JavaCameraSizeAccessor(), width, height);
|
|
||||||
|
|
||||||
mFrameWidth = (int)frameSize.width;
|
|
||||||
mFrameHeight = (int)frameSize.height;
|
|
||||||
|
|
||||||
/* Now set camera parameters */
|
/* Now set camera parameters */
|
||||||
try {
|
try {
|
||||||
Camera.Parameters params = mCamera.getParameters();
|
Camera.Parameters params = mCamera.getParameters();
|
||||||
|
Log.d(TAG, "getSupportedPreviewSizes()");
|
||||||
|
List<android.hardware.Camera.Size> sizes = params.getSupportedPreviewSizes();
|
||||||
|
|
||||||
|
/* Select the size that fits surface considering maximum size allowed */
|
||||||
|
Size frameSize = calculateCameraFrameSize(sizes, new JavaCameraSizeAccessor(), width, height);
|
||||||
|
|
||||||
params.setPreviewFormat(ImageFormat.NV21);
|
params.setPreviewFormat(ImageFormat.NV21);
|
||||||
params.setPreviewSize((int)frameSize.width, (int)frameSize.height);
|
params.setPreviewSize((int)frameSize.width, (int)frameSize.height);
|
||||||
@ -110,11 +112,15 @@ public class JavaCameraView extends CameraBridgeViewBase implements PreviewCallb
|
|||||||
mCamera.setParameters(params);
|
mCamera.setParameters(params);
|
||||||
params = mCamera.getParameters();
|
params = mCamera.getParameters();
|
||||||
|
|
||||||
int size = params.getPreviewSize().width * params.getPreviewSize().height;
|
mFrameWidth = params.getPreviewSize().width;
|
||||||
|
mFrameHeight = params.getPreviewSize().height;
|
||||||
|
|
||||||
|
int size = mFrameWidth * mFrameHeight;
|
||||||
size = size * ImageFormat.getBitsPerPixel(params.getPreviewFormat()) / 8;
|
size = size * ImageFormat.getBitsPerPixel(params.getPreviewFormat()) / 8;
|
||||||
mBuffer = new byte[size];
|
mBuffer = new byte[size];
|
||||||
|
|
||||||
mCamera.addCallbackBuffer(mBuffer);
|
mCamera.addCallbackBuffer(mBuffer);
|
||||||
|
mCamera.setPreviewCallbackWithBuffer(this);
|
||||||
|
|
||||||
mBaseMat = new Mat(mFrameHeight + (mFrameHeight/2), mFrameWidth, CvType.CV_8UC1);
|
mBaseMat = new Mat(mFrameHeight + (mFrameHeight/2), mFrameWidth, CvType.CV_8UC1);
|
||||||
|
|
||||||
@ -131,6 +137,7 @@ public class JavaCameraView extends CameraBridgeViewBase implements PreviewCallb
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Finally we are ready to start the preview */
|
/* Finally we are ready to start the preview */
|
||||||
|
Log.d(TAG, "startPreview");
|
||||||
mCamera.startPreview();
|
mCamera.startPreview();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -23,6 +23,8 @@
|
|||||||
</activity>
|
</activity>
|
||||||
</application>
|
</application>
|
||||||
|
|
||||||
|
<uses-permission android:name="android.permission.CAMERA"/>
|
||||||
|
|
||||||
<uses-feature android:name="android.hardware.camera" android:required="false"/>
|
<uses-feature android:name="android.hardware.camera" android:required="false"/>
|
||||||
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>
|
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>
|
||||||
<uses-feature android:name="android.hardware.camera.front" android:required="false"/>
|
<uses-feature android:name="android.hardware.camera.front" android:required="false"/>
|
||||||
|
@ -259,6 +259,7 @@ public class ImageManipulationsActivity extends Activity implements CvCameraView
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Mat onCameraFrame(Mat inputFrame) {
|
public Mat onCameraFrame(Mat inputFrame) {
|
||||||
|
inputFrame.copyTo(mRgba);
|
||||||
|
|
||||||
switch (ImageManipulationsActivity.viewMode) {
|
switch (ImageManipulationsActivity.viewMode) {
|
||||||
case ImageManipulationsActivity.VIEW_MODE_RGBA:
|
case ImageManipulationsActivity.VIEW_MODE_RGBA:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user