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

◆ shutdown()

void MayaFlux::IO::IOManager::shutdown ( )

Unregisters IOService and releases readers, writers, buffers and caches.

Calls stop() first. Call after the consuming threads have been joined and before the graphics backend is cleaned up, so objects whose destructors touch the backend are released while it is still alive. Idempotent.

Definition at line 172 of file IOManager.cpp.

173{
174 if (m_shutdown_done.exchange(true)) {
175 return;
176 }
177
178 stop();
179
181
183 .unregister_service<Registry::Service::IOService>();
184
185 m_io_service.reset();
186
187 {
188 decltype(m_video_readers) video_readers;
189 {
190 std::unique_lock lock(m_readers_mutex);
191 video_readers = std::exchange(m_video_readers, {});
192 }
193
194 decltype(m_camera_readers) camera_readers;
195 decltype(m_camera_buffers) camera_buffers;
196 {
197 std::unique_lock lock(m_camera_mutex);
198 camera_readers = std::exchange(m_camera_readers, {});
199 camera_buffers = std::exchange(m_camera_buffers, {});
200 }
201
202 decltype(m_video_buffers) video_buffers;
203 decltype(m_audio_buffers) audio_buffers;
204 decltype(m_extracted_audio) extracted_audio;
205 {
206 std::unique_lock lock(m_buffers_mutex);
207 video_buffers = std::exchange(m_video_buffers, {});
208 audio_buffers = std::exchange(m_audio_buffers, {});
209 extracted_audio = std::exchange(m_extracted_audio, {});
210 }
211
212 decltype(m_writers) writers;
213 {
214 std::lock_guard lock(m_writers_mutex);
215 writers = std::exchange(m_writers, {});
216 }
217
218 decltype(m_video_writers) video_writers;
219 {
220 std::lock_guard lock(m_video_captures_mutex);
221 video_writers = std::exchange(m_video_writers, {});
222 }
223
224 decltype(m_spatial_caches) spatial_caches;
225 {
226 std::lock_guard lock(m_spatial_captures_mutex);
227 spatial_caches = std::exchange(m_spatial_caches, {});
229 }
230
231 auto loaded_volumes = std::exchange(m_loaded_volumes, {});
232 auto audio_readers = std::exchange(m_audio_readers, {});
233 auto image_readers = std::exchange(m_image_readers, {});
234 auto model_readers = std::exchange(m_model_readers, {});
235
236 video_readers.clear();
237 camera_readers.clear();
238 }
239
240 MF_INFO(Journal::Component::IO, Journal::Context::Init, "IOManager shutdown complete");
241}
#define MF_INFO(comp, ctx,...)
std::unordered_map< std::shared_ptr< Kakshya::VideoFileContainer >, std::shared_ptr< Kakshya::SoundFileContainer > > m_extracted_audio
std::unordered_map< std::shared_ptr< Kakshya::CameraContainer >, std::shared_ptr< Buffers::VideoContainerBuffer > > m_camera_buffers
std::unordered_map< std::string, int > m_spatial_cache_refcounts
Closes+erases a cache at zero.
std::unordered_map< std::shared_ptr< Kakshya::SoundFileContainer >, std::vector< std::shared_ptr< Buffers::SoundContainerBuffer > > > m_audio_buffers
std::atomic< bool > m_shutdown_done
std::unordered_map< std::shared_ptr< Kakshya::VideoStreamContainer >, std::shared_ptr< Buffers::VideoContainerBuffer > > m_video_buffers
std::vector< std::shared_ptr< VideoFileWriter > > m_video_writers
std::vector< std::shared_ptr< SoundFileReader > > m_audio_readers
std::vector< std::shared_ptr< SoundFileWriter > > m_writers
std::mutex m_spatial_captures_mutex
std::shared_mutex m_camera_mutex
std::mutex m_video_captures_mutex
std::vector< std::shared_ptr< ModelReader > > m_model_readers
std::unordered_map< std::string, std::shared_ptr< IO::SpatialCache > > m_spatial_caches
std::vector< std::shared_ptr< Buffers::VolumeGridBuffer > > m_loaded_volumes
std::shared_mutex m_buffers_mutex
void wait_for_pending_saves()
Wait for all in-flight save operations to complete.
void stop()
Finalizes all in-flight output while consumers are still running.
std::unordered_map< uint64_t, std::shared_ptr< CameraSource > > m_camera_readers
std::vector< std::shared_ptr< ImageReader > > m_image_readers
std::shared_ptr< Registry::Service::IOService > m_io_service
std::shared_mutex m_readers_mutex
std::unordered_map< uint64_t, std::shared_ptr< VideoFileReader > > m_video_readers
static BackendRegistry & instance()
Get the global registry instance.
void unregister_service()
Unregister a service.
@ Init
Engine/subsystem initialization.
@ IO
Networking, file handling, streaming.

References MayaFlux::Journal::Init, MayaFlux::Registry::BackendRegistry::instance(), MayaFlux::Journal::IO, m_audio_buffers, m_audio_readers, m_buffers_mutex, m_camera_buffers, m_camera_mutex, m_camera_readers, m_extracted_audio, m_image_readers, m_io_service, m_loaded_volumes, m_model_readers, m_readers_mutex, m_shutdown_done, m_spatial_cache_refcounts, m_spatial_caches, m_spatial_captures_mutex, m_video_buffers, m_video_captures_mutex, m_video_readers, m_video_writers, m_writers, m_writers_mutex, MF_INFO, stop(), MayaFlux::Registry::BackendRegistry::unregister_service(), and wait_for_pending_saves().

Referenced by ~IOManager().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: