/// <summary>
        /// Passes bitstream to the decoder.
        /// </summary>
        /// <param name="inbuf">Bitstream buffer to pass</param>
        /// <param name="offset">Index into inbuf</param>
        /// <param name="length">Number of bytes to use from inbuf</param>
        void PutBitstream(byte[] inbuf, int offset, int length)
        {
            FastMemcpyMemmove.memmove(bitstream.Data, bitstream.Data + (int)bitstream.DataOffset, (int)bitstream.DataLength);
            bitstream.DataOffset = 0;

            int free = (int)(bitstream.MaxLength - bitstream.DataLength);

            Trace.Assert(length <= free);

            Marshal.Copy(inbuf, offset, bitstream.Data + (int)bitstream.DataLength, length);

            bitstream.DataLength += (uint)length;
        }
        /// <summary>
        /// Puts the bitstream.
        /// </summary>
        /// <param name="inbuf">The inbuf.</param>
        /// <param name="offset">The offset.</param>
        /// <param name="length">The length.</param>
        /// <exception cref="QuickSyncException">insufficient space in buffer</exception>
        public void PutBitstream(byte[] inbuf, int offset, int length)
        {
            FastMemcpyMemmove.memmove(bitstream.Data, bitstream.Data + (int)bitstream.DataOffset, (int)bitstream.DataLength);
            bitstream.DataOffset = 0;

            int free = (int)(bitstream.MaxLength - bitstream.DataLength);

            //Trace.Assert(length <= free);
            if (free < length)
            {
                throw new QuickSyncException("insufficient space in buffer");
            }

            Marshal.Copy(inbuf, offset, bitstream.Data + (int)bitstream.DataLength, length);

            bitstream.DataLength += (uint)length;
        }