public int Write(IH264EntropyOutputStream stream) { var len = 0; len += stream.WriteUeV(firstMbInSlice); len += stream.WriteUeV((int)sliceType); len += stream.WriteUeV(picParameterSetId); len += stream.WriteUv( log2MaxFrameNumMinus4 + 4, slice.Picture.FrameNum); if (nalUnitType.Equals(NaluType.NaluTypeIdr)) { // idr_pic_id len += stream.WriteUeV(slice.Picture.Number%2); } if (picOrderCntType == 0) { if (frameMbsOnlyFlag) { const int frameSkip = 0; var baseMul = slice.Picture.FrameNum; var toppoc = baseMul*(2*(frameSkip + 1)); var maxLength = ~((-1) << (log2MaxPicOrderCntLsbMinus4 + 4)); picOrderCntLsb = toppoc & maxLength; } else { // TODO Unreachable } len += stream.WriteUv( log2MaxPicOrderCntLsbMinus4 + 4, picOrderCntLsb); } len += RefPicListReordering(stream); if (((int)nalRefIdc) != 0) len += DecRefPicMarking(stream); len += stream.WriteSeV(sliceQpDelta); return len; }
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); }