#pragma once #include namespace utils { struct media_info { std::string path; s32 audio_av_codec_id = 0; // 0 = AV_CODEC_ID_NONE s32 video_av_codec_id = 0; // 0 = AV_CODEC_ID_NONE s32 audio_bitrate_bps = 0; // Bit rate in bit/s s32 video_bitrate_bps = 0; // Bit rate in bit/s s32 sample_rate = 0; // Samples per second s64 duration_us = 0; // in AV_TIME_BASE fractional seconds (= microseconds) std::unordered_map metadata; // Convenience function for metadata template T get_metadata(const std::string& key, const T& def) const; }; std::pair get_media_info(const std::string& path, s32 av_media_type); template void parse_metadata(D& dst, const utils::media_info& mi, const std::string& key, const std::string& def, usz max_length) { std::string value = mi.get_metadata(key, def); if (value.size() > max_length) { value.resize(max_length); } strcpy_trunc(dst, value); }; }