public override int Write(IH264EntropyOutputStream  stream)
        {
            stream.WriteUeV(picParameterSetId);
            stream.WriteUeV(seqParameterSetId);
            stream.WriteU1(entropyCodingModeFlag);
            stream.WriteU1(picOrderPresentFlag);
            stream.WriteUeV(numSliceGroupsMinus1);
            // FMO stuff
            if (numSliceGroupsMinus1 > 0) {
                // TODO Unreachable
            }
            // End of FMO stuff
            stream.WriteUeV(numRefIdxL0ActiveMinus1);
            stream.WriteUeV(numRefIdxL1ActiveMinus1);
            stream.WriteU1(weightedPredFlag);
            stream.WriteUv(2, weightedBipredIdc);
            stream.WriteSeV(picInitQpMinus26);
            stream.WriteSeV(picInitQsMinus26);
            stream.WriteSeV(chromaQpIndexOffset);
            stream.WriteU1(deblockingFilterControlPresentFlag);
            stream.WriteU1(constrainedIntraPredFlag);
            stream.WriteU1(redundantPicCntPresentFlag);
            // copies the last couple of bits into the byte Buffer
            stream.Close();

            return (int)(stream.Length / 8);
        }
        public override int Write(IH264EntropyOutputStream stream)
        {
            stream.WriteUv(8, profileIdc);
            stream.WriteU1(constrainedSet0Flag);
            stream.WriteU1(constrainedSet1Flag);
            stream.WriteU1(constrainedSet2Flag);
            stream.WriteU1(constrainedSet3Flag);
            stream.WriteUv(4, 0);
            stream.WriteUv(8, levelIdc);
            stream.WriteUeV(seqParameterSetId);
            stream.WriteUeV(log2MaxFrameNumMinus4);
            stream.WriteUeV(picOrderCntType);
            if (picOrderCntType == 0)
            {
                stream.WriteUeV(log2MaxPicOrderCntLsbMinus4);
            }
            else if (picOrderCntType == 1)
            {
                // TODO Unreachable
            }
            stream.WriteUeV(numRefFrames);
            stream.WriteU1(gapsInFrameNumValueAllowedFlag);
            stream.WriteUeV(picWidthInMbsMinus1);
            stream.WriteUeV(picHeightInMapUnitsMinus1);
            stream.WriteU1(frameMbsOnlyFlag);
            if (!frameMbsOnlyFlag)
            {
                // TODO Unreachable
            }
            stream.WriteU1(direct_8X8InferenceFlag);
            stream.WriteU1(frameCroppingFlag);
            if (frameCroppingFlag)
            {
                // TODO Unreachable
            }
            stream.WriteU1(vuiParametersPresentFlag);
            if (vuiParametersPresentFlag)
            {
                // TODO Unreachable
            }
            stream.Close();

            return (int)(stream.Length/8);
        }