MayaFlux 1.0.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches
MayaFlux::IO::FFmpegCameraReader Class Reference

Platform-specific FFmpeg input format string for camera devices. More...

#include <FFmpegCameraReader.hpp>

+ Inheritance diagram for MayaFlux::IO::FFmpegCameraReader:
+ Collaboration diagram for MayaFlux::IO::FFmpegCameraReader:

Public Member Functions

void close () override
 Release device, decode, and scratch resources.
 
std::shared_ptr< Kakshya::CameraContainer > create_container () const override
 Create a CameraContainer sized to the negotiated device resolution.
 
std::vector< CameraConfig > enumerate_configs () const override
 Discover ready-to-open camera configurations without starting capture.
 
 FFmpegCameraReader ()
 
 FFmpegCameraReader (const FFmpegCameraReader &)=delete
 
 FFmpegCameraReader (FFmpegCameraReader &&)=delete
 
double frame_rate () const override
 Negotiated frame rate in fps.
 
uint32_t height () const override
 Negotiated output height in pixels.
 
bool is_open () const override
 True if the device is open and ready to deliver frames.
 
const std::string & last_error () const override
 Last error string, empty if no error.
 
bool open (const CameraConfig &config) override
 Open a camera device using the supplied config.
 
FFmpegCameraReader & operator= (const FFmpegCameraReader &)=delete
 
FFmpegCameraReader & operator= (FFmpegCameraReader &&)=delete
 
std::vector< CameraMode > preset_modes () const override
 Capture modes this source offers as defaults, ordered from safest to most demanding.
 
bool pull_frame (const std::shared_ptr< Kakshya::CameraContainer > &container) override
 Produce one frame into the container.
 
void pull_frame_all () override
 Signal the source to pull one frame.
 
void set_container (const std::shared_ptr< Kakshya::CameraContainer > &container) override
 Store a weak reference to the container for IOService dispatch.
 
void setup_io_service (uint64_t reader_id) override
 Setup an IOService for this reader with the given reader_id.
 
uint32_t width () const override
 Negotiated output width in pixels.
 
 ~FFmpegCameraReader () override
 
- Public Member Functions inherited from MayaFlux::IO::CameraSource
virtual ~CameraSource ()=default
 

Private Member Functions

void decode_thread_func ()
 
void start_decode_thread ()
 
void stop_decode_thread ()
 

Private Attributes

std::weak_ptr< Kakshya::CameraContainer > m_container_ref
 
std::shared_mutex m_ctx_mutex
 
std::atomic< bool > m_decode_active { false }
 
std::condition_variable m_decode_cv
 
std::mutex m_decode_mutex
 
std::atomic< bool > m_decode_stop { false }
 
std::thread m_decode_thread
 
std::shared_ptr< FFmpegDemuxContext > m_demux
 
std::atomic< bool > m_frame_requested { false }
 
std::string m_last_error
 
bool m_owns_service {}
 
int m_requested_pixel_format { -1 }
 Pixel format requested at open() time, as an AVPixelFormat int.
 
bool m_scaler_ready {}
 
uint64_t m_standalone_reader_id {}
 
std::shared_ptr< Registry::Service::IOService > m_standalone_service
 
std::vector< uint8_t > m_sws_buf
 
std::shared_ptr< VideoStreamContext > m_video
 

Detailed Description

Platform-specific FFmpeg input format string for camera devices.

FFmpeg device reader for live camera input with background decode.

Owns the FFmpeg demux and video codec contexts for a single camera device. Decodes frames on a dedicated thread signalled by IOService::request_frame, writing RGBA pixels directly into CameraContainer::mutable_frame_ptr() and marking the container READY. The graphics thread is never blocked by device I/O.

Implements CameraSource for discovery and the live-stream lifecycle; see CameraSource for the shared contract (demand-driven single-frame pulls, Managed/Standalone integration paths). IOManager and CameraContainer see this class through CameraSource once it is open.

IOManager::open_camera() drives the Managed path and calls avdevice_register_all() once via std::call_once. A Standalone caller is responsible for that call itself before open().

Definition at line 50 of file FFmpegCameraReader.hpp.


The documentation for this class was generated from the following files: