After having a much closer look at the whole source code, I’m afraid there doesn’t seem to be an easy tweak to achieve this with v1.6 hardware…
Let’s assume we have a 3D frame sequential 240p60 input material (or, very similarly, field/line alternative 480i60).
We get, sequentially 240 lines for the left eye, and then 240 lines for the right eye.
I see two ways to generate a lag-free output usable by modern 3D renderers.
The idea is to output 480p30, with the top 240 lines coming from one input frame (1/60th of a second), and the 240 bottom lines coming from the following input frame (1/60th of a second). Total takes 1/30th of a second.
– After outputting the first 240 lines, the first line of the following input frame is not available immediately. A solution would be to buffer the first lines of the first frame, and to start the output with a slight delay, corresponding to the delay between the two consecutive input frames, but to do this we need a buffer, and it introduces a slight lag.
– Needs to have an output timing different from the input timing, is it possible with the current architecture ?
The idea is to output 480p60 with:
– even frame: left half = current input (line-doubled) (and simultaneously saved to L frame buffer), right half = coming from R framebuffer
– odd frame: left half = coming from L framebuffer (=previous input frame), right half = current input (saved to R frame buffer)
Zero lag. But we need a large buffer (even if L and R can be optimized to a unique framebuffer). Today’s 1 line buffer is not enough.
There’s probably no room for a full framebuffer on the FGPA…