1) TVideoDecoder // Domain configuration (typed packets) 2) : TAVCoder // Common configuration (pending/apply/applied) 3) : TVideoDecoder // Domain resources (resolvable decode for decoders, encode/flush packets for encoders) 4) : TAVCoder // Common resources (unused for now) 5) : TVideoDecoder<> // Domain base (packets, flush packets for decoders) 6) : TAVCoder // Common base (factory for domain) 7) : IAVCoder // Interface base Pre-declaration of template parameters to ensure void fallback in nearly all cases, which is then specialized for use with interleaving