The my question is. why do we queue stuff in decoder? It shouldn't if at all possible. 

If we must, it would make much more sense that the Decode() function return the VC_DROPPED flag even if it currently return a valid picture. (return values of decode doesn't have to refer to current picture)

What is the skippedDeint for? Anything that applies to current output picture, should be marked in the picture structure. Anything that is generic should be in the Decode() return.