12c87db4e2
NDIReceiver (shared/NDIReceiver.hpp): - Rename class NDIHelper → NDIReceiver, file NDIHelper.hpp → NDIReceiver.hpp - Add SourceInfo struct (width, height, fps_num, fps_den, stride, fourcc) replacing raw public member variables (xres, yres, frame_N, frame_D, stride) - find_sources() now returns std::vector<std::string> instead of output pointer - select_source() + get_source_info() → connect() + probe() (cleaner sequence, probe() returns SourceInfo and stores it internally for capture_v210) - getV210_video_frame() → capture_v210() — removes unused source_num parameter - get_bytes_per_pixel, fourCCtoStr → private static bytes_per_pixel, fourcc_str - u_int32_t → uint32_t; (uint32_t) casts → static_cast - probe() checks g_running to avoid hanging if source never sends video ndiin/main.cpp: - Update to new NDIReceiver API - malloc/free latest_buffer → std::vector<uint8_t> latest_frame - Remove unused #include <Processing.NDI.Lib.h> and V210.hpp - memcpy uses latest_frame.size() instead of separate frame_bytes variable Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>