filter.c revision 5ae7ac49f08a179e4f054d99fcfc9dce78d26e58
15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (c) 2010 The WebM project authors. All Rights Reserved. 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Use of this source code is governed by a BSD-style license 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * that can be found in the LICENSE file in the root of the source 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * tree. An additional intellectual property rights grant can be found 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * in the file PATENTS. All contributing project authors may 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * be found in the AUTHORS file in the root of the source tree. 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "filter.h" 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)DECLARE_ALIGNED(16, const short, vp8_bilinear_filters[8][2]) = 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 128, 0 }, 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 112, 16 }, 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 96, 32 }, 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 80, 48 }, 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 64, 64 }, 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 48, 80 }, 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 32, 96 }, 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 16, 112 } 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)DECLARE_ALIGNED(16, const short, vp8_sub_pel_filters[8][6]) = 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 0, 0, 128, 0, 0, 0 }, /* note that 1/8 pel positions are just as per alpha -0.5 bicubic */ 305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 0, -6, 123, 12, -1, 0 }, 31197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch { 2, -11, 108, 36, -8, 1 }, /* New 1/4 pel 6 tap filter */ 32197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch { 0, -9, 93, 50, -6, 0 }, 33d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) { 3, -16, 77, 77, -16, 3 }, /* New 1/2 pel 6 tap filter */ 34a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch { 0, -6, 50, 93, -9, 0 }, 3553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) { 1, -8, 36, 108, -11, 2 }, /* New 1/4 pel 6 tap filter */ 3651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) { 0, -1, 12, 123, -6, 0 }, 37e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch}; 381e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) 391e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)static void filter_block2d_first_pass 4053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)( 411e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) unsigned char *src_ptr, 4253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) int *output_ptr, 43e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch unsigned int src_pixels_per_line, 4453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) unsigned int pixel_step, 4553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) unsigned int output_height, 461e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) unsigned int output_width, 471e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) const short *vp8_filter 4853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)) 4909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 5053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) unsigned int i, j; 51aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch int Temp; 521e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) 53a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch for (i = 0; i < output_height; i++) 5409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) { 5551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) for (j = 0; j < output_width; j++) 56591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch { 57591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch Temp = ((int)src_ptr[-2 * (int)pixel_step] * vp8_filter[0]) + 58591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch ((int)src_ptr[-1 * (int)pixel_step] * vp8_filter[1]) + 59591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch ((int)src_ptr[0] * vp8_filter[2]) + 60591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch ((int)src_ptr[pixel_step] * vp8_filter[3]) + 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ((int)src_ptr[2*pixel_step] * vp8_filter[4]) + 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ((int)src_ptr[3*pixel_step] * vp8_filter[5]) + 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (VP8_FILTER_WEIGHT >> 1); /* Rounding */ 64197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /* Normalize back to 0-255 */ 665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Temp = Temp >> VP8_FILTER_SHIFT; 675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (Temp < 0) 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Temp = 0; 70d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) else if (Temp > 255) 71e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) Temp = 255; 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7302772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch output_ptr[j] = Temp; 745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) src_ptr++; 75197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch } 76e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /* Next row... */ 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) src_ptr += src_pixels_per_line - output_width; 79521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) output_ptr += output_width; 805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochstatic void filter_block2d_second_pass 845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)( 855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int *src_ptr, 8609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) unsigned char *output_ptr, 875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int output_pitch, 88f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) unsigned int src_pixels_per_line, 895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) unsigned int pixel_step, 90197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch unsigned int output_height, 91197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch unsigned int output_width, 92df95704c49daea886ddad70775bda23618d6274dBen Murdoch const short *vp8_filter 93a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)) 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 95df95704c49daea886ddad70775bda23618d6274dBen Murdoch unsigned int i, j; 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int Temp; 97f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 9809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) for (i = 0; i < output_height; i++) 995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 100df95704c49daea886ddad70775bda23618d6274dBen Murdoch for (j = 0; j < output_width; j++) 1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /* Apply filter */ 103c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) Temp = ((int)src_ptr[-2 * (int)pixel_step] * vp8_filter[0]) + 1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ((int)src_ptr[-1 * (int)pixel_step] * vp8_filter[1]) + 1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ((int)src_ptr[0] * vp8_filter[2]) + 1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ((int)src_ptr[pixel_step] * vp8_filter[3]) + 1076f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch ((int)src_ptr[2*pixel_step] * vp8_filter[4]) + 1086f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch ((int)src_ptr[3*pixel_step] * vp8_filter[5]) + 109d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) (VP8_FILTER_WEIGHT >> 1); /* Rounding */ 110521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) 1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /* Normalize back to 0-255 */ 1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Temp = Temp >> VP8_FILTER_SHIFT; 113926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (Temp < 0) 115197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch Temp = 0; 116f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) else if (Temp > 255) 1171e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) Temp = 255; 11809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 119197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch output_ptr[j] = (unsigned char)Temp; 1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) src_ptr++; 1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /* Start next row */ 1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) src_ptr += src_pixels_per_line - output_width; 1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) output_ptr += output_pitch; 126197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch } 1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 12853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 12953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 130df95704c49daea886ddad70775bda23618d6274dBen Murdochstatic void filter_block2d 13193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)( 13209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) unsigned char *src_ptr, 1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) unsigned char *output_ptr, 13453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) unsigned int src_pixels_per_line, 13553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) int output_pitch, 1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const short *HFilter, 13753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) const short *VFilter 1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)) 1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int FData[9*4]; /* Temp data buffer used in filtering */ 1411e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) 1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /* First filter 1-D horizontally... */ 1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) filter_block2d_first_pass(src_ptr - (2 * src_pixels_per_line), FData, src_pixels_per_line, 1, 9, 4, HFilter); 1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /* then filter verticaly... */ 14653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) filter_block2d_second_pass(FData + 8, output_ptr, output_pitch, 4, 4, 4, 4, VFilter); 14753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)} 14853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 14953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void vp8_sixtap_predict4x4_c 151926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)( 152d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) unsigned char *src_ptr, 1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int src_pixels_per_line, 1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int xoffset, 155197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch int yoffset, 1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) unsigned char *dst_ptr, 157197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch int dst_pitch 1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)) 1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 160591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch const short *HFilter; 161591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch const short *VFilter; 162591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 163591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch HFilter = vp8_sub_pel_filters[xoffset]; /* 6 tap */ 164591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch VFilter = vp8_sub_pel_filters[yoffset]; /* 6 tap */ 165591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch 1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) filter_block2d(src_ptr, dst_ptr, src_pixels_per_line, dst_pitch, HFilter, VFilter); 1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void vp8_sixtap_predict8x8_c 1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)( 1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) unsigned char *src_ptr, 1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int src_pixels_per_line, 1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int xoffset, 1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int yoffset, 1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) unsigned char *dst_ptr, 1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int dst_pitch 1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)) 1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const short *HFilter; 1791e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) const short *VFilter; 1801e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) int FData[13*16]; /* Temp data buffer used in filtering */ 18181a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 18281a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) HFilter = vp8_sub_pel_filters[xoffset]; /* 6 tap */ 18381a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) VFilter = vp8_sub_pel_filters[yoffset]; /* 6 tap */ 18481a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 18581a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) /* First filter 1-D horizontally... */ 18681a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) filter_block2d_first_pass(src_ptr - (2 * src_pixels_per_line), FData, src_pixels_per_line, 1, 13, 8, HFilter); 18781a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 18881a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 18909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /* then filter verticaly... */ 19081a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) filter_block2d_second_pass(FData + 16, dst_ptr, dst_pitch, 8, 8, 8, 8, VFilter); 19181a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 19281a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)} 19381a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 19409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)void vp8_sixtap_predict8x4_c 19509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)( 196f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu unsigned char *src_ptr, 19709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) int src_pixels_per_line, 19809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) int xoffset, 19909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) int yoffset, 20009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) unsigned char *dst_ptr, 20109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) int dst_pitch 20209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)) 20309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 20409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) const short *HFilter; 20509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) const short *VFilter; 20609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) int FData[13*16]; /* Temp data buffer used in filtering */ 20709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 2085d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) HFilter = vp8_sub_pel_filters[xoffset]; /* 6 tap */ 2095d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) VFilter = vp8_sub_pel_filters[yoffset]; /* 6 tap */ 2105d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 21109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /* First filter 1-D horizontally... */ 21209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) filter_block2d_first_pass(src_ptr - (2 * src_pixels_per_line), FData, src_pixels_per_line, 1, 9, 8, HFilter); 21309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 2145d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 2155d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) /* then filter verticaly... */ 21609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) filter_block2d_second_pass(FData + 16, dst_ptr, dst_pitch, 8, 8, 4, 8, VFilter); 21709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 218f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)} 219f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) 220a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdochvoid vp8_sixtap_predict16x16_c 2215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)( 222d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) unsigned char *src_ptr, 2235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int src_pixels_per_line, 2245d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) int xoffset, 2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int yoffset, 2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) unsigned char *dst_ptr, 2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int dst_pitch 228f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)) 2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 23051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) const short *HFilter; 23151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) const short *VFilter; 2325d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) int FData[21*24]; /* Temp data buffer used in filtering */ 2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2355d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) HFilter = vp8_sub_pel_filters[xoffset]; /* 6 tap */ 236f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) VFilter = vp8_sub_pel_filters[yoffset]; /* 6 tap */ 237f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) 238f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) /* First filter 1-D horizontally... */ 239f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu filter_block2d_first_pass(src_ptr - (2 * src_pixels_per_line), FData, src_pixels_per_line, 1, 21, 16, HFilter); 2405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 24109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /* then filter verticaly... */ 2425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) filter_block2d_second_pass(FData + 32, dst_ptr, dst_pitch, 16, 16, 16, 16, VFilter); 243f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) 2445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 24509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 24609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 24709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)/**************************************************************************** 24809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * 2495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * ROUTINE : filter_block2d_bil_first_pass 2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 251bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) * INPUTS : UINT8 *src_ptr : Pointer to source block. 252bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) * UINT32 src_stride : Stride of source block. 253bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) * UINT32 height : Block height. 254bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) * UINT32 width : Block width. 255bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) * INT32 *vp8_filter : Array of 2 bi-linear filter taps. 2565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 257323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) * OUTPUTS : INT32 *dst_ptr : Pointer to filtered block. 258323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) * 259bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) * RETURNS : void 2605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 261bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) * FUNCTION : Applies a 1-D 2-tap bi-linear filter to the source block 2625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * in the horizontal direction to produce the filtered output 263bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) * block. Used to implement first-pass of 2-D separable filter. 2645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 265bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) * SPECIAL NOTES : Produces INT32 output to retain precision for next pass. 266bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) * Two filter taps should sum to VP8_FILTER_WEIGHT. 267bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) * 2685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ****************************************************************************/ 2695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)static void filter_block2d_bil_first_pass 2705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)( 2715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) unsigned char *src_ptr, 272bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) unsigned short *dst_ptr, 2735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) unsigned int src_stride, 274bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) unsigned int height, 275bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) unsigned int width, 2761e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) const short *vp8_filter 2771e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)) 278aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch{ 279aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch unsigned int i, j; 2801e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) 2815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (i = 0; i < height; i++) 28209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) { 2835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (j = 0; j < width; j++) 2845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 28509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /* Apply bilinear filter */ 28609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) dst_ptr[j] = (((int)src_ptr[0] * vp8_filter[0]) + 28709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) ((int)src_ptr[1] * vp8_filter[1]) + 288d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) (VP8_FILTER_WEIGHT / 2)) >> VP8_FILTER_SHIFT; 2895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) src_ptr++; 2905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 291d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 29202772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch /* Next row... */ 2935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) src_ptr += src_stride - width; 2945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) dst_ptr += width; 2955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 297926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 298d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)/**************************************************************************** 299d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) * 30081a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) * ROUTINE : filter_block2d_bil_second_pass 3011e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) * 3021e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) * INPUTS : INT32 *src_ptr : Pointer to source block. 303d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) * UINT32 dst_pitch : Destination block pitch. 304d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) * UINT32 height : Block height. 305d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) * UINT32 width : Block width. 306d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) * INT32 *vp8_filter : Array of 2 bi-linear filter taps. 307d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) * 308d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) * OUTPUTS : UINT16 *dst_ptr : Pointer to filtered block. 309d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) * 310d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) * RETURNS : void 311d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) * 312d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) * FUNCTION : Applies a 1-D 2-tap bi-linear filter to the source block 313d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) * in the vertical direction to produce the filtered output 314d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) * block. Used to implement second-pass of 2-D separable filter. 3155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 3165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * SPECIAL NOTES : Requires 32-bit input as produced by filter_block2d_bil_first_pass. 3175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Two filter taps should sum to VP8_FILTER_WEIGHT. 3185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 319a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch ****************************************************************************/ 3205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)static void filter_block2d_bil_second_pass 3215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)( 3225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) unsigned short *src_ptr, 3235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) unsigned char *dst_ptr, 3245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int dst_pitch, 325a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) unsigned int height, 326a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) unsigned int width, 327a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) const short *vp8_filter 3285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)) 329a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles){ 3305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) unsigned int i, j; 3315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int Temp; 3325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (i = 0; i < height; i++) 3345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 3355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (j = 0; j < width; j++) 336aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch { 337aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch /* Apply filter */ 3385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Temp = ((int)src_ptr[0] * vp8_filter[0]) + 339a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) ((int)src_ptr[width] * vp8_filter[1]) + 340a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) (VP8_FILTER_WEIGHT / 2); 3415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) dst_ptr[j] = (unsigned int)(Temp >> VP8_FILTER_SHIFT); 3425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) src_ptr++; 3435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /* Next row... */ 3465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) dst_ptr += dst_pitch; 3475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 350df95704c49daea886ddad70775bda23618d6274dBen Murdoch 351df95704c49daea886ddad70775bda23618d6274dBen Murdoch/**************************************************************************** 3525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 3535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * ROUTINE : filter_block2d_bil 35409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * 3555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * INPUTS : UINT8 *src_ptr : Pointer to source block. 35651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) * UINT32 src_pitch : Stride of source block. 35751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) * UINT32 dst_pitch : Stride of destination block. 35809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * INT32 *HFilter : Array of 2 horizontal filter taps. 3595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * INT32 *VFilter : Array of 2 vertical filter taps. 360d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) * INT32 Width : Block width 3615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * INT32 Height : Block height 362d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) * 363d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) * OUTPUTS : UINT16 *dst_ptr : Pointer to filtered block. 364d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) * 365d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) * RETURNS : void 366d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) * 367d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) * FUNCTION : 2-D filters an input block by applying a 2-tap 368d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) * bi-linear filter horizontally followed by a 2-tap 369d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) * bi-linear filter vertically on the result. 370d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) * 3715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * SPECIAL NOTES : The largest block size can be handled here is 16x16 372d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) * 373d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) ****************************************************************************/ 3745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)static void filter_block2d_bil 37581a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)( 37681a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) unsigned char *src_ptr, 37709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) unsigned char *dst_ptr, 37881a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) unsigned int src_pitch, 37981a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) unsigned int dst_pitch, 38081a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) const short *HFilter, 38181a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) const short *VFilter, 38281a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) int Width, 3835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int Height 38481a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)) 38581a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles){ 3865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) unsigned short FData[17*16]; /* Temp data buffer used in filtering */ 3888abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) 3895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /* First filter 1-D horizontally... */ 390d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) filter_block2d_bil_first_pass(src_ptr, FData, src_pitch, Height + 1, Width, HFilter); 391d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) 392d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) /* then 1-D vertically... */ 393197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch filter_block2d_bil_second_pass(FData, dst_ptr, dst_pitch, Height, Width, VFilter); 394197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch} 395197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 396197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 397197021e6b966cfb06891637935ef33fff06433d1Ben Murdochvoid vp8_bilinear_predict4x4_c 398197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch( 399197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch unsigned char *src_ptr, 40051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) int src_pixels_per_line, 401a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) int xoffset, 4025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int yoffset, 4035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) unsigned char *dst_ptr, 4045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int dst_pitch 4055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)) 4065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const short *HFilter; 408a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch const short *VFilter; 409a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch 4105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) HFilter = vp8_bilinear_filters[xoffset]; 4115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) VFilter = vp8_bilinear_filters[yoffset]; 4125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#if 0 4135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 4149bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) int i; 4155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) unsigned char temp1[16]; 4165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) unsigned char temp2[16]; 4175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bilinear_predict4x4_mmx(src_ptr, src_pixels_per_line, xoffset, yoffset, temp1, 4); 419591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch filter_block2d_bil(src_ptr, temp2, src_pixels_per_line, 4, HFilter, VFilter, 4, 4); 420d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) 421323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) for (i = 0; i < 16; i++) 4225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 423e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch if (temp1[i] != temp2[i]) 424e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch { 425d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) bilinear_predict4x4_mmx(src_ptr, src_pixels_per_line, xoffset, yoffset, temp1, 4); 426d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) filter_block2d_bil(src_ptr, temp2, src_pixels_per_line, 4, HFilter, VFilter, 4, 4); 427d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) } 428d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) } 429e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch } 43009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#endif 43109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) filter_block2d_bil(src_ptr, dst_ptr, src_pixels_per_line, dst_pitch, HFilter, VFilter, 4, 4); 43209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 433f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)} 434f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 435f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)void vp8_bilinear_predict8x8_c 436f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)( 43707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch unsigned char *src_ptr, 4385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int src_pixels_per_line, 4395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int xoffset, 440d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) int yoffset, 44110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch unsigned char *dst_ptr, 4425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int dst_pitch 4435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)) 44406f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles){ 445d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) const short *HFilter; 44609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) const short *VFilter; 44706f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) 44806f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) HFilter = vp8_bilinear_filters[xoffset]; 44906f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) VFilter = vp8_bilinear_filters[yoffset]; 45006f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) 4515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) filter_block2d_bil(src_ptr, dst_ptr, src_pixels_per_line, dst_pitch, HFilter, VFilter, 8, 8); 452a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch 4535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 454d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) 455d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)void vp8_bilinear_predict8x4_c 4565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)( 4575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) unsigned char *src_ptr, 458d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) int src_pixels_per_line, 4595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int xoffset, 46009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) int yoffset, 46109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) unsigned char *dst_ptr, 462197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch int dst_pitch 46307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch) 46407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch{ 4655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const short *HFilter; 46651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) const short *VFilter; 46751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 46851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) HFilter = vp8_bilinear_filters[xoffset]; 46951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) VFilter = vp8_bilinear_filters[yoffset]; 47051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 4715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) filter_block2d_bil(src_ptr, dst_ptr, src_pixels_per_line, dst_pitch, HFilter, VFilter, 8, 4); 4725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 474f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) 475f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)void vp8_bilinear_predict16x16_c 4765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)( 4775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) unsigned char *src_ptr, 4785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int src_pixels_per_line, 4795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int xoffset, 4805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int yoffset, 4815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) unsigned char *dst_ptr, 4825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int dst_pitch 4835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)) 4845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4853464d02a173573db42f8ee6bb07bb74fabf4f5f2Ben Murdoch const short *HFilter; 4865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const short *VFilter; 487521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) 488521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) HFilter = vp8_bilinear_filters[xoffset]; 4895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) VFilter = vp8_bilinear_filters[yoffset]; 4905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 491d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) filter_block2d_bil(src_ptr, dst_ptr, src_pixels_per_line, dst_pitch, HFilter, VFilter, 16, 16); 492d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)} 493d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)