示例#1
0
        public IGroup AddAudioGroup(string name, double fps)
        {
            OnAddingGroup();

            AMMediaType mediaType = null;

            try
            {
                mediaType = MediaTypeTools.GetAudioMediaType();

                IGroup group = new Group(this, GroupType.Audio, mediaType, name, fps);

                _groups.Add(group);

                AttachHandlers(group);

                OnAddedGroup(group);

                return(group);
            }
            finally
            {
                if (mediaType != null)
                {
                    DsUtils.FreeAMMediaType(mediaType);
                }
            }
        }
示例#2
0
        public IClip AddClip(string name, string fileName, GroupMediaType mediaType, InsertPosition position,
                             double offset,
                             double clipStart, double clipEnd, bool manageLifespan)
        {
            CheckMediaTypeAgainstGroup(mediaType);

            OnAddingClip();

            if ((clipEnd < 0) && (mediaType == GroupMediaType.Image))
            {
                clipEnd = DefaultImageDisplayDuration + clipStart;
            }

            long durationInUnits;

            var mediaFile = new MediaFile(fileName, manageLifespan);

            double absoluteOffset = position == InsertPosition.Absolute ? offset : Duration + offset;

            IList <IDisposable> activeAssistants = null;

            IAMTimelineSrc timelineSrc = null;

            try
            {
                activeAssistants = FetchAssistants(mediaFile);

                timelineSrc = CreateMedia(mediaFile,
                                          mediaType,
                                          TimelineBuilder.ToUnits(absoluteOffset),
                                          TimelineBuilder.ToUnits(clipStart),
                                          TimelineBuilder.ToUnits(clipEnd),
                                          out durationInUnits);
            }
            finally
            {
                DisposeOfAssistants(activeAssistants);
            }

            if (!string.IsNullOrEmpty(name))
            {
                ((IAMTimelineObj)timelineSrc).SetUserName(name);
            }

            IClip clip =
                new Clip(this, _timeline, timelineSrc, name, absoluteOffset, TimelineBuilder.ToSeconds(durationInUnits),
                         clipStart, mediaFile);

            clip.AddingEffect += clip_BeforeEffectAdded;
            clip.AddedEffect  += clip_AfterEffectAdded;

            _clips.Add(clip);

            _virtualClips.AddVirtualClip(clip);

            OnAddedClip(clip);

            return(clip);
        }
示例#3
0
        /// <summary>
        /// Creates a des track, wraps it into an ITrack, adds it to a collection and
        /// returns the new ITrack wrapper.
        /// </summary>
        /// <param name="desTimeline"></param>
        /// <param name="desComposition"></param>
        /// <param name="tracks"></param>
        /// <param name="name"></param>
        /// <param name="priority"></param>
        /// <returns></returns>
        internal static ITrack AddTrackToCollection(ITrackContainer container, IAMTimeline desTimeline,
                                                    IAMTimelineComp desComposition,
                                                    AddOnlyCollection <ITrack> tracks, string name, int priority)
        {
            priority = ReorderPriorities(tracks, priority);

            ITrack track = new Track(container, desTimeline, CreateTrack(desTimeline, desComposition, name, priority),
                                     name, priority);

            tracks.Add(track);

            return(track);
        }
示例#4
0
        /// <summary>
        /// Creates a des effect, wraps it into an IEffect, adds it to a collection
        /// and returns the new IEffect wrapper.
        /// </summary>
        /// <param name="desTimeline"></param>
        /// <param name="desEffectable"></param>
        /// <param name="effects"></param>
        /// <param name="name"></param>
        /// <param name="priority"></param>
        /// <param name="offset"></param>
        /// <param name="duration"></param>
        /// <param name="effectDefinition"></param>
        /// <returns></returns>
        internal static IEffect AddEffectToCollection(IEffectContainer container, IAMTimeline desTimeline,
                                                      IAMTimelineEffectable desEffectable,
                                                      AddOnlyCollection <IEffect> effects, string name, int priority,
                                                      double offset, double duration, EffectDefinition effectDefinition)
        {
            priority = ReorderPriorities(effects, priority);

            IAMTimelineObj desEffect =
                InsertEffect(desTimeline, desEffectable, name, priority, offset, duration, effectDefinition);

            IEffect effect = new Effect(container, desEffect, name, priority, offset, duration, effectDefinition);

            effects.Add(effect);

            return(effect);
        }
示例#5
0
        /// <summary>
        /// Creates a des transition, wraps it into an ITransition, adds it to a collection
        /// and returns a new ITransition wrapper.
        /// </summary>
        /// <param name="desTimeline"></param>
        /// <param name="transable"></param>
        /// <param name="transitions"></param>
        /// <param name="name"></param>
        /// <param name="offset"></param>
        /// <param name="duration"></param>
        /// <param name="transitionDefinition"></param>
        /// <param name="swapInputs"></param>
        /// <returns></returns>
        internal static ITransition AddTransitionToCollection(ITransitionContainer container, IAMTimeline desTimeline,
                                                              IAMTimelineTransable transable,
                                                              AddOnlyCollection <ITransition> transitions, string name,
                                                              double offset, double duration,
                                                              TransitionDefinition transitionDefinition, bool swapInputs)
        {
            CheckForTransitionOveralp(container, offset, duration);

            IAMTimelineObj desTransition =
                InsertTransition(desTimeline, transable, name, offset, duration, transitionDefinition, swapInputs);

            ITransition transition =
                new Transition(container, desTransition, name, offset, duration, swapInputs, transitionDefinition);

            transitions.Add(transition);

            return(transition);
        }
示例#6
0
        /// <summary>
        /// Creates a des composition, wraps it into an IComposition, adds it to a collecton
        /// and returns the new IComposition wrapper.
        /// </summary>
        /// <param name="timeline"></param>
        /// <param name="desComposition"></param>
        /// <param name="compositions"></param>
        /// <param name="name"></param>
        /// <param name="priority"></param>
        /// <returns></returns>
        internal static IComposition AddCompositionToCollection(ICompositionContainer container, IAMTimeline timeline,
                                                                IAMTimelineComp desComposition,
                                                                AddOnlyCollection <IComposition> compositions,
                                                                string name,
                                                                int priority)
        {
            priority = ReorderPriorities(compositions, priority);

            IComposition composition = new Composition(container,
                                                       timeline,
                                                       CreateComposition(timeline, desComposition, name, priority),
                                                       name,
                                                       priority);

            compositions.Add(composition);

            return(composition);
        }