this is where I'm sending the outgoing samples from Encoder Decoder function : public HResult Decode(IMFSample sampleIN, out IMFSample sampleOUT) { sampleOUT = null; if (_transform == null) return HResult.E_FAIL; //_lasterror = sampleIN.SetSampleTime(time_stamp_video_decode); //_lasterror = sampleIN.SetSampleDuration(punAverageTimePerFrameVideo); _lasterror = _transform.ProcessInput(0, sampleIN, 0); if (_lasterror != HResult.S_OK) { ErrorHResult?.Invoke(this, _lasterror); } _lasterror = _transform.GetOutputStatus(out...
How to get MediaEventGenerator eventGen = retTransform.QueryInterface<mediaeventgenerator>()</mediaeventgenerator> That's not how it works. I've tried it like ICodecAPI ic = (ICodecAPI)retTransform; but it doesn't work that way either only by substituting the right interface
How to get MediaEventGenerator eventGen = transform.QueryInterface<mediaeventgenerator>()</mediaeventgenerator> That's not how it works.
To init decoder transform use Output Type media from Encoder Media type Init Decoder : private HResult CreateTransform(out IMFTransform retTransform, IMFMediaType inTypeH264) { MFTRegisterTypeInfo registerTypeOut = new MFTRegisterTypeInfo(); registerTypeOut.guidMajorType = MFMediaType.Video; registerTypeOut.guidSubtype = MFMediaType.NV12; MFTRegisterTypeInfo registerTypeIn = new MFTRegisterTypeInfo(); registerTypeIn.guidMajorType = MFMediaType.Video; registerTypeIn.guidSubtype = MFMediaType.H264;...
Decoder function : public HResult Decode(IMFSample sampleIN, out IMFSample sampleOUT) { sampleOUT = null; if (_transform == null) return HResult.E_FAIL; //_lasterror = sampleIN.SetSampleTime(time_stamp_video_decode); //_lasterror = sampleIN.SetSampleDuration(punAverageTimePerFrameVideo); _lasterror = _transform.ProcessInput(0, sampleIN, 0); if (_lasterror != HResult.S_OK) { ErrorHResult?.Invoke(this, _lasterror); } _lasterror = _transform.GetOutputStatus(out MFTOutputStatusFlags outputStatusFlags);...
Init Decoder : private HResult CreateTransform(out IMFTransform retTransform, IMFMediaType inTypeH264) { MFTRegisterTypeInfo registerTypeOut = new MFTRegisterTypeInfo(); registerTypeOut.guidMajorType = MFMediaType.Video; registerTypeOut.guidSubtype = MFMediaType.NV12; MFTRegisterTypeInfo registerTypeIn = new MFTRegisterTypeInfo(); registerTypeIn.guidMajorType = MFMediaType.Video; registerTypeIn.guidSubtype = MFMediaType.H264; MFT_EnumFlag mFT_Enum = new MFT_EnumFlag(); if (pDXGIDeviceManager != null)...
That's exactly the scheme I'm using: I send the received sample to the Decoder's input.
By the way, I didn't find any forum dedicated to MF implementations on .Net, and that's why my last hope was to figure out that I wanted to do it here, and I was very glad that I was answered, I've written on different 3 more forums, but I haven't heard back from any of them.