예제 #1
0
        /// <summary>
        /// The get channel count.
        /// </summary>
        /// <param name="mixdown">
        /// The mixdown.
        /// </param>
        /// <returns>
        /// The System.Int32.
        /// </returns>
        private int GetDiscreteChannelCount(Mixdown mixdown)
        {
            switch (mixdown)
            {
            case Mixdown.Five_2_LFE:
            case Mixdown.SevenPoint1Channels:
                return(8);

            case Mixdown.SixPoint1Channels:
                return(7);

            case Mixdown.FivePoint1Channels:
                return(6);

            case Mixdown.Mono:
            case Mixdown.LeftOnly:
            case Mixdown.RightOnly:
                return(1);

            case Mixdown.None:
                return(0);

            default:
                return(2);
            }
        }
예제 #2
0
        /// <summary>
        /// Convert a Mixdown object to HandBrakes native mixdown constant.
        /// </summary>
        /// <param name="mixdown">
        /// The mixdown.
        /// </param>
        /// <returns>
        /// NativeContstant that represents the mixdown.
        /// </returns>
        /// <exception cref="ArgumentException">
        /// Thrown for an invalid mixodown.
        /// </exception>
        public static int MixdownToNative(Mixdown mixdown)
        {
            if (mixdown == Mixdown.Auto)
            {
                throw new ArgumentException("Cannot convert Auto to native.");
            }

            switch (mixdown)
            {
            case Mixdown.None:
                return(NativeConstants.HB_AMIXDOWN_NONE);

            case Mixdown.DolbyProLogicII:
                return(NativeConstants.HB_AMIXDOWN_DOLBYPLII);

            case Mixdown.DolbySurround:
                return(NativeConstants.HB_AMIXDOWN_DOLBY);

            case Mixdown.Mono:
                return(NativeConstants.HB_AMIXDOWN_MONO);

            case Mixdown.SixChannelDiscrete:
                return(NativeConstants.HB_AMIXDOWN_6CH);

            case Mixdown.Stereo:
                return(NativeConstants.HB_AMIXDOWN_STEREO);
            }

            return(0);
        }
예제 #3
0
        /// <summary>
        /// Return the CLI Mixdown name
        /// </summary>
        /// <param name="selectedAudio">GUI mixdown name</param>
        /// <returns>CLI mixdown name</returns>
        public static string GetCliMixDown(Mixdown selectedAudio)
        {
            switch (selectedAudio)
            {
            case Mixdown.Auto:
            case Mixdown.None:
                return("auto");

            case Mixdown.Mono:
                return("mono");

            case Mixdown.Stereo:
                return("stereo");

            case Mixdown.DolbySurround:
                return("dpl1");

            case Mixdown.DolbyProLogicII:
                return("dpl2");

            case Mixdown.SixChannelDiscrete:
                return("6ch");

            default:
                return("auto");
            }
        }
예제 #4
0
 /// <summary>
 /// Initializes a new instance of the <see cref="AudioTrack"/> class.
 /// Copy Constructor
 /// </summary>
 /// <param name="track">
 /// The track.
 /// </param>
 public AudioTrack(AudioTrack track)
 {
     this.bitrate      = track.Bitrate;
     this.drc          = track.DRC;
     this.encoder      = track.Encoder;
     this.gain         = track.Gain;
     this.mixDown      = track.MixDown;
     this.sampleRate   = track.SampleRate;
     this.scannedTrack = track.ScannedTrack ?? new Audio();
 }
예제 #5
0
        /// <summary>
        /// Builds an argument string from the settings
        /// </summary>
        /// <returns>A string to be used as argument to Handbrake CLI</returns>
        public string Build()
        {
            var sb = new StringBuilder();

            sb.Append($"--format {Format} ");
            if (MaxHeight > 0)
            {
                sb.Append($"--maxHeight {MaxHeight} ");
            }
            if (MaxWidth > 0)
            {
                sb.Append($"--maxWidth {MaxWidth} ");
            }
            if (WebOptimize)
            {
                sb.Append("--optimize ");
            }

            sb.Append($"--modulus {Modulus} ");
            sb.Append($"--{Anamorphic.Formatted()} ");
            sb.Append($"--encoder {Encoder} ");
            sb.Append($"--quality {VideoQuality} ");
            sb.Append($"--{FrameRateSetting} ");
            sb.Append($"--rate {FrameRate} ");
            sb.Append($"--aencoder {AudioEncoder.Formatted()} ");
            if (AudioEncoder == AudioEncoder.copy)
            {
                sb.Append($"--audio-copy-mask {AudioCopyMask.Formatted()} ");
            }
            if (AudioEncoder.ToString().StartsWith("copy"))
            {
                sb.Append($"--audio-fallback {AudioEncoderFallback.Formatted()} ");
            }
            sb.Append($"--mixdown {Mixdown.Formatted()} ");
            sb.Append($"--arate {AudioSampleRate.Formatted()} ");
            sb.Append($"--ab {AudioBitrate} ");
            sb.Append($"--{AudioTracks.Formatted()} ");
            sb.Append($"--gain {AudioGain} ");
            sb.Append($"--subtitle none ");
            if (TwoPass)
            {
                sb.Append("--two-pass ");
                if (TurboTwoPass && (Encoder == Encoder.x264 || Encoder == Encoder.x265))
                {
                    sb.Append("--turbo ");
                }
            }
            sb.Append($"--encoder-level {EncoderLevel.Formatted()} ");
            sb.Append("--verbose 0 ");
            return(sb.ToString());
        }
예제 #6
0
        /// <summary>
        /// The get low freq channel count.
        /// </summary>
        /// <param name="mixdown">
        /// The mixdown.
        /// </param>
        /// <returns>
        /// The System.Int32.
        /// </returns>
        private int GetLowFreqChannelCount(Mixdown mixdown)
        {
            switch (mixdown)
            {
            case Mixdown.FivePoint1Channels:
            case Mixdown.SixPoint1Channels:
            case Mixdown.SevenPoint1Channels:
            case Mixdown.Five_2_LFE:
                return(1);

            default:
                return(0);
            }
        }
예제 #7
0
        /// <summary>
        /// Gets the bitrate limits for the given audio codec, sample rate and mixdown.
        /// </summary>
        /// <param name="encoder">The audio encoder used.</param>
        /// <param name="sampleRate">The sample rate used (Hz).</param>
        /// <param name="mixdown">The mixdown used.</param>
        /// <returns>Limits on the audio bitrate for the given settings.</returns>
        public static Limits GetBitrateLimits(AudioEncoder encoder, int sampleRate, Mixdown mixdown)
        {
            if (mixdown == Mixdown.Auto)
            {
                throw new ArgumentException("Mixdown cannot be Auto.");
            }

            int low  = 0;
            int high = 0;

            HBFunctions.hb_get_audio_bitrate_limits(Converters.AudioEncoderToNative(encoder), sampleRate, Converters.MixdownToNative(mixdown), ref low, ref high);

            return(new Limits {
                Low = low, High = high
            });
        }
예제 #8
0
        /// <summary>
        /// Initializes a new instance of the <see cref="AudioTrack"/> class.
        /// Copy Constructor
        /// </summary>
        /// <param name="track">
        /// The track.
        /// </param>
        /// <param name="setScannedTrack">
        /// The set Scanned Track.
        /// </param>
        public AudioTrack(AudioTrack track, bool setScannedTrack)
        {
            this.bitrate = track.Bitrate;
            this.drc = track.DRC;
            this.encoder = track.Encoder;
            this.gain = track.Gain;
            this.mixDown = track.MixDown;
            this.sampleRate = track.SampleRate;
            if (setScannedTrack)
            {
                this.scannedTrack = track.ScannedTrack ?? new Audio();
            }
            this.TrackName = track.TrackName;
            this.Quality = track.Quality;

            // Setup Backing Properties
            this.encoderRateType = track.EncoderRateType;
            this.SetupLimits();
        }
예제 #9
0
        /// <summary>
        /// Initializes a new instance of the <see cref="AudioTrack"/> class.
        /// Copy Constructor
        /// </summary>
        /// <param name="track">
        /// The track.
        /// </param>
        /// <param name="setScannedTrack">
        /// The set Scanned Track.
        /// </param>
        public AudioTrack(AudioTrack track, bool setScannedTrack)
        {
            this.bitrate    = track.Bitrate;
            this.drc        = track.DRC;
            this.encoder    = track.Encoder;
            this.gain       = track.Gain;
            this.mixDown    = track.MixDown;
            this.sampleRate = track.SampleRate;
            if (setScannedTrack)
            {
                this.scannedTrack = track.ScannedTrack ?? new Audio();
            }
            this.TrackName = track.TrackName;
            this.Quality   = track.Quality;

            // Setup Backing Properties
            this.encoderRateType = track.EncoderRateType;
            this.SetupLimits();
        }
예제 #10
0
        /// <summary>
        /// Return the CLI Mixdown name
        /// </summary>
        /// <param name="selectedAudio">GUI mixdown name</param>
        /// <returns>CLI mixdown name</returns>
        public static string GetCliMixDown(Mixdown selectedAudio)
        {
            switch (selectedAudio)
            {
            case Mixdown.Auto:
            case Mixdown.None:
                return("auto");

            case Mixdown.Mono:
                return("mono");

            case Mixdown.LeftOnly:
                return("left_only");

            case Mixdown.RightOnly:
                return("right_only");

            case Mixdown.Stereo:
                return("stereo");

            case Mixdown.DolbySurround:
                return("dpl1");

            case Mixdown.DolbyProLogicII:
                return("dpl2");

            case Mixdown.FivePoint1Channels:
                return("5point1");

            case Mixdown.SixPoint1Channels:
                return("6point1");

            case Mixdown.SevenPoint1Channels:
                return("7point1");

            case Mixdown.Five_2_LFE:
                return("5_2_lfe");

            default:
                return("auto");
            }
        }
예제 #11
0
        public static int MixdownToNative(Mixdown mixdown)
        {
            if (mixdown == Mixdown.Auto)
            {
                throw new ArgumentException("Cannot convert Auto to native.");
            }

            switch (mixdown)
            {
                case Mixdown.DolbyProLogicII:
                    return NativeConstants.HB_AMIXDOWN_DOLBYPLII;
                case Mixdown.DolbySurround:
                    return NativeConstants.HB_AMIXDOWN_DOLBY;
                case Mixdown.Mono:
                    return NativeConstants.HB_AMIXDOWN_MONO;
                case Mixdown.SixChannelDiscrete:
                    return NativeConstants.HB_AMIXDOWN_6CH;
                case Mixdown.Stereo:
                    return NativeConstants.HB_AMIXDOWN_STEREO;
            }

            return 0;
        }
예제 #12
0
 public static string DisplayMixdown(Mixdown mixdown)
 {
     return(mixdownConverter.Convert(mixdown));
 }
예제 #13
0
        /// <summary>
        /// Gets the bitrate limits for the given audio codec, sample rate and mixdown.
        /// </summary>
        /// <param name="encoder">The audio encoder used.</param>
        /// <param name="sampleRate">The sample rate used (Hz).</param>
        /// <param name="mixdown">The mixdown used.</param>
        /// <returns>Limits on the audio bitrate for the given settings.</returns>
        public static Limits GetBitrateLimits(AudioEncoder encoder, int sampleRate, Mixdown mixdown)
        {
            if (mixdown == Mixdown.Auto)
            {
                throw new ArgumentException("Mixdown cannot be Auto.");
            }

            int low = 0;
            int high = 0;

            HBFunctions.hb_get_audio_bitrate_limits(Converters.AudioEncoderToNative(encoder), sampleRate, Converters.MixdownToNative(mixdown), ref low, ref high);

            return new Limits { Low = low, High = high };
        }
예제 #14
0
 /// <summary>
 /// Sanitizes a mixdown given the output codec and input channel layout.
 /// </summary>
 /// <param name="mixdown">The desired mixdown.</param>
 /// <param name="encoder">The output encoder to be used.</param>
 /// <param name="layout">The input channel layout.</param>
 /// <returns>A sanitized mixdown value.</returns>
 public static Mixdown SanitizeMixdown(Mixdown mixdown, AudioEncoder encoder, int layout)
 {
     int sanitizedMixdown = HBFunctions.hb_get_best_mixdown(Converters.AudioEncoderToNative(encoder), layout, Converters.MixdownToNative(mixdown));
     return Converters.NativeToMixdown(sanitizedMixdown);
 }
예제 #15
0
 /// <summary>
 /// Sanitizes an audio bitrate given the output codec, sample rate and mixdown.
 /// </summary>
 /// <param name="audioBitrate">The desired audio bitrate.</param>
 /// <param name="encoder">The output encoder to be used.</param>
 /// <param name="sampleRate">The output sample rate to be used.</param>
 /// <param name="mixdown">The mixdown to be used.</param>
 /// <returns>A sanitized audio bitrate.</returns>
 public static int SanitizeAudioBitrate(int audioBitrate, AudioEncoder encoder, int sampleRate, Mixdown mixdown)
 {
     return HBFunctions.hb_get_best_audio_bitrate(Converters.AudioEncoderToNative(encoder), audioBitrate, sampleRate, Converters.MixdownToNative(mixdown));
 }
예제 #16
0
 /// <summary>
 /// The get low freq channel count.
 /// </summary>
 /// <param name="mixdown">
 /// The mixdown.
 /// </param>
 /// <returns>
 /// The System.Int32.
 /// </returns>
 private int GetLowFreqChannelCount(Mixdown mixdown)
 {
     switch (mixdown)
     {
         case Mixdown.FivePoint1Channels:
         case Mixdown.SixPoint1Channels:
         case Mixdown.SevenPoint1Channels:
         case Mixdown.Five_2_LFE:
             return 1;
         default:
             return 0;
     }
 }
예제 #17
0
 /// <summary>
 /// Get Appropiate Bitrates for the selected encoder and mixdown.
 /// </summary>
 /// <param name="encoder">
 /// The encoder.
 /// </param>
 /// <param name="mixdown">
 /// The mixdown.
 /// </param>
 /// <returns>
 /// A List of valid audio bitrates
 /// </returns>
 private IEnumerable<int> GetAppropiateBitrates(AudioEncoder encoder, Mixdown mixdown)
 {
     return new ObservableCollection<int> { 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384, 448, 640, 768 };
 }
예제 #18
0
        /// <summary>
        /// Sanitizes a mixdown given the output codec and input channel layout.
        /// </summary>
        /// <param name="mixdown">The desired mixdown.</param>
        /// <param name="encoder">The output encoder to be used.</param>
        /// <param name="layout">The input channel layout.</param>
        /// <returns>A sanitized mixdown value.</returns>
        public static Mixdown SanitizeMixdown(Mixdown mixdown, AudioEncoder encoder, int layout)
        {
            int sanitizedMixdown = HBFunctions.hb_get_best_mixdown(Converters.AudioEncoderToNative(encoder), layout, Converters.MixdownToNative(mixdown));

            return(Converters.NativeToMixdown(sanitizedMixdown));
        }
예제 #19
0
 /// <summary>
 /// Get Appropiate Bitrates for the selected encoder and mixdown.
 /// </summary>
 /// <param name="encoder">
 /// The encoder.
 /// </param>
 /// <param name="mixdown">
 /// The mixdown.
 /// </param>
 /// <returns>
 /// A List of valid audio bitrates
 /// </returns>
 private IEnumerable <int> GetAppropiateBitrates(AudioEncoder encoder, Mixdown mixdown)
 {
     return(new ObservableCollection <int> {
         32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384, 448, 640, 768
     });
 }
예제 #20
0
		public static string DisplayMixdown(Mixdown mixdown)
		{
			return mixdownConverter.Convert(mixdown);
		}
예제 #21
0
 public static string Formatted(this Mixdown mixdown)
 {
     return(mixdown.ToString().TrimStart('_').Replace("__", "."));
 }
예제 #22
0
 /// <summary>
 /// Initializes a new instance of the <see cref="AudioTrack"/> class.
 /// Copy Constructor
 /// </summary>
 /// <param name="track">
 /// The track.
 /// </param>
 public AudioTrack(AudioTrack track)
 {
     this.bitrate = track.Bitrate;
     this.drc = track.DRC;
     this.encoder = track.Encoder;
     this.gain = track.Gain;
     this.mixDown = track.MixDown;
     this.sampleRate = track.SampleRate;
     this.scannedTrack = new Audio();
     this.trackName = track.TrackName;
 }
예제 #23
0
파일: Converters.cs 프로젝트: rdp/HandBrake
 /// <summary>
 /// Return the CLI Mixdown name
 /// </summary>
 /// <param name="selectedAudio">GUI mixdown name</param>
 /// <returns>CLI mixdown name</returns>
 public static string GetCliMixDown(Mixdown selectedAudio)
 {
     switch (selectedAudio)
     {
         case Mixdown.Auto:
             return "auto";
         case Mixdown.Mono:
             return "mono";
         case Mixdown.Stereo:
             return "stereo";
         case Mixdown.DolbySurround:
             return "dpl1";
         case Mixdown.DolbyProLogicII:
             return "dpl2";
         case Mixdown.SixChannelDiscrete:
             return "6ch";
         default:
             return "auto";
     }
 }
예제 #24
0
 /// <summary>
 /// Return the CLI Mixdown name
 /// </summary>
 /// <param name="selectedAudio">GUI mixdown name</param>
 /// <returns>CLI mixdown name</returns>
 public static string GetCliMixDown(Mixdown selectedAudio)
 {
     switch (selectedAudio)
     {
         case Mixdown.Auto:
         case Mixdown.None:
             return "auto";
         case Mixdown.Mono:
             return "mono";
         case Mixdown.LeftOnly:
             return "left_only";
         case Mixdown.RightOnly:
             return "right_only";
         case Mixdown.Stereo:
             return "stereo";
         case Mixdown.DolbySurround:
             return "dpl1";
         case Mixdown.DolbyProLogicII:
             return "dpl2";
         case Mixdown.FivePoint1Channels:
             return "5point1";
         case Mixdown.SixPoint1Channels:
             return "6point1";
         case Mixdown.SevenPoint1Channels:
             return "7point1";
         case Mixdown.Five_2_LFE:
             return "5_2_lfe";
         default:
             return "auto";
     }
 }
예제 #25
0
 /// <summary>
 /// Sanitizes an audio bitrate given the output codec, sample rate and mixdown.
 /// </summary>
 /// <param name="audioBitrate">The desired audio bitrate.</param>
 /// <param name="encoder">The output encoder to be used.</param>
 /// <param name="sampleRate">The output sample rate to be used.</param>
 /// <param name="mixdown">The mixdown to be used.</param>
 /// <returns>A sanitized audio bitrate.</returns>
 public static int SanitizeAudioBitrate(int audioBitrate, AudioEncoder encoder, int sampleRate, Mixdown mixdown)
 {
     return(HBFunctions.hb_get_best_audio_bitrate(Converters.AudioEncoderToNative(encoder), audioBitrate, sampleRate, Converters.MixdownToNative(mixdown)));
 }
예제 #26
0
 /// <summary>
 /// The get channel count.
 /// </summary>
 /// <param name="mixdown">
 /// The mixdown.
 /// </param>
 /// <returns>
 /// The System.Int32.
 /// </returns>
 private int GetDiscreteChannelCount(Mixdown mixdown)
 {
     switch (mixdown)
     {
         case Mixdown.Five_2_LFE:
         case Mixdown.SevenPoint1Channels:
             return 8;
         case Mixdown.SixPoint1Channels:
             return 7;
         case Mixdown.FivePoint1Channels:
             return 6;
         case Mixdown.Mono:
         case Mixdown.LeftOnly:
         case Mixdown.RightOnly:
             return 1;
         case Mixdown.None:
             return 0;
         default:
             return 2;
     }
 }