| This is pretty cool. For about two to three years now, I've leaned very heavily into analog video signals as a hobby. It culminated into me making not just a software PAL decoder, but my own fully compliant PAL "graphics card" with an FPGA and analog circuitry. PAL might be one of the most complicated analog video signals next to SECAM (though PAL is not that far from NTSC if you understand it well already), and I wanted to really understand every step in it, including all of the math. I of course test everything with the once ubiquitous[1] PM5544 test pattern, which is described in noticeable detail here in case you were every wondering why it looks the way it does: https://web.archive.org/web/20190907170308/http://www.radios... It's satisfying to really understand analog TV now. I watched a lot of TV through my life, and always had the thought that while I use it so much, I had no good idea how the TV in front of me actually worked. It's also a bit bittersweet, because while generating NTSC or PAL is still useful in existing composite video situations (the motivator for the PAL graphics card was another project where I needed composite output), there are almost no broadcasts left, and it seems rather outdated in general. One day I might make a website that explains how NTSC and PAL work in detailed but understandable way, but I keep putting it off indefinitely. [1] If you are from Europe or other PAL countries. In the US, I think simple SMTPE color bars were more common, and a lot of the elements in the PM5544 test card don't matter for NTSC. |
I never really finished it, but I threw a little bit of it on GitHub: https://github.com/gabesk/tv_python is the prototyping version (the raw data is a picture of Lena on a Raspberry Pi composite output).
Also as an aside, if anyone ever wants an example of how to stream data from an isochronous endpoint on Windows, this took me way to long to figure out: https://github.com/gabesk/tv/blob/master/actual_implementati... (see usb_reading_thread routine) as well as this blog post: https://gabesk.blogspot.com/2018/08/streaming-from-isochrono... (that version does real-time black and white, but I never finished real-time color as my laptop at the time couldn't handle it with my poorly optimized decoding routines).
You all have inspired me to finish this properly and publish it. Maybe even as a top level post on HN.