Encode_Status VaapiEncoderH264::getParameters(VideoParamConfigType type, Yami_PTR videoEncParams) { Encode_Status status = ENCODE_INVALID_PARAMS; AutoLock locker(m_paramLock); FUNC_ENTER(); if (!videoEncParams) return status; switch (type) { case VideoParamsTypeAVC: { VideoParamsAVC* avc = (VideoParamsAVC*)videoEncParams; if (avc->size == sizeof(VideoParamsAVC)) { PARAMETER_ASSIGN(*avc, m_videoParamAVC); status = ENCODE_SUCCESS; } } break; case VideoConfigTypeAVCStreamFormat: { VideoConfigAVCStreamFormat* format = (VideoConfigAVCStreamFormat*)videoEncParams; if (format->size == sizeof(VideoConfigAVCStreamFormat)) { format->streamFormat = m_streamFormat; status = ENCODE_SUCCESS; } } break; default: status = VaapiEncoderBase::getParameters(type, videoEncParams); break; } // TODO, update video resolution basing on hw requirement status = VaapiEncoderBase::getParameters(type, videoEncParams); return status; }
Encode_Status VaapiEncoderH264::setParameters(VideoParamConfigType type, Yami_PTR videoEncParams) { Encode_Status status = ENCODE_INVALID_PARAMS; AutoLock locker(m_paramLock); FUNC_ENTER(); if (!videoEncParams) return ENCODE_INVALID_PARAMS; switch (type) { case VideoParamsTypeAVC: { VideoParamsAVC* avc = (VideoParamsAVC*)videoEncParams; if (avc->size == sizeof(VideoParamsAVC)) { PARAMETER_ASSIGN(m_videoParamAVC, *avc); status = ENCODE_SUCCESS; } } break; case VideoConfigTypeAVCStreamFormat: { VideoConfigAVCStreamFormat* format = (VideoConfigAVCStreamFormat*)videoEncParams; if (format->size == sizeof(VideoConfigAVCStreamFormat)) { m_streamFormat = format->streamFormat; status = ENCODE_SUCCESS; } } break; default: status = VaapiEncoderBase::setParameters(type, videoEncParams); break; } return status; }
Encode_Status VaapiEncoderBase::setParameters(VideoParamConfigType type, Yami_PTR videoEncParams) { FUNC_ENTER(); Encode_Status ret = ENCODE_SUCCESS; if (!videoEncParams) return ret; DEBUG("type = 0x%08x", type); switch (type) { case VideoParamsTypeCommon: { VideoParamsCommon* common = (VideoParamsCommon*)videoEncParams; if (common->size == sizeof(VideoParamsCommon)) { PARAMETER_ASSIGN(m_videoParamCommon, *common); if(m_videoParamCommon.rcParams.bitRate > 0) m_videoParamCommon.rcMode = RATE_CONTROL_CBR; // Only support CQP and CBR mode now if (m_videoParamCommon.rcMode != RATE_CONTROL_CBR) m_videoParamCommon.rcMode = RATE_CONTROL_CQP; } else ret = ENCODE_INVALID_PARAMS; m_maxCodedbufSize = 0; // resolution may change, recalculate max codec buffer size when it is requested break; } case VideoConfigTypeFrameRate: { VideoConfigFrameRate* frameRateConfig = (VideoConfigFrameRate*)videoEncParams; if (frameRateConfig->size == sizeof(VideoConfigFrameRate)) { m_videoParamCommon.frameRate = frameRateConfig->frameRate; } else ret = ENCODE_INVALID_PARAMS; } break; case VideoConfigTypeBitRate: { VideoConfigBitRate* rcParamsConfig = (VideoConfigBitRate*)videoEncParams; if (rcParamsConfig->size == sizeof(VideoConfigBitRate)) { m_videoParamCommon.rcParams = rcParamsConfig->rcParams; } else ret = ENCODE_INVALID_PARAMS; } break; default: ret = ENCODE_INVALID_PARAMS; break; } INFO("bitrate: %d", bitRate()); return ret; }
Encode_Status VaapiEncoderBase::getParameters(VideoParamConfigType type, Yami_PTR videoEncParams) { FUNC_ENTER(); Encode_Status ret = ENCODE_INVALID_PARAMS; if (!videoEncParams) return ret; DEBUG("type = 0x%08x", type); switch (type) { case VideoParamsTypeCommon: { VideoParamsCommon* common = (VideoParamsCommon*)videoEncParams; if (common->size == sizeof(VideoParamsCommon)) { PARAMETER_ASSIGN(*common, m_videoParamCommon); ret = ENCODE_SUCCESS; } break; } default: ret = ENCODE_SUCCESS; break; } return ret; }