diff options
author | Xiang, Haihao <haihao.xiang@intel.com> | 2016-10-24 12:49:39 +0800 |
---|---|---|
committer | Xiang, Haihao <haihao.xiang@intel.com> | 2016-10-31 10:00:08 +0800 |
commit | ad5869ffafad3d569930706a74807e2bce7e44dd (patch) | |
tree | 505ef6945164dedfaf01a320b51f3f8ef534adcc | |
parent | 45f4f59bc00aae8d15879f82683276b7f95f580a (diff) | |
download | libva-intel-driver-ad5869ffafad3d569930706a74807e2bce7e44dd.tar.gz |
svct: Save the current frame size per layer
Use the the right previous frame size to estimate a QP for next frame in the
same layer
Signed-off-by: Xiang, Haihao <haihao.xiang@intel.com>
Reviewed-by: Sean V Kelley <seanvk@posteo.de>
(cherry picked from commit 495e905a7c6e05c3b6a9c0c81f153f56aafcb759)
-rw-r--r-- | src/gen6_mfc.h | 1 | ||||
-rw-r--r-- | src/gen6_mfc_common.c | 7 |
2 files changed, 8 insertions, 0 deletions
diff --git a/src/gen6_mfc.h b/src/gen6_mfc.h index e0972bb7..e68c5c59 100644 --- a/src/gen6_mfc.h +++ b/src/gen6_mfc.h @@ -233,6 +233,7 @@ struct gen6_mfc_context int qp_prime_y[MAX_TEMPORAL_LAYERS][3]; double bits_per_frame[MAX_TEMPORAL_LAYERS]; double qpf_rounding_accumulator[MAX_TEMPORAL_LAYERS]; + int bits_prev_frame[MAX_TEMPORAL_LAYERS]; double saved_bps; double saved_fps; diff --git a/src/gen6_mfc_common.c b/src/gen6_mfc_common.c index fbce493e..a38c6d02 100644 --- a/src/gen6_mfc_common.c +++ b/src/gen6_mfc_common.c @@ -225,11 +225,18 @@ int intel_mfc_brc_postpack(struct encode_state *encode_state, next_frame_layer_id = curr_frame_layer_id; } + mfc_context->brc.bits_prev_frame[curr_frame_layer_id] = frame_bits; + frame_bits = mfc_context->brc.bits_prev_frame[next_frame_layer_id]; + if (encoder_context->layer.num_layers < 2 || encoder_context->layer.size_frame_layer_ids == 0) factor = 1.0; else factor = (double)encoder_context->brc.framerate_per_100s[next_frame_layer_id] / encoder_context->brc.framerate_per_100s[encoder_context->layer.num_layers - 1]; + /* 0 means the next frame is the first frame of next layer */ + if (frame_bits == 0) + return sts; + qpi = mfc_context->brc.qp_prime_y[next_frame_layer_id][SLICE_TYPE_I]; qpp = mfc_context->brc.qp_prime_y[next_frame_layer_id][SLICE_TYPE_P]; qpb = mfc_context->brc.qp_prime_y[next_frame_layer_id][SLICE_TYPE_B]; |