Bug Summary
QuickLook VideoViewer imports LAV configuration into HKCU\Software\QLV, but the bundled QuickLook.LAVFilters package appears to read its settings from HKCU\Software\LAV. As a result, the imported QLV.reg settings, including hardware decoding options, are not applied by LAV Video.
Observed Behavior
QuickLook imports Resources\QLV.reg during plugin initialization:
public void Init()
{
QLVRegistry.Register();
}
QLVRegistry.Register() writes the embedded .reg values directly to the registry:
var obj = new RegFileObject(Resource.QLV);
obj.RegValues.ForEach(k => k.Value.ForEach(k2 => ImportKey(k2.Value)));
The embedded registry file writes settings under:
HKEY_CURRENT_USER\Software\QLV
HKEY_CURRENT_USER\Software\QLV\Video
HKEY_CURRENT_USER\Software\QLV\Video\HWAccel
HKEY_CURRENT_USER\Software\QLV\Video\Output
HKEY_CURRENT_USER\Software\QLV\Splitter
HKEY_CURRENT_USER\Software\QLV\Audio
For example:
[HKEY_CURRENT_USER\Software\QLV\Video\HWAccel]
"HWAccel"=dword:00000004
"h264"=dword:00000001
"hevc"=dword:00000001
"vp9"=dword:00000001
However, runtime inspection of the DirectShow graph showed that LAV Video was still using software decoding:
ActiveDecoder=avcodec
ActiveHWDevice=(none)
Expected Behavior
The hardware acceleration settings imported from QLV.reg should be picked up by LAV Video, so playback should use hardware decoding when supported.
For example:
ActiveDecoder=dxva2n / d3d11va / similar
ActiveHWDevice=
Investigation
The QuickLook C# code does not appear to read these registry values directly or configure LAV via ILAVVideoSettings. It only imports the .reg file.
Relevant files:
QuickLook.Plugin.VideoViewer\Plugin.cs
QuickLook.Plugin.VideoViewer\QLVRegistry.cs
QuickLook.Plugin.VideoViewer\Resources\QLV.reg
ViewerPanel.xaml.cs only sets the LAV filter directory:
mediaElement.MediaUriPlayer.LAVFilterDirectory =
IntPtr.Size == 8 ? @"LAVFilters-x64\" : @"LAVFilters-x86\";
No usage was found for:
ILAVVideoSettings
SetRuntimeConfig
SetHWAccel
SetHWAccelCodec
The Nevcairiel/LAVFilters source in the repository defines the video registry path as:
#define LAVC_VIDEO_REGISTRY_KEY L"Software\\LAV\\Video"
#define LAVC_VIDEO_REGISTRY_KEY_FORMATS L"Software\\LAV\\Video\\Formats"
#define LAVC_VIDEO_REGISTRY_KEY_OUTPUT L"Software\\LAV\\Video\\Output"
#define LAVC_VIDEO_REGISTRY_KEY_HWACCEL L"Software\\LAV\\Video\\HWAccel"
Source file:
LAVFilters\decoder\LAVVideo\LAVVideo.h
The splitter and audio filters also use Software\LAV, not Software\QLV:
#define LAVF_REGISTRY_KEY L"Software\\LAV\\Splitter"
#define LAVC_AUDIO_REGISTRY_KEY L"Software\\LAV\\Audio"
Verification
Copying the same settings from:
HKCU\Software\QLV
or from an isolated test path into:
HKCU\Software\LAV
caused LAV Video to pick up hardware decoding correctly.
Before copying settings to Software\LAV:
LAV runtime: ActiveDecoder=avcodec; ActiveHWDevice=(none)
After copying equivalent settings to Software\LAV:
LAV runtime: ActiveDecoder=dxva2n; ActiveHWDevice=NVIDIA GeForce RTX 3050 OEM
This strongly suggests that the imported QLV.reg settings are currently written to a registry path that the bundled LAV filters do not read.
Impact
The video plugin may still play media correctly, but LAV-specific configuration from QLV.reg may be ignored, including:
Hardware acceleration settings
Enabled video/audio formats
Output pixel formats
Splitter settings
Audio settings
The most visible impact is that hardware decoding may remain disabled even though QLV.reg configures it.
Conclusion
The current QLV.reg registry path appears inconsistent with the registry path used by the bundled LAV filters. This makes the imported settings ineffective. Updating the registry target path to HKCU\Software\LAV or configuring LAV via ILAVVideoSettings should fix the issue.
Some of the content was generated with AI, so it may be a bit verbose, but I have verified both the phenomena and the conclusions.
I want to know how QuickLook.LAVFilters is compiled. Are there detailed steps? There don’t seem to be detailed steps in QL-Win/QuickLook.LAVFilters.
Maybe it is related to #1863.
The simplest verification method(Task Manager):
H/W on

H/W off

Bug Summary
QuickLook VideoViewer imports LAV configuration into
HKCU\Software\QLV, but the bundled QuickLook.LAVFilters package appears to read its settings fromHKCU\Software\LAV. As a result, the imported QLV.reg settings, including hardware decoding options, are not applied by LAV Video.Observed Behavior
QuickLook imports
Resources\QLV.regduring plugin initialization:QLVRegistry.Register()writes the embedded .reg values directly to the registry:The embedded registry file writes settings under:
HKEY_CURRENT_USER\Software\QLV
HKEY_CURRENT_USER\Software\QLV\Video
HKEY_CURRENT_USER\Software\QLV\Video\HWAccel
HKEY_CURRENT_USER\Software\QLV\Video\Output
HKEY_CURRENT_USER\Software\QLV\Splitter
HKEY_CURRENT_USER\Software\QLV\Audio
For example:
[HKEY_CURRENT_USER\Software\QLV\Video\HWAccel]
"HWAccel"=dword:00000004
"h264"=dword:00000001
"hevc"=dword:00000001
"vp9"=dword:00000001
However, runtime inspection of the DirectShow graph showed that LAV Video was still using software decoding:
ActiveDecoder=avcodec
ActiveHWDevice=(none)
Expected Behavior
The hardware acceleration settings imported from QLV.reg should be picked up by LAV Video, so playback should use hardware decoding when supported.
For example:
ActiveDecoder=dxva2n / d3d11va / similar
ActiveHWDevice=
Investigation
The QuickLook C# code does not appear to read these registry values directly or configure LAV via ILAVVideoSettings. It only imports the .reg file.
Relevant files:
QuickLook.Plugin.VideoViewer\Plugin.cs
QuickLook.Plugin.VideoViewer\QLVRegistry.cs
QuickLook.Plugin.VideoViewer\Resources\QLV.reg
ViewerPanel.xaml.cs only sets the LAV filter directory:
No usage was found for:
ILAVVideoSettings
SetRuntimeConfig
SetHWAccel
SetHWAccelCodec
The
Nevcairiel/LAVFilterssource in the repository defines the video registry path as:Source file:
LAVFilters\decoder\LAVVideo\LAVVideo.h
The splitter and audio filters also use Software\LAV, not Software\QLV:
Verification
Copying the same settings from:
HKCU\Software\QLVor from an isolated test path into:
HKCU\Software\LAVcaused LAV Video to pick up hardware decoding correctly.
Before copying settings to Software\LAV:
LAV runtime:
ActiveDecoder=avcodec; ActiveHWDevice=(none)After copying equivalent settings to Software\LAV:
LAV runtime:
ActiveDecoder=dxva2n; ActiveHWDevice=NVIDIA GeForce RTX 3050 OEMThis strongly suggests that the imported QLV.reg settings are currently written to a registry path that the bundled LAV filters do not read.
Impact
The video plugin may still play media correctly, but LAV-specific configuration from QLV.reg may be ignored, including:
Hardware acceleration settings
Enabled video/audio formats
Output pixel formats
Splitter settings
Audio settings
The most visible impact is that hardware decoding may remain disabled even though QLV.reg configures it.
Conclusion
The current QLV.reg registry path appears inconsistent with the registry path used by the bundled LAV filters. This makes the imported settings ineffective. Updating the registry target path to
HKCU\Software\LAVor configuring LAV via ILAVVideoSettings should fix the issue.Some of the content was generated with AI, so it may be a bit verbose, but I have verified both the phenomena and the conclusions.
I want to know how QuickLook.LAVFilters is compiled. Are there detailed steps? There don’t seem to be detailed steps in
QL-Win/QuickLook.LAVFilters.Maybe it is related to #1863.
The simplest verification method(Task Manager):
H/W on

H/W off
