/// <summary>
        /// Meldet einen Datenstrom zum Empfang von Nutzdaten an.
        /// </summary>
        /// <param name="pid">Die Datenstromkennung.</param>
        /// <param name="video">Gesetzt, wenn es sich um ein Bildsignal handelt.</param>
        /// <param name="smallBuffer">Gesetzt, wenn kleine Zwischenspeicher verwendet werden sollen.</param>
        /// <param name="callback">Methode zur Aufnahme der Nutzdaten.</param>
        public void RegisterPipingFilter(ushort pid, bool video, bool smallBuffer, Action <byte[]> callback)
        {
            // Attach to hardware
            Open();

            // See if filter already exists
            if (m_Filters.ContainsKey(pid))
            {
                return;
            }

            // Create new
            m_Filters[pid] = new FilterToCode(pid, callback);
        }
        /// <summary>
        /// Beginnt mit dem Empfang eines Steuerdatenstroms.
        /// </summary>
        /// <param name="pid">Die Datenstromkennung.</param>
        /// <param name="callback">Der Verarbeitungsalgorithmus.</param>
        /// <param name="match">Die Vergleichsdaten.</param>
        /// <param name="mask">Die Auswahl der Vergleichsbits.</param>
        public void StartSectionFilter(ushort pid, Action <byte[]> callback, byte[] match, byte[] mask)
        {
            // Attach to hardware
            Open();

            // Stop if running
            StopFilter(pid);

            // Create new
            var filter = new FilterToCode(pid, callback);

            // Remember
            m_Filters[pid] = filter;

            // Start at once
            filter.Start(match, mask);
        }
        /// <summary>
        /// Beginnt mit dem Empfang eines Steuerdatenstroms.
        /// </summary>
        /// <param name="pid">Die Datenstromkennung.</param>
        /// <param name="callback">Der Verarbeitungsalgorithmus.</param>
        /// <param name="match">Die Vergleichsdaten.</param>
        /// <param name="mask">Die Auswahl der Vergleichsbits.</param>
        public void StartSectionFilter( ushort pid, Action<byte[]> callback, byte[] match, byte[] mask )
        {
            // Attach to hardware
            Open();

            // Stop if running
            StopFilter( pid );

            // Create new
            var filter = new FilterToCode( pid, callback );

            // Remember
            m_Filters[pid] = filter;

            // Start at once
            filter.Start( match, mask );
        }
        /// <summary>
        /// Meldet einen Datenstrom zum Empfang von Nutzdaten an.
        /// </summary>
        /// <param name="pid">Die Datenstromkennung.</param>
        /// <param name="video">Gesetzt, wenn es sich um ein Bildsignal handelt.</param>
        /// <param name="smallBuffer">Gesetzt, wenn kleine Zwischenspeicher verwendet werden sollen.</param>
        /// <param name="callback">Methode zur Aufnahme der Nutzdaten.</param>
        public void RegisterPipingFilter( ushort pid, bool video, bool smallBuffer, Action<byte[]> callback )
        {
            // Attach to hardware
            Open();

            // See if filter already exists
            if (m_Filters.ContainsKey( pid ))
                return;

            // Create new
            m_Filters[pid] = new FilterToCode( pid, callback );
        }