#pragma once #include #include namespace dmf { // Generates a minimal but valid NMOS IS-04 flow definition JSON string // for a video/v210 flow. MXL uses this to set up the ring buffer geometry. inline std::string make_video_flow_def( const std::string& flow_id, const std::string& label, int width, int height, int fps_num, int fps_den = 1) { using json = nlohmann::json; return json{ {"id", flow_id}, {"format", "urn:x-nmos:format:video"}, {"label", label}, {"description", label + " MXL Video Flow"}, {"media_type", "video/v210"}, {"parents", json::array()}, {"grain_rate", {{"numerator", fps_num}, {"denominator", fps_den}}}, {"frame_width", width}, {"frame_height", height}, {"interlace_mode", "progressive"}, {"colorspace", "BT709"}, {"tags", { {"urn:x-nmos:tag:grouphint/v1.0", json::array({label + ":Video"})} }}, {"components", json::array({ {{"name","Y"}, {"width",width}, {"height",height}, {"bit_depth",10}}, {{"name","Cb"}, {"width",width/2}, {"height",height}, {"bit_depth",10}}, {{"name","Cr"}, {"width",width/2}, {"height",height}, {"bit_depth",10}} })} }.dump(); } } // namespace dmf