Example #1
0
        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;
        }
Example #5
0
        public Mpeg2VideoState(IMpeg2VideoConfiguration configuration, ISequenceState sequenceState, IPictureState pictureState, ISliceState sliceState)
        {
            _configuration = configuration;
            _sequenceState = sequenceState;
            _pictureState  = pictureState;
            _sliceState    = sliceState;

            Reset();
        }
Example #6
0
        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];
        }
Example #9
0
        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();
            }
        }
Example #10
0
        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);
            }
        }
Example #11
0
        // 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]
                        }
                    }
                }
            }
        }
Example #12
0
        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);
        }
Example #15
0
        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;
        }
Example #17
0
        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));
 }
Example #20
0
 public void AddSubSequence(ISequenceState state, IExposedPropertyTable resolver)
 {
     subElements.Add(SequencePathSubElement.Create(state, resolver));
 }
Example #21
0
        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));
        }