I am not loading anything to flash from ESE rather I am using the command buffer (CMD_PLAYVIDEO command and REG_CMDB_WRITE operations). After some more code hacking I am able to get the expected frame rates for the very simple, binary image AVI files.
Some notes for others who may be tinkering with this:
1. You need to crank up the internal clock on the FT4222 (ft42Status = FT4222_SetClock(dmdControllerSpiBusHandle, FT4222_ClockRate.SYS_CLK_60)) to make sure that that front-end/input isn't the constraint
2. Similarly, this is running at 30MHz SPI clock (FT4222_SPIMaster_Init(dmdControllerSpiBusHandle, FT4222_SPIMode.SPI_IO_SINGLE, FT4222_SPIClock.CLK_DIV_2, FT4222_SPICPOL.CLK_IDLE_LOW, FT4222_SPICPHA.CLK_LEADING, 1)
3. Hopefully this doesn't enrage the Bridgetek gods, but I went off-menu/datasheet and used a pixel clock of 60 MHz (Gpu_Hal_Wr8(host, REG_PCLK,DispPCLK) with DispPCLK = 1) and verified this on a scope that you're getting ~60 MHz (this 60MHz seems the same regardless of the system clock setting of 60MHz or 72MHz)...testing a reworked eval board with a shiny new BT817 today to see if we can go faster
4. The frame rate is cut in half when running from host PC, through an external, very high-end USB2 hub (UHR307) then to the VM816 eval board as opposed to connecting the eval board to the host directly (the hub is otherwise working fine so it may or may not be an issue specific to this hub)
5. The math for the VM816 eval board+LCD I have is (I think): 525 rows * 928 columns / 60 MHz PCLK = 0.00812 seconds per frame → ~123 frames per second theoretical. Empirically, I am getting display times of about 11.1 seconds for an AVI file of 1500 frames (800X480 resolution, AVI file size ~30MB) → ~128 frames per second, but I can't visually see if every frame is actually being displayed but the math looks reasonable...and similarly when I scale it up to a resolution of 1080p and see frame rates of ~27 FPS (looks wonky on the 800X480 display however!)
6. Using this same code, "chickens-4.avi" plays in about 13.5 seconds as does the Star Trek video converted/streamed as AVI...my colleagues must be wondering why I get paid when they see Jeri Ryan and those chickens clucking around at my desk (and many other reasons)
7. Windows 10 OS, code in C++ and then ported over to C# (both in Visual Studio 2019)
8. C# has the same performance in terms of frame rate, and I'm using the FTD2XX_NET wrapper to interact with the FT4222 along with converted functions from the C++ example code (such as Gpu_Hal_Powercycle, etc.) which I just made C# equivalents of
Understood that this IC isn't designed for video streaming--this application would be replacing an FPGA so it's a pretty big win for cost and (more importantly) system complexity reduction. however, do you see any reliability issues using a BT81x in video streaming mode of this nature (e.g., not using the flash which could, depending upon the specific flash IC, have some issues with the number rewrites it can support maybe?). I will be streaming AVIs via the command buffer, and the AVIs are different every time so I can't upload to flash and hit the cycle times that are required. If you don't think there would be any reliability issues in this mode I will proceed to the layout!
As a hopefully constructive criticism: While the support for implementation has been great thus far, it would be nice to get a bit more in terms of logical/physical design support. For example, the Altium library fo the BT81x doesn't appear to be up to date, and I couldn't find any bill of materials for the VM816 eval boards nor their CAD design files etc.