コード例 #1
0
        public AudioOutputPreview GetAudioPreview(SourceAudioTrack inputTrack, AudioEncodingViewModel audioVM)
        {
            HBAudioEncoder encoder = audioVM.HBAudioEncoder;

            var outputPreviewTrack = new AudioOutputPreview
            {
                Name    = inputTrack.Description,
                Encoder = encoder.DisplayName
            };

            if (encoder.IsPassthrough)
            {
                // For passthrough encodes, we need to make sure the input track is of the right type
                if (!HandBrakeEncoderHelpers.AudioEncoderIsCompatible(inputTrack.Codec, encoder) && encoder.ShortName != "copy")
                {
                    return(null);
                }
            }

            // Find out what the real mixdown, sample rate and bitrate will be.
            HBMixdown mixdown;
            int       sampleRate, bitrate;

            if (encoder.ShortName == "copy")
            {
                if (this.CopyMaskChoices.Any(
                        choice =>
                {
                    if (!choice.Enabled)
                    {
                        return(false);
                    }

                    return((HandBrakeEncoderHelpers.GetAudioEncoder("copy:" + choice.Codec).Id & inputTrack.Codec) > 0);
                }))
                {
                    return(outputPreviewTrack);
                }

                if (this.Profile.AudioEncoderFallback == null)
                {
                    encoder = HandBrakeEncoderHelpers.AudioEncoders.First(a => !a.IsPassthrough);
                }
                else
                {
                    encoder = HandBrakeEncoderHelpers.GetAudioEncoder(this.Profile.AudioEncoderFallback);
                }

                mixdown    = HandBrakeEncoderHelpers.GetDefaultMixdown(encoder, (ulong)inputTrack.ChannelLayout);
                sampleRate = 0;
                bitrate    = 0;

                outputPreviewTrack.Encoder = encoder.DisplayName;
            }
            else
            {
                mixdown    = audioVM.SelectedMixdown.Mixdown;
                sampleRate = audioVM.SampleRate;
                bitrate    = audioVM.SelectedBitrate.Bitrate;
            }

            HBMixdown previewMixdown;

            previewMixdown = HandBrakeEncoderHelpers.SanitizeMixdown(mixdown, encoder, (ulong)inputTrack.ChannelLayout);

            int previewSampleRate = sampleRate;

            if (previewSampleRate == 0)
            {
                previewSampleRate = inputTrack.SampleRate;
            }

            int previewBitrate = bitrate;

            if (previewBitrate == 0)
            {
                previewBitrate = HandBrakeEncoderHelpers.GetDefaultBitrate(encoder, previewSampleRate, previewMixdown);
            }
            else
            {
                previewBitrate = HandBrakeEncoderHelpers.SanitizeAudioBitrate(previewBitrate, encoder, previewSampleRate, previewMixdown);
            }

            outputPreviewTrack.Mixdown    = previewMixdown.DisplayName;
            outputPreviewTrack.SampleRate = DisplayConversions.DisplaySampleRate(previewSampleRate);

            if (audioVM.EncodeRateType == AudioEncodeRateType.Bitrate)
            {
                if (previewBitrate >= 0)
                {
                    outputPreviewTrack.Quality = previewBitrate + " kbps";
                }
                else
                {
                    outputPreviewTrack.Quality = string.Empty;
                }
            }
            else
            {
                outputPreviewTrack.Quality = "CQ " + audioVM.AudioQuality;
            }

            var modifiers = new List <string>();

            if (audioVM.Gain != 0)
            {
                modifiers.Add(string.Format("{0}{1} dB", audioVM.Gain > 0 ? "+" : string.Empty, audioVM.Gain));
            }

            if (audioVM.Drc != 0)
            {
                modifiers.Add("DRC " + audioVM.Drc.ToString());
            }

            outputPreviewTrack.Modifiers = string.Join(", ", modifiers);

            return(outputPreviewTrack);
        }
コード例 #2
0
ファイル: AudioPanelViewModel.cs プロジェクト: Runcy/VidCoder
		public AudioOutputPreview GetAudioPreview(AudioTrack inputTrack, AudioEncodingViewModel audioVM)
		{
			HBAudioEncoder encoder = audioVM.HBAudioEncoder;

			var outputPreviewTrack = new AudioOutputPreview
			{
				Name = inputTrack.NoTrackDisplay,
				Encoder = encoder.DisplayName
			};

			if (encoder.IsPassthrough)
			{
				// For passthrough encodes, we need to make sure the input track is of the right type
				if (!Encoders.AudioEncoderIsCompatible(inputTrack, encoder) && encoder.ShortName != "copy")
				{
					return null;
				}

				HBContainer container = Encoders.GetContainer(this.Profile.ContainerName);

				if (encoder.ShortName == "copy" && (inputTrack.Codec == AudioCodec.Dts || inputTrack.Codec == AudioCodec.DtsHD) && container.DefaultExtension == "mp4")
				{
					this.PassthroughWarningText = EncodingRes.DtsMp4Warning;
					this.PassthroughWarningVisible = true;

					return outputPreviewTrack;
				}
			}

			// Find out what the real mixdown, sample rate and bitrate will be.
			HBMixdown mixdown;
			int sampleRate, bitrate;

			if (encoder.ShortName == "copy")
			{
				if (Encoders.AudioEncoderIsCompatible(inputTrack, encoder))
				{
					return outputPreviewTrack;
				}

				if (this.Profile.AudioEncoderFallback == null)
				{
					encoder = Encoders.AudioEncoders.First(a => !a.IsPassthrough);
				}
				else
				{
					encoder = Encoders.GetAudioEncoder(this.Profile.AudioEncoderFallback);
				}

				mixdown = Encoders.GetDefaultMixdown(encoder, inputTrack.ChannelLayout);
				sampleRate = 0;
				bitrate = 0;

				outputPreviewTrack.Encoder = encoder.DisplayName;
			}
			else
			{
				mixdown = audioVM.SelectedMixdown.Mixdown;
				sampleRate = audioVM.SampleRate;
				bitrate = audioVM.SelectedBitrate.Bitrate;
			}

			HBMixdown previewMixdown;
			previewMixdown = Encoders.SanitizeMixdown(mixdown, encoder, inputTrack.ChannelLayout);

			int previewSampleRate = sampleRate;
			if (previewSampleRate == 0)
			{
				previewSampleRate = inputTrack.SampleRate;
			}

			int previewBitrate = bitrate;
			if (previewBitrate == 0)
			{
				previewBitrate = Encoders.GetDefaultBitrate(encoder, previewSampleRate, previewMixdown);
			}
			else
			{
				previewBitrate = Encoders.SanitizeAudioBitrate(previewBitrate, encoder, previewSampleRate, previewMixdown);
			}

			outputPreviewTrack.Mixdown = previewMixdown.DisplayName;
			outputPreviewTrack.SampleRate = DisplayConversions.DisplaySampleRate(previewSampleRate);

			if (audioVM.EncodeRateType == AudioEncodeRateType.Bitrate)
			{
				if (previewBitrate >= 0)
				{
					outputPreviewTrack.Quality = previewBitrate + " kbps";
				}
				else
				{
					outputPreviewTrack.Quality = string.Empty;
				}
			}
			else
			{
				outputPreviewTrack.Quality = "CQ " + audioVM.AudioQuality;
			}

			var modifiers = new List<string>();
			if (audioVM.Gain != 0)
			{
				modifiers.Add(string.Format("{0}{1} dB", audioVM.Gain > 0 ? "+" : string.Empty, audioVM.Gain));
			}

			if (audioVM.Drc != 0)
			{
				modifiers.Add("DRC " + audioVM.Drc.ToString());
			}

			outputPreviewTrack.Modifiers = string.Join(", ", modifiers);

			return outputPreviewTrack;
		}
コード例 #3
0
        public void RefreshAudioPreview()
        {
            if (this.SelectedTitle != null)
            {
                using (this.AudioOutputPreviews.SuppressChangeNotifications())
                {
                    this.AudioOutputPreviews.Clear();

                    List <int> chosenAudioTracks = this.MainViewModel.GetChosenAudioTracks();
                    var        outputPreviews    = new List <AudioOutputPreview>();

                    foreach (AudioEncodingViewModel audioVM in this.AudioEncodings)
                    {
                        if (audioVM.IsValid)
                        {
                            if (audioVM.TargetStreamIndex == 0)
                            {
                                foreach (AudioChoiceViewModel audioChoice in this.MainViewModel.AudioChoices)
                                {
                                    AudioOutputPreview audioPreview = this.GetAudioPreview(
                                        this.SelectedTitle.AudioList[audioChoice.SelectedIndex], audioVM);
                                    if (audioPreview != null)
                                    {
                                        outputPreviews.Add(audioPreview);
                                    }
                                }
                            }
                            else if (audioVM.TargetStreamIndex - 1 < chosenAudioTracks.Count)
                            {
                                int titleAudioIndex = chosenAudioTracks[audioVM.TargetStreamIndex - 1];

                                AudioOutputPreview audioPreview = this.GetAudioPreview(this.SelectedTitle.AudioList[titleAudioIndex - 1],
                                                                                       audioVM);
                                if (audioPreview != null)
                                {
                                    outputPreviews.Add(audioPreview);
                                }
                            }
                        }
                    }

                    for (int i = 0; i < outputPreviews.Count; i++)
                    {
                        outputPreviews[i].TrackNumber = "#" + (i + 1);
                        this.AudioOutputPreviews.Add(outputPreviews[i]);
                    }

                    // Add the header row
                    if (this.AudioOutputPreviews.Count > 0)
                    {
                        this.AudioOutputPreviews.Insert(0, new AudioOutputPreview
                        {
                            TrackNumber = EncodingRes.Track,
                            Name        = EncodingRes.Source,
                            Encoder     = EncodingRes.Encoder,
                            Mixdown     = EncodingRes.ChannelLayout,
                            SampleRate  = EncodingRes.SampleRate,
                            Quality     = EncodingRes.Quality,
                            Modifiers   = EncodingRes.Modifiers
                        });
                    }
                }
            }
        }