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

◆ load_video() [2/2]

VideoLoadResult MayaFlux::IO::IOManager::load_video ( const std::string &  filepath,
LoadConfig  config 
)

Load a video file into a VideoFileContainer.

Performs can_read check, opens with metadata and region extraction, registers the reader (assigning a globally unique reader_id), calls setup_io_service(), loads into container, and configures the default FrameAccessProcessor with auto_advance enabled.

Passing VideoReadOptions::EXTRACT_AUDIO also extracts the embedded SoundFileContainer, configures its ContiguousAccessProcessor identically to load_audio_file() in Depot, and populates VideoLoadResult::audio.

Parameters
filepathPath to the video file.
configLoadConfig struct containing options and target dimensions.
Returns
VideoLoadResult containing video container and optional audio container.

Definition at line 109 of file IOManager.cpp.

110{
111 auto reader = std::make_shared<IO::VideoFileReader>();
112
113 if (!reader->can_read(filepath)) {
115 "Cannot read video file: {}", filepath);
116 return {};
117 }
118
119 reader->set_video_options(config.video_options);
120 reader->set_audio_options(config.audio_options);
121 reader->set_target_dimensions(config.target_width, config.target_height);
122
124 reader->set_target_sample_rate(m_sample_rate);
125 }
126
127 if (!reader->open(filepath, config.file_options)) {
129 "Failed to open video file: {}", reader->get_last_error());
130 return {};
131 }
132
133 const uint64_t reader_id = register_video_reader(reader);
134 reader->setup_io_service(reader_id);
135
136 auto video_container = std::dynamic_pointer_cast<Kakshya::VideoFileContainer>(reader->create_container());
137
138 if (!video_container) {
140 "Failed to create video container from: {}", filepath);
141 release_video_reader(reader_id);
142 return {};
143 }
144
145 if (!reader->load_into_container(video_container)) {
147 "Failed to load video data: {}", reader->get_last_error());
148 release_video_reader(reader_id);
149 return {};
150 }
151
152 configure_frame_processor(video_container);
153
154 VideoLoadResult result;
155 result.video = video_container;
156
158 auto audio_container = reader->get_audio_container();
159 if (audio_container) {
160 configure_audio_processor(audio_container);
161 result.audio = audio_container;
162 m_extracted_audio[video_container] = audio_container;
163 } else {
165 "No audio track found in: {}", filepath);
166 }
167 }
168
170 "Loaded video: {}", filepath);
171
172 return result;
173}
#define MF_INFO(comp, ctx,...)
#define MF_ERROR(comp, ctx,...)
#define MF_WARN(comp, ctx,...)
std::unordered_map< std::shared_ptr< Kakshya::VideoFileContainer >, std::shared_ptr< Kakshya::SoundFileContainer > > m_extracted_audio
void configure_frame_processor(const std::shared_ptr< Kakshya::VideoFileContainer > &container)
void configure_audio_processor(const std::shared_ptr< Kakshya::SoundFileContainer > &container)
void release_video_reader(uint64_t reader_id)
Release ownership of the reader identified by reader_id.
uint64_t register_video_reader(std::shared_ptr< VideoFileReader > reader)
Assign a globally unique reader_id and take ownership of a reader.
@ FileIO
Filesystem I/O operations.
@ Runtime
General runtime operations (default fallback)
@ API
MayaFlux/API Wrapper and convenience functions.

References MayaFlux::Journal::API, MayaFlux::IO::VideoLoadResult::audio, MayaFlux::IO::LoadConfig::audio_options, configure_audio_processor(), configure_frame_processor(), MayaFlux::IO::EXTRACT_AUDIO, MayaFlux::IO::LoadConfig::file_options, MayaFlux::Journal::FileIO, m_extracted_audio, m_sample_rate, MF_ERROR, MF_INFO, MF_WARN, register_video_reader(), release_video_reader(), MayaFlux::Journal::Runtime, MayaFlux::IO::LoadConfig::target_height, MayaFlux::IO::LoadConfig::target_width, MayaFlux::IO::VideoLoadResult::video, and MayaFlux::IO::LoadConfig::video_options.

+ Here is the call graph for this function: