Small image concatenation with timeout flush

  • Hello,


    when you have the need to transfer small images over the DMA, the transfer bandwidth decreases.


    If you would concatenate a series of images for the transfer you would overcome this. The downside would be that you only would get a new image in the host system when a series is complete.


    Problem example:

    You transfer small ROIs of BLOBs with a speed of several thousands of FPS. You concatenate 10 of these images to increase the DMA efficiency, but you only have 42 BLOBs in your frame. You would get 4 "big" frames over the DMA, then you have to wait (maybe a long time) for the next 8 BLOBs to complete the next 10 frame series .


    Solution:

    To overcome this limitation, a timeout is introduced. As seen in the screenshot below, a SignalGate is used to cut the data stream if the start of the next frame takes too long. To achieve this functionality, the data stream has to be converted to 1D. The ImageValve in front of the SignalGate ensures that no image data reaches the SignalGate when it's closed.


    Limitation:

    The input frames should be of constant height.



    flush.png


    I created a test design for you. Please keep in mind that you can't simulate it. You have to build it and test it with hardware.


    HowTo:

    1. Change the design to your target platform
    2. Build
    3. Load the Applet
    4. Start acquisition
    5. Set signal of "Go" to "High", after a little bit of time, set it to "Low"
    6. After some time you should get an additional (incomplete series) frame. Timeout is set to 1,6s on ME5 platforms.


    overview.png


    Greetings,


    Simon

  • Hi Simon,


    Yes, you have found a valid approach of increasing the DMA performance concerning small images in a dynamic process.

    You concatenate 10 of these images to increase the DMA efficiency,


    For static tasks you can simply use AppendImage to get the maximum DMA performance.


    Best regards,