示例#1
0
void CameraHandle::openDevice() {
  VRmDWORD libversion;
  VRM_CHECK(VRmUsbCamGetVersion(&libversion));
  ROS_INFO("VR Magic lib has version %d", libversion);

  VRmDWORD size = 0;

  ROS_INFO("Scanning for devices");
  VRM_CHECK(VRmUsbCamGetDeviceKeyListSize(&size));
  ROS_INFO("Found %d devices", size);

  device = 0;
  VRmDeviceKey* devKey = 0;
  for (VRmDWORD i = 0; i < size && !device; ++i) {
    VRM_CHECK(VRmUsbCamGetDeviceKeyListEntry(i, &devKey));
    if (!devKey->m_busy) {
      VRM_CHECK(VRmUsbCamOpenDevice(devKey, &device));
      ROS_INFO("Found device: %s [%s]", devKey->mp_product_str, devKey->mp_manufacturer_str);
    }
    VRM_CHECK(VRmUsbCamFreeDeviceKey(&devKey));
  }

  ROS_INFO("Trying to open device");

  if (!device) {
    ROS_FATAL("No suitable VRmagic device found!");
    exit(-1);
  }

  ROS_INFO("Device opened");
}
示例#2
0
bool VRCam::init()
{
	if (systemInited == true)
		return false;

	atexit(VRmUsbCamCleanup);

	//更新设备列表
	if (!VRmUsbCamUpdateDeviceKeyList()){
		sendMsg("update Device failed");
		return false;        
	}

	//检查连接的设备
	VRmDWORD size = 0;
	if (!(VRmUsbCamGetDeviceKeyListSize(&size))){
		sendMsg("Get Device Size failed");
		return false;
	}

	if (size == 0){
		sendMsg("0 Cam Connect");
		return false;
	}

	sendMsg(tr("%1 Cam Find").arg(size));

	//打开第一个可用的设备
	VRmDeviceKey* p_device_key = 0;
	for (VRmDWORD i = 0; i < size; ++i)
	{
		VRMEXECANDCHECK(VRmUsbCamGetDeviceKeyListEntry(i, &p_device_key));
		if (!p_device_key->m_busy)
		{
			if (!(VRmUsbCamOpenDevice(p_device_key, &device)))
			{
				sendMsg("Open Cam Failed");
			}
		}
		else
		{
			sendMsg("Device is busy now");
		}
		VRMEXECANDCHECK(VRmUsbCamFreeDeviceKey(&p_device_key));
	}

	if (!device)
	{
		return false;
	}

	//now get the first sensor port
	VRMEXECANDCHECK(VRmUsbCamGetSensorPortListEntry(device, 0, &port));

	// get the current source format
	VRmImageFormat source_format;
	VRMEXECANDCHECK(VRmUsbCamGetSourceFormatEx(device, port, &source_format));
	const char *source_color_format_str;
	VRMEXECANDCHECK(VRmUsbCamGetStringFromColorFormat(source_format.m_color_format, &source_color_format_str));


	VRmDWORD number_of_target_formats, i;
	VRMEXECANDCHECK(VRmUsbCamGetTargetFormatListSizeEx2(device, port, &number_of_target_formats));
	for (i = 0; i < number_of_target_formats; ++i)
	{
		VRMEXECANDCHECK(VRmUsbCamGetTargetFormatListEntryEx2(device, port, i, &target_format));
		if (target_format.m_color_format == VRM_ARGB_4X8)
			break;
	}

	systemInited = true;

	return true;
}