NDI 画面每行向右错位,怎样用 line_stride 检查行跨距

2026-10-24

每一行逐渐错位时,先检查行起点是否按line_stride_in_bytes递增。有效像素占用的字节数只说明一行应读取多少内容,并不保证下一行紧接其后;对齐padding可能位于行尾。这个问题与红蓝通道互换不同,修正FourCC仍然可能保持斜纹。

先固定输入与适用条件

本例假设UYVY宽度为4像素、高度为3行,每两个像素四字节,因此有效行长8字节,但提供的行跨距为12字节。只在脱离SDK的合成内存中复现,padding用固定哨兵值标记。实际接收接口给出的跨距应当原样记录,不能为了让数字整齐而改成width乘二。

本篇按NDI官方滚动SDK文档解释视频v2或音频v3帧描述。文档核对日期为2026-10-24;这不是本地已安装NDI运行库的版本声明,设备与第三方软件需另录版本。

按字段与边界执行

  1. 先根据实际FourCC确定有效行最少字节数,再核对返回跨距是否足够容纳。宽度为零、格式不支持或跨距短于有效行时立即停止处理。

  2. 使用行索引乘跨距寻找行起点,然后只取有效字节范围。逐行打印起点及首尾样本,避免只看第一行,因为第一行起点为零时通常看不出错误。

  3. 用包含行号签名的夹具同时运行正确路径和紧密排列错误路径。比对第二、第三行是否进入padding,将结果保留而不是仅凭窗口截图判断。

  4. 交给GPU时再检查上传API是否接受源行距;若必须紧密排列,应明确逐行复制到新的紧密缓冲,而不是改变描述后继续使用原地址。

用具体样例核对结果

本例正确行起点为0、12、24,错误的紧密排列路径为0、8、16。第一行两条路径都得到8个值为1的字节;第二行错误路径先读到四个204哨兵,再读到下一行内容。脚本同时输出这两组结果,并断言正确路径只得到行号1、2、3。输入文件因此可以复现行错位,而不是一张看不出内存布局的空白表。

通过条件是所有有效行内容与输入一致、padding没有出现在图像中、所需缓冲长度未越界。若跨距是更大的对齐值,程序应继续使用真实跨距,并重新计算末行有效区的结束地址。不要把“总缓冲字节数能整除高度”当成可靠跨距证明;有的缓冲还包含额外平面或分配余量,实际格式描述才是依据。

下载与复现

analyze.py、input.json、result.json。

input记录有效行长度与跨距,结果列出每行hex和错误对照。现场交接应追加接收API、FourCC、行跨距以及上传纹理API的行距配置;本题没有测试任何显卡驱动,不能把合成断言通过写成屏幕恢复。

把输入与脚本保存到同一个本地目录后执行 python analyze.py,脚本只读取输入、计算并重写同目录的结果文件。先保留原始附件副本,再将自己的脱敏输入另存为新版本,记录输入摘要与执行日期;不要把合成字段覆盖成看似真实的现场日志。

已用 Python 3.12.4 实际运行附件算法并检查断言。结果来自同目录合成输入;没有接入真实NDI源、控制器、灯具、接收卡或LED屏,不能据此填写现场验收通过。

对接下一步与一级来源

基础背景可看NDI 网络视频传输协议详解。相关流程收在多媒体播放专题;需要项目对接时,带上本文输入及结果向SoftPlayer核对实际能力。

一级来源核对日期:2026-10-24。原始协议规则、本文原创运算和目标系统行为应分别留证;附件计算正确,不等于设备已经按该参数工作。

需要展厅软硬件方案或定制开发?

加微信,把这一页发到你手机上

扫码加站长企业微信,会自动把这一页的链接发给你。问软件授权、报价,或者现场遇到问题,也可以直接聊。

去留微信

留言讨论

评论发布后会被人工复核,违规内容将被删除。

    还没有人评论,来说说你的看法

    如果发表没有反应,可以前往联系我们告诉我们。

    这个页面有问题?

    提交时会附带当前页面地址和浏览器信息,帮助我们定位问题。不填联系方式即为匿名。