On Fri, Dec 9, 2016 at 2:21 PM, Charles, Daniel <[email protected]> wrote: > On Thu, Dec 8, 2016 at 2:57 PM, Mark Thompson <[email protected]> wrote: >> Signed-off-by: Mark Thompson <[email protected]> >> --- >> src/gen6_mfc.h | 6 ------ >> src/gen8_mfc.c | 64 >> ++++++++++++---------------------------------------------- >> 2 files changed, 13 insertions(+), 57 deletions(-) >> >> diff --git a/src/gen6_mfc.h b/src/gen6_mfc.h >> index 290922b..7a5d940 100644 >> --- a/src/gen6_mfc.h >> +++ b/src/gen6_mfc.h >> @@ -235,12 +235,6 @@ struct gen6_mfc_context >> double qpf_rounding_accumulator[MAX_TEMPORAL_LAYERS]; >> int bits_prev_frame[MAX_TEMPORAL_LAYERS]; >> int prev_slice_type[MAX_TEMPORAL_LAYERS]; >> - >> - double saved_bps; >> - double saved_fps; >> - int saved_intra_period; >> - int saved_ip_period; >> - int saved_idr_period; >> } brc; >> >> struct { >> diff --git a/src/gen8_mfc.c b/src/gen8_mfc.c >> index d1de92c..b0e7b08 100644 >> --- a/src/gen8_mfc.c >> +++ b/src/gen8_mfc.c >> @@ -3324,12 +3324,8 @@ static void gen8_mfc_vp8_brc_init(struct encode_state >> *encode_state, >> { >> struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; >> VAEncSequenceParameterBufferVP8 *seq_param = >> (VAEncSequenceParameterBufferVP8 *)encode_state->seq_param_ext->buffer; >> - VAEncMiscParameterBuffer* misc_param_hrd = >> (VAEncMiscParameterBuffer*)encode_state->misc_param[VAEncMiscParameterTypeHRD][0]->buffer; >> - VAEncMiscParameterHRD* param_hrd = >> (VAEncMiscParameterHRD*)misc_param_hrd->data; >> - VAEncMiscParameterBuffer* misc_param_frame_rate_buffer = >> (VAEncMiscParameterBuffer*)encode_state->misc_param[VAEncMiscParameterTypeFrameRate][0]->buffer; >> - VAEncMiscParameterFrameRate* param_frame_rate = >> (VAEncMiscParameterFrameRate*)misc_param_frame_rate_buffer->data; >> double bitrate = seq_param->bits_per_second; >> - unsigned int frame_rate = param_frame_rate->framerate; >> + double framerate = (double)encoder_context->brc.framerate_num[0] / >> (double)encoder_context->brc.framerate_den[0]; >> int inum = 1, pnum = 0; >> int intra_period = seq_param->intra_period; >> int width_in_mbs = ALIGN(seq_param->frame_width, 16) / 16; >> @@ -3340,14 +3336,14 @@ static void gen8_mfc_vp8_brc_init(struct >> encode_state *encode_state, >> >> mfc_context->brc.mode = encoder_context->rate_control_mode; >> >> - mfc_context->brc.target_frame_size[0][SLICE_TYPE_I] = >> (int)((double)((bitrate * intra_period)/frame_rate) / >> + mfc_context->brc.target_frame_size[0][SLICE_TYPE_I] = >> (int)((double)((bitrate * intra_period) / framerate) / >> (double)(inum >> + BRC_PWEIGHT * pnum )); >> mfc_context->brc.target_frame_size[0][SLICE_TYPE_P] = BRC_PWEIGHT * >> mfc_context->brc.target_frame_size[0][SLICE_TYPE_I]; >> >> mfc_context->brc.gop_nums[0][SLICE_TYPE_I] = inum; >> mfc_context->brc.gop_nums[0][SLICE_TYPE_P] = pnum; >> >> - mfc_context->brc.bits_per_frame[0] = bitrate/frame_rate; >> + mfc_context->brc.bits_per_frame[0] = bitrate / framerate; >> >> mfc_context->brc.qp_prime_y[0][SLICE_TYPE_I] = >> gen8_mfc_vp8_qindex_estimate(encode_state, >> >> mfc_context, >> @@ -3358,10 +3354,15 @@ static void gen8_mfc_vp8_brc_init(struct >> encode_state *encode_state, >> >> mfc_context->brc.target_frame_size[0][SLICE_TYPE_P], >> >> 0); >> >> - mfc_context->hrd.buffer_size[0] = (double)param_hrd->buffer_size; >> - mfc_context->hrd.current_buffer_fullness[0] = >> - (double)(param_hrd->initial_buffer_fullness < >> mfc_context->hrd.buffer_size[0])? >> - param_hrd->initial_buffer_fullness: >> mfc_context->hrd.buffer_size[0]/2.; >> + if (encoder_context->brc.hrd_buffer_size) >> + mfc_context->hrd.buffer_size[0] = >> (double)encoder_context->brc.hrd_buffer_size; >> + else >> + mfc_context->hrd.buffer_size[0] = 2.0 * bitrate; >> + if (encoder_context->brc.hrd_initial_buffer_fullness && >> + encoder_context->brc.hrd_initial_buffer_fullness < >> mfc_context->hrd.buffer_size[0]) >> + mfc_context->hrd.current_buffer_fullness[0] = >> (double)encoder_context->brc.hrd_initial_buffer_fullness; >> + else >> + mfc_context->hrd.current_buffer_fullness[0] = >> mfc_context->hrd.buffer_size[0] / 2.0; >> mfc_context->hrd.target_buffer_fullness[0] = >> (double)mfc_context->hrd.buffer_size[0]/2.; >> mfc_context->hrd.buffer_capacity[0] = >> (double)mfc_context->hrd.buffer_size[0]/max_frame_size; >> mfc_context->hrd.violation_noted = 0; >> @@ -3509,45 +3510,6 @@ static void gen8_mfc_vp8_hrd_context_update(struct >> encode_state *encode_state, >> mfc_context->vui_hrd.i_frame_number++; >> } >> >> -/* >> - * Check whether the parameters related with CBR are updated and decide >> whether >> - * it needs to reinitialize the configuration related with CBR. >> - * Currently it will check the following parameters: >> - * bits_per_second >> - * frame_rate >> - * gop_configuration(intra_period, ip_period, intra_idr_period) >> - */ >> -static bool gen8_mfc_vp8_brc_updated_check(struct encode_state >> *encode_state, >> - struct intel_encoder_context *encoder_context) >> -{ >> - unsigned int rate_control_mode = encoder_context->rate_control_mode; >> - struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; >> - double cur_fps, cur_bitrate; >> - VAEncSequenceParameterBufferVP8 *seq_param = >> (VAEncSequenceParameterBufferVP8 *)encode_state->seq_param_ext->buffer; >> - VAEncMiscParameterBuffer *misc_param_frame_rate_buf = >> (VAEncMiscParameterBuffer*)encode_state->misc_param[VAEncMiscParameterTypeFrameRate][0]->buffer; >> - VAEncMiscParameterFrameRate *param_frame_rate = >> (VAEncMiscParameterFrameRate*)misc_param_frame_rate_buf->data; >> - unsigned int frame_rate = param_frame_rate->framerate; >> - >> - if (rate_control_mode != VA_RC_CBR) { >> - return false; >> - } >> - >> - cur_bitrate = seq_param->bits_per_second; >> - cur_fps = frame_rate; >> - >> - if ((cur_bitrate == mfc_context->brc.saved_bps) && >> - (cur_fps == mfc_context->brc.saved_fps) && >> - (seq_param->intra_period == mfc_context->brc.saved_intra_period)) { >> - /* the parameters related with CBR are not updaetd */ >> - return false; >> - } >> - >> - mfc_context->brc.saved_intra_period = seq_param->intra_period; >> - mfc_context->brc.saved_fps = cur_fps; >> - mfc_context->brc.saved_bps = cur_bitrate; >> - return true; >> -} >> - >> static void gen8_mfc_vp8_brc_prepare(struct encode_state *encode_state, >> struct intel_encoder_context *encoder_context) >> { >> @@ -3557,7 +3519,7 @@ static void gen8_mfc_vp8_brc_prepare(struct >> encode_state *encode_state, >> bool brc_updated; >> assert(encoder_context->codec != CODEC_MPEG2); >> >> - brc_updated = gen8_mfc_vp8_brc_updated_check(encode_state, >> encoder_context); >> + brc_updated = encoder_context->brc.need_reset; >> >> /*Programing bit rate control */ >> if (brc_updated) { > > This patch fails to compile like this > > i965_encoder_vp8.c:2768:68: error: ‘struct <anonymous>’ has no member > named ‘framerate_per_100s’
Nevermind this report, this file has nothing to do here -- Daniel. > > -- > Daniel. > > >> -- >> 2.10.2 >> _______________________________________________ >> Libva mailing list >> [email protected] >> https://lists.freedesktop.org/mailman/listinfo/libva _______________________________________________ Libva mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libva
