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 556 of file IOManager.cpp.

557{
558 static std::once_flag s_avdevice_init;
559 std::call_once(s_avdevice_init, [] { avdevice_register_all(); });
560
561 auto reader = std::make_shared<CameraReader>();
562
563 if (!reader->open(config)) {
565 "open_camera: failed — {}", reader->last_error());
566 return nullptr;
567 }
568
569 auto container = reader->create_container();
570 if (!container) {
572 "open_camera: failed to create container — {}",
573 reader->last_error());
574 return nullptr;
575 }
576
577 container->create_default_processor();
578
579 uint64_t rid = m_next_reader_id.fetch_add(1, std::memory_order_relaxed);
580 reader->set_container(container);
581
582 {
583 std::unique_lock lock(m_camera_mutex);
584 m_camera_readers[rid] = reader;
585 }
586
587 container->setup_io(rid);
588 container->mark_ready_for_processing(true);
589
591 "open_camera: reader_id={} device='{}' {}x{} @{:.1f}fps",
592 rid, config.device_name,
593 reader->width(), reader->height(), reader->frame_rate());
594
595 return container;
596}
#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.