Android:打开相机并获取C级原始数据

时间:2013-11-18 05:45:01

标签: android c android-ndk android-camera

我想打开Android平板电脑的相机并从C级获取相机中的数据。之后,我将修改数据,C级将是有效的。

现在我正在考虑使用V4L2 C代码。但我发现V4L2的开放功能需要摄像机名称的参数,例如'/ dev / video0'。但是我在平板电脑的dev文件夹中找不到类似的东西。此外,我不确定使用V4L2是否是正确的解决方案。

有人对此有所了解吗?

2 个答案:

答案 0 :(得分:1)

我的设备上的

“OpenCV for Android”在“本机”模式和“java”模式下都不提供所需的性能。它在1920x1080中给出FPS = 2,同时java MediaRecorder可以用FPS = 15记录1920x1080

我正在尝试使用本机Camera应用程序使用的Android开源项目代码来解决它:

static void android_hardware_Camera_native_setup(JNIEnv *env, jobject thiz,
    jobject weak_this, jint cameraId)
{
    sp<Camera> camera = Camera::connect(cameraId);

    if (camera == NULL) {
        jniThrowRuntimeException(env, "Fail to connect to camera service");
        return;
    }

    // make sure camera hardware is alive
    if (camera->getStatus() != NO_ERROR) {
        jniThrowRuntimeException(env, "Camera initialization failed");
        return;
    }

    jclass clazz = env->GetObjectClass(thiz);
    if (clazz == NULL) {
        jniThrowRuntimeException(env, "Can't find android/hardware/Camera");
        return;
    }

    // We use a weak reference so the Camera object can be garbage collected.
    // The reference is only used as a proxy for callbacks.
    sp<JNICameraContext> context = new JNICameraContext(env, weak_this, clazz, camera);
    context->incStrong(thiz);
    camera->setListener(context);

    // save context in opaque field
    env->SetIntField(thiz, fields.context, (int)context.get());
}

答案 1 :(得分:0)

您始终可以为Java类构建JNI方法以从C进行访问。另一种方法是使用OpenCV for Android:OpenCV4Android

这为您提供了相机界面,但据我记忆,目前不支持Android 4.3 +。