// --------------------------- Private methods ---------------------------- /// <summary> Retrieve the friendly name of a connectorType. </summary> private string getName(IPin pin) { string s = "Unknown pin"; PinInfo pinInfo = new PinInfo(); // Direction matches, so add pin name to listbox int hr = pin.QueryPinInfo(out pinInfo); if (hr == 0) { s = pinInfo.name + ""; } else { Marshal.ThrowExceptionForHR(hr); } // The pininfo structure contains a reference to an IBaseFilter, // so you must release its reference to prevent resource a leak. if (pinInfo.filter != null) { Marshal.ReleaseComObject(pinInfo.filter); } pinInfo.filter = null; return(s); }
/// <summary> /// Meldet Informationen zu diesem Endpunkt. /// </summary> /// <param name="info">Die gewünschten Informationen.</param> public void QueryPinInfo(ref PinInfo info) { // Create new info.Direction = PinDirection.Output; info.Filter = m_Filter.AddRef(); info.Name = QueryId(); }
/// <summary> /// Sets the cached pin information /// </summary> public void SetPinInfo(ContentHash hash, TimeSpan timeToLive) { if (timeToLive <= TimeSpan.Zero) { Invalidate(hash); return; } var expiryTime = _clock.UtcNow + timeToLive; var pinInfo = new PinInfo(expiryTime); if (_cachedPins.TryAdd(hash, pinInfo)) { // Only add to the garbage collection queue if the hash is newly added _garbageCollectionQueue.Enqueue(hash); } else { _cachedPins[hash] = pinInfo; } // Attempt to clean up a stale hash. This supplements the remove if expired logic which // would never clean up hashes if they are not pinned again. CleanStaleHashes(dequeueCount: 1); }
/// <summary>Возвращает удобное для чтения имя коннектора. </summary> private string getName(IPin pin) { string s = "Unknown pin"; PinInfo pinInfo = new PinInfo(); // Direction matches, so add pin name to listbox int hr = pin.QueryPinInfo(out pinInfo); if (hr == 0) { s = pinInfo.name + ""; } else { Marshal.ThrowExceptionForHR(hr); } //Структура PinInfo содержит ссылку на IBaseFilter, поэтому необходимо освободить ее, чтобы предотвратить утечку if (pinInfo.filter != null) { Marshal.ReleaseComObject(pinInfo.filter); } pinInfo.filter = null; return(s); }
/// <summary> /// 将继电器或接触器的端子映射信息转换为实体类 /// </summary> public List <PinInfo> getRelayPins(DataTable table) { List <PinInfo> rst = new List <PinInfo>(); for (int i = 0; i < table.Rows.Count; i++) { string mtrlNum = table.Rows[i][NamesManage.CptNumber].ToString().Trim(); var pin = rst.Find(p => p.MaterialNum == mtrlNum); if (pin == null) { PinInfo pinfo = new PinInfo(); pinfo.MaterialNum = mtrlNum; pinfo.Model = table.Rows[i][NamesManage.Model].ToString().Trim(); pinfo.Pin1 = table.Rows[i][NamesManage.CoilPo].ToString().Trim(); pinfo.Pin2 = table.Rows[i][NamesManage.CoilNe].ToString().Trim(); pin = pinfo; rst.Add(pinfo); } string nccom = table.Rows[i][NamesManage.NcCom].ToString().Trim(); string nc = table.Rows[i][NamesManage.Nc].ToString().Trim(); if (!string.IsNullOrEmpty(nccom) && !string.IsNullOrEmpty(nc)) { pin.NcPin.Add(nccom, nc); } string nocom = table.Rows[i][NamesManage.NoCom].ToString().Trim(); string no = table.Rows[i][NamesManage.No].ToString().Trim(); if (!string.IsNullOrEmpty(nocom) && !string.IsNullOrEmpty(no)) { pin.NoPin.Add(nocom, no); } } return(rst); }
protected void RenderAudio(PinInfo pinInfo, AMMediaType mediaType) { int hr; try { if (mediaType.subType == MediaSubType.PCM) { if (mediaType.formatType == FormatType.WaveEx) { _audioResamplerFilter = AddFilterByName(_graphBuilder, FilterCategory.LegacyAmFilterCategory, "Elecard Audio Resampler"); _audioRenderFilter = AddFilterByName(_graphBuilder, FilterCategory.AudioRendererCategory, "Default DirectSound Device"); ConnectFilters(_graphBuilder, _netSrc, pinInfo.name, _audioResamplerFilter, "Input", true); ConnectFilters(_graphBuilder, _audioResamplerFilter, "Output", _audioRenderFilter, "Audio Input pin (rendered)", true); } } else if (mediaType.subType == new Guid("000000FF-0000-0010-8000-00AA00389B71")) // AAC Audio { _audioDecoderFilter = AddFilterByName(_graphBuilder, FilterCategory.LegacyAmFilterCategory, "LEAD AAC Decoder"); _audioRenderFilter = AddFilterByName(_graphBuilder, FilterCategory.AudioRendererCategory, "Default DirectSound Device"); ConnectFilters(_graphBuilder, _netSrc, pinInfo.name, _audioDecoderFilter, "XForm In", true); ConnectFilters(_graphBuilder, _audioDecoderFilter, "XForm Out", _audioRenderFilter, "Audio Input pin (rendered)", true); } } finally { } }
public void BeginEdit() { if (this.backup == null) { this.backup = this.MemberwiseClone() as PinInfo; } }
/// <summary> /// Retrieves what pin is connected to. /// </summary> /// <returns>Returns <see cref="BaseFilter"/> instance if pin is connected; elsewhere returns <b>null</b>.</returns> public BaseFilter ConnectedToFilter() { var other = ConnectedTo(); if (other != null) { var info = new PinInfo(); BaseFilter result = null; try { if (other.Object.QueryPinInfo(out info) == 0) { result = new BaseFilter(info.filter); } } finally { DsUtils.FreePinInfo(info); } return(result); } return(null); }
/// <summary> /// Beschreibt diesen Endpunkt. /// </summary> /// <param name="info">Die gewünschte Beschreibung.</param> public void QueryPinInfo(ref PinInfo info) { // Fill the rest info.Direction = PinDirection.Input; info.Filter = m_Filter.AddRef(); info.Name = QueryId(); }
public int QueryPinInfo(out PinInfo pInfo) { pInfo = new PinInfo(); pInfo.filter = (IBaseFilter)_Filter; pInfo.dir = _Direction; pInfo.name = _Name; return((int)HRESULT.S_OK); }
/// <summary> /// Free the nested interfaces within a PinInfo structure. /// </summary> public static void FreePinInfo(PinInfo pinInfo) { if (pinInfo.filter != null) { Marshal.ReleaseComObject(pinInfo.filter); pinInfo.filter = null; } }
public Pin(PinInfo info) { Position = info.Position; AreaId = info.AreaId; CreatorId = info.CreatorId; Type = info.Type; Name = info.Name; }
int IPin.QueryPinInfo(out PinInfo pInfo) { pInfo.dir = PinDirection.Output; pInfo.filter = filter; pInfo.name = name; return(S_OK); }
protected void removeDownstream(IBaseFilter filter, bool removeFirstFilter) { // Get a pin enumerator off the filter IEnumPins pinEnum; int hr = filter.EnumPins(out pinEnum); pinEnum.Reset(); if ((hr == 0) && (pinEnum != null)) { // Loop through each pin IPin[] pins = new IPin[1]; int f; do { // Get the next pin hr = pinEnum.Next(1, pins, out f); if ((hr == 0) && (pins[0] != null)) { // Get the pin it is connected to IPin pinTo = null; pins[0].ConnectedTo(out pinTo); if (pinTo != null) { // Is this an input pin? PinInfo info = new PinInfo(); hr = pinTo.QueryPinInfo(out info); if ((hr == 0) && (info.dir == (PinDirection.Input))) { // Recurse down this branch removeDownstream(info.filter, true); // Disconnect graphBuilder.Disconnect(pinTo); graphBuilder.Disconnect(pins[0]); // Remove this filter // but don't remove the video or audio compressors if ((info.filter != videoCompressorFilter) && (info.filter != audioCompressorFilter)) { graphBuilder.RemoveFilter(info.filter); } } Marshal.ReleaseComObject(info.filter); Marshal.ReleaseComObject(pinTo); } Marshal.ReleaseComObject(pins[0]); } }while (hr == 0); Marshal.ReleaseComObject(pinEnum); pinEnum = null; } }
private void Randomize(PinInfo pinTumbler) { float x = Random.Range(minWidth, maxWidth); while (tooClose(x)) { x = Random.Range(minWidth, maxWidth); } pinTumbler.Width = x; }
private static IPin t最初の入力ピンを探して返す(IBaseFilter baseFilter) { int hr = 0; IPin firstInputPin = null; IEnumPins ePins; hr = baseFilter.EnumPins(out ePins); DsError.ThrowExceptionForHR(hr); try { var pins = new IPin[1]; while (ePins.Next(1, pins, IntPtr.Zero) == CWin32.S_OK) { PinInfo pinfo = new PinInfo() { filter = null }; try { hr = pins[0].QueryPinInfo(out pinfo); DsError.ThrowExceptionForHR(hr); if (pinfo.dir == PinDirection.Input) { firstInputPin = pins[0]; break; } } finally { if (pinfo.filter != null) { CCommon.tReleaseComObject(ref pinfo.filter); } DsUtils.FreePinInfo(pinfo); if (firstInputPin == null) { CCommon.tReleaseComObject(ref pins[0]); } } } } finally { CCommon.tReleaseComObject(ref ePins); } return(firstInputPin); }
private IPin GetPin(IBaseFilter filter, string name) { filter.EnumPins(out IEnumPins enumPins); IntPtr ptr = IntPtr.Zero; IPin[] pin = new IPin[1]; while (true) { enumPins.Next(1, pin, ptr); var pinInfo = new PinInfo(); pin[0].QueryPinInfo(out pinInfo); if (pinInfo.name == name) { return(pin[0]); } } }
protected void removeDownstream(IBaseFilter filter, bool removeFirstFilter) { IEnumPins pins; int num = filter.EnumPins(out pins); pins.Reset(); if ((num == 0) && (pins != null)) { IPin[] ppPins = new IPin[1]; do { int num2; num = pins.Next(1, ppPins, out num2); if ((num == 0) && (ppPins[0] != null)) { IPin ppPin = null; ppPins[0].ConnectedTo(out ppPin); if (ppPin != null) { PinInfo pInfo = new PinInfo(); num = ppPin.QueryPinInfo(out pInfo); if ((num == 0) && (pInfo.dir == PinDirection.Input)) { this.removeDownstream(pInfo.filter, true); this.graphBuilder.Disconnect(ppPin); this.graphBuilder.Disconnect(ppPins[0]); if ((pInfo.filter != this.videoCompressorFilter) && (pInfo.filter != this.audioCompressorFilter)) { this.graphBuilder.RemoveFilter(pInfo.filter); } } Marshal.ReleaseComObject(pInfo.filter); Marshal.ReleaseComObject(ppPin); } Marshal.ReleaseComObject(ppPins[0]); } }while (num == 0); Marshal.ReleaseComObject(pins); pins = null; } }
// Token: 0x06000193 RID: 403 RVA: 0x00011B14 File Offset: 0x0000FD14 protected void removeDownstream(IBaseFilter filter, bool removeFirstFilter) { IEnumPins enumPins; int num = filter.EnumPins(out enumPins); enumPins.Reset(); if (num == 0 && enumPins != null) { IPin[] array = new IPin[1]; do { int num2; num = enumPins.Next(1, array, out num2); if (num == 0 && array[0] != null) { IPin pin = null; array[0].ConnectedTo(out pin); if (pin != null) { PinInfo pinInfo = default(PinInfo); num = pin.QueryPinInfo(out pinInfo); if (num == 0 && pinInfo.dir == PinDirection.Input) { this.removeDownstream(pinInfo.filter, true); this.graphBuilder.Disconnect(pin); this.graphBuilder.Disconnect(array[0]); if (pinInfo.filter == this.videoCompressorFilter && pinInfo.filter == this.audioCompressorFilter) { this.graphBuilder.RemoveFilter(pinInfo.filter); } } Marshal.ReleaseComObject(pinInfo.filter); Marshal.ReleaseComObject(pin); } Marshal.ReleaseComObject(array[0]); } }while (num == 0); Marshal.ReleaseComObject(enumPins); enumPins = null; } }
private string getName(IPin pin) { string str = "Unknown pin"; PinInfo pInfo = new PinInfo(); int errorCode = pin.QueryPinInfo(out pInfo); if (errorCode == 0) { str = pInfo.name ?? ""; } else { Marshal.ThrowExceptionForHR(errorCode); } if (pInfo.filter != null) { Marshal.ReleaseComObject(pInfo.filter); } pInfo.filter = null; return(str); }
private IPin GetPin(IBaseFilter filter, Func <PinInfo, bool> pred) { IEnumPins enumPins; var retVal = filter.EnumPins(out enumPins); IPin[] pins = new IPin[1]; int fetched; while ((retVal = enumPins.Next(1, pins, out fetched)) == 0) { if (fetched > 0) { PinInfo info = new PinInfo(); retVal = pins[0].QueryPinInfo(info); if (retVal == 0 && pred(info)) { return(pins[0]); } } } return(null); }
private void OnMapElementClick(MapControl sender, MapElementClickEventArgs args) { CloseWindows(); var element = args.MapElements.FirstOrDefault(el => el is MapIcon icon && icon.Title != "I"); if (element == null) { return; } var pinInfo = new PinInfo(element as MapIcon); pinInfo.Clicked += OnActionSelected; var position = new BasicGeoposition { Latitude = args.Location.Position.Latitude, Longitude = args.Location.Position.Longitude }; AddWindow(pinInfo, position); _iconClicked = true; }
public void BeginEdit() { if (this.backup == null) this.backup = this.MemberwiseClone() as PinInfo; }
public void EndEdit() { this.backup = null; }
public void CancelEdit() { this.Name = this.backup.Name; this.Type = this.backup.Type; this.backup = null; }
/// <summary> /// Removes all filters downstream from a filter from the graph. /// This is called only by derenderGraph() to remove everything /// from the graph except the devices and compressors. The parameter /// "removeFirstFilter" is used to keep a compressor (that should /// be immediately downstream of the device) if one is begin used. /// </summary> protected void removeDownstream( IBaseFilter filter, bool removeFirstFilter ) { // Get a pin enumerator off the filter IEnumPins pinEnum; int hr = filter.EnumPins( out pinEnum ); pinEnum.Reset(); if( (hr == 0) && (pinEnum != null) ) { // Loop through each pin IPin[] pins = new IPin[1]; #if VS2003 || DSHOWNET int f; #else IntPtr f = IntPtr.Zero; #endif do { // Get the next pin #if VS2003 || DSHOWNET hr = pinEnum.Next( 1, pins, out f ); #else hr = pinEnum.Next(1, pins, f); #endif if( (hr == 0) && (pins[0] != null) ) { // Get the pin it is connected to IPin pinTo = null; pins[0].ConnectedTo( out pinTo ); if ( pinTo != null ) { // Is this an input pin? PinInfo info = new PinInfo(); hr = pinTo.QueryPinInfo( out info ); if( (hr == 0) && (info.dir == (PinDirection.Input)) ) { // Recurse down this branch removeDownstream( info.filter, true ); // Disconnect graphBuilder.Disconnect( pinTo ); graphBuilder.Disconnect( pins[0] ); // Remove this filter // but don't remove the video or audio compressors if ( ( info.filter != videoCompressorFilter ) && ( info.filter != audioCompressorFilter ) ) graphBuilder.RemoveFilter( info.filter ); } Marshal.ReleaseComObject( info.filter ); Marshal.ReleaseComObject( pinTo ); } Marshal.ReleaseComObject( pins[0] ); } } while( hr == 0 ); Marshal.ReleaseComObject( pinEnum ); pinEnum = null; } }
/// <summary> /// Erzeugt einen Graphen und startet ihn. /// </summary> /// <param name="location">Der Ursprung, über den die Quellgruppe empfangen wird.</param> /// <param name="group">Die gewünschte Quellgruppe.</param> /// <exception cref="ArgumentException">Es wurden nicht alle Parameter gesetzt.</exception> public void Create(GroupLocation location, SourceGroup group) { // Get rid of it Destroy(); // Create new graph builder var graph = Activator.CreateInstance(Type.GetTypeFromCLSID(BDAEnvironment.GraphBuilderClassIdentifier)); try { // Convert interface m_Graph = (IMediaFilter)graph; } catch { // Cleanup BDAEnvironment.Release(ref graph); // Forward throw; } // See if we should register the graph m_ExternalRegistration = BDASettings.RegisterBDAGRaph(m_Graph, false); // Attach to alternate interface var builder = (IGraphBuilder)m_Graph; // Check log var logFile = BDASettings.BDALogPath; if (logFile != null) { // Open path m_LogFile = new FileStream(logFile.FullName, FileMode.Create, FileAccess.Write, FileShare.Read); // Enable logging on graph builder builder.SetLogFile(m_LogFile.SafeFileHandle); } // Start with network provider NetworkProvider = AddFilter("Network Provider", BDAEnvironment.GetNetworkProviderMoniker(DVBType)); // Initialize provider Tune(location, group); // Always create the tuner if (TunerInformation != null) { TunerFilter = AddFilter("Tuner", TunerInformation); } else { throw new ArgumentException(Properties.Resources.Exception_MissingTuner, "Tuner"); } // Optionally create capture if (CaptureInformation != null) { CaptureFilter = AddFilter("Capture", CaptureInformation); } // Add additional filter foreach (var additionalFilter in AdditionalFilterInformations) { if (additionalFilter == null) { throw new ArgumentNullException("AdditionalFilters"); } else { AdditionalFilters.Add(AddFilter(additionalFilter.DisplayName, additionalFilter)); } } // Connect network provider to streaming instance Connect(NetworkProvider, CaptureFilter ?? TunerFilter); // Initialize provider Tune(location, group); // Create the primary filter and add it AddFilter("TS", TransportStreamAnalyser = new InputFilter()); // Connect device output for analysis Connect(CaptureFilter ?? TunerFilter, TransportStreamAnalyser); // Create the demultiplexer - needed to keep the infrastructure alive using (var demux = AddFilter("TIF", BDAEnvironment.MicrosoftDemultiplexerMoniker)) { // Connect to the dedicated pin of our analyser TransportStreamAnalyser.DataManager.TIFConnector.Connect(demux, BDAEnvironment.TransportStreamMediaType1); // Pins to remove var remove = new List <string>(); // Prepare the demultiplexer pins demux.InspectAllPins(pin => { // See if this is the SI pin bool isSectionPin = false; pin.InspectAllMediaTypes(type => { // Check major if (!type.MajorType.Equals(BDAEnvironment.DataFormatTypeSections)) { return(true); } // Check minor isSectionPin = type.SubType.Equals(BDAEnvironment.DataFormatSubtypeSI); // Report return(!isSectionPin); }); // Check the mode if (isSectionPin) { // Connect using (var comPin = ComIdentity.Create(pin)) builder.Render(comPin.Interface); // Load connection data IntPtr tifIn = IntPtr.Zero; if (pin.ConnectedTo(ref tifIn) < 0) { throw new InvalidOperationException(Properties.Resources.Exception_TIF); } // Reconstruct var tifPin = Marshal.GetObjectForIUnknown(tifIn); try { // Request pin context var info = new PinInfo(); ((IPin)tifPin).QueryPinInfo(ref info); // Request from pin m_TIF = info.GetAndDisposeFilter(); } finally { // Cleanup BDAEnvironment.Release(ref tifPin); } } else if (pin.QueryDirection() == PinDirection.Output) { // Prepare to kill remove.Add(pin.QueryId()); } }); // Prepare to remove all unconnected pins if (remove.Count > 0) { using (var demuxInstance = demux.MarshalToManaged()) { // Change type var mpeg2 = (IMpeg2Demultiplexer)demuxInstance.Object; // Remove all foreach (var id in remove) { mpeg2.DeleteOutputPin(id); } } } } // Install the PMT watchdog TransportStreamAnalyser.DataManager.TSParser.PMTFound += ProcessPMT; }
// --------------------------- Private methods ---------------------------- /// <summary> Retrieve the friendly name of a connectorType. </summary> private string getName( IPin pin ) { string s = "Unknown pin"; PinInfo pinInfo = new PinInfo(); // Direction matches, so add pin name to listbox int hr = pin.QueryPinInfo( out pinInfo); if ( hr == 0 ) { s = pinInfo.name + ""; } else Marshal.ThrowExceptionForHR( hr ); // The pininfo structure contains a reference to an IBaseFilter, // so you must release its reference to prevent resource a leak. if ( pinInfo.filter != null ) Marshal.ReleaseComObject( pinInfo.filter ); pinInfo.filter = null; return( s ); }
protected override CommandResult <string> OnExecute(object commandParameter) { var result = new CommandResult <string>(); var param = commandParameter as CreatePinParameter; using (CoreContext context = new CoreContext()) { //使用zlopenid,因为此时没有登录 var ZlOpenId = context.MemberInfo.Where(m => m.AccountId == param.MemberAccount).Select(m => m.ZlOpenId).FirstOrDefault(); var pinCofig = context.PinConfig.Where(p => p.PingId == param.PinId && DateTime.Now >= p.StartDate && p.EndDate >= DateTime.Now).FirstOrDefault(); if (pinCofig == null) { result.ErrorCode = -1; result.ErrorMessage = "找不到拼团活动"; return(result); } var configArry = JsonConvert.DeserializeObject <JArray>(pinCofig.Config); string config = ""; foreach (var item in configArry) { if (item["ProductSkuNo"].Value <string>() == param.ProductSkuNo) { config = JsonConvert.SerializeObject(item); break; } } using (var tran = context.Database.BeginTransaction()) { PinInfo pinInfo = null; int pinCount = 0; if (param.MainId > 0) { pinInfo = context.PinInfo.Where(p => p.Recid == param.MainId && p.PingId == param.PinId && p.EndDate >= DateTime.Now).FirstOrDefault(); if (pinInfo != null && pinInfo.MemberAccount == param.MemberAccount) { result.ErrorCode = -1; result.ErrorMessage = "不能参与自己发起的团"; return(result); } pinCount = context.PinOrder.Where(p => p.MainId == param.MainId && p.Status == 1).Count(); if (pinCount == 0) { result.ErrorCode = -1; result.ErrorMessage = "参数错误"; return(result); } } if (pinInfo == null) { var endDate = DateTime.Now.AddDays(Convert.ToInt32(pinCofig.MaxDate)); if (DateTime.Now.ToString("yyyy-MM-dd") == Convert.ToDateTime(pinCofig.EndDate).ToString("yyyy-MM-dd")) { endDate = Convert.ToDateTime(pinCofig.EndDate); } pinInfo = new PinInfo() { MaxDate = pinCofig.MaxDate, PingId = pinCofig.PingId, Status = 1, Config = config, CreateDate = DateTime.Now, EndDate = endDate, MemberAccount = param.MemberAccount, MinCount = pinCofig.MinCount }; context.PinInfo.Add(pinInfo); context.SaveChanges(); } if (pinInfo.Status == 9) { result.ErrorCode = -1; result.ErrorMessage = "拼团失败,该团已满人"; return(result); } if (pinInfo.Status == -1) { result.ErrorCode = -1; result.ErrorMessage = "拼团失败,该团已失效"; return(result); } if (pinInfo.EndDate < DateTime.Now) { result.ErrorCode = -1; result.ErrorMessage = "拼团失败,该团已失效"; return(result); } try { var pinOrder = new PinOrder() { Status = 0, ProductConfig = pinInfo.Config, CreateDate = DateTime.Now, MainId = pinInfo.Recid, MemberAccount = param.MemberAccount }; context.PinOrder.Add(pinOrder); //创建商城订单 JObject productconfig = JsonConvert.DeserializeObject <JObject>(pinInfo.Config); var res = new CreateShopOrderCommand().Execute(new CreateShopOrderParameter() { ZlOpenId = ZlOpenId, ProductSkuNo = productconfig["ProductSkuNo"].Value <string>(), AddressId = param.AddressId, Id = pinCofig.PingId }); if (!string.IsNullOrEmpty(res.Data)) { pinOrder.OrderNo = res.Data; } else { result.ErrorCode = -1; result.ErrorMessage = res.ErrorMessage; return(result); } context.SaveChanges(); result.Data = pinOrder.OrderNo; tran.Commit(); } catch (Exception ex) { tran.Rollback(); result = ErrorResult <string> .ParameterError; result.ErrorMessage = ex.Message; return(result); } //未成团锁定商城订单状态 var confirmRes = ZlanAPICaller.ExecuteSys("Sys.ChangeOrderConfirm", new { OrderNo = new List <string> { result.Data }, Type = "AWAIT" }); if (!confirmRes["ErrorCode"].Value <string>().Equals("0000")) { LogUtil.Log("CreatePinOrder", result.Data, confirmRes["ErrorMsg"].Value <string>()); result.ErrorCode = -1; result.ErrorMessage = "锁定商城订单状态失败"; return(result); } } } return(result); }
// this function should be called AFTER the video stream has been rendered // but before rendering the audio streams // however, it will try to find the splitter even if video wasn't rendered private bool FindSplitter(IGraphBuilder pGraphBuilder) { if (_splitterFilter != null) { DsUtils.RemoveRedundantFilters(_sourceFilter, pGraphBuilder); return(true); } IEnumFilters pEnumFilters = null; IBaseFilter pFilter = null; int cFetched; bool bSplitterFound = false; int hr = pGraphBuilder.EnumFilters(out pEnumFilters); if (DsHlp.FAILED(hr)) { return(false); } IPin pPin; int nFilters = 0; bool bCanRelease; while ((pEnumFilters.Next(1, out pFilter, out cFetched) == DsHlp.S_OK)) { nFilters++; bCanRelease = true; pPin = DsUtils.GetPin(pFilter, PinDirection.Output, false, 0); if (pPin != null) { if (DsUtils.IsMediaTypeSupported(pPin, MediaType.Audio) == 0 || DsUtils.IsMediaTypeSupported(pPin, MediaType.Subtitle) == 0) { //this unconnected pin supports audio or subpicture type! bSplitterFound = true; bCanRelease = false; _splitterFilter = pFilter; } Marshal.ReleaseComObject(pPin); } //let's have a look at another filter if (bCanRelease) { Marshal.ReleaseComObject(pFilter); } if (bSplitterFound) { break; } } Marshal.ReleaseComObject(pEnumFilters); if (!bSplitterFound) { if (nFilters > 3) { pPin = DsUtils.GetPin(_sourceFilter, PinDirection.Output, true, 0); if (pPin != null) { IPin pInputPin; hr = pPin.ConnectedTo(out pInputPin); if (hr == DsHlp.S_OK) { PinInfo info = new PinInfo(); hr = pInputPin.QueryPinInfo(out info); if (hr == DsHlp.S_OK) { _splitterFilter = info.pFilter; bSplitterFound = true; } Marshal.ReleaseComObject(pInputPin); } Marshal.ReleaseComObject(pPin); } } else { _splitterFilter = _sourceFilter; bSplitterFound = true; } } StripSplitter(pGraphBuilder); return(bSplitterFound); }
private void UnRender(IPin pinOutOrigin) { int hr; //hr = pinOutOrigin.Disconnect(); IPin pinOutEnd = null; hr = pinOutOrigin.ConnectedTo(out pinOutEnd); if (pinOutEnd != null) { try { PinInfo pInfo = new PinInfo(); hr = pinOutEnd.QueryPinInfo(out pInfo); if (hr >= 0) { if (pInfo.filter != null) { try { IEnumPins ppEnum; hr = pInfo.filter.EnumPins(out ppEnum); if (hr >= 0) { try { // Walk the pins looking for a match IPin[] pPins = new IPin[1]; //22 int lFetched; //22 while ((ppEnum.Next(1, pPins, out lFetched) >= 0) && (lFetched == 1)) while (ppEnum.Next(1, pPins, IntPtr.Zero) >= 0) { try { // Read the direction PinDirection ppindir; hr = pPins[0].QueryDirection(out ppindir); if (hr >= 0) { // Is it the right direction? if (ppindir == PinDirection.Output) { if (pPins[0] != null) { UnRender(pPins[0]); } } } } finally { Marshal.ReleaseComObject(pPins[0]); } } } finally { Marshal.ReleaseComObject(ppEnum); } } hr = graphBuilder.RemoveFilter(pInfo.filter); } finally { Marshal.ReleaseComObject(pInfo.filter); } } } } finally { Marshal.ReleaseComObject(pinOutEnd); } } }