/// <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); } } }
/// <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); } }
/// <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(); } }