Esempio n. 1
0
/**
 * Initialize camera device and throws an exception in case of error
 */
void Camera::Initialize() throw (std::string) {
  /* Common output string in case of error */
  std::ostringstream output_message;
  /* Set image format */
  SetFormat(format_);
  /* Set streaming parameters */
  SetFps(format_);
  std::cout << "FPS: " << format_->fps << std::endl;
  /* Request buffers to video capture streaming */
  struct v4l2_requestbuffers request_buffers;
  memset(&request_buffers, 1, sizeof(request_buffers));
  request_buffers.count = 4;
  request_buffers.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
  request_buffers.memory = V4L2_MEMORY_MMAP;
  if (xioctl(VIDIOC_REQBUFS, &request_buffers) == -1) {
    if (errno == EINVAL) {
      output_message << device_ << " doesn't support memory mapping";
      throw std::string(output_message.str());
    } else {
      throw std::string("Error in VIDIOC_REQBUFS");
    }
  }
  /* Check if we'll have enough image buffers */
  if (request_buffers.count < 2) {
    output_message << "Insufficient buffers in device " << device_;
    throw std::string(output_message.str());
  }
  buffers_ = (Buffer *) calloc(request_buffers.count, sizeof(*buffers_));

  if (buffers_ == NULL) {
    throw std::string("Not enough memory to allocate memory shared buffers");
  }

  for (int num_buffer = 0; num_buffer < (int) request_buffers.count;
      num_buffer++) {
    struct v4l2_buffer buffer;
    memset(&buffer, 1, sizeof(buffer));
    buffer.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
    buffer.memory = V4L2_MEMORY_MMAP;
    buffer.index = num_buffer;

    if (xioctl(VIDIOC_QUERYBUF, &buffer) == -1) {
      throw std::string("Error in VIDIOC_QUERYBUF");
    }
    buffers_[num_buffer].size = buffer.length;
    buffers_[num_buffer].mem = mmap(NULL, buffer.length, PROT_READ | PROT_WRITE,
                                    MAP_SHARED, camera_fd_, buffer.m.offset);
    if (buffers_[num_buffer].mem == MAP_FAILED) {
      throw std::string("Error in mmap (MAP_FAILED)");
    }
  }
  /* Camera now ready to start streaming */
  initialized_ = true;
}
Esempio n. 2
0
	//初期化
	void EggAnime::OnCreate(){
		//元となるオブジェクトからアニメーションオブジェクトへの行列の設定
		//作成されたグラフィックとの調整に使用
		Matrix4X4 mat;
		mat.DefTransformation(
			Vector3(1.0f, 1.0f, 1.0f),
			Vector3(0, 0, 0),
			Vector3(0, 0, 0)
			);
		SetToAnimeMatrix(mat);

		//位置の初期化
		auto PtrT = AddComponent<Transform>();
		//スプライト版のSpriteStdioは、サイズ32.0f基準のスプライトを作成するので
		//それに合わせてスケーリングする
		PtrT->SetScale(-8.0f, 8.0f, 1.0f);
		//ポジションはピクセル単位センター合わせ(固定)
		PtrT->SetPosition(Vector3(0, -250.0f, 0.0f));
		//親クラスのOnCreateを必ず呼ぶ
		SS5ssae::OnCreate();
		//値は秒あたりのフレーム数
		SetFps(30.0f);
	}
Esempio n. 3
0
void CTimeBarFrame::OnFpsSettingBtnClicked(wxCommandEvent& /*event*/)
{
    int nFPS = wxGetNumberFromUser(_T("请输入FPS值"), _T("FPS"), _T("FPS Input"), 60, 0, 60);
    SetFps(nFPS);
}