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; }
bool VaapiEncoderH264::fill(VAEncSequenceParameterBufferH264* seqParam) const { seqParam->seq_parameter_set_id = 0; seqParam->level_idc = m_levelIdc; seqParam->intra_period = intraPeriod(); seqParam->intra_idr_period = seqParam->intra_period; seqParam->ip_period = 1 + m_numBFrames; seqParam->bits_per_second = bitRate(); seqParam->max_num_ref_frames = m_maxRefFrames; seqParam->picture_width_in_mbs = m_mbWidth; seqParam->picture_height_in_mbs = m_mbHeight; /*sequence field values */ seqParam->seq_fields.value = 0; seqParam->seq_fields.bits.chroma_format_idc = 1; seqParam->seq_fields.bits.frame_mbs_only_flag = 1; assert (m_log2MaxFrameNum >= 4); seqParam->seq_fields.bits.log2_max_frame_num_minus4 = m_log2MaxFrameNum - 4; /* picture order count */ seqParam->seq_fields.bits.pic_order_cnt_type = 0; assert (m_log2MaxPicOrderCnt >= 4); seqParam->seq_fields.bits.log2_max_pic_order_cnt_lsb_minus4 = m_log2MaxPicOrderCnt - 4; /* not used if pic_order_cnt_type == 0 */ if (seqParam->seq_fields.bits.pic_order_cnt_type == 1) { seqParam->seq_fields.bits.delta_pic_order_always_zero_flag = TRUE; } /* frame_cropping_flag */ const int cropRight = (16 * m_mbWidth - width()); const int cropBottom = (16 * m_mbHeight - height()); if (cropRight || cropBottom) { const int CHROMA_420 = 1; const int CHROMA_422 = 2; int chroma = seqParam->seq_fields.bits.chroma_format_idc; static const uint32_t subWidthC = (chroma == CHROMA_420 || chroma == CHROMA_422) ? 2 : 1; static const uint32_t subHeightC = chroma == CHROMA_420 ? 2 : 1; const uint32_t cropUnitX = subWidthC; const uint32_t cropUnitY = subHeightC * (2 - seqParam->seq_fields.bits.frame_mbs_only_flag); seqParam->frame_cropping_flag = 1; seqParam->frame_crop_right_offset = cropRight / cropUnitX; seqParam->frame_crop_bottom_offset = cropBottom / cropUnitY; } /* VUI parameters are always set, at least for timing_info (framerate) */ seqParam->vui_parameters_present_flag = TRUE; if (seqParam->vui_parameters_present_flag) { seqParam->vui_fields.bits.aspect_ratio_info_present_flag = FALSE; seqParam->vui_fields.bits.bitstream_restriction_flag = FALSE; seqParam->vui_fields.bits.timing_info_present_flag = TRUE; if (seqParam->vui_fields.bits.timing_info_present_flag) { seqParam->num_units_in_tick = frameRateDenom(); seqParam->time_scale = frameRateNum() * 2; } } return true; }
int Solid::Control::WirelessNetworkInterfaceNm09::bitRate() const { Q_D(const WirelessNetworkInterfaceNm09); return_SOLID_CALL(Ifaces::WirelessNetworkInterfaceNm09 *, d->backendObject(), 0, bitRate()); }
QString& TTAC3AudioHeader::bitRateString() { str_bit_rate->sprintf( "%d KBit/s", bitRate() ); return *str_bit_rate; }