我想在我的安卓平板电脑上执行一些v4l2的c代码。一个是Nexus 7,另一个是三星GT 5100。总之,我遇到了一些困难。
我通过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文件中找到了默认的设备,即#define DEFAULT_DEVICE "/dev/tegra_camera" *!,并且opendevice部分是ok的,它返回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;
}发布于 2013-09-10 10:38:58
在运行安卓股票的V4L2上没有Nexus7摄像头设备驱动程序。
因此,没有支持/dev/video ioctls的V4L2设备。
Ubuntu port on Nexus7包含V4L2驱动程序,以支持Nexus7上的前置摄像头传感器.
https://stackoverflow.com/questions/18640183
复制相似问题