0

我想在我的 android 平板电脑上执行一些 v4l2 的 c 代码。一个是 Nexus 7,另一个是三星 GT-P5100。无论如何,我遇到了一些困难。

我通过 NKD 运行这些 C 代码。我的功能是:

jint Java_edu_tjut_cs_jcai_CameraPreviewActivity_createEngine(JNIEnv* env, jclass clazz)
{
    int res;
    res = v4l_open(DEFAULT_DEVICE, &v4l_dev);   
    LOGV("Open V4L2 Device: %d", res);

    res = v4l_get_capability(&v4l_dev);
    LOGV("Getting device capability: %d", res);

    res = v4l_get_picture(&v4l_dev);
    LOGV("Getting picture property: %d", res);

    res = v4l_init_mbuf(&v4l_dev);
    LOGV("Device init: %d", res);

    res = v4l_get_mbuf(&v4l_dev);
    LOGV("Memory mapping: %d", res);

     }

要运行此代码,我需要设置默认设备。上面我使用的函数在linux中被广泛使用。

对于 NUXES:我在 Nexus dev 文件中找到了默认设备,即#define DEFAULT_DEVICE "/dev/tegra_camera" *!并且 opendevice 部分正常,返回 1。但其他部分(获取容量..)不起作用。他们只返回 0。

对于三星,我找不到默认设备的名称。我有三星的源代码,但我真的不知道该看哪个部分。

谁能帮帮我??谢谢!

我只是在下面添加我使用的函数的定义,以备不时之需。

int v4l_open( char *dev, v4l_device *vd )
{
    if( !dev )
    {
        dev=DEFAULT_DEVICE ;
    }
    if( ( vd->fd = open( dev, O_RDWR ) )  < 0 )
    {
        perror( "v4l_open error");
        return -1;
    }
    return 0;
}
/**************************************************************
* 函数名: v4l_get_capability
* 功  能: 获取设备属性
* 输  入: vd
* 输  出: 无
* 返  回:  -1—-失败 0—-成功
**************************************************************/
int v4l_get_capability( v4l_device *vd )
{
//    if( ioctl( vd->fd, VIDIOCGCAP, &( vd->capability ) ) <0 )
      if( ioctl( vd->fd, VIDIOC_QUERYCAP, &( vd->capability ) ) <0 )

    {
        perror( "v4l_get_capability");
        return -1 ;
    }
    return 0;
}
/***************************************************************
* 函数名:v4l_get_picture
* 功  能:获取图片属性
* 输  入: vd
* 输  出: 无
* 返  回:  -1—-失败  0—-成功
***************************************************************/
int v4l_get_picture( v4l_device *vd )
{
//    if( ioctl( vd->fd,VIDIOCGPICT,&( vd->picture ) ) < 0 )
    if( ioctl( vd->fd,VIDIOCGPICT,&( vd->picture ) ) < 0 )

    {
        return -1;
    }
    return 0;
}
/**************************************************************
* 函数名: v4l_set_picture
* 功  能: 设置图片属性
* 输  入: vd
* 输  出: 无
* 返  回: -1—-失败 0—-成功
**************************************************************/
int v4l_set_picture( v4l_device *vd )
{
    if( ioctl( vd->fd, VIDIOCSPICT, &( vd->picture ) ) < 0 )
    {
        return -1;
    }
    return 0;
}
/*************************************************************
* 函数名:v4l_get_channels
* 功  能:获取通道信息
* 输  入: vd
* 输  出: 无
* 返  回:  -1—-失败 0—-成功
*************************************************************/
int v4l_get_channels( v4l_device *vd )
{
    int i;
    for( i=0;i < vd->capability.channels ; i++ )
    {
        vd->channel[i].channel = i;               //确定通道
        if( ioctl( vd->fd , VIDIOCGCHAN, &( vd->channel[i] ) ) <0 )
        {
            perror( "v4l_get_channel");
            return -1;
        }
    }
    return 0;
}
4

1 回答 1

2

Nexus7 运行库存 Android 上没有 V4L2 相机设备驱动程序。

因此没有/dev/video支持 V4L2 ioctl 的设备。

Nexus7 上的Ubuntu 端口包含 V4L2 驱动程序,以支持 Nexus7 上的前置摄像头传感器。

于 2013-09-10T10:38:58.683 回答