summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMinghai Shang <minghai@google.com>2014-04-22 10:59:55 -0700
committerGerrit Code Review <gerrit@gerrit.golo.chromium.org>2014-04-22 10:59:55 -0700
commitafc5636699cfef287a4693271e210359ea9a4101 (patch)
tree57590669a3ece9d050821825081ffa5066598f2d
parent4fa3e98876e0410b1d48942b9d26a0979b24f95a (diff)
parent1ec44505c9f37b35f3f4e630b7bc564eca7980d6 (diff)
downloadlibvpx-afc5636699cfef287a4693271e210359ea9a4101.tar
libvpx-afc5636699cfef287a4693271e210359ea9a4101.tar.gz
libvpx-afc5636699cfef287a4693271e210359ea9a4101.tar.bz2
libvpx-afc5636699cfef287a4693271e210359ea9a4101.zip
Merge "Bug fix for svc first pass rate control."
-rw-r--r--vp9/encoder/vp9_firstpass.c7
-rw-r--r--vp9/encoder/vp9_onyx_if.c13
-rw-r--r--vp9/encoder/vp9_onyx_int.h4
3 files changed, 16 insertions, 8 deletions
diff --git a/vp9/encoder/vp9_firstpass.c b/vp9/encoder/vp9_firstpass.c
index c6dc03be8..7a85a8e85 100644
--- a/vp9/encoder/vp9_firstpass.c
+++ b/vp9/encoder/vp9_firstpass.c
@@ -533,6 +533,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);
@@ -849,6 +852,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 {
@@ -856,8 +861,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) {
diff --git a/vp9/encoder/vp9_onyx_if.c b/vp9/encoder/vp9_onyx_if.c
index b4518a356..c94fff2d3 100644
--- a/vp9/encoder/vp9_onyx_if.c
+++ b/vp9/encoder/vp9_onyx_if.c
@@ -2083,8 +2083,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);
@@ -2109,12 +2110,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);
diff --git a/vp9/encoder/vp9_onyx_int.h b/vp9/encoder/vp9_onyx_int.h
index 7b728d75b..4e78ba9a5 100644
--- a/vp9/encoder/vp9_onyx_int.h
+++ b/vp9/encoder/vp9_onyx_int.h
@@ -617,6 +617,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) {