public void Parse(IMpeg2VideoReader reader, IResultNodeState resultState) { resultState.Name = Name; reader.State.Picture.Reset(); reader.State.SeenGop = false; if ((reader.State.LastHeaderName != null) && (reader.State.LastHeaderName != Slice.Name)) { resultState.Invalidate(); return; // Invalid header sequence } ISequenceState sequenceState = reader.State.Sequence; sequenceState.Reset(); sequenceState.Initialized = true; sequenceState.HorizontalSize = (ushort)reader.GetBits(12, Attribute.HorizontalSizeValue); sequenceState.VerticalSize = (ushort)reader.GetBits(12, Attribute.VerticalSizeValue); reader.GetBits(4, Attribute.AspectRatioInformation, AspectRatioResultFormatter); reader.GetBits(4, Attribute.FrameRateCode, FrameRateResultFormatter); reader.GetBits(18, Attribute.BitRateValue); reader.GetMarker(); reader.GetBits(10, Attribute.VbvBufferSizeValue); reader.GetFlag(Attribute.ConstrainedParametersFlag); if (reader.GetFlag(Attribute.LoadIntraQuantiserMatrix)) { reader.GetData(Attribute.IntraQuantiserMatrix, 64); } if (reader.GetFlag(Attribute.LoadNonIntraQuantiserMatrix)) { reader.GetData(Attribute.NonIntraQuantiserMatrix, 64); } }
public static SequencePathSubElement Create(ISequenceState state, IExposedPropertyTable resolver) { var clip = state.hostClip; Debug.Assert(clip != null); var track = clip.parentTrack; Debug.Assert(track != null); var asset = track.timelineAsset; Debug.Assert(asset != null); var clipAsset = clip.asset as IDirectorDriver; Debug.Assert(clipAsset != null); var directors = clipAsset.GetDrivenDirectors(resolver); return(new SequencePathSubElement { trackInstanceID = track.GetInstanceID(), trackHash = track.Hash(), clipIndex = Array.IndexOf(track.clips, clip), clipHash = clip.Hash(), subDirectorIndex = directors.IndexOf(state.director) }); }
public void Parse(IMpeg2VideoReader reader, IResultNodeState resultState) { resultState.Name = Name; if ((reader.State.LastHeaderName != SequenceHeader.Name)) { resultState.Invalidate(); return; // Invalid header sequence } ISequenceState sequenceState = reader.State.Sequence; reader.GetBits(8, Attribute.ProfileAndLevelIndication); sequenceState.Progressive = reader.GetFlag(Attribute.ProgressiveSequence); sequenceState.ChromaFormat = (ChromaFormat)reader.GetBits(2, Attribute.ChromaFormat); uint horizontalSizeExtension = reader.GetBits(2, Attribute.HorizontalSizeExtension); sequenceState.HorizontalSize = (ushort)((sequenceState.HorizontalSize & 0x0fff) | (horizontalSizeExtension << 12)); uint verticalSizeExtension = reader.GetBits(2, Attribute.VerticalSizeExtension); sequenceState.VerticalSize = (ushort)((sequenceState.VerticalSize & 0x0fff) | (verticalSizeExtension << 12)); reader.GetBits(12, Attribute.BitRateExtension); reader.GetMarker(); reader.GetBits(8, Attribute.VbvBufferSizeExtension); reader.GetBits(1, Attribute.LowDelay); reader.GetBits(2, Attribute.FrameRateExtensionN); reader.GetBits(5, Attribute.FrameRateExtensionD); }
static void SynchronizeViewModelTime(ISequenceState state) { if (state.director == null || state.viewModel == null) return; var t = state.time; state.time = t; }
public Mpeg2VideoState(IMpeg2VideoConfiguration configuration, ISequenceState sequenceState, IPictureState pictureState, ISliceState sliceState) { _configuration = configuration; _sequenceState = sequenceState; _pictureState = pictureState; _sliceState = sliceState; Reset(); }
public PictureStateBuilder(uint id, ISequenceState sequenceState) { _id = id; _sequenceState = sequenceState; // Defaults WeightedBipredIdc = WeightedBidirectionalPredictionType.DefaultWeightedPrediction; SliceGroupMapType = SliceGroupMapType.InterleavedSliceGroups; }
public static string GetDisplayName(ISequenceState sequence) { string displayName = sequence.director != null?GetDisplayName(sequence.director) : GetDisplayName(sequence.asset); if (sequence.asset != null && sequence.isReadOnly) { displayName += " " + k_ReadOnlyDisplayName; } return(displayName); }
public MotionField(ISliceState sliceState) { _sliceState = sliceState; ISequenceState sequenceState = sliceState.PictureState.SequenceState; _picWidthInMbs = sequenceState.PicWidthInMbs; _picHeightInMbs = sequenceState.FrameHeightInMbs / (sliceState.FieldPicFlag ? 2U : 1); _motionVectors = new byte[(_picWidthInMbs * _picHeightInMbs), 16, 2]; }
private static void ParseFrameNum(INalUnitReader reader, ISequenceState sequenceState) // TODO:checks uitbreiden volgens 7.4.3(Current Header Semantics).frame_num specs { uint frameNum = reader.GetBits((int)sequenceState.Log2MaxFrameNum, Attribute.FrameNumber); #if DEBUG H264Debug.WriteLine("+ frame_num={0} ({1} bits)", frameNum, sequenceState.Log2MaxFrameNum); #endif if (reader.State.IdrPicFlag && (frameNum != 0)) { //FIXME: Some H.264 files seem to use frame number != 0 for IDR pictures!? //readerState.Invalidate(); } }
public void CopyTo(ISequenceState sequence) { sequence.Reset(); sequence.Initialized = Initialized; sequence.HorizontalSize = HorizontalSize; sequence.VerticalSize = VerticalSize; sequence.ScalableMode = ScalableMode; sequence.ChromaFormat = ChromaFormat; sequence.Progressive = Progressive; foreach (ExtensionId extensionId in _extensions) { sequence.AddExtension(extensionId); } }
// 7.3.3.2 Prediction weight table syntax private static void PredWeightTable(INalUnitReader reader, ISequenceState sequenceState, SliceType sliceType, uint activeReferencePictureCount0, uint activeReferencePictureCount1) { reader.GetExpGolombCoded(); // luma_log2_weight_denom bool monochrome = (sequenceState.ChromaFormat.NumC8X8 == 0); if (!monochrome) { reader.GetExpGolombCoded(); // chroma_log2_weight_denom } for (int i = 0; i < activeReferencePictureCount0; i++) { if (reader.GetBit()) // luma_weight_l0_flag { reader.GetSignedExpGolombCoded(); // luma_weight_l0[ i ] reader.GetSignedExpGolombCoded(); // luma_offset_l0[ i ] } if (!monochrome && reader.GetBit()) // chroma_weight_l0_flag { for (int j = 0; j < 2; j++) { reader.GetSignedExpGolombCoded(); // chroma_weight_l0[i][j] reader.GetSignedExpGolombCoded(); // chroma_offset_l0[i][j] } } } if (sliceType == SliceType.B) { for (int i = 0; i < activeReferencePictureCount1; i++) { if (reader.GetBit()) // luma_weight_l1_flag { reader.GetSignedExpGolombCoded(); // luma_weight_l1[i] reader.GetSignedExpGolombCoded(); // luma_offset_l1[i] } if (!monochrome && reader.GetBit()) // chroma_weight_l1_flag { for (int j = 0; j < 2; j++) { reader.GetSignedExpGolombCoded(); // chroma_weight_l1[i][j] reader.GetSignedExpGolombCoded(); // chroma_offset_l1[i][j] } } } } }
public CavlcSliceData(INalUnitReader reader, IState readerState) { _reader = reader; _readerState = readerState; _sliceState = reader.State.SliceState; _pictureState = _sliceState.PictureState; _sequenceState = _pictureState.SequenceState; _coeffTokenChromaDc = (ChromaFormat == ChromaFormat.YCbCr420) ? CoeffTokenChromaDc420 : CoeffTokenChromaDc422; _lumaCodedCoefficients = new CodedCoefficients(_sliceState, PicHeightInMbs, SubBlockPartition.Luma); _chromaCodedCoefficients = new CodedCoefficients[2]; _subMbTypes = new ISubMacroblockType[4]; SubBlockPartition chromaSubBlockPartition = ChromaArrayTypeSubBlockPartitions[_sequenceState.ChromaFormat.ChromaFormatIdc]; for (int i = 0; i < _chromaCodedCoefficients.Length; i++) { _chromaCodedCoefficients[i] = new CodedCoefficients(_sliceState, PicHeightInMbs, chromaSubBlockPartition); } MbToSliceGroupMap = _mbToSliceGroup.CreateMacroBlockToSliceGroupMap(_sliceState); }
public static SequencePathSubElement Create(ISequenceState state, IExposedPropertyTable resolver) { var clip = state.hostClip; Debug.Assert(clip != null); var track = clip.GetParentTrack(); Debug.Assert(track != null); var asset = track.timelineAsset; Debug.Assert(asset != null); var directors = TimelineUtility.GetSubTimelines(clip, resolver as PlayableDirector); return(new SequencePathSubElement { trackInstanceID = track.GetInstanceID(), trackHash = track.Hash(), clipIndex = Array.IndexOf(track.clips, clip), clipHash = clip.Hash(), subDirectorIndex = directors.IndexOf(state.director) }); }
public CabacSliceData(INalUnitReader reader, IState readerState) { _reader = reader; _readerState = readerState; _sliceState = reader.State.SliceState; _pictureState = _sliceState.PictureState; _sequenceState = _pictureState.SequenceState; _unavailableMacroblockState = _sliceState.IntraCoded ? MacroblockState.UnavailableIntraCoded : MacroblockState.UnavailableInterCoded; _macroblockStates = new MacroblockState[PicSizeInMbs]; _motionFieldL0 = IsList0Predicted ? new MotionField(_sliceState) : null; _motionFieldL1 = IsList1Predicted ? new MotionField(_sliceState) : null; _subMbTypes = new ISubMacroblockType[4]; _arithmeticDecoder = new ArithmeticDecoder(reader); for (int i = 0; i < _macroblockStates.Length; i++) { _macroblockStates[i] = _unavailableMacroblockState; } MbToSliceGroupMap = _mbToSliceGroup.CreateMacroBlockToSliceGroupMap(_sliceState); }
public void GetPcmSamples() { ReadZeroAlignmentBits(); // pcm_alignment / pcm_alignment_zero_bit if (Result.Valid) { ISequenceState sequence = State.SliceState.PictureState.SequenceState; var bitDepthLuma = (int)sequence.BitDepthLuma; for (uint i = 0; i < 256; i++) { GetBits(bitDepthLuma); // pcm_sample_luma[i] } if (sequence.ChromaFormat.NumC8X8 != 0) { uint chromaSamplesPerMb = (sequence.ChromaFormat.NumC8X8 << 7); var bitDepthChroma = (int)sequence.BitDepthChroma; for (uint i = 0; i < chromaSamplesPerMb; i++) { GetBits(bitDepthChroma); // pcm_sample_chroma[i] } } } }
static TitleMode GetTitleMode(ISequenceState sequence) { var prefabStage = UnityEditor.Experimental.SceneManagement.PrefabStageUtility.GetCurrentPrefabStage(); // Top level if (sequence.hostClip == null) { if (sequence.director != null && prefabStage != null && prefabStage.IsPartOfPrefabContents(sequence.director.gameObject)) return TitleMode.Prefab; if (sequence.director != null && PrefabUtility.IsPartOfPrefabAsset(sequence.director)) return TitleMode.PrefabOutOfContext; if (sequence.director != null && !sequence.director.isActiveAndEnabled) return TitleMode.DisabledComponent; if (sequence.director != null) return TitleMode.GameObject; if (sequence.asset != null) return TitleMode.Asset; } // Subtimelines only get an error icon else if (sequence.director != null && !sequence.director.isActiveAndEnabled && !PrefabUtility.IsPartOfPrefabAsset(sequence.director)) return TitleMode.DisabledComponent; return TitleMode.None; }
static TitleMode GetTitleMode(ISequenceState sequence) { var prefabStage = PrefabStageUtility.GetCurrentPrefabStage(); // Top level if (sequence.hostClip == null) { if (sequence.director != null && prefabStage != null && prefabStage.IsPartOfPrefabContents(sequence.director.gameObject)) { return(TitleMode.Prefab); } if (sequence.director != null && PrefabUtility.IsPartOfPrefabAsset(sequence.director)) { return(TitleMode.PrefabOutOfContext); } if (sequence.director != null && !sequence.director.isActiveAndEnabled) { return(TitleMode.DisabledComponent); } if (sequence.director != null) { return(TitleMode.GameObject); } if (sequence.asset != null) { return(TitleMode.Asset); } } // Subtimelines only get an error icon else if (sequence.director != null && !sequence.director.isActiveAndEnabled && !PrefabUtility.IsPartOfPrefabAsset(sequence.director)) { return(TitleMode.DisabledComponent); } return(TitleMode.None); }
public DefaultVideoHeader(CodecID mpegFormat, ISequenceState sequenceState) { _mpegFormat = mpegFormat; _sequenceState = sequenceState; }
public static string GetDisplayName(ISequenceState sequence) { return(sequence.director != null?GetDisplayName(sequence.director) : GetDisplayName(sequence.asset)); }
public void AddSubSequence(ISequenceState state, IExposedPropertyTable resolver) { subElements.Add(SequencePathSubElement.Create(state, resolver)); }
public IMbToSliceGroupMap CreateMacroBlockToSliceGroupMap(ISliceState sliceState) { IPictureState pictureState = sliceState.PictureState; ISequenceState sequence = sliceState.PictureState.SequenceState; uint picSizeInMapUnits = sequence.PicSizeInMapUnits; uint sliceGroupChangeRate = pictureState.SliceGroupChangeRate; uint mapUnitsInSliceGroup0 = Math.Min(sliceState.SliceGroupChangeCycle * sliceGroupChangeRate, picSizeInMapUnits); int[] mapUnitToSliceGroupMap; if (pictureState.SliceGroupCount == 1) { return(new SingleSliceGroupMap()); } // num_slice_groups_minus1 is not equal to 0 switch (pictureState.SliceGroupMapType) { case SliceGroupMapType.InterleavedSliceGroups: mapUnitToSliceGroupMap = InterleavedSliceGroupMapType(pictureState); break; case SliceGroupMapType.DispersedSliceGroups: mapUnitToSliceGroupMap = DispersedSliceGroupMapType(pictureState); break; case SliceGroupMapType.ForegroundAndLeftoverSliceGroups: mapUnitToSliceGroupMap = ForegroundWithLeftOverSliceGroupMapType(pictureState); break; case SliceGroupMapType.ChangingSliceGroups3: mapUnitToSliceGroupMap = BoxOutSliceGroupMapTypes(pictureState, mapUnitsInSliceGroup0); break; case SliceGroupMapType.ChangingSliceGroups4: mapUnitToSliceGroupMap = RasterScanSliceGroupMapTypes(pictureState, mapUnitsInSliceGroup0); break; case SliceGroupMapType.ChangingSliceGroups5: mapUnitToSliceGroupMap = WipeSliceGroupMapTypes(pictureState, mapUnitsInSliceGroup0); break; case SliceGroupMapType.ExplicitSliceGroups: mapUnitToSliceGroupMap = ExplicitSliceGroupMapType(pictureState); break; default: throw new InvalidOperationException(); } if (sequence.FrameMbsOnlyFlag || sliceState.FieldPicFlag) { return(new OneMacroblockPerSliceGroupMap(mapUnitToSliceGroupMap)); } if (sequence.MbAdaptiveFrameFieldFlag) // mb_adaptive_frame_field_flag && !FieldPicFlag { return(new TwoMacroblocksPerSliceGroupMap(mapUnitToSliceGroupMap)); } // if (!sequence.FrameMbsOnlyFlag && !sequence.MbAdaptiveFrameFieldFlag && !sliceState.FieldPicFlag) return(new OverlappingMbToSliceGroupMap(mapUnitToSliceGroupMap, sequence.PicWidthInMbs)); }