Commit 1ec44505 authored by Minghai Shang's avatar Minghai Shang
Browse files

Bug fix for svc first pass rate control.

1. We didn't scale source image in lower layers so that
the stats are incorrect.
2. We didn't extend borders for re-constructed image.

Change-Id: Ia8d7bafbdb695ffa7f504e171f9449812e7bb0a3
parent 400973c3
......@@ -532,6 +532,9 @@ void vp9_first_pass(VP9_COMP *cpi) {
// Disable golden frame for svc first pass for now.
gld_yv12 = NULL;
set_ref_ptrs(cm, xd, ref_frame, NONE);
cpi->Source = vp9_scale_if_required(cm, cpi->un_scaled_source,
&cpi->scaled_source);
}
vp9_setup_src_planes(x, cpi->Source, 0, 0);
......@@ -848,6 +851,8 @@ void vp9_first_pass(VP9_COMP *cpi) {
++twopass->sr_update_lag;
}
vp9_extend_frame_borders(new_yv12);
if (cpi->use_svc && cpi->svc.number_temporal_layers == 1) {
vp9_update_reference_frames(cpi);
} else {
......@@ -855,8 +860,6 @@ void vp9_first_pass(VP9_COMP *cpi) {
swap_yv12(lst_yv12, new_yv12);
}
vp9_extend_frame_borders(lst_yv12);
// Special case for the first frame. Copy into the GF buffer as a second
// reference.
if (cm->current_video_frame == 0 && gld_yv12 != NULL) {
......
......@@ -2209,8 +2209,9 @@ static void set_ext_overrides(VP9_COMP *cpi) {
}
}
static YV12_BUFFER_CONFIG *scale_if_required(VP9_COMMON *cm,
YV12_BUFFER_CONFIG *unscaled, YV12_BUFFER_CONFIG *scaled) {
YV12_BUFFER_CONFIG *vp9_scale_if_required(VP9_COMMON *cm,
YV12_BUFFER_CONFIG *unscaled,
YV12_BUFFER_CONFIG *scaled) {
if (cm->mi_cols * MI_SIZE != unscaled->y_width ||
cm->mi_rows * MI_SIZE != unscaled->y_height) {
scale_and_extend_frame_nonnormative(unscaled, scaled);
......@@ -2235,12 +2236,12 @@ static void encode_frame_to_data_rate(VP9_COMP *cpi,
struct segmentation *const seg = &cm->seg;
set_ext_overrides(cpi);
cpi->Source = scale_if_required(cm, cpi->un_scaled_source,
&cpi->scaled_source);
cpi->Source = vp9_scale_if_required(cm, cpi->un_scaled_source,
&cpi->scaled_source);
if (cpi->unscaled_last_source != NULL)
cpi->Last_Source = scale_if_required(cm, cpi->unscaled_last_source,
&cpi->scaled_last_source);
cpi->Last_Source = vp9_scale_if_required(cm, cpi->unscaled_last_source,
&cpi->scaled_last_source);
vp9_scale_references(cpi);
......
......@@ -618,6 +618,10 @@ void vp9_update_reference_frames(VP9_COMP *cpi);
int64_t vp9_rescale(int64_t val, int64_t num, int denom);
YV12_BUFFER_CONFIG *vp9_scale_if_required(VP9_COMMON *cm,
YV12_BUFFER_CONFIG *unscaled,
YV12_BUFFER_CONFIG *scaled);
static INLINE void set_ref_ptrs(VP9_COMMON *cm, MACROBLOCKD *xd,
MV_REFERENCE_FRAME ref0,
MV_REFERENCE_FRAME ref1) {
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment