Пример #1
0
        public override bool Build(DirectShowLib.IPin source, IBuild build)
        {
            bool result = false;

            DirectShowLib.IBaseFilter filter = this.Create();
            if (filter.NotNull())
            {
                Exception.GraphError.Check((filter as DirectShowLib.IFileSourceFilter).Load(this.file, new DirectShowLib.AMMediaType()));
                if (build.Graph.AddFilter(filter, "Asf Reader") == 0)
                {
                    foreach (Abstract candidate in this.Next)
                    {
                        if (result = candidate.Build(filter, build))
                        {
                            break;
                        }
                    }
                }
                else
                {
                    Error.Log.Append(Error.Level.Debug, "Unable to open file.", "DirectShow was unable to open file \"" + this.file + "\".");
                    Exception.GraphError.Check(build.Graph.RemoveFilter(filter));
                }
            }
            return(result);
        }
        public override bool Build(DirectShowLib.IPin source, IBuild build)
        {
            this.build          = build;
            this.build.OnClose += this.Dispose;
            bool result;

            if (result = base.Build(source, build))
            {
                DirectShowLib.AMMediaType media = new DirectShowLib.AMMediaType();
                Exception.GraphError.Check((this.grabber as  DirectShowLib.ISampleGrabber).GetConnectedMediaType(media));
                DirectShowLib.VideoInfoHeader header = (DirectShowLib.VideoInfoHeader)System.Runtime.InteropServices.Marshal.PtrToStructure(media.formatPtr, typeof(DirectShowLib.VideoInfoHeader));
                this.size     = new Geometry2D.Integer.Size(header.BmiHeader.Width, header.BmiHeader.Height);
                this.lifetime = header.AvgTimePerFrame;
                // NOTE!!!! Here we set a default frame rate if the video does not have such information available.
                if (this.lifetime < 1000 || this.lifetime > 10000000)
                {
                    this.lifetime = 400000;
                }
                if (this.Rate.NotNull())
                {
                    double factor = (double)this.Rate / (1000 / new TimeSpan(this.lifetime).TotalMilliseconds);
                    int    code   = (this.build.Graph as DirectShowLib.IMediaSeeking).SetRate(factor);
                }
            }
            return(result);
        }
        public override bool Build(DirectShowLib.IPin source, IBuild build)
        {
            bool result = false;

            if (Abstract.FindCaptureDeviceNameByIdentifier(this.device).NotNull())
            {
                DirectShowLib.IBaseFilter filter = Abstract.FindCaptureDeviceByIdentifier(this.device, false);
                if (filter.NotNull() && this.SetFormat(filter))
                {
                    if (build.Graph.AddFilter(filter, "Capture") == 0)
                    {
                        foreach (Filters.Abstract candidate in this.Next)
                        {
                            if (result = candidate.Build(filter, 0, build))
                            {
                                break;
                            }
                        }
                    }
                    else
                    {
                        Error.Log.Append(Error.Level.Debug, "Unable to open capture.", "DirectShow was unable to capture \"" + this.device + "\".");
                        Exception.GraphError.Check(build.Graph.RemoveFilter(filter));
                    }
                }
            }
            return(result);
        }
 void SetOutputMedia(DirectShowLib.IBaseFilter filter, DirectShowLib.AMMediaType media)
 {
     DirectShowLib.IPin outPin = DirectShowLib.DsFindPin.ByDirection(filter, DirectShowLib.PinDirection.Output, 0);
     if (outPin is DirectShowLib.IAMStreamConfig)
     {
         Exception.GraphError.Check((outPin as DirectShowLib.IAMStreamConfig).SetFormat(media));
     }
 }
Пример #5
0
 public override DirectShowLib.IBaseFilter Create()
 {
     DirectShowLib.IBaseFilter result = base.Create();
     DirectShowLib.IPin        pin    = DirectShowLib.DsFindPin.ByDirection(result, DirectShowLib.PinDirection.Output, this.Output.Value);
     if (pin.NotNull() && pin is DirectShowLib.IAMVideoCompression)
     {
         Exception.GraphError.Check((pin as DirectShowLib.IAMVideoCompression).put_Quality(1.0));
     }
     return(result);
 }
Пример #6
0
        public virtual bool Build(DirectShowLib.IBaseFilter previous, int i, IBuild build)
        {
            bool result = false;

            DirectShowLib.IPin outPin = DirectShowLib.DsFindPin.ByDirection(previous, DirectShowLib.PinDirection.Output, i);
            if (outPin.NotNull())
            {
                result = this.Build(outPin, build);
            }
            return(result);
        }
Пример #7
0
        public override bool Build(DirectShowLib.IPin source, IBuild build)
        {
            bool result = false;

            DirectShowLib.IBaseFilter filter = this.Create();
            if (filter.NotNull() && build.Graph.AddFilter(filter, this.Description) == 0 && this.PreConfiguration(build))
            {
                result = true;
                DirectShowLib.PinInfo pinInformation;
                Exception.GraphError.Check(source.QueryPinInfo(out pinInformation));
                DirectShowLib.FilterInfo filterInformation;
                Exception.GraphError.Check(pinInformation.filter.QueryFilterInfo(out filterInformation));
                switch (filterInformation.achName)
                {
                case "Capture":
                    this.CreateSource(DirectShowLib.PinCategory.Capture, pinInformation.filter, filter, build);
                    break;

                case "Source":
                    this.CreateSource(null, pinInformation.filter, filter, build);
                    break;

                default:
                    if (!(result = (this.FuzzyMatch ?
                                    0 <= build.Graph.Connect(source, DirectShowLib.DsFindPin.ByDirection(filter, DirectShowLib.PinDirection.Input, 0)) :
                                    0 == build.Graph.ConnectDirect(source, DirectShowLib.DsFindPin.ByDirection(filter, DirectShowLib.PinDirection.Input, 0), new DirectShowLib.AMMediaType()))))
                    {
                        Error.Log.Append(Error.Level.Debug, "Unable to connect.", "DirectShow was unable to connect \"" + filterInformation.achName + "\" with \"" + this.Description + "\".");
                        Exception.GraphError.Check(source.Disconnect());
                        Exception.GraphError.Check(build.Graph.RemoveFilter(filter));
                    }
                    break;
                }
                if (result &= this.PostConfiguration(build))
                {
                    if (this.WaitForOutput.Ticks > 0)
                    {
                        System.Threading.Thread.Sleep(this.WaitForOutput);
                    }
                    for (int i = 0; i < this.Followers.Length; i++)
                    {
                        foreach (Filters.Abstract candidate in this.Followers[i])
                        {
                            if (result &= candidate.Build(filter, build))
                            {
                                break;
                            }
                        }
                    }
                }
            }
            return(result);
        }
Пример #8
0
        public override bool Build(DirectShowLib.IPin source, IBuild build)
        {
            bool result = false;

            foreach (Abstract candidate in this.Next)
            {
                if (result = candidate.Build(source, build))
                {
                    break;
                }
            }
            return(result);
        }
Пример #9
0
 public override bool Build(DirectShowLib.IPin source, DirectShow.Binding.IBuild build)
 {
     build.Playing += () =>
     {
         //    if (this.recorder.NotNull())
         //        this.recorder.StartBackupToFile(this.filename, 0);
     };
     build.OnClose += () =>
     {
         //    if (this.recorder.NotNull())
         //        this.recorder.StopBackupToFile();
     };
     return(base.Build(source, build));
 }
Пример #10
0
        public override bool Build(DirectShowLib.IPin source, DirectShow.Binding.IBuild build)
        {
            bool result = false;

            foreach (Filters.Abstract candidate in this.Next)
            {
                candidate.Output = this.Output;
            }
            foreach (DirectShow.Binding.Filters.Abstract candidate in this.Next)
            {
                if (result = candidate.Build(source, build))
                {
                    break;
                }
            }
            return(result);
        }
 DirectShowLib.AMMediaType[] GetOutputMediaTypes(DirectShowLib.IBaseFilter filter)
 {
     DirectShowLib.AMMediaType[] result = null;
     DirectShowLib.IPin          outPin = DirectShowLib.DsFindPin.ByDirection(filter, DirectShowLib.PinDirection.Output, 0);
     if (outPin is DirectShowLib.IAMStreamConfig)
     {
         int count = 0;
         int size  = 0;
         Exception.GraphError.Check((outPin as DirectShowLib.IAMStreamConfig).GetNumberOfCapabilities(out count, out size));
         Buffer.Vector <byte> buffer = new Buffer.Vector <byte>(size);
         result = new DirectShowLib.AMMediaType[count];
         for (int i = 0; i < count; i++)
         {
             Exception.GraphError.Check((outPin as DirectShowLib.IAMStreamConfig).GetStreamCaps(i, out result[i], buffer));
         }
     }
     return(result);
 }
Пример #12
0
        public override bool Build(DirectShowLib.IPin source, IBuild build)
        {
            foreach (Filters.Abstract candidate in this.Next)
            {
                candidate.FuzzyMatch = this.FuzzyMatch;
            }
            bool result = false;

            foreach (Abstract candidate in this.Next)
            {
                candidate.Rate = this.Rate;
                if (result = candidate.Build(source, build))
                {
                    break;
                }
            }
            return(result);
        }
Пример #13
0
        public override bool Build(DirectShowLib.IPin source, DirectShow.Binding.IBuild build)
        {
            bool result = false;

            DirectShowLib.IBaseFilter filter = this.Create();
            if (build.Graph.AddFilter(filter, "VCS MPEG-4 File Source") == 0)
            {
                foreach (DirectShow.Binding.Filters.Abstract candidate in this.Next)
                {
                    if (result = candidate.Build(filter, build))
                    {
                        break;
                    }
                }
            }
            else
            {
                Error.Log.Append(Error.Level.Debug, "Unable to open Hauppauge Transport Reader.", "VCS MPEG-4 File Source was unable to open file \"" + this.file + "\".");
                DirectShow.Binding.Exception.GraphError.Check(build.Graph.RemoveFilter(filter));
            }
            return(result);
        }
Пример #14
0
        public override bool Build(DirectShowLib.IPin source, DirectShow.Binding.IBuild build)
        {
            bool result = false;

            DirectShowLib.IBaseFilter filter = this.Create();
            if (build.Graph.AddFilter(filter, "Elecard NWSource-Plus") == 0)
            {
                foreach (DirectShow.Binding.Filters.Abstract candidate in this.Next)
                {
                    if (result = candidate.Build(filter, build))
                    {
                        break;
                    }
                }
            }
            else
            {
                Error.Log.Append(Error.Level.Debug, "Unable to open Elecard NWSource-Plus Filter.", "Elecard NWSource-Plus Filter was unable to open url \"" + this.url + "\".");
                DirectShow.Binding.Exception.GraphError.Check(build.Graph.RemoveFilter(filter));
            }
            return(result);
        }
Пример #15
0
        public override bool Build(DirectShowLib.IPin source, Imint.Media.DirectShow.Binding.IBuild build)
        {
            bool result = false;

            DirectShowLib.IBaseFilter filter = this.Create();
            if (filter.NotNull() && build.Graph.AddFilter(filter, this.Description) == 0)
            {
                foreach (DirectShow.Binding.Filters.Abstract candidate in this.Next)
                {
                    if (result = candidate.Build(filter, build))
                    {
                        break;
                    }
                }
            }
            else
            {
                Error.Log.Append(Error.Level.Debug, "Unable to open file.", "DirectShow was unable to open file \"" + this.file + "\".");
                Binding.Exception.GraphError.Check(build.Graph.RemoveFilter(filter));
            }
            return(result);
        }
Пример #16
0
        public override bool Build(DirectShowLib.IPin source, IBuild build)
        {
            bool result = false;

            DirectShowLib.IBaseFilter filter;
            if (build.Graph.AddSourceFilter(this.file, "Ds.NET FileFilter", out filter) == 0)
            {
                foreach (Abstract candidate in this.Next)
                {
                    if (result = candidate.Build(filter, build))
                    {
                        break;
                    }
                }
            }
            else
            {
                Error.Log.Append(Error.Level.Debug, "Unable to open file.", "DirectShow was unable to open file \"" + this.file + "\".");
                Exception.GraphError.Check(build.Graph.RemoveFilter(filter));
            }
            return(result);
        }
Пример #17
0
 public abstract bool Build(DirectShowLib.IPin source, IBuild build);
Пример #18
0
 public override bool Build(DirectShowLib.IPin source, DirectShow.Binding.IBuild build)
 {
     return(base.Build(source, build));
 }