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)); } }
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); }
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); }
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); }
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); }
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)); }
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); }
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); }
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); }
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); }
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); }
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); }
public abstract bool Build(DirectShowLib.IPin source, IBuild build);
public override bool Build(DirectShowLib.IPin source, DirectShow.Binding.IBuild build) { return(base.Build(source, build)); }