Spaces:
Sleeping
Sleeping
| // 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<unsigned char>(d); | |
| } | |
| int main(/*int argc, char *argv[]*/) | |
| { | |
| std::string shmem_name = "/example"; | |
| std::shared_ptr<SharedMemoryBufferInterface> 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<ConditionVariableInterface> 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)); | |
| } | |
| } | |