MayaFlux 0.2.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 253 of file IOManager.cpp.

254{
255 static std::once_flag s_avdevice_init;
256 std::call_once(s_avdevice_init, [] { avdevice_register_all(); });
257
258 auto reader = std::make_shared<CameraReader>();
259
260 if (!reader->open(config)) {
262 "open_camera: failed — {}", reader->last_error());
263 return nullptr;
264 }
265
266 auto container = reader->create_container();
267 if (!container) {
269 "open_camera: failed to create container — {}",
270 reader->last_error());
271 return nullptr;
272 }
273
274 container->create_default_processor();
275
276 uint64_t rid = m_next_reader_id.fetch_add(1, std::memory_order_relaxed);
277 reader->set_container(container);
278
279 {
280 std::unique_lock lock(m_camera_mutex);
281 m_camera_readers[rid] = reader;
282 }
283
284 container->setup_io(rid);
285 container->mark_ready_for_processing(true);
286
288 "open_camera: reader_id={} device='{}' {}x{} @{:.1f}fps",
289 rid, config.device_name,
290 reader->width(), reader->height(), reader->frame_rate());
291
292 return container;
293}
#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.