In my testing I've learned a few things about this topic, and searching the forum here I found a couple of additional hints. But it still isn't exactly clear, how do the pixels from the OSD map onto the video pixels? To-date, this hasn't been a major issue to me, as I had been focused on drawing text only. As long as the text was approximately were I wanted it on-screen, it was okay. My latest application requires precise registration between the OSD and video, so an approximation isn't good enough.
What I know:
(a) There is a horizontal dead-zone, reported on this forum as 6 pixels where nothing is displayed (I've seen it as 16 or 10, as well, depending on the resolution and video source).
(b) There is a similar vertical dead-zone in some resolutions.
(c) One user here pointed out that an FBOX can't span the full 1080 lines, because the vertical size of an FBOX is limited to 1023 pixels.
(d) I've seen wrapping at 2048 along the horizontal axis, that is, an erroneous FBOX drawn at the right side of the display will wrap-around, and part of the box will appear on the left edge of the display.
(e) When operating in interlaced modes, the vertical span of the OSD is 1/2 of the total lines (e.g., in 1080i, you have only 540 lines of OSD)
(f) For a single fixed video timing and pixel resolution, the mapping of the OSD to video seems to change slightly with different video sources and monitors.
In order to complete my understanding, and to make my project successful, I need to know the exact rules of how the OSD maps to video, at the pixel level.
One immediate question comes to mind about these dead-zones. If the horizontal dead zone is 6 pixels, does that mean the first visible horizontal pixel in column 6 corresponds to video horizontal pixel 6? Or to pixel 0?
But the overall issue is that I need to overlay OSD items precisely on the video. What algorithm / calculations are necessary to do this? And what are the limitations, if any? (e.g., you can't draw past line 1023)