#include #include #include #include #include #include // This sample acts as a soft camera. It writes a pattern of GRAY8 pixels to the // shared memory space. It can be seen in Pangolin's SimpleVideo sample using // the shmem:[size=640x480]//example video URI. using namespace pangolin; unsigned char generate_value(double t) { // 10s sinusoid const double d = std::sin(t * 10.0 / M_PI) * 128.0 + 128.0; return static_cast(d); } int main(/*int argc, char *argv[]*/) { std::string shmem_name = "/example"; std::shared_ptr shmem_buffer = create_named_shared_memory_buffer(shmem_name, 640 * 480); if (!shmem_buffer) { perror("Unable to create shared memory buffer"); exit(1); } std::string cond_name = shmem_name + "_cond"; std::shared_ptr buffer_full = create_named_condition_variable(cond_name); // Sit in a loop and write gray values based on some timing pattern. while (true) { shmem_buffer->lock(); unsigned char *ptr = shmem_buffer->ptr(); unsigned char value = generate_value(std::chrono::system_clock::now().time_since_epoch().count()); for (int i = 0; i < 640*480; ++i) { ptr[i] = value; } shmem_buffer->unlock(); buffer_full->signal(); std::this_thread::sleep_for(std::chrono::milliseconds(10)); } }