every IO subsystem of a computer typically has to be double of triple buffered ( or more ) ( in computers terms its called a queue or fifo )- depending on the nature of the source and the output-
its a standard engineering problem- with systems that operate at subtely different speeds.
nothing is exactly 25fps or 30 or whatever.
anything that connects to anything else needs to be buffered-
no 2 computer systems ever have exact clocks- usually 60parts per million.
with the decklink drivers- they buffer frames up to 2 secs- so they have a buffer which can hold say 60 frames - this is what causes the "huge" delays with decklink. decklink is designed to get sdi onto a disc which no frame drops- so they have big long buffers of frames in case of slow disc speeds. Decklink uses a long FIFO buffer.
with phoenix card- i double buffer the input into my software- and the graphics card is double buffered - so 2-4 frames - i dont need to write to disc.
---
its a classic engineering problem...
http://en.wikipedia.org/wiki/Double_buffering
http://en.wikipedia.org/wiki/FIFO_(computing)
The easiest way to explain how double buffering works is to take a real world example. It is a nice sunny day and you have decided to get the paddling pool out, only you can not find your garden hose. You'll have to fill the pool with buckets. So you fill one bucket (or buffer) from the tap, turn the tap off, walk over to the pool, pour the water in, walk back to the tap to repeat the exercise. This is analogous to single buffering. The tap has to be turned off while you "process" the bucket of water.
Now consider how you would do it if you had two buckets. You would fill the first bucket and then swap the second in under the running tap. You then have the length of time it takes for the second bucket to fill in order to empty the first into the paddling pool. When you return you can simply swap the buckets so that the first is now filling again, during which time you can empty the second into the pool. This can be repeated until the pool is full. It is clear to see that this technique will fill the pool far faster as there is much less time spent waiting, doing nothing, while buckets fill. This is analogous to double buffering. The tap can be on all the time and does not have to wait whilst the processing is done.
In computer science the situation of having a running tap that cannot be, or should not be, turned off is common (such as a stream of audio). Also, computers typically prefer to deal with chunks of data rather than streams. In such situations double buffering is often employed.
there are many types of buffers. i use many different types of buffers and queues.
i use at least 4 different types of fifo - they are required to do simple things... its quite complex getting all this stuff onto the screen from different sources.... at different frame rates ( and now everyone uses triple heads and double heads, and all that stuff which totally confuses the graphics card... )
i dont use any c++, i dont use quicktime buffering directly -
but quicktime has its own decompression buffering strategies for multi-processing handling and sending out jobs to decompress frames.