Media Foundation Always Uses Intel iGPU when it's disabled in Device manager and in BIOS (mux)

maj soklič 0 Reputation points
2025-04-12T20:08:14.6166667+00:00

When using the MF in this config:

    CHECK_HR(MFCreateAttributes(&pAttributes, 1));
    CHECK_HR(pAttributes->SetUINT32(MF_LOW_LATENCY, TRUE));
    CHECK_HR(pAttributes->SetUINT32(MF_READWRITE_ENABLE_HARDWARE_TRANSFORMS, TRUE));
    CHECK_HR(pAttributes->SetUINT32(MF_SINK_WRITER_DISABLE_THROTTLING, TRUE));
    CHECK_HR(pAttributes->SetGUID(MF_TRANSCODE_CONTAINERTYPE, MFTranscodeContainerType_MPEG4));
    CHECK_HR(MFCreateSinkWriterFromURL(outputFile, nullptr, pAttributes.Get(), &ctx.pSinkWriter));

    CHECK_HR(MFCreateMediaType(&pMediaTypeOut));
    CHECK_HR(pMediaTypeOut->SetGUID(MF_MT_MAJOR_TYPE, MFMediaType_Video));
    CHECK_HR(pMediaTypeOut->SetGUID(MF_MT_SUBTYPE, MFVideoFormat_HEVC));
    CHECK_HR(pMediaTypeOut->SetUINT32(MF_MT_AVG_BITRATE, 20000000));
    CHECK_HR(pMediaTypeOut->SetUINT32(MF_MT_INTERLACE_MODE, MFVideoInterlace_Progressive));
    CHECK_HR(pMediaTypeOut->SetUINT32(MF_MT_VIDEO_NOMINAL_RANGE, MFNominalRange_16_235));
    CHECK_HR(pMediaTypeOut->SetUINT32(MF_MT_VIDEO_PRIMARIES, MFVideoPrimaries_BT709));
    CHECK_HR(pMediaTypeOut->SetUINT32(MF_MT_TRANSFER_FUNCTION, MFVideoTransFunc_709));
    CHECK_HR(pMediaTypeOut->SetUINT32(MF_MT_MPEG2_PROFILE, eAVEncH264VProfile_High));
    CHECK_HR(pMediaTypeOut->SetUINT32(MF_MT_MPEG2_LEVEL, eAVEncH264VLevel5_2));

    CHECK_HR(MFSetAttributeSize(pMediaTypeOut.Get(), MF_MT_FRAME_SIZE, ctx.desktopWidth, ctx.desktopHeight));
    CHECK_HR(MFSetAttributeRatio(pMediaTypeOut.Get(), MF_MT_FRAME_RATE, 60, 1));
    CHECK_HR(MFSetAttributeRatio(pMediaTypeOut.Get(), MF_MT_PIXEL_ASPECT_RATIO, 1, 1));
    CHECK_HR(ctx.pSinkWriter->AddStream(pMediaTypeOut.Get(), &ctx.videoStreamIndex));

    CHECK_HR(MFCreateMediaType(&pMediaTypeIn));
    CHECK_HR(pMediaTypeIn->SetGUID(MF_MT_MAJOR_TYPE, MFMediaType_Video));
    CHECK_HR(pMediaTypeIn->SetGUID(MF_MT_SUBTYPE, MFVideoFormat_YUY2));
    CHECK_HR(pMediaTypeIn->SetUINT32(MF_MT_INTERLACE_MODE, MFVideoInterlace_Progressive));
    CHECK_HR(pMediaTypeIn->SetUINT32(MF_MT_VIDEO_NOMINAL_RANGE, MFNominalRange_0_255));
    CHECK_HR(pMediaTypeIn->SetUINT32(MF_MT_VIDEO_PRIMARIES, MFVideoPrimaries_BT709));
    CHECK_HR(pMediaTypeIn->SetUINT32(MF_MT_TRANSFER_FUNCTION, MFVideoTransFunc_709))
    CHECK_HR(MFSetAttributeSize(pMediaTypeIn.Get(), MF_MT_FRAME_SIZE, ctx.desktopWidth, ctx.desktopHeight));
    CHECK_HR(MFSetAttributeRatio(pMediaTypeIn.Get(), MF_MT_FRAME_RATE, 60, 1));
    CHECK_HR(MFSetAttributeRatio(pMediaTypeIn.Get(), MF_MT_PIXEL_ASPECT_RATIO, 1, 1));
    CHECK_HR(ctx.pSinkWriter->SetInputMediaType(ctx.videoStreamIndex, pMediaTypeIn.Get(), nullptr));

The step:

    CHECK_HR(ctx.pSinkWriter->SetInputMediaType(ctx.videoStreamIndex, pMediaTypeIn.Get(), nullptr));

Fails with:

HRESULT 0xC00D36B4 | The data specified for the media type is invalid, inconsistent, or not supported by this object.

Re-enabling the GPU (which is completely disabled in Bios with MUX) fixes this issue but i get spammed with Intel Media SDK (mfxstatus) exceptions and the intel GPU dlls are loaded instead of the Nvidia GPU Dlls for enc/dec

C++
C++
A high-level, general-purpose programming language, created as an extension of the C programming language, that has object-oriented, generic, and functional features in addition to facilities for low-level memory manipulation.
3,913 questions
0 comments No comments
{count} votes

Your answer

Answers can be marked as Accepted Answers by the question author, which helps users to know the answer solved the author's problem.