Ejemplo n.º 1
0
        /// <summary>
        /// Wendet eine Deaktivierung auf eine Auswahl von Teildatenströmen (PID) an.
        /// </summary>
        /// <param name="streams">Die aktuelle Auswahl.</param>
        /// <param name="disable">Der gewünschte Aspekt.</param>
        /// <param name="mode">Der aktuelle Korrekturkontext der zugehörigen Quelle.</param>
        /// <param name="needed">Die Anzahl der noch benötigten Verbraucher, die geeignet korrigiert wird.</param>
        /// <param name="report">Protokolliert die vorgenommene Veränderung.</param>
        /// <returns>Gesetzt, wenn eine Veränderung stattgefunden hat.</returns>
        public static bool ApplyDisable(this StreamSelection streams, StreamDisableSelector disable, StreamDisableMode mode, ref int needed, Action <string, int> report)
        {
            // Check mode first
            switch (mode)
            {
            case StreamDisableMode.Self:
            {
                // All supported
                switch (disable)
                {
                case StreamDisableSelector.AC3IfMP2ExistsSelf: return(streams.RemoveAC3AudioIfMP2Present(ref needed, report));

                case StreamDisableSelector.AlternateAC3Self: return(streams.RemoveAlternateAC3Audio(ref needed, report));

                case StreamDisableSelector.AlternateMP2Self: return(streams.RemoveAlternateMP2Audio(ref needed, report));

                case StreamDisableSelector.MP2IfAC3ExistsSelf: return(streams.RemoveMP2AudioIfAC3Present(ref needed, report));

                case StreamDisableSelector.SubTitlesSelf: return(streams.RemoveSubTitles(ref needed, report));

                case StreamDisableSelector.VideoTextSelf: return(streams.RemoveVideoText(ref needed, report));
                }

                // Done
                break;
            }

            case StreamDisableMode.Higher:
            {
                // All supported
                switch (disable)
                {
                case StreamDisableSelector.AC3IfMP2ExistsHigher: return(streams.RemoveAC3AudioIfMP2Present(ref needed, report));

                case StreamDisableSelector.AlternateAC3Higher: return(streams.RemoveAlternateAC3Audio(ref needed, report));

                case StreamDisableSelector.AlternateMP2Higher: return(streams.RemoveAlternateMP2Audio(ref needed, report));

                case StreamDisableSelector.MP2IfAC3ExistsHigher: return(streams.RemoveMP2AudioIfAC3Present(ref needed, report));

                case StreamDisableSelector.SubTitlesHigher: return(streams.RemoveSubTitles(ref needed, report));

                case StreamDisableSelector.VideoTextHigher: return(streams.RemoveVideoText(ref needed, report));
                }

                // Done
                break;
            }

            case StreamDisableMode.Lower:
            {
                // All supported
                switch (disable)
                {
                case StreamDisableSelector.AC3IfMP2ExistsLower: return(streams.RemoveAC3AudioIfMP2Present(ref needed, report));

                case StreamDisableSelector.AlternateAC3Lower: return(streams.RemoveAlternateAC3Audio(ref needed, report));

                case StreamDisableSelector.AlternateMP2Lower: return(streams.RemoveAlternateMP2Audio(ref needed, report));

                case StreamDisableSelector.MP2IfAC3ExistsLower: return(streams.RemoveMP2AudioIfAC3Present(ref needed, report));

                case StreamDisableSelector.SubTitlesLower: return(streams.RemoveSubTitles(ref needed, report));

                case StreamDisableSelector.VideoTextLower: return(streams.RemoveVideoText(ref needed, report));
                }

                // Done
                break;
            }
            }

            // None found
            return(false);
        }