3 Replies Latest reply on Jan 7, 2020 7:07 PM by YiZ_31

    FX3使用AN75779图像丢帧的问题

    user_2841216

      您好:

           我在使用AN75779进行UVC传输的时候,发现在上位机端(virtualDub软件和ampcap以及我们自己编写的DirectShow程序)实时传输的时候偶尔会有图像帧丢失。丢失的频率在不同的电脑上会有不用的结果,有的电脑很久都不会丢一帧,有的电脑会很快丢失。丢帧的瞬间,从BusHound上观察会丢失一定量的数据包,FX3的print输出会显示如下信息:

      UVC: Completed 527 frames and 17 buffers

      UVC: Completed 556 frames and 74 buffers

      UVC: Completed 585 frames and 130 buffers

      DMA Reset Event: Commit buffer failure

      Application Stopped

      Application Started

      UVC: Completed 0 frames and 0 buffers

      DMA Reset Event: Commit buffer failure

      Application Stopped

      Application Started

      UVC: Completed 0 frames and 0 buffers

      UVC: Completed 28 frames and 119 buffers

       

           为了进行丢帧测试,我在FPGA端使用模拟的FV,LV,PCLK以及8bit的数据bus进行UVC的图像数据输入,目的是为了保证前端数据的可靠性。图像大小为1280*1024,帧率为30FPS,PCLK为90M。DMA缓存区大小设置为16384.

           我已经阅读过论坛上的相关解决方案Invalid Sequence Error in Multi-Channel Commit Buffer - KBA218830 (ZH) ,并按照上面进行修改缓存区(修改为32K),但只是稍许降低了丢帧的概率,并没有解决这个问题。我们的系统对实时性要求较高,不允许有较多的丢帧,目前大概平均4000帧左右就要丢帧一次,这大大超出了我们的承受范围。

           1、请问对于这个丢帧的现象是由于什么原因引起的?有没有较好的解决方案?

           2、丢帧问题是不可避免的吗?若是的话,能采用何种方式弥补图像的丢失?

        • 1. Re: FX3使用AN75779图像丢帧的问题
          YiZ_31

          你这种丢帧频率在UVC应用中属于很正常的现象。如果对帧率和图像大小都有要求,可以考虑采取一些压缩格式,减小使用的带宽。从bulk传输模式的原理来说,这本身就是一种数据传输优先的方式。Bulk传输模式支持的data brust是不要求发送的每个包都返回ACK的。如果你们是USB3.0的设备,可以尝试改成isochronous 传输模式。

          • 2. Re: FX3使用AN75779图像丢帧的问题
            user_2841216

                 我们使用的是USB3.0接口传输,我们不能采用压缩数据进行传输,只能传输原始数据。

            1、请问USB3.0下,bulk模式最高能在多少带宽的时候不丢帧?

            2、请问改为isochronous模式是否可以解决丢帧的问题?isochronous模式在USB3.0下的传输速率最高能到多少?

            3、是否有FX3使用isochronous进行UVC传输的示例?

                 谢谢!

            • 3. Re: FX3使用AN75779图像丢帧的问题
              YiZ_31

              您的第一个问题是没有确切数据的,丢帧的问题受到多种因素的影响,主机端的驱动,USB带宽的分配,这些都可能影响USB数据的传输。只能说在占用带宽越小,可使用带宽越大的情况下丢帧的概率会降低。ISOC传输的原理是预先分配定量带宽,而BULK模式则是有多少带宽就使用多少带宽,从这点来说,ISOC模式在可靠性上是强于BULK模式的。ISOC传输模式最大传输速率低于BULK模式,约为373M(仅在win10驱动下)。请参考FX3 SDK中的USBVideoClass这个例程。

              .