summaryrefslogtreecommitdiff
path: root/vp8/common
diff options
context:
space:
mode:
authorJohn Koleszar <jkoleszar@google.com>2011-08-20 00:05:13 -0400
committerJohn Koleszar <jkoleszar@google.com>2011-08-20 00:05:14 -0400
commitc08e65a6718ee0c0caa837aaf668be6998d2c1e5 (patch)
tree4f302e7b0e106566577a6ca149f2126732b17415 /vp8/common
parent7cb5a750311048245130ce093309d0402bb438c2 (diff)
parent2f964bac26340746d4e40f69cff61074770b81ba (diff)
downloadlibvpx-c08e65a6718ee0c0caa837aaf668be6998d2c1e5.tar
libvpx-c08e65a6718ee0c0caa837aaf668be6998d2c1e5.tar.gz
libvpx-c08e65a6718ee0c0caa837aaf668be6998d2c1e5.tar.bz2
libvpx-c08e65a6718ee0c0caa837aaf668be6998d2c1e5.zip
Merge remote branch 'origin/master' into experimental
Change-Id: Iefa9c3e87ff25d92093eb949e23d5a85f1b7de09
Diffstat (limited to 'vp8/common')
-rw-r--r--vp8/common/extend.c54
-rw-r--r--vp8/common/extend.h4
2 files changed, 58 insertions, 0 deletions
diff --git a/vp8/common/extend.c b/vp8/common/extend.c
index a2d325332..9089e1629 100644
--- a/vp8/common/extend.c
+++ b/vp8/common/extend.c
@@ -102,6 +102,60 @@ void vp8_copy_and_extend_frame(YV12_BUFFER_CONFIG *src,
}
+void vp8_copy_and_extend_frame_with_rect(YV12_BUFFER_CONFIG *src,
+ YV12_BUFFER_CONFIG *dst,
+ int srcy, int srcx,
+ int srch, int srcw)
+{
+ int et = dst->border;
+ int el = dst->border;
+ int eb = dst->border + dst->y_height - src->y_height;
+ int er = dst->border + dst->y_width - src->y_width;
+ int src_y_offset = srcy * src->y_stride + srcx;
+ int dst_y_offset = srcy * dst->y_stride + srcx;
+ int src_uv_offset = ((srcy * src->uv_stride) >> 1) + (srcx >> 1);
+ int dst_uv_offset = ((srcy * dst->uv_stride) >> 1) + (srcx >> 1);
+
+ // If the side is not touching the bounder then don't extend.
+ if (srcy)
+ et = 0;
+ if (srcx)
+ el = 0;
+ if (srcy + srch != src->y_height)
+ eb = 0;
+ if (srcx + srcw != src->y_width)
+ er = 0;
+
+ copy_and_extend_plane(src->y_buffer + src_y_offset,
+ src->y_stride,
+ dst->y_buffer + dst_y_offset,
+ dst->y_stride,
+ srch, srcw,
+ et, el, eb, er);
+
+ et = (et + 1) >> 1;
+ el = (el + 1) >> 1;
+ eb = (eb + 1) >> 1;
+ er = (er + 1) >> 1;
+ srch = (srch + 1) >> 1;
+ srcw = (srcw + 1) >> 1;
+
+ copy_and_extend_plane(src->u_buffer + src_uv_offset,
+ src->uv_stride,
+ dst->u_buffer + dst_uv_offset,
+ dst->uv_stride,
+ srch, srcw,
+ et, el, eb, er);
+
+ copy_and_extend_plane(src->v_buffer + src_uv_offset,
+ src->uv_stride,
+ dst->v_buffer + dst_uv_offset,
+ dst->uv_stride,
+ srch, srcw,
+ et, el, eb, er);
+}
+
+
/* note the extension is only for the last row, for intra prediction purpose */
void vp8_extend_mb_row(YV12_BUFFER_CONFIG *ybf, unsigned char *YPtr, unsigned char *UPtr, unsigned char *VPtr)
{
diff --git a/vp8/common/extend.h b/vp8/common/extend.h
index 9e0be4e06..74a0b177d 100644
--- a/vp8/common/extend.h
+++ b/vp8/common/extend.h
@@ -17,5 +17,9 @@
void vp8_extend_mb_row(YV12_BUFFER_CONFIG *ybf, unsigned char *YPtr, unsigned char *UPtr, unsigned char *VPtr);
void vp8_copy_and_extend_frame(YV12_BUFFER_CONFIG *src,
YV12_BUFFER_CONFIG *dst);
+void vp8_copy_and_extend_frame_with_rect(YV12_BUFFER_CONFIG *src,
+ YV12_BUFFER_CONFIG *dst,
+ int srcy, int srcx,
+ int srch, int srcw);
#endif