summaryrefslogtreecommitdiff
path: root/vp9/common/vp9_alloccommon.c
diff options
context:
space:
mode:
authorJohn Koleszar <jkoleszar@google.com>2013-03-13 17:09:05 -0700
committerGerrit Code Review <gerrit@gerrit.golo.chromium.org>2013-03-13 19:10:10 -0700
commit9b7be888839c884451646905bd54b5861aac592b (patch)
treee89260e1a8dc81f15c27f68a8d9368aecf4a3b7c /vp9/common/vp9_alloccommon.c
parentb3c350a1a99ac89e81cff77d82a9a11c0a762600 (diff)
downloadlibvpx-9b7be888839c884451646905bd54b5861aac592b.tar
libvpx-9b7be888839c884451646905bd54b5861aac592b.tar.gz
libvpx-9b7be888839c884451646905bd54b5861aac592b.tar.bz2
libvpx-9b7be888839c884451646905bd54b5861aac592b.zip
Fix pulsing issue with scaling
Updates the YV12_BUFFER_CONFIG structure to be crop-aware. The exiting width/height parameters are left unchanged, storing the width and height algined to a 16 byte boundary. The cropped dimensions are added as new fields. This fixes a nasty visual pulse when switching between scaled and unscaled frame dimensions due to a mismatch between the scaling ratio and the 16-byte aligned sizes. Change-Id: Id4a3f6aea6b9b9ae38bdfa1b87b7eb2cfcdd57b6
Diffstat (limited to 'vp9/common/vp9_alloccommon.c')
-rw-r--r--vp9/common/vp9_alloccommon.c13
1 files changed, 5 insertions, 8 deletions
diff --git a/vp9/common/vp9_alloccommon.c b/vp9/common/vp9_alloccommon.c
index c3d6dae93..15c8c0d64 100644
--- a/vp9/common/vp9_alloccommon.c
+++ b/vp9/common/vp9_alloccommon.c
@@ -67,16 +67,13 @@ void vp9_de_alloc_frame_buffers(VP9_COMMON *oci) {
int vp9_alloc_frame_buffers(VP9_COMMON *oci, int width, int height) {
int i;
+ int aligned_width, aligned_height;
vp9_de_alloc_frame_buffers(oci);
/* our internal buffers are always multiples of 16 */
- if ((width & 0xf) != 0)
- width += 16 - (width & 0xf);
-
- if ((height & 0xf) != 0)
- height += 16 - (height & 0xf);
-
+ aligned_width = (width + 15) & ~15;
+ aligned_height = (height + 15) & ~15;
for (i = 0; i < NUM_YV12_BUFFERS; i++) {
oci->fb_idx_ref_cnt[i] = 0;
@@ -110,8 +107,8 @@ int vp9_alloc_frame_buffers(VP9_COMMON *oci, int width, int height) {
return 1;
}
- oci->mb_rows = height >> 4;
- oci->mb_cols = width >> 4;
+ oci->mb_rows = aligned_height >> 4;
+ oci->mb_cols = aligned_width >> 4;
oci->MBs = oci->mb_rows * oci->mb_cols;
oci->mode_info_stride = oci->mb_cols + 1;
oci->mip = vpx_calloc((oci->mb_cols + 1) * (oci->mb_rows + 1), sizeof(MODE_INFO));