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); }
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()); }