varad_s
varad_s

Reputation: 1192

How to open usb camera in android using android.hardware.camera.external

I have connected a usb camera and want open and take picture. I am trying to figure how to use "android.hardware.camera.external" feature for accessing that camera. The "manager.getCameraIdList();" returns count of 2 camera(for front and back) and not the usb camera that is connected.

Upvotes: 3

Views: 14454

Answers (2)

Eddy Talvala
Eddy Talvala

Reputation: 18137

There's currently (as of Android O) no common USB camera support on Android devices via the standard camera API.

Some Android manufacturers do have their own support for USB cameras, but it's hard to know what devices do and what don't.

Upvotes: 2

Hpsaturn
Hpsaturn

Reputation: 2742

For me works the next config for USB Cameras with official API:

Camera (old API)

On some china devices, Camera.CameraInfo.CAMERA_FACING_FRONT works, but some times your should force to camIdx to 0.

public static Camera getCameraInstance() {
    Camera c = null;
    try {
        Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
        int cameraCount = Camera.getNumberOfCameras();
        for (int camIdx = 0; camIdx < cameraCount; camIdx++) {
            Camera.getCameraInfo(camIdx, cameraInfo);
            Log.i(TAG, "[Camera] try to open camera camIdx:" + camIdx);
            if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
                try {
                    c = Camera.open(camIdx);
                    mCameraIdx = camIdx;
                    Log.i(TAG, "[Camera] camIdx:" + camIdx);
                } catch (RuntimeException e) {
                    Log.e(TAG, "[Camera] failed to open: " + e.getLocalizedMessage());
                }
            }
        }

        if (c == null) {
            Log.i(TAG, "[Camera] forcing open camera with camIdx 0");
            c = Camera.open(0); // force because FACING_FRONT not found
            mCameraIdx = 0;
        }
    } catch (Exception e) {
        Logger.e("TAG", "[Camera] Open camera failed: " + e);
    }
    return c;
}

Camera2 (new API)

Similar for Camera2 API:

public String getCamera(CameraManager manager) {

    String cameraIndex = "0";
    try {
        for (String cameraId : manager.getCameraIdList()) {
            CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraId);
            Logger.d(TAG, "cameraId " + cameraId);
            int cOrientation = characteristics.get(CameraCharacteristics.LENS_FACING);
            if (cOrientation != CAMERACHOICE) {
                cameraIndex = cameraId;
            }
        }
    } catch (CameraAccessException e) {
        e.printStackTrace();
    }
    return cameraIndex;
}

But in my experience some Android ROM implementations are really bad (sometimes custom hardware or china hardware) then it not works. In some situations you should be use libuvc driver fore some USB Cameras: https://github.com/saki4510t/UVCCamera

Upvotes: 4

Related Questions