I'm doing some testing on the pi's trying to reproduce the stoppages (haven't been able to reproduce that yet), but ran into an interesting discovery: outputting 800 pixels on is taking 31.8ms which is obviously too long for 25ms. It's something in the rpi_ws2811 library as the call to ws2811_render (which sends the data to the pixels) is calculating that the required time is 24.3ms (which is still "too close"), but is then taking 31.8ms.

Up to around 615 pixels, the calculated time and the "actual" time are almost exact. At 600 pixels, it calculates at 18.3ms and that's exactly how long it takes. Once I hit 620 pixels, the calculated time is 18.9, but the actual time is at 24.6. I don't know if that amount of data is exceeding some sort of DMA size or something. I really have no idea. However, I thought I'd let everyone know.

Is that a per port issue or a total for both ports. I have two PiCaps in use with port 1 being 600 ws2811s in a matrix and port 2 having 240 ws2811s in a MegaSpinner. Have not noticed any timing issues. Everything I do is at 50ms

It's the "max per port" timing. So 600ish on either port. And is only an issue with 25ms sequences. With 50ms sequences, you can hit about 1250 or so per port, maybe a little more. I just pushed and update that moves the ws2811_render call to a background thread so we do get the full 25ms to send it, and if the last call isn't finished in time, it may just skip a frame here or there. Thus, it should impact the main threads a lot less.