I have set
m_EncoderParams.ps_control.GopPicSize = 50;
m_EncoderParams.ps_control.GopRefDist = 0;
But the I Frame Interval was still 256.
It seems that no matter what value I set to GopPicSize,the I Frame Interval remains constant(=256).
What went wrong?
My parameters setting was like this:
void CH264EncVideoFilter::SetDefaultParams(void)
{
m_EncoderParams.level_idc = Params::LL_AUTOSELECT;
m_EncoderParams.profile_idc = Params::PF_AUTOSELECT;
m_EncoderParams.pc_control = Params::PC_FRAME;
m_EncoderParams.ps_control.GopPicSize = 50;
m_EncoderParams.ps_control.GopRefDist = 0;
m_EncoderParams.ps_control.NumSlice = 0; // autoselect
m_EncoderParams.rc_control.rc_method = IConfigureVideoEncoder::Params::RCControl::RC_VBR;
m_EncoderParams.rc_control.bitrate = 0;
m_EncoderParams.target_usage = MFX_TARGETUSAGE_BALANCED;
m_EncoderParams.preset = CodecPreset::PRESET_USER_DEFINED;
m_EncoderParams.frame_control.width = 0;
m_EncoderParams.frame_control.height = 0;
}
later,I found out that
CH264EncVideoFilter::CH264EncVideoFilter(TCHAR* tszName, LPUNKNOWN punk, HRESULT* phr) :
CEncVideoFilter(tszName, punk, FILTER_GUID, phr)
{
m_bstrFilterName = FILTER_NAME;
m_mfxParamsVideo.mfx.CodecId = MFX_CODEC_AVC;
//fill m_EncoderParams with default values
SetDefaultParams();
// Fill m_EncoderParams with values from registry if available,
// otherwise write current m_EncoderParams values to registry
// ReadParamsFromRegistry();
CopyEncoderToMFXParams(&m_EncoderParams, &m_mfxParamsVideo);
AlignFrameSizes(&m_mfxParamsVPP.vpp.Out, (mfxU16)m_EncoderParams.frame_control.width, (mfxU16)m_EncoderParams.frame_control.height);
}
ReadParamsFromRegistry() function Fill m_EncoderParams with values from registry, so I just simply cancled this statement, GraphEdit says "This graph can't play(return code:0x80004005)
(Version 3.0.774.38156)
-Patrick



