i have a problem with a H.264 encoding stream.
I need an output stream like this
I P P P I P P P I P P P ...
but only the I-Frames should be used as reference frames. Each P-Frame should be predicted from the last I-Frame, NOT from the previous P-Frame.
For this i set
m_mfxEncParams.mfx.EncodedOrder=1; // use encoded order, NOT display order
m_mfxEncParams.mfx.NumRefFrame = 1; // only one reference frame
m_mfxEncParams.mfx.GopPicSize = 15; // 15 frames
m_mfxEncParams.mfx.GopRefDist = 1; // no Bs
m_mfxEncParams.mfx.GopOptFlag = MFX_GOP_CLOSED | MFX_GOP_STRICT;
(As far as I understood, are are the GoP settings "dont care", because we are in EncodedOrder mode)
and during encoding I specify the FrameType for each frame like this
((frameCtr & 3) == 0) ?
m_ctrl.FrameType = MFX_FRAMETYPE_I | MFX_FRAMETYPE_IDR | MFX_FRAMETYPE_REF :
m_ctrl.FrameType = MFX_FRAMETYPE_P;
pSurf->Data.FrameOrder = frameCtr;
sts = m_pmfxENC->EncodeFrameAsync(&m_ctrl, &m_pEncSurfaces[nEncSurfIdx], &pCurrentTask->mfxBS, &pCurrentTask->EncSyncP);
but the result is still a "normal" stream IPPP IPPP... where each Frame is predicted from the previous one. The SDK still marks all P-Frames as reference frames. :(
Is this a bug in the SDK? Or is there a solution? Or where is my fault?
Indeed, it should work with the mfxExtAVCRefListCtrl and the RejectedRefList, but this seems to be to complicated for my easy problem , because i just want to tell the SDK, that it should NOT take P-Frames as reference frames
Thnx for your help/ideas