Circuits and methods for subdividing a decoder into functional blocks that can be accessed separately. The decoder includes a decoder module having a parser, a block decoder and a motion compensation engine, which can all be further subdivided into functional blocks. The functional blocks can be bypassed in decompressing frames where the blocks are not necessary, or when the compression algorithm does not require the functional block, increasing the speed of the decoder. The functional blocks can also be reused for decompression or compression based on different standards, or for different operation in the decoder, such as decompression and compression. The decoder can be coupled to a processor and some of the functional block performed in the decoder's hardware and some are performed in the processor. In one embodiment of the invention and the processor determines which block are to be by-passed completely and which block are to be performed in software based on the decompression protocol to which the compressed frame is encoded to comply to, the capacity and speed of the processor, and the available memory. In another embodiment multiplexers can be added to the decoder to connect functional blocks so they can be by-passed or reused based on preprogramming of the multiplexers based on the decompression protocol to which the compressed frame is encoded to comply to, the capacity and speed of the processor, and the available memory.