diff options
author | John Koleszar <jkoleszar@google.com> | 2011-08-20 00:05:13 -0400 |
---|---|---|
committer | John Koleszar <jkoleszar@google.com> | 2011-08-20 00:05:14 -0400 |
commit | c08e65a6718ee0c0caa837aaf668be6998d2c1e5 (patch) | |
tree | 4f302e7b0e106566577a6ca149f2126732b17415 /vp8/common | |
parent | 7cb5a750311048245130ce093309d0402bb438c2 (diff) | |
parent | 2f964bac26340746d4e40f69cff61074770b81ba (diff) | |
download | libvpx-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.c | 54 | ||||
-rw-r--r-- | vp8/common/extend.h | 4 |
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 |