示例#1
0
        private Destination CreateDestination(EncodeTask job)
        {
            Destination destination = new Destination
            {
                File       = job.Destination,
                Mp4Options = new Mp4Options
                {
                    IpodAtom    = VideoEncoderHelpers.IsH264(job.VideoEncoder) ? job.IPod5GSupport : false,
                    Mp4Optimize = job.OptimizeMP4
                },
                ChapterMarkers = job.IncludeChapterMarkers,
                AlignAVStart   = job.AlignAVStart,
                Mux            = EnumHelper <OutputFormat> .GetShortName(job.OutputFormat),
                ChapterList    = new List <Chapter>()
            };

            if (job.IncludeChapterMarkers)
            {
                foreach (ChapterMarker item in job.ChapterNames)
                {
                    Chapter chapter = new Chapter {
                        Name = item.ChapterName
                    };
                    destination.ChapterList.Add(chapter);
                }
            }

            return(destination);
        }
示例#2
0
        private bool IsPresetDisabled(Preset preset)
        {
            bool isQsvEnabled   = this.userSettingService.GetUserSetting <bool>(UserSettingConstants.EnableQuickSyncEncoding);
            bool isNvencEnabled = this.userSettingService.GetUserSetting <bool>(UserSettingConstants.EnableNvencEncoder);
            bool isVcnEnabled   = this.userSettingService.GetUserSetting <bool>(UserSettingConstants.EnableVceEncoder);

            HBVideoEncoder foundEncoder = HandBrakeEncoderHelpers.GetVideoEncoder(EnumHelper <VideoEncoder> .GetShortName(preset.Task.VideoEncoder));

            if (foundEncoder == null)
            {
                return(true);
            }

            if (VideoEncoderHelpers.IsQuickSync(preset.Task.VideoEncoder) && !isQsvEnabled)
            {
                return(true);
            }

            if (VideoEncoderHelpers.IsNVEnc(preset.Task.VideoEncoder) && !isNvencEnabled)
            {
                return(true);
            }

            if (VideoEncoderHelpers.IsVCN(preset.Task.VideoEncoder) && !isVcnEnabled)
            {
                return(true);
            }

            return(false);
        }
示例#3
0
        private void SetExtension(string newExtension)
        {
            // Make sure the output extension is set correctly based on the users preferences and selection.
            if (newExtension == ".mp4" || newExtension == ".m4v")
            {
                switch ((Mp4Behaviour)this.userSettingService.GetUserSetting <int>(UserSettingConstants.UseM4v))
                {
                case Mp4Behaviour.Auto:     // Auto
                    newExtension = MP4Helper.RequiresM4v(this.Task) ? ".m4v" : ".mp4";
                    break;

                case Mp4Behaviour.MP4:     // MP4
                    newExtension = ".mp4";
                    break;

                case Mp4Behaviour.M4V:     // M4v
                    newExtension = ".m4v";
                    break;
                }
            }

            // Now disable controls that are not required. The Following are for MP4 only!
            if (newExtension == ".mkv" || newExtension == ".webm")
            {
                this.OptimizeMP4   = false;
                this.IPod5GSupport = false;
                this.AlignAVStart  = false;
            }

            if (!VideoEncoderHelpers.IsH264(this.task.VideoEncoder))
            {
                this.IPod5GSupport = false;
            }

            this.NotifyOfPropertyChange(() => this.IsMkvOrWebm);
            this.NotifyOfPropertyChange(() => this.IsIpodAtomVisible);

            // Update The browse file extension display
            if (Path.HasExtension(newExtension))
            {
                this.OnOutputFormatChanged(new OutputFormatChangedEventArgs(newExtension));
            }

            // Update the UI Display
            this.NotifyOfPropertyChange(() => this.Task);
        }
示例#4
0
        public void ReleaseToken(VideoEncoder encoder, Guid?unlockKey)
        {
            if (unlockKey == null)
            {
                return;
            }

            lock (this.lockObj)
            {
                if (this.totalInstances.Contains(unlockKey.Value))
                {
                    this.totalInstances.Remove(unlockKey.Value);
                }

                if (VideoEncoderHelpers.IsQuickSync(encoder))
                {
                    if (this.qsvInstances.Contains(unlockKey.Value))
                    {
                        this.qsvInstances.Remove(unlockKey.Value);
                    }
                }
                else if (VideoEncoderHelpers.IsNVEnc(encoder))
                {
                    if (this.nvencInstances.Contains(unlockKey.Value))
                    {
                        this.nvencInstances.Remove(unlockKey.Value);
                    }
                }
                else if (VideoEncoderHelpers.IsVCN(encoder))
                {
                    if (this.vceInstances.Contains(unlockKey.Value))
                    {
                        this.vceInstances.Remove(unlockKey.Value);
                    }
                }
                else if (VideoEncoderHelpers.IsMediaFoundation(encoder))
                {
                    if (this.mfInstances.Contains(unlockKey.Value))
                    {
                        this.mfInstances.Remove(unlockKey.Value);
                    }
                }
            }
        }
示例#5
0
        public Guid?GetToken(EncodeTask task)
        {
            lock (this.lockObj)
            {
                if (VideoEncoderHelpers.IsQuickSync(task.VideoEncoder))
                {
                    if (this.qsvInstances.Count < this.totalQsvInstances && this.TotalActiveInstances <= this.maxAllowedInstances)
                    {
                        this.AllocateIntelGPU(task);

                        Guid guid = Guid.NewGuid();
                        this.qsvInstances.Add(guid);
                        this.totalInstances.Add(guid);
                        return(guid);
                    }

                    return(Guid.Empty); // Busy
                }
                else if (VideoEncoderHelpers.IsNVEnc(task.VideoEncoder))
                {
                    if (this.nvencInstances.Count < this.totalNvidiaInstances && this.TotalActiveInstances <= this.maxAllowedInstances)
                    {
                        Guid guid = Guid.NewGuid();
                        this.nvencInstances.Add(guid);
                        this.totalInstances.Add(guid);
                        return(guid);
                    }

                    return(Guid.Empty); // Busy
                }
                else if (VideoEncoderHelpers.IsVCN(task.VideoEncoder))
                {
                    if (this.vceInstances.Count < this.totalVceInstances && this.TotalActiveInstances <= this.maxAllowedInstances)
                    {
                        Guid guid = Guid.NewGuid();
                        this.vceInstances.Add(guid);
                        this.totalInstances.Add(guid);
                        return(guid);
                    }

                    return(Guid.Empty); // Busy
                }
                else if (VideoEncoderHelpers.IsMediaFoundation(task.VideoEncoder))
                {
                    if (this.mfInstances.Count < this.totalMfInstances && this.TotalActiveInstances <= this.maxAllowedInstances)
                    {
                        Guid guid = Guid.NewGuid();
                        this.mfInstances.Add(guid);
                        this.totalInstances.Add(guid);
                        return(guid);
                    }

                    return(Guid.Empty); // Busy
                }
                else
                {
                    if (this.TotalActiveInstances <= this.maxAllowedInstances)
                    {
                        Guid guid = Guid.NewGuid();
                        this.totalInstances.Add(guid);
                        return(guid);
                    }
                    else
                    {
                        return(Guid.Empty); // Busy
                    }
                }
            }
        }
示例#6
0
        /// <summary>
        /// Gets a list of Video encoders OR returns the string name of an encoder depending on the input.
        /// </summary>
        /// <param name="values">
        /// The values.
        /// </param>
        /// <param name="targetType">
        /// The target type.
        /// </param>
        /// <param name="parameter">
        /// The parameter.
        /// </param>
        /// <param name="culture">
        /// The culture.
        /// </param>
        /// <returns>
        /// IEnumerable VideoEncoder or String encoder name.
        /// </returns>
        public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
        {
            if (values.Count() >= 2)
            {
                IUserSettingService userSettingService = values[2] as IUserSettingService;
                bool isQsvEnabled = false, isVceEnabled = false, isNvencEnabled = false;
                if (userSettingService != null)
                {
                    isQsvEnabled   = userSettingService.GetUserSetting <bool>(UserSettingConstants.EnableQuickSyncEncoding);
                    isVceEnabled   = userSettingService.GetUserSetting <bool>(UserSettingConstants.EnableVceEncoder);
                    isNvencEnabled = userSettingService.GetUserSetting <bool>(UserSettingConstants.EnableNvencEncoder);
                }

                List <VideoEncoder> allEncoders = values[0] as List <VideoEncoder>;
                EncodeTask          task = values[1] as EncodeTask;

                if (task == null || allEncoders == null)
                {
                    return(null);
                }

                List <VideoEncoder> returnEncoders = new List <VideoEncoder>(allEncoders);

                foreach (var encoder in allEncoders)
                {
                    HBVideoEncoder foundEncoder = HandBrakeEncoderHelpers.GetVideoEncoder(EnumHelper <VideoEncoder> .GetShortName(encoder));
                    if (foundEncoder == null)
                    {
                        returnEncoders.Remove(encoder);
                        continue;
                    }

                    if (task.OutputFormat == OutputFormat.Mp4 && !foundEncoder.SupportsMP4)
                    {
                        returnEncoders.Remove(encoder);
                    }

                    if (task.OutputFormat == OutputFormat.Mkv && !foundEncoder.SupportsMKV)
                    {
                        returnEncoders.Remove(encoder);
                    }

                    if (task.OutputFormat == OutputFormat.WebM && !foundEncoder.SupportsWebM)
                    {
                        returnEncoders.Remove(encoder);
                    }

                    if (!isQsvEnabled && VideoEncoderHelpers.IsQuickSync(encoder))
                    {
                        returnEncoders.Remove(encoder);
                    }

                    if (!isVceEnabled && VideoEncoderHelpers.IsVCN(encoder))
                    {
                        returnEncoders.Remove(encoder);
                    }

                    if (!isNvencEnabled && VideoEncoderHelpers.IsNVEnc(encoder))
                    {
                        returnEncoders.Remove(encoder);
                    }
                }

                return(EnumHelper <VideoEncoder> .GetEnumDisplayValuesSubset(returnEncoders));
            }

            if (values[0].GetType() == typeof(VideoEncoder))
            {
                return(EnumHelper <VideoEncoder> .GetDisplay((VideoEncoder)values[0]));
            }

            return(null);
        }
示例#7
0
        private Video CreateVideo(EncodeTask job)
        {
            Video video = new Video();

            HBVideoEncoder videoEncoder = HandBrakeEncoderHelpers.VideoEncoders.FirstOrDefault(e => e.ShortName == EnumHelper <VideoEncoder> .GetShortName(job.VideoEncoder));

            Validate.NotNull(videoEncoder, "Video encoder " + job.VideoEncoder + " not recognized.");
            if (videoEncoder != null)
            {
                video.Encoder = videoEncoder.ShortName;
            }

            video.Level   = job.VideoLevel?.ShortName;
            video.Preset  = job.VideoPreset?.ShortName;
            video.Profile = job.VideoProfile?.ShortName;

            if (job.VideoTunes != null && job.VideoTunes.Count > 0)
            {
                foreach (var item in job.VideoTunes)
                {
                    video.Tune += string.IsNullOrEmpty(video.Tune) ? item.ShortName : "," + item.ShortName;
                }
            }

            if (job.VideoEncodeRateType == VideoEncodeRateType.ConstantQuality)
            {
                video.Quality = (decimal?)job.Quality;
            }

            if (job.VideoEncodeRateType == VideoEncodeRateType.AverageBitrate)
            {
                video.Bitrate = job.VideoBitrate;
                video.TwoPass = job.TwoPass;
                video.Turbo   = job.TurboFirstPass;
            }


            bool enableQuickSyncDecoding  = userSettingService.GetUserSetting <bool>(UserSettingConstants.EnableQuickSyncDecoding);
            bool useQSVDecodeForNonQSVEnc = userSettingService.GetUserSetting <bool>(UserSettingConstants.UseQSVDecodeForNonQSVEnc);
            bool enableQsvLowPower        = userSettingService.GetUserSetting <bool>(UserSettingConstants.EnableQuickSyncLowPower);

            video.QSV.Decode = HandBrakeHardwareEncoderHelper.IsQsvAvailable && enableQuickSyncDecoding;

            // The use of the QSV decoder is configurable for non QSV encoders.
            if (video.QSV.Decode && !VideoEncoderHelpers.IsQuickSync(job.VideoEncoder))
            {
                video.QSV.Decode = useQSVDecodeForNonQSVEnc;
            }

            video.Options = job.ExtraAdvancedArguments;

            if (HandBrakeHardwareEncoderHelper.IsQsvAvailable && (HandBrakeHardwareEncoderHelper.QsvHardwareGeneration > 6) && VideoEncoderHelpers.IsQuickSync(job.VideoEncoder))
            {
                if (enableQsvLowPower && !video.Options.Contains("lowpower"))
                {
                    video.Options = string.IsNullOrEmpty(video.Options) ? "lowpower=1" : string.Concat(video.Options, ":lowpower=1");
                }
                else if (!enableQsvLowPower && !video.Options.Contains("lowpower"))
                {
                    video.Options = string.IsNullOrEmpty(video.Options) ? "lowpower=0" : string.Concat(video.Options, ":lowpower=0");
                }
            }

            return(video);
        }