| Index: source/libvpx/vpx_scale/generic/yv12extend.c
|
| ===================================================================
|
| --- source/libvpx/vpx_scale/generic/yv12extend.c (revision 219822)
|
| +++ source/libvpx/vpx_scale/generic/yv12extend.c (working copy)
|
| @@ -10,67 +10,52 @@
|
|
|
| #include <assert.h>
|
| #include "./vpx_config.h"
|
| -#include "vpx_scale/yv12config.h"
|
| +#include "vpx/vpx_integer.h"
|
| #include "vpx_mem/vpx_mem.h"
|
| -#include "vpx_scale/vpx_scale.h"
|
| +#include "vpx_scale/yv12config.h"
|
|
|
| -/****************************************************************************
|
| -* Exports
|
| -****************************************************************************/
|
| -
|
| -/****************************************************************************
|
| - *
|
| - ****************************************************************************/
|
| -static void extend_plane(uint8_t *s, /* source */
|
| - int sp, /* source pitch */
|
| - int w, /* width */
|
| - int h, /* height */
|
| - int et, /* extend top border */
|
| - int el, /* extend left border */
|
| - int eb, /* extend bottom border */
|
| - int er) { /* extend right border */
|
| +static void extend_plane(uint8_t *const src, int src_stride,
|
| + int width, int height,
|
| + int extend_top, int extend_left,
|
| + int extend_bottom, int extend_right) {
|
| int i;
|
| - uint8_t *src_ptr1, *src_ptr2;
|
| - uint8_t *dest_ptr1, *dest_ptr2;
|
| - int linesize;
|
| + const int linesize = extend_left + extend_right + width;
|
|
|
| /* copy the left and right most columns out */
|
| - src_ptr1 = s;
|
| - src_ptr2 = s + w - 1;
|
| - dest_ptr1 = s - el;
|
| - dest_ptr2 = s + w;
|
| + uint8_t *src_ptr1 = src;
|
| + uint8_t *src_ptr2 = src + width - 1;
|
| + uint8_t *dst_ptr1 = src - extend_left;
|
| + uint8_t *dst_ptr2 = src + width;
|
|
|
| - for (i = 0; i < h; i++) {
|
| - vpx_memset(dest_ptr1, src_ptr1[0], el);
|
| - vpx_memset(dest_ptr2, src_ptr2[0], er);
|
| - src_ptr1 += sp;
|
| - src_ptr2 += sp;
|
| - dest_ptr1 += sp;
|
| - dest_ptr2 += sp;
|
| + for (i = 0; i < height; ++i) {
|
| + vpx_memset(dst_ptr1, src_ptr1[0], extend_left);
|
| + vpx_memset(dst_ptr2, src_ptr2[0], extend_right);
|
| + src_ptr1 += src_stride;
|
| + src_ptr2 += src_stride;
|
| + dst_ptr1 += src_stride;
|
| + dst_ptr2 += src_stride;
|
| }
|
|
|
| /* Now copy the top and bottom lines into each line of the respective
|
| * borders
|
| */
|
| - src_ptr1 = s - el;
|
| - src_ptr2 = s + sp * (h - 1) - el;
|
| - dest_ptr1 = s + sp * (-et) - el;
|
| - dest_ptr2 = s + sp * (h) - el;
|
| - linesize = el + er + w;
|
| + src_ptr1 = src - extend_left;
|
| + src_ptr2 = src + src_stride * (height - 1) - extend_left;
|
| + dst_ptr1 = src + src_stride * -extend_top - extend_left;
|
| + dst_ptr2 = src + src_stride * height - extend_left;
|
|
|
| - for (i = 0; i < et; i++) {
|
| - vpx_memcpy(dest_ptr1, src_ptr1, linesize);
|
| - dest_ptr1 += sp;
|
| + for (i = 0; i < extend_top; ++i) {
|
| + vpx_memcpy(dst_ptr1, src_ptr1, linesize);
|
| + dst_ptr1 += src_stride;
|
| }
|
|
|
| - for (i = 0; i < eb; i++) {
|
| - vpx_memcpy(dest_ptr2, src_ptr2, linesize);
|
| - dest_ptr2 += sp;
|
| + for (i = 0; i < extend_bottom; ++i) {
|
| + vpx_memcpy(dst_ptr2, src_ptr2, linesize);
|
| + dst_ptr2 += src_stride;
|
| }
|
| }
|
|
|
| -void
|
| -vp8_yv12_extend_frame_borders_c(YV12_BUFFER_CONFIG *ybf) {
|
| +void vp8_yv12_extend_frame_borders_c(YV12_BUFFER_CONFIG *ybf) {
|
| assert(ybf->y_height - ybf->y_crop_height < 16);
|
| assert(ybf->y_width - ybf->y_crop_width < 16);
|
| assert(ybf->y_height - ybf->y_crop_height >= 0);
|
| @@ -96,9 +81,9 @@
|
| }
|
|
|
| #if CONFIG_VP9
|
| -static void extend_frame(YV12_BUFFER_CONFIG *ybf,
|
| - int subsampling_x, int subsampling_y,
|
| - int ext_size) {
|
| +static void extend_frame(YV12_BUFFER_CONFIG *const ybf,
|
| + int subsampling_x, int subsampling_y,
|
| + int ext_size) {
|
| const int c_w = (ybf->y_crop_width + subsampling_x) >> subsampling_x;
|
| const int c_h = (ybf->y_crop_height + subsampling_y) >> subsampling_y;
|
| const int c_et = ext_size >> subsampling_y;
|
| @@ -126,7 +111,6 @@
|
| c_w, c_h, c_et, c_el, c_eb, c_er);
|
| }
|
|
|
| -
|
| void vp9_extend_frame_borders_c(YV12_BUFFER_CONFIG *ybf,
|
| int subsampling_x, int subsampling_y) {
|
| extend_frame(ybf, subsampling_x, subsampling_y, ybf->border);
|
| @@ -134,33 +118,20 @@
|
|
|
| void vp9_extend_frame_inner_borders_c(YV12_BUFFER_CONFIG *ybf,
|
| int subsampling_x, int subsampling_y) {
|
| - const int inner_bw = ybf->border > VP9INNERBORDERINPIXLES ?
|
| - VP9INNERBORDERINPIXLES : ybf->border;
|
| + const int inner_bw = (ybf->border > VP9INNERBORDERINPIXELS) ?
|
| + VP9INNERBORDERINPIXELS : ybf->border;
|
| extend_frame(ybf, subsampling_x, subsampling_y, inner_bw);
|
| }
|
| -#endif
|
| +#endif // CONFIG_VP9
|
|
|
| -/****************************************************************************
|
| - *
|
| - * ROUTINE : vp8_yv12_copy_frame
|
| - *
|
| - * INPUTS :
|
| - *
|
| - * OUTPUTS : None.
|
| - *
|
| - * RETURNS : void
|
| - *
|
| - * FUNCTION : Copies the source image into the destination image and
|
| - * updates the destination's UMV borders.
|
| - *
|
| - * SPECIAL NOTES : The frames are assumed to be identical in size.
|
| - *
|
| - ****************************************************************************/
|
| -void
|
| -vp8_yv12_copy_frame_c(YV12_BUFFER_CONFIG *src_ybc,
|
| - YV12_BUFFER_CONFIG *dst_ybc) {
|
| +// Copies the source image into the destination image and updates the
|
| +// destination's UMV borders.
|
| +// Note: The frames are assumed to be identical in size.
|
| +void vp8_yv12_copy_frame_c(const YV12_BUFFER_CONFIG *src_ybc,
|
| + YV12_BUFFER_CONFIG *dst_ybc) {
|
| int row;
|
| - unsigned char *source, *dest;
|
| + const uint8_t *src = src_ybc->y_buffer;
|
| + uint8_t *dst = dst_ybc->y_buffer;
|
|
|
| #if 0
|
| /* These assertions are valid in the codec, but the libvpx-tester uses
|
| @@ -170,48 +141,42 @@
|
| assert(src_ybc->y_height == dst_ybc->y_height);
|
| #endif
|
|
|
| - source = src_ybc->y_buffer;
|
| - dest = dst_ybc->y_buffer;
|
| -
|
| - for (row = 0; row < src_ybc->y_height; row++) {
|
| - vpx_memcpy(dest, source, src_ybc->y_width);
|
| - source += src_ybc->y_stride;
|
| - dest += dst_ybc->y_stride;
|
| + for (row = 0; row < src_ybc->y_height; ++row) {
|
| + vpx_memcpy(dst, src, src_ybc->y_width);
|
| + src += src_ybc->y_stride;
|
| + dst += dst_ybc->y_stride;
|
| }
|
|
|
| - source = src_ybc->u_buffer;
|
| - dest = dst_ybc->u_buffer;
|
| + src = src_ybc->u_buffer;
|
| + dst = dst_ybc->u_buffer;
|
|
|
| - for (row = 0; row < src_ybc->uv_height; row++) {
|
| - vpx_memcpy(dest, source, src_ybc->uv_width);
|
| - source += src_ybc->uv_stride;
|
| - dest += dst_ybc->uv_stride;
|
| + for (row = 0; row < src_ybc->uv_height; ++row) {
|
| + vpx_memcpy(dst, src, src_ybc->uv_width);
|
| + src += src_ybc->uv_stride;
|
| + dst += dst_ybc->uv_stride;
|
| }
|
|
|
| - source = src_ybc->v_buffer;
|
| - dest = dst_ybc->v_buffer;
|
| + src = src_ybc->v_buffer;
|
| + dst = dst_ybc->v_buffer;
|
|
|
| - for (row = 0; row < src_ybc->uv_height; row++) {
|
| - vpx_memcpy(dest, source, src_ybc->uv_width);
|
| - source += src_ybc->uv_stride;
|
| - dest += dst_ybc->uv_stride;
|
| + for (row = 0; row < src_ybc->uv_height; ++row) {
|
| + vpx_memcpy(dst, src, src_ybc->uv_width);
|
| + src += src_ybc->uv_stride;
|
| + dst += dst_ybc->uv_stride;
|
| }
|
|
|
| vp8_yv12_extend_frame_borders_c(dst_ybc);
|
| }
|
|
|
| -void vp8_yv12_copy_y_c(YV12_BUFFER_CONFIG *src_ybc,
|
| +void vpx_yv12_copy_y_c(const YV12_BUFFER_CONFIG *src_ybc,
|
| YV12_BUFFER_CONFIG *dst_ybc) {
|
| int row;
|
| - unsigned char *source, *dest;
|
| + const uint8_t *src = src_ybc->y_buffer;
|
| + uint8_t *dst = dst_ybc->y_buffer;
|
|
|
| -
|
| - source = src_ybc->y_buffer;
|
| - dest = dst_ybc->y_buffer;
|
| -
|
| - for (row = 0; row < src_ybc->y_height; row++) {
|
| - vpx_memcpy(dest, source, src_ybc->y_width);
|
| - source += src_ybc->y_stride;
|
| - dest += dst_ybc->y_stride;
|
| + for (row = 0; row < src_ybc->y_height; ++row) {
|
| + vpx_memcpy(dst, src, src_ybc->y_width);
|
| + src += src_ybc->y_stride;
|
| + dst += dst_ybc->y_stride;
|
| }
|
| }
|
|
|