void VaapiEncoderH264::resetParams () { m_levelIdc = level(); DEBUG("resetParams, ensureCodedBufferSize"); ensureCodedBufferSize(); if (ipPeriod() == 0) m_videoParamCommon.intraPeriod = 1; else m_numBFrames = ipPeriod() - 1; assert(intraPeriod() > ipPeriod()); m_keyPeriod = intraPeriod() * (m_videoParamAVC.idrInterval + 1); if (m_keyPeriod > MAX_IDR_PERIOD) m_keyPeriod = MAX_IDR_PERIOD; if (minQP() > initQP() || (rateControlMode()== RATE_CONTROL_CQP && minQP() < initQP())) minQP() = initQP(); if (m_numBFrames > (intraPeriod() + 1) / 2) m_numBFrames = (intraPeriod() + 1) / 2; /* init m_maxFrameNum, max_poc */ m_log2MaxFrameNum = h264_get_log2_max_frame_num (m_keyPeriod); assert (m_log2MaxFrameNum >= 4); m_maxFrameNum = (1 << m_log2MaxFrameNum); m_log2MaxPicOrderCnt = m_log2MaxFrameNum + 1; m_maxPicOrderCnt = (1 << m_log2MaxPicOrderCnt); m_maxRefList1Count = m_numBFrames > 0;//m_maxRefList1Count <=1, because of currenent order mechanism m_maxRefList0Count = numRefFrames(); if (m_maxRefList0Count >= m_maxOutputBuffer -1) m_maxRefList0Count = m_maxOutputBuffer -1; m_maxRefFrames = m_maxRefList0Count + m_maxRefList1Count; assert(m_maxRefFrames <= m_maxOutputBuffer); INFO("m_maxRefFrames: %d", m_maxRefFrames); resetGopStart(); }
/* Generates additional control parameters */ bool VaapiEncoderBase::ensureMiscParams (VaapiEncPicture* picture) { VAEncMiscParameterHRD* hrd; if (!picture->newMisc(VAEncMiscParameterTypeHRD, hrd)) return false; fill(hrd); VideoRateControl mode = rateControlMode(); if (mode == RATE_CONTROL_CBR || mode == RATE_CONTROL_VBR) { VAEncMiscParameterRateControl* rateControl; if (!picture->newMisc(VAEncMiscParameterTypeRateControl, rateControl)) return false; fill(rateControl); } return true; }
void VaapiEncoderH264::resetParams () { m_levelIdc = level(); DEBUG("resetParams, ensureCodedBufferSize"); ensureCodedBufferSize(); if (ipPeriod() == 0) m_videoParamCommon.intraPeriod = 1; else m_numBFrames = ipPeriod() - 1; assert(intraPeriod() > ipPeriod()); if (keyFramePeriod() < intraPeriod()) keyFramePeriod() = intraPeriod(); if (keyFramePeriod() > MAX_IDR_PERIOD) keyFramePeriod() = MAX_IDR_PERIOD; if (minQP() > initQP() || (rateControlMode()== RATE_CONTROL_CQP && minQP() < initQP())) minQP() = initQP(); if (m_numBFrames > (intraPeriod() + 1) / 2) m_numBFrames = (intraPeriod() + 1) / 2; /* init m_maxFrameNum, max_poc */ m_log2MaxFrameNum = h264_get_log2_max_frame_num (keyFramePeriod()); assert (m_log2MaxFrameNum >= 4); m_maxFrameNum = (1 << m_log2MaxFrameNum); m_log2MaxPicOrderCnt = m_log2MaxFrameNum + 1; m_maxPicOrderCnt = (1 << m_log2MaxPicOrderCnt); m_maxRefList0Count = 1; m_maxRefList1Count = m_numBFrames > 0; m_maxRefFrames = m_maxRefList0Count + m_maxRefList1Count; INFO("m_maxRefFrames: %d", m_maxRefFrames); resetGopStart(); }