I am trying to use the Quick Sync Video H.264 Encoder MFT on Windows 10 to do hardware-accelerated encoding. I find that if I set the IMFDXGIDeviceManager on the transform, I get indication of resource leaks (live objects) when I exit my application. I suspect that I may not be shutting the encoder down properly. When I shut down, I do this:
1. Send the MFT_MESSAGE_COMMAND_DRAIN command (via ProcessMessage).
2. Respond to the METransformDrainComplete event notification by sending the MFT_MESSAGE_COMMAND_FLUSH message.
3. Set the input type and output type for the transform to NULL.
4. Call Release on the IMFTransform interface that I use to control the encoder transform.
Is there more that I should be doing to shut down the encoder and cause it to free all of the resources it is hanging on to?
QSV supports MFT, so to close the encoder, it should follow the standard MFT rule.
I have submitted a request to dev team but could you double check your code to see if it satisfies the MFT protocol? Basically you should use the same rule to run software encoding without leak.
If you use the other codec, you will still have to close encoder and release resources. So I meant you could check if MFT has the standard way to release resources like encoder.
I will send you update when I got response from dev team.