MayaFlux 0.4.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches

◆ open_camera()

std::shared_ptr< Kakshya::CameraContainer > MayaFlux::IO::IOManager::open_camera ( const CameraConfig config)

Open a camera device and create a CameraContainer.

Constructs a CameraReader, opens the device, creates the container, configures its FrameAccessProcessor (auto_advance disabled), assigns a globally unique reader_id, registers the reader for IOService dispatch, and wires the container's IOService callback via CameraContainer::setup_io().

After this call, the normal processing pipeline drives frame pulls: CameraContainer::process_default() → IOService::request_frame(reader_id) → dispatch_frame_request()CameraReader::pull_frame_all() → decode thread → pull_frame() → mutable_frame_ptr() write → READY.

Parameters
configDevice and resolution configuration.
Returns
Opened CameraContainer, or nullptr on failure.

Definition at line 308 of file IOManager.cpp.

309{
310 static std::once_flag s_avdevice_init;
311 std::call_once(s_avdevice_init, [] { avdevice_register_all(); });
312
313 auto reader = std::make_shared<CameraReader>();
314
315 if (!reader->open(config)) {
317 "open_camera: failed — {}", reader->last_error());
318 return nullptr;
319 }
320
321 auto container = reader->create_container();
322 if (!container) {
324 "open_camera: failed to create container — {}",
325 reader->last_error());
326 return nullptr;
327 }
328
329 container->create_default_processor();
330
331 uint64_t rid = m_next_reader_id.fetch_add(1, std::memory_order_relaxed);
332 reader->set_container(container);
333
334 {
335 std::unique_lock lock(m_camera_mutex);
336 m_camera_readers[rid] = reader;
337 }
338
339 container->setup_io(rid);
340 container->mark_ready_for_processing(true);
341
343 "open_camera: reader_id={} device='{}' {}x{} @{:.1f}fps",
344 rid, config.device_name,
345 reader->width(), reader->height(), reader->frame_rate());
346
347 return container;
348}
#define MF_INFO(comp, ctx,...)
#define MF_ERROR(comp, ctx,...)
std::unordered_map< uint64_t, std::shared_ptr< CameraReader > > m_camera_readers
std::shared_mutex m_camera_mutex
std::atomic< uint64_t > m_next_reader_id
@ FileIO
Filesystem I/O operations.
@ API
MayaFlux/API Wrapper and convenience functions.

References MayaFlux::Journal::API, MayaFlux::IO::CameraConfig::device_name, MayaFlux::Journal::FileIO, m_camera_mutex, m_camera_readers, m_next_reader_id, MF_ERROR, and MF_INFO.