android(linux)控制uvc相机实现ptz

时间:2015-08-19 07:59:26

标签: android java-native-interface

我想从android控制一个ptz相机,实际上我在jni中使用linux api,相机直接连接到android-tvbox的usb接口,下面是代码:

    struct v4l2_ext_control xctrls[1];
    struct v4l2_ext_controls ctrls;

    memset(xctrls, 0, sizeof xctrls);
    memset(&ctrls, 0, sizeof ctrls);
    xctrls[0].id = V4L2_CID_PAN_ABSOLUTE;
    xctrls[0].value = 20;
    ctrls.ctrl_class = V4L2_CTRL_CLASS_CAMERA;
    ctrls.count = 1;
    ctrls.controls = xctrls;
    //xioctl(fd, VIDIOC_S_EXT_CTRLS, &ctrls);
    int result = ioctl(fd, VIDIOC_S_CTRL, &ctrls);
    //LOGE("Cannot identify:%d , %d, %s", result, errno, strerror (errno));
    LOGE("Cannot open '%d': %d, %s", result, errno, strerror (errno));

并返回无效参数,有人能告诉我哪个参数错误吗?或者我的代码不正确......

1 个答案:

答案 0 :(得分:0)

我已经解决了这个问题。实际上,你需要在UVC(USB视频类)模块中设计你的Android源代码,而UVC位于整个android源代码的内核中。

更重要的是,您必须与相机的供应商合作,因为他们对PTZ相机的固件有深入的了解,Android的UVC版本应该适用于相机固件,数据长度和控制类型(绝对或相对)。

此外,Android内核版本一般为3.10。当您使用绝对控制来控制摄像机时,它可能会向一个方向移动而不是另一个方向,因为绝对的Android UVC控制参数是无符号的:您应该将其更改为已签名的参数。

当你控制相对时,它有点复杂,因为你应该在Android源代码中添加相对控制,因为3.10中的Android内核不支持它。您可以获取Linux内核补丁以添加相对移动。