/** * 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; }
//初期化 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); }
void CTimeBarFrame::OnFpsSettingBtnClicked(wxCommandEvent& /*event*/) { int nFPS = wxGetNumberFromUser(_T("请输入FPS值"), _T("FPS"), _T("FPS Input"), 60, 0, 60); SetFps(nFPS); }