Hi,
i am encoding H264.
I set m_mfxEncParams.mfx.EncodedOrder = 1; to specify gop structure via mfxEncodeCtrl.
With m_ctrl.FrameType = MFX_FRAMETYPE_I | MFX_FRAMETYPE_IDR | MFX_FRAMETYPE_REF; I force the IDR frame generation on every 4th frame in the call to EncodeFrameAsync(&m_ctrl,surface...)
This works fine when operating in HW-mode. But (the same code) in software mode, the encoder does NOT insert the requested IDR. IDR will generated here on every 64th frame.
This is a BUG!!!
As a work around i tried to reset the encoder every 4th frame to restart with a new GOP.
m_mfxResetOptions.StartNewSequence = MFX_CODINGOPTION_ON;
m_EncExtParams.clear();
m_EncExtParams.push_back(reinterpret_cast<mfxExtBuffer*>(&m_mfxResetOptions));
m_mfxEncParams.ExtParam = &m_EncExtParams.front();
m_mfxEncParams.NumExtParam = (mfxU16)m_EncExtParams.size();
sts = m_pmfxENC->Reset(&m_mfxEncParams);
But this returns MFX_ERROR_INVALID_VIDEO_PARAM!
This happens only when operating with MFX_IMPL_SOFTWARE! Hardware mode has no bugs and is working as expected!!!
Can you fix this fast? Or post a work around?