示例#1
0
            /// <summary>
            /// Create the indicated <see cref="DVBRawFilter"/> from
            /// <see cref="m_Filters"/>. If none exists a new one will
            /// be created and added to the <see cref="Hashtable"/>.
            /// </summary>
            public DVBRawFilter this[ushort uPID]
            {
                get
                {
                    // Synchronize
                    lock (m_Filters)
                    {
                        // Retrieve
                        DVBRawFilter pFilter;
                        if (!m_Filters.TryGetValue(uPID, out pFilter))
                        {
                            // Create
                            pFilter = new DVBRawFilter(uPID, m_Frontend);

                            // Remember
                            m_Filters[uPID] = pFilter;

                            // Report
                            ScanLog.WriteToScanLog("Adding Filter {0}", uPID);
                        }

                        // Report
                        return(pFilter);
                    }
                }
            }
示例#2
0
        /// <summary>
        /// Remove a filter from the map.
        /// </summary>
        /// <param name="pid">The identifier of the stream.</param>
        internal void RemoveFilter(ushort pid)
        {
            // Do it
            lock (m_Filters)
            {
                // See if it exists
                DVBRawFilter filter;
                if (!m_Filters.TryGetValue(pid, out filter))
                {
                    return;
                }

                // Process
                using (filter)
                    m_Filters.Remove(pid);

                // Report
                ScanLog.WriteToScanLog("Filter {0} removed", pid);
            }
        }
示例#3
0
        /// <summary>
        /// Calls <see cref="IDisposable.Dispose"/> on each entry in <see cref="m_Filters"/>
        /// followed by a <see cref="Hashtable.Clear"/>.
        /// </summary>
        public void StopFilters()
        {
            // Copy
            DVBRawFilter[] filters;

            // Synchronize
            lock (m_Filters)
            {
                // Copy over
                filters = m_Filters.Values.ToArray();

                // Reset
                m_Filters.Clear();

                // Report
                ScanLog.WriteToScanLog("All Filters removed");
            }

            // Process all filters
            foreach (var filter in filters)
            {
                filter.Dispose();
            }
        }