android usb弹窗不修改源码,Android usb uvc Camera 不修改APK实现

extern mm_camera_t * mm_camera_query (uint8_t *num_cameras)

{

int i = 0, rc = MM_CAMERA_OK;

int dev_fd = 0;

struct media_device_info mdev_info;

int num_media_devices = 0;

if (!num_cameras)

return NULL;

/* lock the mutex */

pthread_mutex_lock(&g_mutex);

*num_cameras = 0;

while (1) {

char dev_name[32];

snprintf(dev_name, sizeof(dev_name), "/dev/media%d", num_media_devices);

dev_fd = open(dev_name, O_RDWR | O_NONBLOCK);

if (dev_fd < 0) {

CDBG("Done discovering media devices\n");

break;

}

num_media_devices++;

rc = ioctl(dev_fd, MEDIA_IOC_DEVICE_INFO, &mdev_info);

if (rc < 0) {

CDBG_ERROR("Error: ioctl media_dev failed: %s\n", strerror(errno));

close(dev_fd);

break;

}

if(strncmp(mdev_info.model, QCAMERA_NAME, sizeof(mdev_info.model) != 0)) {

close(dev_fd);

continue;

}

char * mdev_cfg;

int cam_type = 0, mount_angle = 0, info_index = 0;

mdev_cfg = strtok(mdev_info.serial, "-");

while(mdev_cfg != NULL) {

if(info_index == 0) {

if(strcmp(mdev_cfg, QCAMERA_NAME))

break;

} else if(info_index == 1) {

mount_angle = atoi(mdev_cfg);

} else if(info_index == 2) {

cam_type = atoi(mdev_cfg);

}

mdev_cfg = strtok(NULL, "-");

info_index++;

}

if(info_index == 0) {

close(dev_fd);

continue;

}

int num_entities = 1;

while (1) {

struct media_entity_desc entity;

memset(&entity, 0, sizeof(entity));

entity.id = num_entities++;

rc = ioctl(dev_fd, MEDIA_IOC_ENUM_ENTITIES, &entity);

if (rc < 0) {

CDBG("Done enumerating media entities\n");

rc = 0;

break;

}

if(entity.type == MEDIA_ENT_T_DEVNODE_V4L && entity.group_id == QCAMERA_VNODE_GROUP_ID) {

strncpy(g_cam_ctrl.camera[*num_cameras].video_dev_name,

entity.name, sizeof(entity.name));

break;

}

}

g_cam_ctrl.camera[*num_cameras].camera_info.camera_id = *num_cameras;

g_cam_ctrl.camera[*num_cameras].

camera_info.modes_supported = CAMERA_MODE_2D;

if(cam_type > 1)

g_cam_ctrl.camera[*num_cameras].

camera_info.modes_supported |= CAMERA_MODE_3D;

g_cam_ctrl.camera[*num_cameras].camera_info.position =

(cam_type == 1) ? FRONT_CAMERA : BACK_CAMERA;

g_cam_ctrl.camera[*num_cameras].camera_info.sensor_mount_angle =

mount_angle;

g_cam_ctrl.camera[*num_cameras].sensor_type = 0;

g_cam_ctrl.camera[*num_cameras].cfg = &mm_camera_cfg;

g_cam_ctrl.camera[*num_cameras].ops = &mm_camera_ops;

g_cam_ctrl.camera[*num_cameras].evt = &mm_camera_notify;

g_cam_ctrl.camera[*num_cameras].jpeg_ops = NULL;

CDBG("%s: dev_info[id=%d,name='%s',pos=%d,modes=0x%x,sensor=%d]\n",

__func__, *num_cameras,

g_cam_ctrl.camera[*num_cameras].video_dev_name,

g_cam_ctrl.camera[*num_cameras].camera_info.position,

g_cam_ctrl.camera[*num_cameras].camera_info.modes_supported,

g_cam_ctrl.camera[*num_cameras].sensor_type);

*num_cameras+=1;

if (dev_fd > 0) {

close(dev_fd);

}

}

*num_cameras = *num_cameras;

g_cam_ctrl.num_cam = *num_cameras;

end:

/* unlock the mutex */

pthread_mutex_unlock(&g_mutex);

CDBG("%s: num_cameras=%d\n", __func__, g_cam_ctrl.num_cam);

if(rc == 0)

return &g_cam_ctrl.camera[0];

else

return NULL;

}这个函数是注册系统中存在的摄像头的个数。这个很重要,如果把这里修改一下,原生的APK就可以打开摄像头了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值