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

84{
85 auto reader = std::make_shared<IO::VideoFileReader>();
86
87 if (!reader->can_read(filepath)) {
89 "Cannot read video file: {}", filepath);
90 return {};
91 }
92
93 reader->set_video_options(config.video_options);
94 reader->set_audio_options(config.audio_options);
95 reader->set_target_dimensions(config.target_width, config.target_height);
96
98 reader->set_target_sample_rate(m_sample_rate);
99 }
100
101 if (!reader->open(filepath, config.file_options)) {
103 "Failed to open video file: {}", reader->get_last_error());
104 return {};
105 }
106
107 const uint64_t reader_id = register_video_reader(reader);
108 reader->setup_io_service(reader_id);
109
110 auto video_container = std::dynamic_pointer_cast<Kakshya::VideoFileContainer>(reader->create_container());
111
112 if (!video_container) {
114 "Failed to create video container from: {}", filepath);
115 release_video_reader(reader_id);
116 return {};
117 }
118
119 if (!reader->load_into_container(video_container)) {
121 "Failed to load video data: {}", reader->get_last_error());
122 release_video_reader(reader_id);
123 return {};
124 }
125
126 configure_frame_processor(video_container);
127
128 VideoLoadResult result;
129 result.video = video_container;
130
132 auto audio_container = reader->get_audio_container();
133 if (audio_container) {
134 configure_audio_processor(audio_container);
135 result.audio = audio_container;
136 m_extracted_audio[video_container] = audio_container;
137 } else {
139 "No audio track found in: {}", filepath);
140 }
141 }
142
144 "Loaded video: {}", filepath);
145
146 return result;
147}
#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: