/* * Copyright (c) 2010 The WebM project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree.
*/
#if HAVE_MMX void vp8_sixtap_predict4x4_mmx(unsignedchar *src_ptr, int src_pixels_per_line, int xoffset, int yoffset, unsignedchar *dst_ptr, int dst_pitch) {
DECLARE_ALIGNED(16, unsignedshort,
FData2[16 * 16]); /* Temp data bufffer used in filtering */ constshort *HFilter, *VFilter;
HFilter = vp8_six_tap_x86[xoffset];
vp8_filter_block1d_h6_mmx(src_ptr - (2 * src_pixels_per_line), FData2,
src_pixels_per_line, 1, 9, 8, HFilter);
VFilter = vp8_six_tap_x86[yoffset];
vp8_filter_block1dc_v6_mmx(FData2 + 8, dst_ptr, dst_pitch, 8, 4, 4, 4,
VFilter);
} #endif
#if HAVE_SSE2 void vp8_sixtap_predict16x16_sse2(unsignedchar *src_ptr, int src_pixels_per_line, int xoffset, int yoffset, unsignedchar *dst_ptr, int dst_pitch) {
DECLARE_ALIGNED(16, unsignedshort,
FData2[24 * 24]); /* Temp data bufffer used in filtering */
void vp8_sixtap_predict8x8_sse2(unsignedchar *src_ptr, int src_pixels_per_line, int xoffset, int yoffset, unsignedchar *dst_ptr, int dst_pitch) {
DECLARE_ALIGNED(16, unsignedshort,
FData2[256]); /* Temp data bufffer used in filtering */ constshort *HFilter, *VFilter;
void vp8_sixtap_predict8x4_sse2(unsignedchar *src_ptr, int src_pixels_per_line, int xoffset, int yoffset, unsignedchar *dst_ptr, int dst_pitch) {
DECLARE_ALIGNED(16, unsignedshort,
FData2[256]); /* Temp data bufffer used in filtering */ constshort *HFilter, *VFilter;
void vp8_sixtap_predict16x16_ssse3(unsignedchar *src_ptr, int src_pixels_per_line, int xoffset, int yoffset, unsignedchar *dst_ptr, int dst_pitch) {
DECLARE_ALIGNED(16, unsignedchar, FData2[24 * 24]);
if (xoffset) { if (yoffset) {
vp8_filter_block1d16_h6_ssse3(src_ptr - (2 * src_pixels_per_line),
src_pixels_per_line, FData2, 16, 21,
xoffset);
vp8_filter_block1d16_v6_ssse3(FData2, 16, dst_ptr, dst_pitch, 16,
yoffset);
} else { /* First-pass only */
vp8_filter_block1d16_h6_ssse3(src_ptr, src_pixels_per_line, dst_ptr,
dst_pitch, 16, xoffset);
}
} else { if (yoffset) { /* Second-pass only */
vp8_filter_block1d16_v6_ssse3(src_ptr - (2 * src_pixels_per_line),
src_pixels_per_line, dst_ptr, dst_pitch, 16,
yoffset);
} else { /* ssse3 second-pass only function couldn't handle (xoffset==0 && * yoffset==0) case correctly. Add copy function here to guarantee
* six-tap function handles all possible offsets. */
vp8_copy_mem16x16(src_ptr, src_pixels_per_line, dst_ptr, dst_pitch);
}
}
}
void vp8_sixtap_predict8x8_ssse3(unsignedchar *src_ptr, int src_pixels_per_line, int xoffset, int yoffset, unsignedchar *dst_ptr, int dst_pitch) {
DECLARE_ALIGNED(16, unsignedchar, FData2[256]);
if (xoffset) { if (yoffset) {
vp8_filter_block1d8_h6_ssse3(src_ptr - (2 * src_pixels_per_line),
src_pixels_per_line, FData2, 8, 13, xoffset);
vp8_filter_block1d8_v6_ssse3(FData2, 8, dst_ptr, dst_pitch, 8, yoffset);
} else {
vp8_filter_block1d8_h6_ssse3(src_ptr, src_pixels_per_line, dst_ptr,
dst_pitch, 8, xoffset);
}
} else { if (yoffset) { /* Second-pass only */
vp8_filter_block1d8_v6_ssse3(src_ptr - (2 * src_pixels_per_line),
src_pixels_per_line, dst_ptr, dst_pitch, 8,
yoffset);
} else { /* ssse3 second-pass only function couldn't handle (xoffset==0 && * yoffset==0) case correctly. Add copy function here to guarantee
* six-tap function handles all possible offsets. */
vp8_copy_mem8x8(src_ptr, src_pixels_per_line, dst_ptr, dst_pitch);
}
}
}
void vp8_sixtap_predict8x4_ssse3(unsignedchar *src_ptr, int src_pixels_per_line, int xoffset, int yoffset, unsignedchar *dst_ptr, int dst_pitch) {
DECLARE_ALIGNED(16, unsignedchar, FData2[256]);
if (xoffset) { if (yoffset) {
vp8_filter_block1d8_h6_ssse3(src_ptr - (2 * src_pixels_per_line),
src_pixels_per_line, FData2, 8, 9, xoffset);
vp8_filter_block1d8_v6_ssse3(FData2, 8, dst_ptr, dst_pitch, 4, yoffset);
} else { /* First-pass only */
vp8_filter_block1d8_h6_ssse3(src_ptr, src_pixels_per_line, dst_ptr,
dst_pitch, 4, xoffset);
}
} else { if (yoffset) { /* Second-pass only */
vp8_filter_block1d8_v6_ssse3(src_ptr - (2 * src_pixels_per_line),
src_pixels_per_line, dst_ptr, dst_pitch, 4,
yoffset);
} else { /* ssse3 second-pass only function couldn't handle (xoffset==0 && * yoffset==0) case correctly. Add copy function here to guarantee
* six-tap function handles all possible offsets. */
vp8_copy_mem8x4(src_ptr, src_pixels_per_line, dst_ptr, dst_pitch);
}
}
}
void vp8_sixtap_predict4x4_ssse3(unsignedchar *src_ptr, int src_pixels_per_line, int xoffset, int yoffset, unsignedchar *dst_ptr, int dst_pitch) {
DECLARE_ALIGNED(16, unsignedchar, FData2[4 * 9]);
if (xoffset) { if (yoffset) {
vp8_filter_block1d4_h6_ssse3(src_ptr - (2 * src_pixels_per_line),
src_pixels_per_line, FData2, 4, 9, xoffset);
vp8_filter_block1d4_v6_ssse3(FData2, 4, dst_ptr, dst_pitch, 4, yoffset);
} else {
vp8_filter_block1d4_h6_ssse3(src_ptr, src_pixels_per_line, dst_ptr,
dst_pitch, 4, xoffset);
}
} else { if (yoffset) {
vp8_filter_block1d4_v6_ssse3(src_ptr - (2 * src_pixels_per_line),
src_pixels_per_line, dst_ptr, dst_pitch, 4,
yoffset);
} else { /* ssse3 second-pass only function couldn't handle (xoffset==0 && * yoffset==0) case correctly. Add copy function here to guarantee
* six-tap function handles all possible offsets. */ int r;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.