示例#1
0
        private bool TestQsvNv12(AdapterInfo qsvAdapter)
        {
            try
            {
                var options = new VideoRenderOptions(VideoRenderType.HardwareSpecific, qsvAdapter.Name, IntPtr.Zero, false, 0);
                var dx      = DirectXContextFactory.CreateDevice(options);
                using var dxContext = new DirectXContext(dx.Item1, options, dx.Item2, dx.Item3, null);

                if (!dxContext.Nv12Supported)
                {
                    Core.LogInfo($"Device {qsvAdapter.Name} does not have n12 format support");
                }

                if (Test <EncoderContextQsvDx>("", "", EncoderContextQsvDx.TypeName, dxContext))
                {
                    Core.LogInfo($"Device {qsvAdapter.Name} successfully tested for nv12 support");
                    return(true);
                }
            }
            catch (Exception e)
            {
                Core.LogError(e, $"Device {qsvAdapter.Name} failed in test for nv12 support");
            }
            return(false);
        }
示例#2
0
        private void Test()
        {
            var  adapters = DirectXContextFactory.GetAdapters();
            bool qsv      = Test <EncoderContext>("h264_qsv", $"preset{Core.Eq}medium{Core.Sep}bf{Core.Eq}0{Core.Sep}profile{Core.Eq}main");
            bool qsv_nv12 = false;

            if (qsv)
            {
                var qsvAdapter = adapters.FirstOrDefault(s => s.Vendor == AdapterVendor.Intel);
                if (qsvAdapter != null)
                {
                    qsv_nv12 = TestQsvNv12(qsvAdapter);
                }
            }
            bool nv  = Test <EncoderContext>("h264_nvenc", $"bf{Core.Eq}0{Core.Sep}profile{Core.Eq}main{Core.Sep}rc{Core.Eq}cbr_ld_hq{Core.Sep}zerolatency{Core.Eq}1{Core.Sep}preset{Core.Eq}ll");
            bool amd = Test <EncoderContext>("h264_amf", $"usage{Core.Eq}webcam{Core.Sep}bf{Core.Eq}0{Core.Sep}profile{Core.Eq}main{Core.Sep}rc{Core.Eq}cbr{Core.Sep}quality{Core.Eq}balanced");

            string report = string.Join(", ", new[] { qsv ? "QSV" : null, qsv_nv12 ? "QSV_NV12" : null, nv ? "NVidia" : null, amd ? "AMD" : null }.Where(s => s != null));

            Core.LogInfo("Encoder hardware check: '" + (string.IsNullOrEmpty(report) ? "None" : report) + "'");

            lock (this)
            {
                _result = new HardwareEncoderCheckResult(qsv, qsv_nv12, nv, amd);
                Monitor.PulseAll(this);
            }
        }
        public void Start()
        {
            UserHasVpn = _connectionService.Claims.HasVpn;

            if (!IsValidRecordingPath(CoreData.ThisDevice.DeviceSettings.RecordingsPath))
            {
                CoreData.ThisDevice.DeviceSettings.RecordingsPath = Environment.GetFolderPath(Environment.SpecialFolder.MyVideos);
            }

            var adapters = DirectXContextFactory.GetAdapters();

            if (string.IsNullOrEmpty(CoreData.ThisDevice.DeviceSettings.RendererAdapter) && adapters.Length > 0)
            {
                CoreData.ThisDevice.DeviceSettings.RendererAdapter = adapters[0].Name;
            }

            HardwareAdapters.Clear();
            adapters.ToList().ForEach(s => HardwareAdapters.Add(s.Name));
            HardwareAdapter.Value = HardwareAdapters.Contains(CoreData.ThisDevice.DeviceSettings.RendererAdapter) ? CoreData.ThisDevice.DeviceSettings.RendererAdapter : adapters.FirstOrDefault()?.Name;
        }
 private void InitDx9()
 {
     (_direct3d, _device) = DirectXContextFactory.CreateD3D9Devies(GetWindowHandle());
 }