NickeManarin/ScreenToGif · error · Exception

DirectShow SampleGrabber not installed/registered!

Error message

DirectShow SampleGrabber not installed/registered!

What it means

CaptureWebcam.CreateGraph needs the DirectShow SampleGrabber COM filter. It calls Type.GetTypeFromCLSID(Uuid.Clsid.SampleGrabber); if that returns null (the COM class is not registered), it throws. The SampleGrabber lives in qedit.dll and is part of the legacy DirectShow runtime.

Solutions

  1. Install the Media Feature Pack (N/KN editions) or enable the Desktop Experience / Media Foundation feature on Server.
  2. Re-register qedit.dll: run `regsvr32 %SystemRoot%\System32\qedit.dll` from an elevated prompt.
  3. Run `sfc /scannow` to restore missing system binaries.
  4. If webcam capture is optional, disable the webcam feature until the runtime is repaired.

Example fix

// before
var comType = Type.GetTypeFromCLSID(Uuid.Clsid.SampleGrabber);
if (comType == null)
    throw new Exception("DirectShow SampleGrabber not installed/registered!");

// after
var comType = Type.GetTypeFromCLSID(Uuid.Clsid.SampleGrabber);
if (comType == null)
    throw new Exception("DirectShow SampleGrabber not installed/registered. Install the Media Feature Pack (N editions) or run: regsvr32 %SystemRoot%\\System32\\qedit.dll");
Defensive patterns

Strategy: validation

Validate before calling

var comType = Type.GetTypeFromCLSID(Uuid.Clsid.SampleGrabber);
if (comType == null)
    // surface a user message: install Media Feature Pack or run regsvr32 qedit.dll
return comType != null;

Type guard

static bool IsSampleGrabberRegistered => Type.GetTypeFromCLSID(Uuid.Clsid.SampleGrabber) != null;

Try / catch

try { CreateGraph(); }
catch (Exception ex) when (ex.Message.Contains("SampleGrabber"))
{ /* instruct user to install Media Feature Pack / register qedit.dll */ }

Prevention

When it happens

Trigger: Selecting a webcam device when qedit.dll (which registers the SampleGrabber CLSID) is missing or unregistered on the machine.

Common situations: Windows N / KN editions without the Media Feature Pack; Windows Server without Desktop Experience / Media Foundation; qedit.dll removed or unregistered by a cleanup tool; older qedit.dll never registered on a stripped Windows image.

Related errors


AI-assisted analysis of NickeManarin/ScreenToGif@a4d0a67c21 (2026-08-13). Data as JSON: /api/errors/cd76c2239e556a88. Report an issue: GitHub.

Appendix: source

Thrown at ScreenToGif/Webcam/DirectX/CaptureWebcam.cs:260

        {
            //Make a new filter graph.
            GraphBuilder = (ExtendStreaming.IGraphBuilder)Activator.CreateInstance(Type.GetTypeFromCLSID(Uuid.Clsid.FilterGraph, true));

            //Get the Capture Graph Builder.
            var clsid = Uuid.Clsid.CaptureGraphBuilder2;
            var riid = typeof(ExtendStreaming.ICaptureGraphBuilder2).GUID;
            CaptureGraphBuilder = (ExtendStreaming.ICaptureGraphBuilder2)Activator.CreateInstance(Type.GetTypeFromCLSID(clsid, true));

            //Link the CaptureGraphBuilder to the filter graph
            var hr = CaptureGraphBuilder.SetFiltergraph(GraphBuilder);

            if (hr < 0)
                Marshal.ThrowExceptionForHR(hr);

            var comType = Type.GetTypeFromCLSID(Uuid.Clsid.SampleGrabber);

            if (comType == null)
                throw new Exception("DirectShow SampleGrabber not installed/registered!");

            var comObj = Activator.CreateInstance(comType);
            SampGrabber = (EditStreaming.ISampleGrabber)comObj; comObj = null;

            _baseGrabFlt = (CoreStreaming.IBaseFilter) SampGrabber;

            var media = new CoreStreaming.AmMediaType();

            //Get the video device and add it to the filter graph
            if (VideoDevice != null)
            {
                VideoDeviceFilter = (CoreStreaming.IBaseFilter)Marshal.BindToMoniker(VideoDevice.MonikerString);

                hr = GraphBuilder.AddFilter(VideoDeviceFilter, "Video Capture Device");

                if (hr < 0)
                    Marshal.ThrowExceptionForHR(hr);

View on GitHub (pinned to a4d0a67c21)